---
from: usc
to: all
utc: 20260720T190215Z
---

You are the SCOPED CONTRACT-AMENDMENT AUTHOR for the native Mosaic Kanban mission, planning tier. Two INDEPENDENT gates (contract re-review + adversarial red-team) both returned NO-GO on the frozen contract at exact head b0d78d86 for TWO convergent blockers. The coordinator has AUTHORIZED a SCOPED amendment: the freeze lifts for ONLY the two items below, producing the next revision (rc.17), and RE-FREEZES after both gates return GO. You are read-only on all repo source EXCEPT you write your proposed artifacts to your working dir. Do NOT mutate the frozen SSOT in the checkout, do NOT commit, do NOT push. Do NOT change anything outside A-1 and A-2. Return your work as output and also write the two artifacts to your working dir.

BIND CURRENT SSOT = rc.16 at exact head b0d78d86, from docs/native-kanban-sot/: MISSION-MANIFEST.md, TASKS.md (dependency graph section 3 + wave schedule section 8), KBN-101-DB-ROLE-SPLIT.md (the large rc.16 spec + its one-card/one-PR implementation DAG), SHARED-CONTRACT.md, contracts/kanban-schema.v1.ts (frozen KBN-100 schema truth), and docs/reports/native-kanban-sot/kbn-101-contract-security-review-82ce325.md. Code ground truth: packages/db/src/schema.ts (1044-line existing federation model, NOT the KBN schema) and packages/db/drizzle/** (latest migration 0016; next = 0017). Also read the two driving verdicts (re-review + red-team) if available in the shared reviews dir.

PRODUCE TWO ARTIFACTS in your working dir:
(a) AMENDED CONTRACT DELTA rc.17 — the MINIMAL edit resolving ONLY A-1 and A-2. Present it as a precise patch against the exact rc.16 files, naming the exact target file + section for each change, so it is committable verbatim downstream. Nothing outside A-1/A-2 may change. If resolving A-1 or A-2 appears to require a change OUTSIDE their scope, STOP and FLAG it as a wider-amendment escalation rather than widening the amendment unilaterally.
(b) REGENERATED EXACT-HEAD PLAN (PLAN.md) — the decomposition/sequencing plan updated to bind rc.17, folding in the RT-003 through RT-006 plan/test corrections below. Same rules as the prior plan: cite file paths + sub-card ids, mirror the one-card/one-PR DAG for issue 771, SI-001 ordering (missions_workspace_id_uidx before dependent FKs) for issue 769, first dispatch = KBN-101-00, at most 2 concurrent builder lanes, author is not the reviewer.

A-1 (writer-owner of mission_tasks.status — AUTHORITY decision, HEIGHTENED scrutiny; both lanes convergent, RT-001 and re-review T1): the frozen pre-expand rule prohibits mission_tasks.status writes, but the contract names NEITHER the owner NOR an explicit deferral, and the KBN-100 DB-only surface today EXCLUDES the current Gateway/brain writer. RESOLVE by EITHER (i) NAMING the writer-owner under the frozen pre-expand rule, OR (ii) documenting an explicit DEFERRAL plus interim ownership. Your resolution MUST reconcile with the KBN-100 DB-only surface and be internally consistent across MISSION-MANIFEST.md, TASKS.md, and the schema contract. State the reconciliation explicitly and name the exact contract location of the change.

A-2 (container/publish surface enumeration — RT-002): the frozen surface MISSES the canonical container/publish files, so the migration-owner vs runtime-app-role container identities cannot be certified. ENUMERATE into the contract: docker/gateway.Dockerfile, .woodpecker/publish.yml, and the importer image / Dockerfile / publish target. Make the migration-owner vs runtime-app-role identity split certifiable at the container/publish layer, consistent with the rc.16 identity model. Name the exact files and how each binds to the split.

FOLD INTO THE PLAN ONLY (these are PLAN/TEST corrections, NOT contract changes — do NOT put them in rc.17):
- RT-003: a requirement-to-layer matrix mapping each security requirement to DB-enforceable (role/GRANT) versus deferred/app-layer, so the N100 assertions are classified.
- RT-004: an EXHAUSTIVE machine-tested role matrix covering {owner, non-owner runtime} times {INSERT, SELECT, UPDATE, DELETE} times {mutable tables, immutable tables}, plus startup fail-closed (same-role, missing-role) and DDL-denial for the runtime role.
- RT-005: a concurrent N-1 writer and lock rehearsal on REAL Postgres (not PGlite) across the expand/backfill/validate/switch/contract steps — prove no deadlock and no lost write under concurrency.
- RT-006: evidence-first classification for steps 08 and 09 — name the exact evidence that certifies each before any builder touches it.

CONFIRMED-SOUND (do NOT reopen): T2 = KBN-101-03 owns migration slot 0017 and issue 769 allocates later, no collision. T3 = rc.16 sequences step 07 before step 06 and that order IS coherent and mandatory for the fail-closed and immutable guarantees — keep it, do not reorder.

OUTPUT PATHS + HEAD RULES: base head = b0d78d86; bind everything to it. Write (a) the rc.17 delta and (b) the regenerated PLAN.md as artifacts in your working dir OUTSIDE the frozen SSOT. Do NOT edit the frozen files in place, do NOT commit, do NOT push. The downstream re-gate will review your proposed rc.17 delta + PLAN bound to base b0d78d86; the physical commit of rc.17 to the trunk is a SEPARATE coordinator-gated step AFTER both gates return GO.

RULES: OPERATOR-AGNOSTIC output — role terms only (builder lane, reviewer lane, coordinator); no personal names, session ids, or hostnames. Be concrete: cite exact file paths + sub-card ids, prefer tables and patches. This amendment plus plan will be adversarially re-reviewed and red-teamed by TWO INDEPENDENT lanes at the new bound head before any builder fanout. If A-1 or A-2 cannot be resolved WITHOUT a change outside their scope, STOP and flag the wider-amendment escalation rather than widening unilaterally.
