- Shipped
- July 4, 2026 at 1:23 AM UTC
- Author
- Kamo
- Commit
- 784c5e8
The per-stage autonomy surface the config vertical deferred until StageWallRegistry existed (its deferral note is now satisfied): - **************** upsert per (lenderProfile, stageKey) on the SAME write spine (whitelisted mutation, profileVersion bump, §4b.1 validate-or-rollback, WORM change-log append). LEGAL-WALL stages (CLOSING/ FUNDING/COLLECTIONS) are rejected 400 outright - the gate ignores overrides there by design, and storing a row it will never honor is a misleading audit artifact. - deleteStageOverride: HARD delete (the resolver reads overrides without record- state filtering, so a soft flag would keep biting the gate), audited as a {"deleted":true,"row":...} change-log snapshot + profileVersion bump. Exposed as PUT {active:false} because the kamo-internal config proxy has no DELETE verb. - GET /ai-autonomy/stage-overrides: the doc-04 §4.2 per-stage map - every LifecycleStage with its wall classification (legalWall + non-overridable floor from StageWallRegistry), the tenant's override row, and the EFFECTIVE posture the gate will use (max(override|default, floor); auto-execute = config AND override) via **************** - PUT **************** threshold in [0,1] max 3dp (stored as the tenant's ASK; the gate always applies the floor - surfaced as effectiveThreshold on the GET). All §3.2 pass-2 entities + prod tables already exist (mapping discovery - the queue's 'need NEW entities' note was stale): no shared-lib change, no KI run. Frontend tab + E2E are the pinned resume point (D28 STATUS note in the plans doc).