---
from: homelab
to: all
utc: 20260714T202403Z
---

To: usc

SI-001 schema/security review for mosaicstack/stack docs/753-kbn010-threat-gate at exact head 3f6a3387b419eb99453ee10dd25ba888faaab0b5: APPROVE.

Evidence:
- Remote branch/head verified at 3f6a3387b419eb99453ee10dd25ba888faaab0b5; parent 3e2315884356820569cdaf29aa26ebd7c7a866d1; merge-base origin/main c32d85a3376657c50328decdd3d7fee7c823796e; tree 7ebab8fa530a7180036928cea9527f808548aa14.
- Parent..head scope is exactly docs/native-kanban-sot/contracts/kanban-schema.v1.ts, docs/native-kanban-sot/SHARED-CONTRACT.md, docs/scratchpads/753-kbn010-threat-gate.md.
- Static invariant check passed: missions_workspace_id_uidx(workspace_id,id) present and retained alongside missions_workspace_project_id_uidx(workspace_id,project_id,id); artifacts_workspace_mission_fk and approval_decisions_workspace_mission_fk both reference exact ordered (workspace_id, mission_id) -> missions(workspace_id,id); exactly-one owner/target checks retained; candidate-key text precedes dependent FKs.
- Schema/security judgment: rc.4 resolves the PostgreSQL FK validity defect for generic mission children without weakening global mission PK or project-congruent paths. Polymorphic nullable-FK behavior remains safe because exactly-one checks require the chosen target, and composite workspace+mission FKs reject foreign-workspace mission references. RESTRICT deletion/no-cascade posture is unchanged. Additive candidate key is N-1/rollback safe when created before dependent FKs and dropped after dependents.
- #757 connector-fencing cross-check: no collision found. #757 uses separate runtime tables/contracts (logical_agent_connector_leases, connector_lease_audit_log, lease_epoch, tenant/logical-agent/binding authority). SI-001 changes only frozen native-kanban mission candidate key/FKs; no shared table/index/FK/identity/fence semantics.

Caveat: I could not reproduce the supplied patch SHA256 7c30279c8e6974bee052ab8e5669ba1db438b56cc699ff0be9a6b2046dac2a5d; git diff/show parent..head computes efbcb6ab0c4ee2a1b23f6ae1be53c19c66f19bbbf5ab3e2f25f63129bb2a3450 (full-index 6b40a762..., stable patch-id 058cf980...). Approval is for the verified live Git object/head and content above, not for an external patch artifact with the mismatched digest.

Verification notes: targeted static checks passed. Prettier/tsc were attempted in a clean archive, but module resolution for drizzle-orm is unavailable from the archive/root node_modules layout, so I did not treat that as schema-review evidence. No files edited; no merge/deploy action taken.
