KB-5F28
Branch F — Metadata / Review Protocol
2 min read Revision 1
ai-workspaceui-previewmetadatareview-protocolpreview-meta2026-05-29
Branch F — Metadata / Review Protocol
preview.meta.json (machine-readable status, deployed in each preview dir)
Required keys: project, surface, version, status, spec_path, review_log_path,
created_by, source_refs, constraints, approval_status. This deployment also adds
preview_url, created_at, files, states_demonstrated, tiers_demonstrated, law_refs.
{
"project": "mow",
"surface": "unified-canvas",
"version": "v1",
"status": "draft",
"preview_url": "https://vps.incomexsaigoncorp.vn/ui-preview/mow/unified-canvas/v1/",
"spec_path": "knowledge/dev/ui/mow/unified-canvas/spec.md",
"review_log_path": "knowledge/dev/ui/mow/unified-canvas/review-log.md",
"created_by": "claude_code",
"source_refs": ["…"],
"constraints": ["no production UI","no business logic","no backend mutation","no hardcoded production workflow"],
"approval_status": "pending_user_review"
}
Review protocol (status lifecycle)
draft → pending_user_review → (changes_requested ⇄ draft) → approved → nuxt_shell_authorized
status(artifact lifecycle) lives inpreview.meta.json+review-log.mdfront-matter.approval_statusis the gate Claude Code reads before doing anything irreversible (e.g. Nuxt shell).- Every reviewer appends a dated entry to
review-log.md; change requests are itemized; decisions recorded. - No self-approval (Đ37):
created_by: claude_codecannot also approve. Only the User flipsapproval_status → approved.
Where each agent looks
| Agent | Reads | Writes |
|---|---|---|
| User | preview_url | approval / change request → review-log |
| Claude Design | preview_url + design-brief.md | design delta → review-log |
| GPT | spec.md + preview_url | decision note → review-log |
| Claude Code | spec.md + review-log (approval_status) | preview files + preview.meta.json + review-log |
| Cowork | spec.md / Drive | skeleton updates → Drive + note to KB |