approval_matrix.
Phase 12F เปิด SUB-1 "Generated Assets Navigator" · B ทำ registry + checklist + promotion path เก็บไว้. A ต้อง build runtime: review queue UI · reviewer assignment · sign-off capture · promotion action ที่ write back to B-owned registry via approval-gated API · filter UI (<300ms) · diff view. เน้น: no AI-authored artefact becomes T1 (founder-authored only) · promotion T5→T4/T3/T2 เท่านั้น.
promotion_path_stages (T5→T4/T3/T2 only · T1 forbidden)asset_entries[] · write-back NOT direct — via A-held approval-gated API onlySource: generated_assets.asset_entries[*] (B registry).
| B Field | B Type | A Runtime Target | A Owner | Approval Gate | Binding | Notes |
|---|---|---|---|---|---|---|
| id | string | Queue item PK · URL /app/generate/{id} |
Backend + FE | none | mapped-not-bound | Read-only mirror of B registry |
| path | string | Link to the actual artefact file (usually docs/kb/...) |
Frontend | none | mapped-not-bound | Open in side panel · do not edit (B-owned) |
| category | enum(8) | Queue filter chip · routing to reviewer pool | Backend + FE | none | mapped-not-bound | 8 cats: docs-created/updated · ui-routes · data-contracts · subsystem-artifacts · pending-handoff · tenant-only · reusable-shared |
| phase | string | Filter + group header · "Phase 12E · 12F · ..." | Frontend | none | mapped-not-bound | — |
| confidence | enum | Confidence badge on card | Frontend | none | mapped-not-bound | high/medium/low/requires_human_review |
| authority_tier | enum T1..T5 | Tier badge · determines promotion eligibility | Backend | gate-promotion | mapped-not-bound | Start at T5 · T1 forever forbidden for AI-authored |
| review_status | enum(8) | Status chip · drives queue partition | Backend | gate-status-transition | mapped-not-bound | unreviewed → drafter-self → peer → governance → dual → sensitive-dual → promoted / rejected |
| impact_area | enum | Impact filter · drives reviewer role | Backend | none | mapped-not-bound | e.g., sensitive-surface → sensitive reviewer required |
| source_basis | string | Source annotation on detail view | Frontend | none | mapped-not-bound | Where Claude got the evidence from |
| promotion_path | array | Timeline view · next-step hint | Frontend | none | mapped-not-bound | Per-asset tracked path from T5 toward target tier |
Source: generated_assets.review_status_enum (8 states) + promotion_path_stages (4 transitions).
| B Status | A UI State | Transition Trigger | Approval Gate | Binding | Notes |
|---|---|---|---|---|---|
| rev-unreviewed | "New" queue | mapped-not-bound | Auto on ingest | none | Default for all AI assets |
| rev-drafter-self | Drafter review | mapped-not-bound | Drafter sign-off | gate-self | First eyes-on |
| rev-peer | Peer review | mapped-not-bound | 1 peer signature | gate-peer | Required for T5→T4 promotion |
| rev-governance | Governance review | mapped-not-bound | Governance role signature | gate-governance | Required for T5→T3 |
| rev-dual | Dual-approved | mapped-not-bound | 2 distinct reviewers · DEC seal | gate-dual | Required for T5→T2 (canonical spec) |
| rev-sensitive-dual | Sensitive-dual | mapped-not-bound | 2 distinct + domain expert | gate-sensitive-dual | For sensitive-surface assets |
| rev-promoted | Promoted (shown w/ tier) | mapped-not-bound | Transition API call (gated) | gate-promotion | Writes back to B via A's audit-wrapped API |
| rev-rejected | Rejected (proposal archive) | mapped-not-bound | Reviewer rejection + reason | gate-rejection | Kept as proposal · never deleted |
generate.runtime_v1generate.runtime_v1 staged rollout + rollback drilled