feat(api): invalidate + supersede for active entities and memories (Issue E)
Public retraction path so mistakes can be corrected without SQL. Unblocks
the correction workflows that the live AKC p05 session exposed.
- engineering/service.py: invalidate_active_entity returns (ok, code)
with codes invalidated/already_invalid/not_active/not_found for clean
HTTP mapping. supersede_entity gains superseded_by + auto-creates the
supersedes relationship (new SUPERSEDES old), rejects self-supersede
- memory/service.py: invalidate_memory/supersede_memory accept reason
string that lands in audit note
- api/routes.py: POST /entities/{id}/invalidate, /supersede;
POST /memory/{id}/invalidate, /supersede (all 4 behind /v1 aliases)
- tests/test_invalidate_supersede.py: 15 tests (idempotency, 404/409,
supersede relationship auto-creation, self-supersede rejection,
missing-replacement rejection, v1 alias presence)
- DEV-LEDGER.md: session log + test_count 494 -> 509
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -63,6 +63,8 @@ _V1_PUBLIC_PATHS = {
|
||||
"/entities/{entity_id}",
|
||||
"/entities/{entity_id}/promote",
|
||||
"/entities/{entity_id}/reject",
|
||||
"/entities/{entity_id}/invalidate",
|
||||
"/entities/{entity_id}/supersede",
|
||||
"/entities/{entity_id}/audit",
|
||||
"/relationships",
|
||||
"/ingest",
|
||||
@@ -79,6 +81,8 @@ _V1_PUBLIC_PATHS = {
|
||||
"/memory/{memory_id}/audit",
|
||||
"/memory/{memory_id}/promote",
|
||||
"/memory/{memory_id}/reject",
|
||||
"/memory/{memory_id}/invalidate",
|
||||
"/memory/{memory_id}/supersede",
|
||||
"/project/state",
|
||||
"/project/state/{project_name}",
|
||||
"/interactions",
|
||||
|
||||
Reference in New Issue
Block a user