@bradheitmann/odin-sentinel 0.4.12 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/README.md +24 -17
- package/dist/src/harness-pacing/index.d.ts +10 -0
- package/dist/src/harness-pacing/index.js +11 -0
- package/dist/src/harness-pacing/index.js.map +1 -0
- package/dist/src/harness-pacing/recommend.d.ts +28 -0
- package/dist/src/harness-pacing/recommend.js +74 -0
- package/dist/src/harness-pacing/recommend.js.map +1 -0
- package/dist/src/harness-pacing/schema.d.ts +28 -0
- package/dist/src/harness-pacing/schema.js +2 -0
- package/dist/src/harness-pacing/schema.js.map +1 -0
- package/dist/src/harness-pacing/storage.d.ts +32 -0
- package/dist/src/harness-pacing/storage.js +74 -0
- package/dist/src/harness-pacing/storage.js.map +1 -0
- package/dist/src/mcp/server.js +29 -2
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/odin-watch/backends/cmux.d.ts +6 -0
- package/dist/src/odin-watch/backends/cmux.js +39 -0
- package/dist/src/odin-watch/backends/cmux.js.map +1 -0
- package/dist/src/odin-watch/backends/tmux.d.ts +6 -0
- package/dist/src/odin-watch/backends/tmux.js +40 -0
- package/dist/src/odin-watch/backends/tmux.js.map +1 -0
- package/dist/src/odin-watch/classifier.d.ts +27 -0
- package/dist/src/odin-watch/classifier.js +182 -0
- package/dist/src/odin-watch/classifier.js.map +1 -0
- package/dist/src/odin-watch/index.d.ts +2 -0
- package/dist/src/odin-watch/index.js +200 -0
- package/dist/src/odin-watch/index.js.map +1 -0
- package/dist/src/odin-watch/snapshotter.d.ts +11 -0
- package/dist/src/odin-watch/snapshotter.js +2 -0
- package/dist/src/odin-watch/snapshotter.js.map +1 -0
- package/dist/src/odin-watch/writers.d.ts +8 -0
- package/dist/src/odin-watch/writers.js +27 -0
- package/dist/src/odin-watch/writers.js.map +1 -0
- package/dist/src/protocol/index.d.ts +3 -1
- package/dist/src/protocol/index.js +4 -1
- package/dist/src/protocol/index.js.map +1 -1
- package/dist/src/protocol/repository.d.ts +14 -0
- package/dist/src/protocol/repository.js +25 -1
- package/dist/src/protocol/repository.js.map +1 -1
- package/dist/src/protocol/schemas.d.ts +144 -0
- package/dist/src/protocol/schemas.js +23 -0
- package/dist/src/protocol/schemas.js.map +1 -1
- package/dist/src/protocol/service.d.ts +19 -2
- package/dist/src/protocol/service.js +89 -3
- package/dist/src/protocol/service.js.map +1 -1
- package/dist/src/protocol/surface-layout.d.ts +20 -0
- package/dist/src/protocol/surface-layout.js +20 -0
- package/dist/src/protocol/surface-layout.js.map +1 -1
- package/dist/src/protocol/version.d.ts +2 -2
- package/dist/src/protocol/version.js +2 -2
- package/dist/src/protocol/version.js.map +1 -1
- package/dist/src/utils/execFileNoThrow.d.ts +5 -0
- package/dist/src/utils/execFileNoThrow.js +18 -0
- package/dist/src/utils/execFileNoThrow.js.map +1 -0
- package/docs/adapters/cmux-adapter.md +168 -0
- package/docs/adapters/herdr-adapter.md +150 -0
- package/docs/adapters/minimux-adapter.md +152 -0
- package/docs/adapters/plain-terminal.md +80 -0
- package/docs/adapters/tmux-adapter.md +150 -0
- package/docs/guides/quick-start.md +7 -7
- package/docs/guides/quickstart-prompts.md +4 -4
- package/docs/lattice/odin-lattice-design.md +555 -0
- package/docs/reference/distribution.md +11 -5
- package/docs/reference/public-surface-audit.md +3 -3
- package/package.json +7 -5
- package/plugins/odin-scp/.claude-plugin/plugin.json +2 -2
- package/plugins/odin-scp/README.md +6 -6
- package/plugins/odin-scp/skills/odin-scp/CHANGELOG.md +12 -0
- package/plugins/odin-scp/skills/odin-scp/SKILL.md +196 -3
- package/plugins/odin-scp/skills/odin-scp/references/canonical-introduction-prompt.md +0 -2
- package/protocol/SCP.md +2 -2
- package/protocol/bootstrap-skill.md +196 -3
- package/protocol/closeout.yaml +1 -1
- package/protocol/delegation.yaml +1 -1
- package/protocol/mission-frontrun/droids-scrutiny-feature-reviewer.md +70 -0
- package/protocol/mission-frontrun/orchestrator-contract.md +70 -0
- package/protocol/mission-frontrun/scrutiny-feature-reviewer-contract.md +73 -0
- package/protocol/mission-frontrun/scrutiny-validator-contract.md +77 -0
- package/protocol/mission-frontrun/worker-contract.md +66 -0
- package/protocol/model-profiles.yaml +8 -1
- package/protocol/receipts/boot-receipt.yaml +13 -0
- package/protocol/role-cards/dev-worker.md +74 -0
- package/protocol/role-cards/exec-asst.md +83 -0
- package/protocol/role-cards/exec-pm.md +66 -0
- package/protocol/role-cards/qa-worker.md +71 -0
- package/protocol/role-cards/team-pm.md +67 -0
- package/protocol/roles.yaml +1 -1
- package/protocol/skill-references/canonical-introduction-prompt.md +0 -2
- package/protocol/topology.yaml +1 -1
- package/scripts/audit/public-surface.mjs +27 -2
- package/scripts/audit/verify-pack.mjs +121 -5
|
@@ -21,7 +21,7 @@ claude plugin install odin-scp@odin-sentinel
|
|
|
21
21
|
Restart Claude Code. The plugin will:
|
|
22
22
|
|
|
23
23
|
- Install the `odin-scp` skill (so `/odin-scp` is available as a slash command).
|
|
24
|
-
- Register the `odin-sentinel` MCP server, spawned via `pnpm dlx --package @bradheitmann/odin-sentinel@0.
|
|
24
|
+
- Register the `odin-sentinel` MCP server, spawned via `pnpm dlx --package @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp`.
|
|
25
25
|
|
|
26
26
|
If install fails, treat it as setup state, not user failure. Check whether
|
|
27
27
|
Claude Code is installed, signed in, and allowed to use plugins; otherwise use
|
|
@@ -30,8 +30,8 @@ the direct install paths below.
|
|
|
30
30
|
## What you get
|
|
31
31
|
|
|
32
32
|
- **Skill content**: the full SCP governance contract (boot receipts, role topology, delegation, CMUX delivery proof, heartbeat cadence, adversarial QA, finish audit) plus the referenced prompt, harness target, boot receipt, and team bootstrap runbook files.
|
|
33
|
-
- **MCP tools**:
|
|
34
|
-
- **MCP resources**:
|
|
33
|
+
- **MCP tools**: 29 `odin.*` tools including `compute_surface_layout`, `get_role_profile`, `get_role_card`, `get_onboarding_plan`, `validate_boot_receipt`, `compile_session_report`, `get_bootstrap_skill`, and `get_mission_frontrun_pack`.
|
|
34
|
+
- **MCP resources**: 18 protocol documents addressable via `odin://protocol/*` URIs.
|
|
35
35
|
|
|
36
36
|
## Use without Claude Code
|
|
37
37
|
|
|
@@ -40,19 +40,19 @@ If you're on another MCP-capable host (Cursor, Codex, Zed, Goose, Crush, OpenCod
|
|
|
40
40
|
Recommended:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
pnpm dlx --package @bradheitmann/odin-sentinel@0.
|
|
43
|
+
pnpm dlx --package @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
Supported npm global install:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
|
-
npm i -g @bradheitmann/odin-sentinel@0.
|
|
49
|
+
npm i -g @bradheitmann/odin-sentinel@0.5.0
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
Supported npx zero-install:
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
npx -y -p @bradheitmann/odin-sentinel@0.
|
|
55
|
+
npx -y -p @bradheitmann/odin-sentinel@0.5.0 odin-sentinel-mcp
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
Then point your host's MCP config at the `odin-sentinel-mcp` binary. The bundled SCP skill is exposed there too via the `odin.get_bootstrap_skill` tool and the `odin://protocol/bootstrap-skill` resource. The referenced runbooks are exposed under `odin://protocol/skill-references/*` so MCP-only users get the same governance contract and supporting files.
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0 - 2026-06-12
|
|
4
|
+
|
|
5
|
+
- Added role cards for all five roles (exec-pm, team-pm, dev-worker, qa-worker, exec-asst) with tiered uptake support and `odin.get_role_card` MCP tool.
|
|
6
|
+
- Cache-aligned packet ordering with hash-pinned re-arm: startup packets now include a content hash; re-arm requests are rejected unless the hash matches the cached packet.
|
|
7
|
+
- Enforced no-bare-header rule: protocol resources must include a top-level header before any content block.
|
|
8
|
+
- Added Crush pacing guidance: recommended token budget, pacing cadence, and harness-specific polling recommendations for Crush harness operators.
|
|
9
|
+
- Hybrid Mission/surfaces topology with substrate capability tiers: surface layout now distinguishes human-CMUX, tab-only, and headless substrate types with per-tier capability declarations.
|
|
10
|
+
- ODIN-watch wake analyzer for cmux and tmux: deterministic wake analysis to identify stalled surfaces, missed heartbeats, and polling overruns.
|
|
11
|
+
- Harness pacing telemetry: optional session-report fields for pacing cadence, token consumption rate, and harness-level timing data.
|
|
12
|
+
- Lattice design doc: canonical reference for the knowledge-lattice substrate used by ODIN Sentinel protocol resources.
|
|
13
|
+
- Server now exposes 28 MCP tools and 18 MCP resources.
|
|
14
|
+
|
|
3
15
|
## 3.6.0 - 2026-05-11
|
|
4
16
|
|
|
5
17
|
- Added `EXEC PM is the sole staffing authority` and `EXEC PM is the sole CMUX surface custodian` to Non-Negotiables. TEAM PMs and workers cannot staff, split, move, or close surfaces.
|
|
@@ -7,7 +7,7 @@ updated: 2026-05-11
|
|
|
7
7
|
|
|
8
8
|
# Sentinel Coordination Protocol
|
|
9
9
|
|
|
10
|
-
SCP_PUBLIC_VERSION: 0.
|
|
10
|
+
SCP_PUBLIC_VERSION: 0.5.0
|
|
11
11
|
MIN_COMPATIBLE_CHILD_MCP: 0.4.5
|
|
12
12
|
|
|
13
13
|
Public install readiness: configure the ODIN MCP server, install native skill context where supported or use full prompt fallback, keep governed team roles in CMUX, verify auth/account readiness without printing secrets, smoke-test local inference if used, and validate role compatibility before launch. Private local skill copies may differ intentionally; public release checks compare repo-internal public artifacts only.
|
|
@@ -38,7 +38,7 @@ Portable curated skill/session records may live under the declared source, for e
|
|
|
38
38
|
- Keep agents interchangeable by role, not by blurred authority. Any supported harness may serve any role only after it has a clean boot block declaring the current role, write scope, branch, cwd, model/harness, and proof source. The same assignment must not QA and close its own work.
|
|
39
39
|
- Preserve strict scope. Governance/package work cannot mutate product code, Loop runtime, design prototypes, operational-team work product, or lifecycle state unless explicitly authorized.
|
|
40
40
|
- Use zero-secret-output behavior. Never print tokens, API keys, OAuth material, or config values. Report secret presence by name/count/status only.
|
|
41
|
-
- Under SCP, team topology is the audit surface. If work is not visible
|
|
41
|
+
- Under SCP, team topology is the audit surface. If work is not visible on a substrate meeting READ_SCREEN + ENTER_PROOF (capability tier 1+), it is not governed work. CMUX is the reference substrate; cmux-specific rules remain in force.
|
|
42
42
|
- Preserve official SCP team topology. Once `EXEC PM` has bootstrapped the executive office and pods, role-named CMUX panes/surfaces are immutable operating slots. Do not close, delete, rename, repurpose, or replace the slot itself unless the user explicitly authorizes that exact slot mutation.
|
|
43
43
|
- Treat agents as occupants of durable role slots. If a model/harness is blocked, stale, over budget, in plan mode, context-exhausted, or wrong for the task, clear, restart, exit, or substitute the agent occupant inside the existing role slot. Do not remove the CMUX pane/surface.
|
|
44
44
|
- Do not create extra panes, extra workers, hidden assistants, invisible subagents, or ad hoc capacity during an active SCP run unless the user explicitly authorizes topology expansion. `EXEC PM` must route work to official roles already present in CMUX.
|
|
@@ -70,6 +70,99 @@ SCP is a standing control loop, not a one-time boot banner. Read or re-invoke th
|
|
|
70
70
|
|
|
71
71
|
If an agent cannot state its current SCP role, authority layer, `may_implement`, `may_qa_accept`, reports-to chain, and next receipt type, it must stop and re-emit `SCP_BOOT_RECEIPT`.
|
|
72
72
|
|
|
73
|
+
### Tiered Protocol Uptake
|
|
74
|
+
|
|
75
|
+
Full SCP skill load is required for control-plane roles only:
|
|
76
|
+
- EXEC PM: full skill at session start
|
|
77
|
+
- ODIN monitor: full skill at session start
|
|
78
|
+
- TEAM PM: full skill at team launch
|
|
79
|
+
|
|
80
|
+
All other roles activate via their role-specific quick-start card (<=4KB):
|
|
81
|
+
- DEV WORKER, QA WORKER, EXEC-ASST: receive their role card via
|
|
82
|
+
odin.get_role_card or via the odin://protocol/role-cards/{role_id} resource
|
|
83
|
+
|
|
84
|
+
After initial activation, the full skill is NEVER re-read at heartbeat,
|
|
85
|
+
dispatch, delegation, or QA cadence points. Use hash-pinned re-arm instead
|
|
86
|
+
(see Hash-Pinned Skill Re-Arm section).
|
|
87
|
+
|
|
88
|
+
### Hash-Pinned Skill Re-Arm
|
|
89
|
+
|
|
90
|
+
At session boot, record `scp_skill_sha256` in the boot receipt:
|
|
91
|
+
- Obtain the skill content SHA-256 from `odin.get_role_card` (the tool returns
|
|
92
|
+
`content_sha256` for the active role card).
|
|
93
|
+
- For control-plane roles, compute SHA-256 of the full bootstrap-skill.md content.
|
|
94
|
+
- Record in `scp_skill_sha256` field of the boot receipt.
|
|
95
|
+
|
|
96
|
+
At each subsequent cadence point (heartbeat, dispatch, delegation, QA):
|
|
97
|
+
- Do NOT re-read the full skill.
|
|
98
|
+
- If re-arm verification is needed, call `odin.get_role_card` with the known
|
|
99
|
+
role_id and compare returned `content_sha256` against the recorded value.
|
|
100
|
+
- Match: no re-read needed; proceed.
|
|
101
|
+
- Mismatch: full re-read required; update `scp_skill_sha256` in the receipt.
|
|
102
|
+
|
|
103
|
+
### Canonical Cache-Aligned Packet Ordering
|
|
104
|
+
|
|
105
|
+
All dispatch packets must follow this canonical order to maximize cache prefix
|
|
106
|
+
stability across all LLM providers:
|
|
107
|
+
|
|
108
|
+
1. **Stable identity block** — SCP role contract, governance preamble
|
|
109
|
+
2. **Stable role card** — role-specific quick-start card (static resource)
|
|
110
|
+
3. **Stable repo invariants** — repo name, main branch, core constraints
|
|
111
|
+
4. **Stable LCE/evidence recipe** — evidence format, write scope format
|
|
112
|
+
5. **Volatile dispatch tail** — current slice ID, current HEAD, task-specific
|
|
113
|
+
write scope, current blockers, evidence path, timestamps
|
|
114
|
+
|
|
115
|
+
Dynamic content (timestamps, current HEAD, short-lived state) goes LAST.
|
|
116
|
+
Do not place frequently-changing items before the stable prefix.
|
|
117
|
+
|
|
118
|
+
This ordering is IMMUTABLE. Reordering any layer requires EXEC PM approval
|
|
119
|
+
and a SCP_PUBLIC_VERSION minor bump.
|
|
120
|
+
|
|
121
|
+
### No-Bare-Header Rule
|
|
122
|
+
|
|
123
|
+
Never send a coordination header ([SCP-DELEGATE], [SCP-AGENT-SUBSTITUTION],
|
|
124
|
+
or similar) without its body in the same delivery unit. An agent receiving only
|
|
125
|
+
a header cannot distinguish protocol fragmentation versus an invalid send.
|
|
126
|
+
|
|
127
|
+
For harnesses that may show chunked input (Crush, some Droid surfaces):
|
|
128
|
+
use a "DIRECT ROLE CONTRACT" plain-language wrapper instead of leading with
|
|
129
|
+
a protocol header when fragmentation risk is present.
|
|
130
|
+
|
|
131
|
+
Receivers that receive a bare header with no body MUST classify the delivery
|
|
132
|
+
MALFORMED_COORDINATION and emit `[SCP-FEEDBACK]` requesting a resend.
|
|
133
|
+
|
|
134
|
+
### Crush Bootstrap Delivery Guideline
|
|
135
|
+
|
|
136
|
+
When activating an agent on a Crush harness surface:
|
|
137
|
+
|
|
138
|
+
1. `cmux read-screen` first — confirm the surface is idle (no active spinner,
|
|
139
|
+
no queued steering text visible).
|
|
140
|
+
2. Send ONE complete instruction block — do not fragment the contract across
|
|
141
|
+
multiple sends. One send, one block.
|
|
142
|
+
3. Send Enter — a single `cmux send-keys Enter` after the block.
|
|
143
|
+
4. Wait for idle — use `cmux wait-for` or poll until the surface returns to
|
|
144
|
+
a shell prompt or response state.
|
|
145
|
+
5. Clear queued text before reissue — if the surface is unresponsive, clear
|
|
146
|
+
any queued steering text before sending again.
|
|
147
|
+
|
|
148
|
+
**Two-panic rule**: If Crush panics twice in the same role slot during
|
|
149
|
+
bootstrap, mark AGENT_SUBSTITUTION_REQUIRED and switch to the QA fallback
|
|
150
|
+
ladder. Do not attempt a third bootstrap in the same slot.
|
|
151
|
+
|
|
152
|
+
Preferred parking receipt format: one-line status + semicolon-delimited
|
|
153
|
+
SCP_MIN_BOOT_RECEIPT fields (compact enough to avoid queue overflow).
|
|
154
|
+
|
|
155
|
+
### Anthropic Cache-Warming Guidance
|
|
156
|
+
|
|
157
|
+
Before activating a fleet of Claude-occupied roles:
|
|
158
|
+
1. Send a warm-up request with `max_tokens: 0` to pre-populate the prefix cache.
|
|
159
|
+
This spares every agent in the fleet a cache-write cost on its
|
|
160
|
+
first request.
|
|
161
|
+
2. Set `ENABLE_PROMPT_CACHING_1H=1` on API keys where 1-hour TTL is acceptable.
|
|
162
|
+
This reduces cache-write cost for long sessions.
|
|
163
|
+
3. Place the stable role card content before the volatile dispatch tail to
|
|
164
|
+
maximize the length of the cacheable prefix.
|
|
165
|
+
|
|
73
166
|
## Generic Role Model And Control Topology
|
|
74
167
|
|
|
75
168
|
SCP role names are generic. Do not bind authority to model names, harness names, pane names, or vendor brands. Every assignment must separate:
|
|
@@ -97,6 +190,31 @@ Preferred role taxonomy:
|
|
|
97
190
|
- `INTEGRATION STEWARD`: merge/cherry-pick/integration proof and branch hygiene. Does not implement product features unless separately authorized.
|
|
98
191
|
- `QUEUE TRIAGE`: dependency, readiness, and dispatch-order analysis.
|
|
99
192
|
|
|
193
|
+
#### PM Reasoning Level Guidance
|
|
194
|
+
|
|
195
|
+
Adjust reasoning level by phase:
|
|
196
|
+
|
|
197
|
+
- **L1 — Passive supervision** (lower reasoning): polling, heartbeat routing,
|
|
198
|
+
contract maintenance, flag-file checks. Do not use full reasoning for
|
|
199
|
+
routine no-change supervision cycles.
|
|
200
|
+
- **L2 — Active coordination** (medium reasoning): dispatch planning, model and
|
|
201
|
+
role assignment, QA synthesis and comparison, merge commit review.
|
|
202
|
+
- **L3 — Authority decisions** (full reasoning): disagreement resolution,
|
|
203
|
+
merge conflicts, protocol exception handling, closure decisions, any action
|
|
204
|
+
that modifies the governed team topology.
|
|
205
|
+
|
|
206
|
+
#### EXEC-ASST as QA Capacity
|
|
207
|
+
|
|
208
|
+
EXEC-ASST may serve as QA capacity only under the following conditions:
|
|
209
|
+
1. An explicit role exception contract is sent before the QA task begins.
|
|
210
|
+
2. The agent receives a fresh boot receipt acknowledging the role change.
|
|
211
|
+
3. The prior task context (heartbeat, pane inventory) is explicitly parked or
|
|
212
|
+
cleared in the new boot receipt.
|
|
213
|
+
|
|
214
|
+
Implicit role inference based on a prior task is prohibited. An EXEC-ASST that
|
|
215
|
+
was running heartbeat loops does NOT automatically become a QA worker without
|
|
216
|
+
a fresh contract.
|
|
217
|
+
|
|
100
218
|
Use role-named terminal tabs/panes/surfaces when possible. Model and harness are capabilities, not identity. If a harness fails, substitute another harness by reissuing the same role contract; do not change scope or authority just because the runtime changed.
|
|
101
219
|
|
|
102
220
|
Pane naming convention:
|
|
@@ -329,7 +447,82 @@ Default official grouping:
|
|
|
329
447
|
|
|
330
448
|
If no existing role is appropriate, `EXEC PM` must request the user authorization before creating capacity.
|
|
331
449
|
|
|
332
|
-
Active SCP visible role-slot rules override generic external subagent language while SCP is active. Generic external coordination concepts may describe Dev/QA capacity, but under SCP that capacity must be represented by visible
|
|
450
|
+
Active SCP visible role-slot rules override generic external subagent language while SCP is active. Generic external coordination concepts may describe Dev/QA capacity, but under SCP that capacity must be represented by visible role slots on a substrate meeting the declared capability tier (CMUX is the reference substrate) unless the user authorizes topology expansion.
|
|
451
|
+
|
|
452
|
+
### Hybrid Mission/Surfaces Topology Default
|
|
453
|
+
|
|
454
|
+
The default team primitive is separate visible surfaces, not Factory Missions.
|
|
455
|
+
|
|
456
|
+
Use separate visible surfaces when:
|
|
457
|
+
- QA independence is required (each reviewer needs its own boot receipt and model)
|
|
458
|
+
- Model diversity reduces correlated blind spots in review
|
|
459
|
+
- Dispatch control (model selection per slice) is needed
|
|
460
|
+
|
|
461
|
+
Use Missions as one Dev capacity type when:
|
|
462
|
+
- The work is a large decomposable implementation burst
|
|
463
|
+
- Internal Mission orchestration adds value over manual decomposition
|
|
464
|
+
- The Mission output will be reviewed by an external, independently contracted QA surface
|
|
465
|
+
|
|
466
|
+
**Routing rules by slice size:**
|
|
467
|
+
|
|
468
|
+
| Slice type | Dev surfaces | QA surfaces | Notes |
|
|
469
|
+
|------------|-------------|-------------|-------|
|
|
470
|
+
| Small | 1 | 1 | Simple implementation + review |
|
|
471
|
+
| Medium | 2 (separate worktrees) | 1-2 | Parallel implementation |
|
|
472
|
+
| Hard / risky | 1 strong Dev or Mission | 3 (QA swarm) | Adversarial review |
|
|
473
|
+
| Ambiguous / multi-impl | Multiple Dev | Swarm selects best | Exploratory |
|
|
474
|
+
| Cheap repetitive | 1 low-cost Droid | 1 stronger QA | Cost-optimized |
|
|
475
|
+
| Large decomposable | 1 Factory Mission | External independent QA | Self-contained burst |
|
|
476
|
+
|
|
477
|
+
### Factory Mission Front-Running
|
|
478
|
+
|
|
479
|
+
Factory Mission spawns four hidden child roles — orchestrator, worker,
|
|
480
|
+
scrutiny-validator, scrutiny-feature-reviewer — that are not bound to ODIN
|
|
481
|
+
governance by default. Use the `odin.get_mission_frontrun_pack` tool to
|
|
482
|
+
assemble a contract pack that binds all four roles before launch.
|
|
483
|
+
|
|
484
|
+
**PROVEN seam (live-verified 2026-06-12):** `--append-system-prompt-file`
|
|
485
|
+
front-runs all four Factory Mission hidden roles before Factory's weaker
|
|
486
|
+
defaults activate. Always launch through this seam:
|
|
487
|
+
|
|
488
|
+
```
|
|
489
|
+
droid exec --mission --auto <level> \
|
|
490
|
+
--append-system-prompt-file <path/to/orchestrator-contract.md> \
|
|
491
|
+
-f <mission-prompt.md>
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
**UNPROVEN seam:** mission-local validator skill shadowing
|
|
495
|
+
(`skills/scrutiny-validator/SKILL.md`). In the 2026-06-12 probe the validator
|
|
496
|
+
loaded `builtin:scrutiny-validator`, not the mission-local file. Do not rely
|
|
497
|
+
on this seam for governance until a follow-up isolation probe confirms it.
|
|
498
|
+
|
|
499
|
+
**Boot contract receipt requirement:** Every hidden child role must emit a
|
|
500
|
+
`BOOT_CONTRACT_RECEIPT` as its first output, with all six fields: `role`,
|
|
501
|
+
`session_id`, `contract_path`, `byte_count`, `sha256`, `timestamp`. A missing
|
|
502
|
+
receipt is a launch blocker, not an advisory.
|
|
503
|
+
|
|
504
|
+
**Verified-artifacts-only rule:** Final mission status must be assembled from
|
|
505
|
+
verified artifacts (worker commits, validator synthesis, reviewer sign-off) —
|
|
506
|
+
not from Mission final prose. Reusing Mission narrative as delivery proof is
|
|
507
|
+
a governance violation.
|
|
508
|
+
|
|
509
|
+
Use `odin.get_mission_frontrun_pack` to generate the contract pack with
|
|
510
|
+
placeholders substituted for `mission_name`, `repo_path`, `write_scope`, and
|
|
511
|
+
`task_id`.
|
|
512
|
+
|
|
513
|
+
### Substrate Capability Tiers
|
|
514
|
+
|
|
515
|
+
Protocol obligations reference capability tiers rather than specific harness names. Any substrate meeting the required tier may satisfy the obligation. CMUX is the reference substrate and remains the canonical choice for governed teams; cmux-specific rules are not deleted by this table.
|
|
516
|
+
|
|
517
|
+
| Substrate | SEND | ENTER_PROOF | READ_SCREEN | WAIT_IDLE | EVENTS | Tier |
|
|
518
|
+
|-----------|:----:|:-----------:|:-----------:|:---------:|:------:|:----:|
|
|
519
|
+
| cmux | Y | Y | Y | Y | Y | 3 |
|
|
520
|
+
| tmux | Y | Y | Y | Y | N | 2 |
|
|
521
|
+
| minimux | Y | Y | Y | Y | Y | 4 |
|
|
522
|
+
| herdr | Y | Y | Y | Y | Y | 3+ |
|
|
523
|
+
| plain terminal | Y | N | N | N | N | 0 |
|
|
524
|
+
|
|
525
|
+
Governed work must be visible on a substrate meeting READ_SCREEN + ENTER_PROOF (capability tier 1+). Work visible only on a plain terminal (tier 0) is not governed work under SCP. Where a substrate requires a substrate meeting EVENTS capability (tier 3+), the obligation cannot be satisfied by tier 0-2 substrates without explicit degraded-mode authorization in the boot receipt.
|
|
333
526
|
|
|
334
527
|
## Surface Layout Custodianship
|
|
335
528
|
|
|
@@ -12,7 +12,6 @@ Use the `odin-scp` skill if available. Also read local project authority files w
|
|
|
12
12
|
- CLAUDE.md
|
|
13
13
|
- config/constitutional/constitutional-agent.md
|
|
14
14
|
- project-local governance or constitution files declared by the repository
|
|
15
|
-
- docs/handoffs/
|
|
16
15
|
- .odin/handoffs/
|
|
17
16
|
- .odin/audit/
|
|
18
17
|
|
|
@@ -41,7 +40,6 @@ Phase 0 - live preflight:
|
|
|
41
40
|
- git rev-parse HEAD
|
|
42
41
|
- git rev-parse @{u}, if upstream exists
|
|
43
42
|
2. Discover handoffs and audit state:
|
|
44
|
-
- docs/handoffs/
|
|
45
43
|
- .odin/handoffs/
|
|
46
44
|
- .odin/audit/
|
|
47
45
|
3. If no handoff exists, treat the repo as a fresh SCP bootstrap.
|
package/protocol/SCP.md
CHANGED
|
@@ -7,7 +7,7 @@ updated: 2026-05-11
|
|
|
7
7
|
|
|
8
8
|
# Sentinel Coordination Protocol
|
|
9
9
|
|
|
10
|
-
SCP_PUBLIC_VERSION: 0.
|
|
10
|
+
SCP_PUBLIC_VERSION: 0.5.0
|
|
11
11
|
MIN_COMPATIBLE_CHILD_MCP: 0.4.5
|
|
12
12
|
|
|
13
13
|
Public install readiness: configure the ODIN MCP server, install native skill context where supported or use full prompt fallback, keep governed team roles in CMUX, verify auth/account readiness without printing secrets, smoke-test local inference if used, and validate role compatibility before launch. Private local skill copies may differ intentionally; public release checks compare repo-internal public artifacts only.
|
|
@@ -38,7 +38,7 @@ Portable curated skill/session records may live under the declared source, for e
|
|
|
38
38
|
- Keep agents interchangeable by role, not by blurred authority. Any supported harness may serve any role only after it has a clean boot block declaring the current role, write scope, branch, cwd, model/harness, and proof source. The same assignment must not QA and close its own work.
|
|
39
39
|
- Preserve strict scope. Governance/package work cannot mutate product code, Loop runtime, design prototypes, operational-team work product, or lifecycle state unless explicitly authorized.
|
|
40
40
|
- Use zero-secret-output behavior. Never print tokens, API keys, OAuth material, or config values. Report secret presence by name/count/status only.
|
|
41
|
-
- Under SCP, team topology is the audit surface. If work is not visible
|
|
41
|
+
- Under SCP, team topology is the audit surface. If work is not visible on a substrate meeting READ_SCREEN + ENTER_PROOF (capability tier 1+), it is not governed work. CMUX is the reference substrate; cmux-specific rules remain in force.
|
|
42
42
|
- Preserve official SCP team topology. Once `EXEC PM` has bootstrapped the executive office and pods, role-named CMUX panes/surfaces are immutable operating slots. Do not close, delete, rename, repurpose, or replace the slot itself unless the user explicitly authorizes that exact slot mutation.
|
|
43
43
|
- Treat agents as occupants of durable role slots. If a model/harness is blocked, stale, over budget, in plan mode, context-exhausted, or wrong for the task, clear, restart, exit, or substitute the agent occupant inside the existing role slot. Do not remove the CMUX pane/surface.
|
|
44
44
|
- Do not create extra panes, extra workers, hidden assistants, invisible subagents, or ad hoc capacity during an active SCP run unless the user explicitly authorizes topology expansion. `EXEC PM` must route work to official roles already present in CMUX.
|
|
@@ -70,6 +70,99 @@ SCP is a standing control loop, not a one-time boot banner. Read or re-invoke th
|
|
|
70
70
|
|
|
71
71
|
If an agent cannot state its current SCP role, authority layer, `may_implement`, `may_qa_accept`, reports-to chain, and next receipt type, it must stop and re-emit `SCP_BOOT_RECEIPT`.
|
|
72
72
|
|
|
73
|
+
### Tiered Protocol Uptake
|
|
74
|
+
|
|
75
|
+
Full SCP skill load is required for control-plane roles only:
|
|
76
|
+
- EXEC PM: full skill at session start
|
|
77
|
+
- ODIN monitor: full skill at session start
|
|
78
|
+
- TEAM PM: full skill at team launch
|
|
79
|
+
|
|
80
|
+
All other roles activate via their role-specific quick-start card (<=4KB):
|
|
81
|
+
- DEV WORKER, QA WORKER, EXEC-ASST: receive their role card via
|
|
82
|
+
odin.get_role_card or via the odin://protocol/role-cards/{role_id} resource
|
|
83
|
+
|
|
84
|
+
After initial activation, the full skill is NEVER re-read at heartbeat,
|
|
85
|
+
dispatch, delegation, or QA cadence points. Use hash-pinned re-arm instead
|
|
86
|
+
(see Hash-Pinned Skill Re-Arm section).
|
|
87
|
+
|
|
88
|
+
### Hash-Pinned Skill Re-Arm
|
|
89
|
+
|
|
90
|
+
At session boot, record `scp_skill_sha256` in the boot receipt:
|
|
91
|
+
- Obtain the skill content SHA-256 from `odin.get_role_card` (the tool returns
|
|
92
|
+
`content_sha256` for the active role card).
|
|
93
|
+
- For control-plane roles, compute SHA-256 of the full bootstrap-skill.md content.
|
|
94
|
+
- Record in `scp_skill_sha256` field of the boot receipt.
|
|
95
|
+
|
|
96
|
+
At each subsequent cadence point (heartbeat, dispatch, delegation, QA):
|
|
97
|
+
- Do NOT re-read the full skill.
|
|
98
|
+
- If re-arm verification is needed, call `odin.get_role_card` with the known
|
|
99
|
+
role_id and compare returned `content_sha256` against the recorded value.
|
|
100
|
+
- Match: no re-read needed; proceed.
|
|
101
|
+
- Mismatch: full re-read required; update `scp_skill_sha256` in the receipt.
|
|
102
|
+
|
|
103
|
+
### Canonical Cache-Aligned Packet Ordering
|
|
104
|
+
|
|
105
|
+
All dispatch packets must follow this canonical order to maximize cache prefix
|
|
106
|
+
stability across all LLM providers:
|
|
107
|
+
|
|
108
|
+
1. **Stable identity block** — SCP role contract, governance preamble
|
|
109
|
+
2. **Stable role card** — role-specific quick-start card (static resource)
|
|
110
|
+
3. **Stable repo invariants** — repo name, main branch, core constraints
|
|
111
|
+
4. **Stable LCE/evidence recipe** — evidence format, write scope format
|
|
112
|
+
5. **Volatile dispatch tail** — current slice ID, current HEAD, task-specific
|
|
113
|
+
write scope, current blockers, evidence path, timestamps
|
|
114
|
+
|
|
115
|
+
Dynamic content (timestamps, current HEAD, short-lived state) goes LAST.
|
|
116
|
+
Do not place frequently-changing items before the stable prefix.
|
|
117
|
+
|
|
118
|
+
This ordering is IMMUTABLE. Reordering any layer requires EXEC PM approval
|
|
119
|
+
and a SCP_PUBLIC_VERSION minor bump.
|
|
120
|
+
|
|
121
|
+
### No-Bare-Header Rule
|
|
122
|
+
|
|
123
|
+
Never send a coordination header ([SCP-DELEGATE], [SCP-AGENT-SUBSTITUTION],
|
|
124
|
+
or similar) without its body in the same delivery unit. An agent receiving only
|
|
125
|
+
a header cannot distinguish protocol fragmentation versus an invalid send.
|
|
126
|
+
|
|
127
|
+
For harnesses that may show chunked input (Crush, some Droid surfaces):
|
|
128
|
+
use a "DIRECT ROLE CONTRACT" plain-language wrapper instead of leading with
|
|
129
|
+
a protocol header when fragmentation risk is present.
|
|
130
|
+
|
|
131
|
+
Receivers that receive a bare header with no body MUST classify the delivery
|
|
132
|
+
MALFORMED_COORDINATION and emit `[SCP-FEEDBACK]` requesting a resend.
|
|
133
|
+
|
|
134
|
+
### Crush Bootstrap Delivery Guideline
|
|
135
|
+
|
|
136
|
+
When activating an agent on a Crush harness surface:
|
|
137
|
+
|
|
138
|
+
1. `cmux read-screen` first — confirm the surface is idle (no active spinner,
|
|
139
|
+
no queued steering text visible).
|
|
140
|
+
2. Send ONE complete instruction block — do not fragment the contract across
|
|
141
|
+
multiple sends. One send, one block.
|
|
142
|
+
3. Send Enter — a single `cmux send-keys Enter` after the block.
|
|
143
|
+
4. Wait for idle — use `cmux wait-for` or poll until the surface returns to
|
|
144
|
+
a shell prompt or response state.
|
|
145
|
+
5. Clear queued text before reissue — if the surface is unresponsive, clear
|
|
146
|
+
any queued steering text before sending again.
|
|
147
|
+
|
|
148
|
+
**Two-panic rule**: If Crush panics twice in the same role slot during
|
|
149
|
+
bootstrap, mark AGENT_SUBSTITUTION_REQUIRED and switch to the QA fallback
|
|
150
|
+
ladder. Do not attempt a third bootstrap in the same slot.
|
|
151
|
+
|
|
152
|
+
Preferred parking receipt format: one-line status + semicolon-delimited
|
|
153
|
+
SCP_MIN_BOOT_RECEIPT fields (compact enough to avoid queue overflow).
|
|
154
|
+
|
|
155
|
+
### Anthropic Cache-Warming Guidance
|
|
156
|
+
|
|
157
|
+
Before activating a fleet of Claude-occupied roles:
|
|
158
|
+
1. Send a warm-up request with `max_tokens: 0` to pre-populate the prefix cache.
|
|
159
|
+
This spares every agent in the fleet a cache-write cost on its
|
|
160
|
+
first request.
|
|
161
|
+
2. Set `ENABLE_PROMPT_CACHING_1H=1` on API keys where 1-hour TTL is acceptable.
|
|
162
|
+
This reduces cache-write cost for long sessions.
|
|
163
|
+
3. Place the stable role card content before the volatile dispatch tail to
|
|
164
|
+
maximize the length of the cacheable prefix.
|
|
165
|
+
|
|
73
166
|
## Generic Role Model And Control Topology
|
|
74
167
|
|
|
75
168
|
SCP role names are generic. Do not bind authority to model names, harness names, pane names, or vendor brands. Every assignment must separate:
|
|
@@ -97,6 +190,31 @@ Preferred role taxonomy:
|
|
|
97
190
|
- `INTEGRATION STEWARD`: merge/cherry-pick/integration proof and branch hygiene. Does not implement product features unless separately authorized.
|
|
98
191
|
- `QUEUE TRIAGE`: dependency, readiness, and dispatch-order analysis.
|
|
99
192
|
|
|
193
|
+
#### PM Reasoning Level Guidance
|
|
194
|
+
|
|
195
|
+
Adjust reasoning level by phase:
|
|
196
|
+
|
|
197
|
+
- **L1 — Passive supervision** (lower reasoning): polling, heartbeat routing,
|
|
198
|
+
contract maintenance, flag-file checks. Do not use full reasoning for
|
|
199
|
+
routine no-change supervision cycles.
|
|
200
|
+
- **L2 — Active coordination** (medium reasoning): dispatch planning, model and
|
|
201
|
+
role assignment, QA synthesis and comparison, merge commit review.
|
|
202
|
+
- **L3 — Authority decisions** (full reasoning): disagreement resolution,
|
|
203
|
+
merge conflicts, protocol exception handling, closure decisions, any action
|
|
204
|
+
that modifies the governed team topology.
|
|
205
|
+
|
|
206
|
+
#### EXEC-ASST as QA Capacity
|
|
207
|
+
|
|
208
|
+
EXEC-ASST may serve as QA capacity only under the following conditions:
|
|
209
|
+
1. An explicit role exception contract is sent before the QA task begins.
|
|
210
|
+
2. The agent receives a fresh boot receipt acknowledging the role change.
|
|
211
|
+
3. The prior task context (heartbeat, pane inventory) is explicitly parked or
|
|
212
|
+
cleared in the new boot receipt.
|
|
213
|
+
|
|
214
|
+
Implicit role inference based on a prior task is prohibited. An EXEC-ASST that
|
|
215
|
+
was running heartbeat loops does NOT automatically become a QA worker without
|
|
216
|
+
a fresh contract.
|
|
217
|
+
|
|
100
218
|
Use role-named terminal tabs/panes/surfaces when possible. Model and harness are capabilities, not identity. If a harness fails, substitute another harness by reissuing the same role contract; do not change scope or authority just because the runtime changed.
|
|
101
219
|
|
|
102
220
|
Pane naming convention:
|
|
@@ -329,7 +447,82 @@ Default official grouping:
|
|
|
329
447
|
|
|
330
448
|
If no existing role is appropriate, `EXEC PM` must request the user authorization before creating capacity.
|
|
331
449
|
|
|
332
|
-
Active SCP visible role-slot rules override generic external subagent language while SCP is active. Generic external coordination concepts may describe Dev/QA capacity, but under SCP that capacity must be represented by visible
|
|
450
|
+
Active SCP visible role-slot rules override generic external subagent language while SCP is active. Generic external coordination concepts may describe Dev/QA capacity, but under SCP that capacity must be represented by visible role slots on a substrate meeting the declared capability tier (CMUX is the reference substrate) unless the user authorizes topology expansion.
|
|
451
|
+
|
|
452
|
+
### Hybrid Mission/Surfaces Topology Default
|
|
453
|
+
|
|
454
|
+
The default team primitive is separate visible surfaces, not Factory Missions.
|
|
455
|
+
|
|
456
|
+
Use separate visible surfaces when:
|
|
457
|
+
- QA independence is required (each reviewer needs its own boot receipt and model)
|
|
458
|
+
- Model diversity reduces correlated blind spots in review
|
|
459
|
+
- Dispatch control (model selection per slice) is needed
|
|
460
|
+
|
|
461
|
+
Use Missions as one Dev capacity type when:
|
|
462
|
+
- The work is a large decomposable implementation burst
|
|
463
|
+
- Internal Mission orchestration adds value over manual decomposition
|
|
464
|
+
- The Mission output will be reviewed by an external, independently contracted QA surface
|
|
465
|
+
|
|
466
|
+
**Routing rules by slice size:**
|
|
467
|
+
|
|
468
|
+
| Slice type | Dev surfaces | QA surfaces | Notes |
|
|
469
|
+
|------------|-------------|-------------|-------|
|
|
470
|
+
| Small | 1 | 1 | Simple implementation + review |
|
|
471
|
+
| Medium | 2 (separate worktrees) | 1-2 | Parallel implementation |
|
|
472
|
+
| Hard / risky | 1 strong Dev or Mission | 3 (QA swarm) | Adversarial review |
|
|
473
|
+
| Ambiguous / multi-impl | Multiple Dev | Swarm selects best | Exploratory |
|
|
474
|
+
| Cheap repetitive | 1 low-cost Droid | 1 stronger QA | Cost-optimized |
|
|
475
|
+
| Large decomposable | 1 Factory Mission | External independent QA | Self-contained burst |
|
|
476
|
+
|
|
477
|
+
### Factory Mission Front-Running
|
|
478
|
+
|
|
479
|
+
Factory Mission spawns four hidden child roles — orchestrator, worker,
|
|
480
|
+
scrutiny-validator, scrutiny-feature-reviewer — that are not bound to ODIN
|
|
481
|
+
governance by default. Use the `odin.get_mission_frontrun_pack` tool to
|
|
482
|
+
assemble a contract pack that binds all four roles before launch.
|
|
483
|
+
|
|
484
|
+
**PROVEN seam (live-verified 2026-06-12):** `--append-system-prompt-file`
|
|
485
|
+
front-runs all four Factory Mission hidden roles before Factory's weaker
|
|
486
|
+
defaults activate. Always launch through this seam:
|
|
487
|
+
|
|
488
|
+
```
|
|
489
|
+
droid exec --mission --auto <level> \
|
|
490
|
+
--append-system-prompt-file <path/to/orchestrator-contract.md> \
|
|
491
|
+
-f <mission-prompt.md>
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
**UNPROVEN seam:** mission-local validator skill shadowing
|
|
495
|
+
(`skills/scrutiny-validator/SKILL.md`). In the 2026-06-12 probe the validator
|
|
496
|
+
loaded `builtin:scrutiny-validator`, not the mission-local file. Do not rely
|
|
497
|
+
on this seam for governance until a follow-up isolation probe confirms it.
|
|
498
|
+
|
|
499
|
+
**Boot contract receipt requirement:** Every hidden child role must emit a
|
|
500
|
+
`BOOT_CONTRACT_RECEIPT` as its first output, with all six fields: `role`,
|
|
501
|
+
`session_id`, `contract_path`, `byte_count`, `sha256`, `timestamp`. A missing
|
|
502
|
+
receipt is a launch blocker, not an advisory.
|
|
503
|
+
|
|
504
|
+
**Verified-artifacts-only rule:** Final mission status must be assembled from
|
|
505
|
+
verified artifacts (worker commits, validator synthesis, reviewer sign-off) —
|
|
506
|
+
not from Mission final prose. Reusing Mission narrative as delivery proof is
|
|
507
|
+
a governance violation.
|
|
508
|
+
|
|
509
|
+
Use `odin.get_mission_frontrun_pack` to generate the contract pack with
|
|
510
|
+
placeholders substituted for `mission_name`, `repo_path`, `write_scope`, and
|
|
511
|
+
`task_id`.
|
|
512
|
+
|
|
513
|
+
### Substrate Capability Tiers
|
|
514
|
+
|
|
515
|
+
Protocol obligations reference capability tiers rather than specific harness names. Any substrate meeting the required tier may satisfy the obligation. CMUX is the reference substrate and remains the canonical choice for governed teams; cmux-specific rules are not deleted by this table.
|
|
516
|
+
|
|
517
|
+
| Substrate | SEND | ENTER_PROOF | READ_SCREEN | WAIT_IDLE | EVENTS | Tier |
|
|
518
|
+
|-----------|:----:|:-----------:|:-----------:|:---------:|:------:|:----:|
|
|
519
|
+
| cmux | Y | Y | Y | Y | Y | 3 |
|
|
520
|
+
| tmux | Y | Y | Y | Y | N | 2 |
|
|
521
|
+
| minimux | Y | Y | Y | Y | Y | 4 |
|
|
522
|
+
| herdr | Y | Y | Y | Y | Y | 3+ |
|
|
523
|
+
| plain terminal | Y | N | N | N | N | 0 |
|
|
524
|
+
|
|
525
|
+
Governed work must be visible on a substrate meeting READ_SCREEN + ENTER_PROOF (capability tier 1+). Work visible only on a plain terminal (tier 0) is not governed work under SCP. Where a substrate requires a substrate meeting EVENTS capability (tier 3+), the obligation cannot be satisfied by tier 0-2 substrates without explicit degraded-mode authorization in the boot receipt.
|
|
333
526
|
|
|
334
527
|
## Surface Layout Custodianship
|
|
335
528
|
|
package/protocol/closeout.yaml
CHANGED
package/protocol/delegation.yaml
CHANGED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# ODIN Factory Mission: Scrutiny Feature Reviewer (Project Droid)
|
|
2
|
+
|
|
3
|
+
**Role:** Factory Mission Scrutiny Feature Reviewer
|
|
4
|
+
**Authority layer:** review
|
|
5
|
+
**Task ID:** {{TASK_ID}}
|
|
6
|
+
**Repo:** {{REPO_PATH}}
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
This file is written to `.factory/droids/scrutiny-feature-reviewer.md` before
|
|
13
|
+
mission launch. Factory selects it for the reviewer Task subagent automatically
|
|
14
|
+
(LIVE-VERIFIED 2026-06-12). It binds the reviewer to ODIN governance through
|
|
15
|
+
the project-local droid file seam.
|
|
16
|
+
|
|
17
|
+
## Identity and Authority Bounds
|
|
18
|
+
|
|
19
|
+
You are the Factory Mission scrutiny feature reviewer. Your authority is
|
|
20
|
+
strictly bounded:
|
|
21
|
+
|
|
22
|
+
- Review feature completeness and acceptance criteria coverage independently.
|
|
23
|
+
- Do not fix defects during review; report them and return a verdict.
|
|
24
|
+
- Never accept work produced by the same session that implemented it.
|
|
25
|
+
- Never reuse Mission final prose as review proof.
|
|
26
|
+
|
|
27
|
+
Write scope: {{WRITE_SCOPE}}
|
|
28
|
+
|
|
29
|
+
## Boot Contract Receipt (mandatory)
|
|
30
|
+
|
|
31
|
+
You must emit a `boot_contract_receipt` immediately on activation, before any
|
|
32
|
+
other action. The `boot_contract_receipt` requires all six fields: `role`,
|
|
33
|
+
`session_id`, `contract_path`, `byte_count`, `sha256`, `timestamp`. Emit it as
|
|
34
|
+
the first output of this session, filling every field with accurate values.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
BOOT_CONTRACT_RECEIPT
|
|
38
|
+
role: factory/scrutiny-feature-reviewer
|
|
39
|
+
session_id: <your-session-id>
|
|
40
|
+
contract_path: .factory/droids/scrutiny-feature-reviewer.md
|
|
41
|
+
byte_count: <byte count of this file as loaded>
|
|
42
|
+
sha256: <sha256 of this file as loaded>
|
|
43
|
+
timestamp: <ISO-8601 UTC>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Failure to emit this receipt before any other output is a protocol breach.
|
|
47
|
+
|
|
48
|
+
## Governance Rules
|
|
49
|
+
|
|
50
|
+
- No self-accepted QA. You may not accept work produced by the same session-id
|
|
51
|
+
that implemented it.
|
|
52
|
+
- Verified artifacts only. Review proof requires git-verifiable evidence.
|
|
53
|
+
- Independent posture. Start from fresh review state.
|
|
54
|
+
- Concrete verdicts. Return ACCEPT or REJECT with cited evidence.
|
|
55
|
+
|
|
56
|
+
## Prohibited Actions
|
|
57
|
+
|
|
58
|
+
- Fixing defects during review.
|
|
59
|
+
- Accepting Mission final prose as delivery proof.
|
|
60
|
+
- Returning ACCEPT without citing concrete evidence.
|
|
61
|
+
- Reviewing work produced by your own session-id.
|
|
62
|
+
- Modifying files outside {{WRITE_SCOPE}}.
|
|
63
|
+
|
|
64
|
+
## Review Evidence Required
|
|
65
|
+
|
|
66
|
+
On completion, report:
|
|
67
|
+
- ACCEPT or REJECT verdict
|
|
68
|
+
- Acceptance criteria coverage: which criteria passed, which failed
|
|
69
|
+
- Concrete evidence: file paths, line numbers, test results
|
|
70
|
+
- Any scope or authority violations observed
|