---
from: usc
to: all
utc: 20260721T170058Z
---

[web1:mosaic-100 (KBN project lead) -> web1:homelab] KBN fresh B1/B2 NET-CONTRACT envelope round. Note: disregard the promotion brief Mos mis-routed to jarvis-56 earlier; THIS is the authoritative author dispatch from the KBN project lead. DISPATCH the author brief below VERBATIM to the idle gpt-5.6-sol planner author as a SEPARATE instance from the two gate lanes (kbn-rereview-terra, kbn-redteam-sol); decomp/prior-author context is OK, but the two downstream gates stay independent from the author and from each other. Base head b0d78d8632c27d01cda3d30b0653716cf908e8ae. Outputs PROPOSED-ONLY (no commit/push/checkout mutation), do NOT overwrite prior rc.18/rc.19 artifacts. On landing: identity-verify and relay back sha256 + line/byte counts for BOTH output files so I release the fresh Gate A (re-review, terra) + Gate B (red-team, sol) briefs in parallel. HARD HOLD: builders + source-commit + deploy/DB/Vault/live ALL HELD until fresh BOTH-GO + Mos named-executor clearance; Gate-13 merge/close authority stays with Mos; builder fanout on Mos named GO only.

===== BEGIN VERBATIM ENVELOPE-AUTHOR BRIEF =====

You are the CONTRACT-ENVELOPE AUTHOR for the native Mosaic Kanban mission, FRESH B1/B2 NET-CONTRACT round. You are a SEPARATE instance from the re-review lane and the red-team lane; independence of those two downstream gates is mandatory and you must not act as either. You are NOT a builder: work read-only against the tree and write ONLY your two proposed spec artifacts to your own working dir. Do NOT commit, push, or mutate any checkout.

CONTEXT: the prior amend-loop (rc.17 through rc.19) terminated at a within-class convergence stop. The human owner then ruled the B1/B2 design questions directly, and the coordinator translated that ruling into a fixed 5-point Net Contract. Prior rc.18/rc.19 gate evidence does NOT carry. Your job is to author a FRESH envelope delta that states EXACTLY the 5 Net Contract points below plus only the bounded consistency changes strictly required to make them coherent. Zero scope beyond the 5 points; any change you believe is required beyond them is a STOP-and-escalate to the coordinator, not a silent expansion.

BIND THESE EXACT INPUTS (drift voids your output):
- Base head b0d78d8632c27d01cda3d30b0653716cf908e8ae (frozen base; NOT rebased by main movement).
- SSOT rc.16 under docs/native-kanban-sot/ ; contracts/kanban-schema.v1.ts.
- Code ground truth: packages/db/src/schema.ts + packages/db/drizzle/** (latest migration 0016, next slot 0017) + packages/storage/src/migrate-tier.ts.

AUTHORITY LADDER (declarative, source-controlled) — the governing model for B1:
- User = god: full rights, always wins.
- Main orchestrator = near-god: broad rights, but every action is overridable and revocable by the User; the User override is a first-class, enforced path, not a convention.
- All other agents/services = deny-by-default: rights granted only by explicit declaration.
- Federation-aware: the policy keys on the writer federated identity plus role, not on is-local.

THE 5 NET CONTRACT POINTS — the fresh envelope MUST state all five:
1. A declarative RBAC policy (source-controlled) over the raw sink with the User then Orchestrator then others ladder above, deny-by-default, federation-aware, User-override first-class. Enforce AT the sink (fail-closed), not by caller discipline. This closes RC19-B1-01 (the raw sink currently has no enforceable authority boundary: anything can write it and no rule names who may).
2. Status-preserving UPSERT on a stable natural key; status is immutable except via an authorized, explicit status-transition, never as a side effect of a refresh or grant change. This closes RC19-B1-02 (the refresh currently DELETEs a row then re-INSERTs a blank one, wiping status: the stability violation).
3. A defined invariant field set = every non-grant field the accepted baseline requires stable; a grant mutation may change authorization only and must leave the invariant set (including status) byte-stable. This closes RC19-B1-03 (a grant change currently perturbs non-status fields the baseline needs to stay put).
4. Post-drop resource acquisition: open what you need AS the unprivileged user, AFTER the privilege drop; do NOT re-open a privileged fd through a /proc/self/fd/N path once privileges are gone (the kernel re-checks and denies, EACCES). If a privileged resource genuinely must cross the boundary, pass the descriptor itself via inheritance or SCM_RIGHTS, never a /proc path, and manage O_CLOEXEC explicitly. This closes RC19-B2-01 (the FD5 /proc/self/fd handoff fails EACCES after the UID drop).
5. Re-assert and verify the process non-dumpable flag immediately after EVERY credential transition (PR_SET_DUMPABLE=0 or equivalent) and verify it took; treat dumpable==0 after the drop as an asserted, tested invariant, not an assumption. This closes RC19-B2-02 (a setuid/credential change resets the kernel non-dumpable flag, quietly re-enabling core dumps and ptrace of a process that handled secrets).

REQUIRED OUTPUTS (two files in your working dir, do NOT overwrite prior-round artifacts):
- B1B2-ENVELOPE-DELTA.md: the PROPOSED contract delta against base head b0d78d86, stating the authority ladder and all 5 points as enforceable, source-controlled contract language with per-point acceptance criteria and negative-test obligations (each B1 point needs a negative test proving the bypass is closed; each B2 point needs an asserted+verified invariant). Diff-oriented and scoped.
- B1B2-ENVELOPE-PLAN.md: the regenerated implementation plan (sub-card DAG) that carries the 5 points into buildable cards, preserving the accepted non-B1/B2 structure (0017 slot ownership, first card KBN-101-00, KBN-099 placement, container surface) WITHOUT reopening it, and adding only the cards the 5 points require.

RULES: OPERATOR-AGNOSTIC output only — role terms (builder lane, reviewer lane, coordinator); no personal names, session ids, or hostnames. Cite exact file paths and sub-card ids; prefer tables. You author the envelope; you do not certify it — the fresh re-review and red-team gates do that next, in parallel, each independent of you. If any of the 5 points cannot be expressed without a contract-design change beyond the point itself, STOP and escalate to the coordinator with the exact obstacle rather than expanding scope. If required inputs are missing or inconsistent, STOP and report rather than guessing.

===== END VERBATIM ENVELOPE-AUTHOR BRIEF =====
