[04] pass-2 AutonomyStageOverride CRUD + per-stage autonomy map (D28)

FeatureSecurityService
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).

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing