nccgs 2.0.0 → 2.1.1

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.
Files changed (82) hide show
  1. package/.claude/agents/nccgs-adversarial-reviewer.md +1 -1
  2. package/.claude/agents/nccgs-engine-programmer.md +1 -1
  3. package/.claude/agents/nccgs-fast-implementer.md +1 -1
  4. package/.claude/agents/nccgs-game-designer.md +1 -1
  5. package/.claude/agents/nccgs-gameplay-programmer.md +1 -1
  6. package/.claude/agents/nccgs-qa-engineer.md +1 -1
  7. package/.claude/agents/nccgs-task-scout.md +1 -1
  8. package/.claude/agents/nccgs-ui-programmer.md +1 -1
  9. package/.claude/agents/nccgs-unity-build-specialist.md +1 -1
  10. package/.claude/agents/nccgs-unity-implementer.md +1 -1
  11. package/.claude/agents/nccgs-unity-systems-specialist.md +1 -1
  12. package/.claude/agents/nccgs-unity-ui-specialist.md +1 -1
  13. package/.claude/agents/nccgs-verification-engineer.md +1 -1
  14. package/.claude/nccgs/MEMORY.md +9 -3
  15. package/.claude/nccgs/VERSION +1 -1
  16. package/.claude/nccgs/constitution.md +187 -176
  17. package/.claude/nccgs/hooks/closure-guard.mjs +2 -0
  18. package/.claude/nccgs/hooks/unity-transport-guard.mjs +11 -0
  19. package/.claude/nccgs/pipeline.json +260 -260
  20. package/.claude/nccgs/protocols/context-packets.md +5 -0
  21. package/.claude/nccgs/protocols/model-routing.md +46 -46
  22. package/.claude/nccgs/protocols/review-handoff.md +21 -1
  23. package/.claude/nccgs/protocols/shared-workflow-context.md +33 -0
  24. package/.claude/nccgs/protocols/unity-boundary.md +20 -0
  25. package/.claude/nccgs/routing.generated.md +4 -4
  26. package/.claude/nccgs/settings.fragment.json +84 -24
  27. package/.claude/nccgs/studio.json +53 -53
  28. package/.claude/nccgs/tools/autonomy.mjs +13 -0
  29. package/.claude/nccgs/tools/command-tokens.mjs +22 -0
  30. package/.claude/nccgs/tools/compile-policy.mjs +4 -0
  31. package/.claude/nccgs/tools/configure-models.mjs +4 -0
  32. package/.claude/nccgs/tools/hook-transport.mjs +34 -0
  33. package/.claude/nccgs/tools/installation-guard.mjs +55 -0
  34. package/.claude/nccgs/tools/native-completion.mjs +10 -1
  35. package/.claude/nccgs/tools/returned-handoff.mjs +11 -2
  36. package/.claude/nccgs/tools/shared-context-guard.mjs +60 -0
  37. package/.claude/nccgs/tools/shared-context.mjs +25 -0
  38. package/.claude/nccgs/tools/tool-guard.mjs +120 -131
  39. package/.claude/nccgs/tools/unity-transport.mjs +170 -0
  40. package/.claude/nccgs/workflow-catalog.json +4 -4
  41. package/CHANGELOG.md +235 -165
  42. package/CLAUDE.md +10 -8
  43. package/MEMORY.md +109 -56
  44. package/README.md +206 -168
  45. package/UPGRADING.md +130 -112
  46. package/VERSION +1 -1
  47. package/docs/ARCHITECTURE.md +131 -131
  48. package/docs/ASSET-PRODUCTION-GRAPHIFY-PLAN.md +230 -0
  49. package/docs/HUONG-DAN-MIGRATE-VA-SU-DUNG.md +117 -87
  50. package/docs/NCCGS-1.5.md +237 -237
  51. package/docs/PROJECT-POLICY.md +94 -94
  52. package/docs/RELEASE-STATUS.md +32 -7
  53. package/docs/UNINSTALL.md +134 -0
  54. package/docs/WFK17-HOOK-REPAIR.md +71 -0
  55. package/docs/WORKFLOWS.md +85 -85
  56. package/package.json +1 -1
  57. package/scaffold/.nccgs/project.yaml +109 -108
  58. package/scripts/benchmark-v15.mjs +173 -173
  59. package/scripts/cli.mjs +11 -2
  60. package/scripts/doctor.mjs +261 -261
  61. package/scripts/install.mjs +530 -515
  62. package/scripts/recover-session.mjs +89 -0
  63. package/scripts/run.mjs +22 -9
  64. package/scripts/supervise.mjs +4 -0
  65. package/scripts/uninstall.mjs +292 -0
  66. package/scripts/validate.mjs +285 -278
  67. package/tests/autonomy.test.mjs +126 -113
  68. package/tests/design-readiness.test.mjs +199 -199
  69. package/tests/fixtures/compiler-shutdown.cs +67 -64
  70. package/tests/fixtures/native-provider.mjs +61 -0
  71. package/tests/framework.test.mjs +740 -740
  72. package/tests/hook-repair.test.mjs +106 -0
  73. package/tests/lifecycle-v15.test.mjs +346 -300
  74. package/tests/native-completion-notices.test.mjs +181 -0
  75. package/tests/phase1.test.mjs +427 -416
  76. package/tests/phase2.test.mjs +250 -250
  77. package/tests/policy-v15.test.mjs +234 -234
  78. package/tests/returned-handoff-notices.test.mjs +170 -0
  79. package/tests/runtime-v15.test.mjs +1197 -1191
  80. package/tests/task-slices.test.mjs +285 -285
  81. package/tests/uninstall.test.mjs +477 -0
  82. package/tests/unity-transport.test.mjs +348 -0
package/docs/NCCGS-1.5.md CHANGED
@@ -1,237 +1,237 @@
1
- > Historical development/reference document. Version, status, commands and plans
2
- > below describe their original scope, not the current package defaults. Read
3
- > [current release guidance](RELEASE-STATUS.md) before use. Research/benchmark proposals
4
- > do not automatically add requirements to a delivery contract.
5
-
6
- # NCCGS 1.5 preview — implementation and operation
7
-
8
- Version: **1.5.0-preview.1**. Target executor: **Claude Code**.
9
- This is framework functionality with synthetic regression tests, pending real-runtime
10
- pilot validation. Read [MEMORY.md](../MEMORY.md) before interpreting evaluation results.
11
-
12
- The 2026-10-03 phase-1 maintenance patch adds managed verification jobs and optional
13
- supervised headless runs. [Phase-1 operations](PHASE-1-OPERATIONS.md) supersedes the
14
- older manual-lock and verification-operation details below. Its scoped native
15
- lifecycle smoke passed; historical game evaluation results stay frozen.
16
-
17
- [Phase-2 operations](PHASE-2-OPERATIONS.md) supersedes the check-only acceptance
18
- examples and 4/12/24 dispatch defaults below: automatic criteria need measured
19
- assertions, new FAST implementation tasks have a ceiling of 6, and new ledgers
20
- protect repair/QA/review capacity. A real Claude coordinator smoke confirmed that
21
- failed synthetic criteria block a success report. This does not validate game balance.
22
-
23
- ## Policies and migration
24
-
25
- New installs use `.nccgs/execution.json`:
26
-
27
- ```json
28
- {
29
- "schemaVersion": 1,
30
- "name": "standalone",
31
- "externalReview": { "mode": "off" },
32
- "acceptanceRequired": false,
33
- "requireObservedEffort": false,
34
- "maxParallelWorkers": 2
35
- }
36
- ```
37
-
38
- Model profile lives separately in `.nccgs/project.yaml`; the default is
39
- `claude-standalone`. Its Sonnet/Opus aliases are requests, never resolved observations.
40
- Missing execution.json resolves to compatibility. Changing a model profile alone
41
- does not remove an external, acceptance or historical task obligation.
42
-
43
- Use `nccgs migrate-execution --to standalone --dry-run` after a framework update;
44
- remove `--dry-run` to apply. Add `--model-profile claude-standalone` to explicitly
45
- change models too. Configuration archives live under `.nccgs/backups/execution/ID`.
46
- `--rollback ID --dry-run` checks restoration; rollback refuses changed configuration
47
- or corrupted backup hashes. Tasks/evidence/budgets are preserved. See
48
- [UPGRADING.md](../UPGRADING.md) for failure recovery and legacy task handling.
49
-
50
- ## Intake, classification and modes
51
-
52
- Example `.nccgs/evidence/intake/hud-fix.json`:
53
-
54
- ```json
55
- {
56
- "schemaVersion": 1,
57
- "objective": "Correct the pause-button offset at the declared reference resolution",
58
- "mode": "implement",
59
- "scope": "local",
60
- "systems": ["HUD"],
61
- "target": "fix",
62
- "readiness": "ready",
63
- "acceptance": [{ "id": "HUD-01", "description": "Offset matches the reference", "check": "layout-reference" }],
64
- "requiredChecks": ["layout-reference"],
65
- "requiredArtifacts": [],
66
- "manualGates": [],
67
- "assumptions": ["Gameplay and input behavior remain unchanged"],
68
- "reassessWhen": ["The layout defect crosses multiple UI systems"]
69
- }
70
- ```
71
-
72
- This is a template, not evidence that the check ran. For `audit` or `plan`, declare
73
- `analysisArtifacts` such as `.nccgs/evidence/analysis/TASK-result.md`; source edits
74
- are prohibited. Include real `sources` paths to hash authoritative documents.
75
- Criteria with `check` add required objective checks; `{id,description,manual:true}`
76
- adds a manual acceptance gate. Project-level gate manifests remain mandatory.
77
-
78
- ```text
79
- node .claude/nccgs/tools/task.mjs init --id hud-fix --intake .nccgs/evidence/intake/hud-fix.json
80
- node .claude/nccgs/tools/task.mjs bind --id hud-fix --session ACTUAL_SESSION_ID
81
- node .claude/nccgs/tools/task.mjs inspect --id hud-fix
82
- ```
83
-
84
- The classifier is deterministic and conservative, not a general semantic model.
85
- Ready/local/fix can be FAST. Unknown or feature scope defaults to STANDARD.
86
- Save/serialization, migration, network authority, commerce and cross-system signals
87
- require CONTROLLED. The coordinator must inspect real risk and supply `riskSignals`,
88
- reason and evidence; keyword absence is not proof of safety.
89
-
90
- Explicit `reclassify --classification FILE` requires `reason` and `evidence`; optional
91
- `risk`, `scope`, `target`, `readiness`, `systems` and `riskSignals` explain the change.
92
- To change intake content, update the same file and use `refresh-inputs --reason TEXT`.
93
- Reclassification invalidates affected stages while retaining old evidence and spent
94
- review rounds. Source/input/policy changes never reuse old approval. Execution policy
95
- changes cannot be adopted by input refresh: restore pinned policy for current work
96
- or explicitly scope new work while retaining prior history and spent budgets. Audit/plan
97
- baseline hashing still detects source edits after canonical inputs are refreshed.
98
-
99
- ## Dispatch, budget and evidence
100
-
101
- Save a request under `.nccgs/evidence/requests/`:
102
-
103
- ```json
104
- {
105
- "requestKey": "hud-fix-implementation-1",
106
- "kind": "implementation",
107
- "agent": "nccgs-fast-implementer",
108
- "writePaths": ["Assets/Game/UI/PauseButton.cs"],
109
- "reason": "One ready local layout fix with a targeted reference check"
110
- }
111
- ```
112
-
113
- ```text
114
- node .claude/nccgs/tools/task.mjs reserve --id hud-fix --request .nccgs/evidence/requests/hud-fix.json
115
- ```
116
-
117
- Use the returned ID in the Agent prompt prefix `[NCCGS-DISPATCH:ID]`, select the
118
- specified role and task route, and include contract, inputs, ownership and acceptance.
119
- PreToolUse claims the slot with actual session/tool-use identity. SubagentStart binds
120
- an unambiguous agent ID. Foreground PostToolUse completion captures final telemetry.
121
- For this preview use foreground calls; background runs hold slots until correlated
122
- final evidence or external reconciliation. SubagentStop alone cannot prove model,
123
- effort or complete usage. Ambiguous same-role starts are not guessed.
124
-
125
- Review requests use `kind: "review"`, `agent: "nccgs-adversarial-reviewer"`, and
126
- empty writePaths. Analysis requests also have no source ownership. Dispatch ceilings
127
- are 4/12/24 for FAST/STANDARD/CONTROLLED by default; first reservation may explicitly
128
- set `limits.maxDispatches`, `maxDurationMs`, `maxCostUsd`. Limits are pinned, counted
129
- across descendants, and cannot be raised by another reservation. Review limits are
130
- 2/3/3. Failed, cancelled and uncertain attempts remain spent. Extensions of review
131
- rounds require a reasoned external operator decision and never grant approval.
132
-
133
- At most two implementation workers can reserve disjoint paths; review/analysis
134
- cannot overlap source writers. Direct edit tools enforce ownership. Opaque shell/MCP
135
- operations are not OS-sandboxed by NCCGS; inspect their actual diff and test effects.
136
- Audit/plan/review block arbitrary shells and unknown tools. Use read tools, declared
137
- analysis artifacts and externally supplied command evidence when required.
138
-
139
- `task verify --id TASK --name CHECK -- EXECUTABLE ARGS` records the actual command,
140
- exit code, bounded timeout, log hash and before/after source snapshot. Claude may
141
- run it only for implementation tasks. The verifier must not change source.
142
- `task ref --file PATH` produces a `{path,sha256}` reference without inventing evidence.
143
-
144
- Record a completed work stage with a JSON payload (placeholders below must be
145
- replaced with returned values, never copied as observations):
146
-
147
- ```json
148
- {
149
- "snapshot": "ACTUAL_FINAL_SNAPSHOT",
150
- "dispatchId": "ACTUAL_COMPLETED_DISPATCH_ID",
151
- "runtime": { "path": ".nccgs/evidence/runtime/observations/ACTUAL.json", "sha256": "ACTUAL_HASH" },
152
- "checks": [{ "name": "layout-reference", "status": "PASS", "evidence": { "path": ".nccgs/evidence/ACTUAL-check.json", "sha256": "ACTUAL_HASH" } }]
153
- }
154
- ```
155
-
156
- Use `record --id TASK --stage implementation --evidence FILE`. Audit/plan use stage
157
- `analysis` and include `evidence` referencing the declared result artifact. Each
158
- accepted work/review dispatch can be consumed once, including across history.
159
-
160
- Review payload adds `verdict` (`PASS|CHANGES_REQUIRED|BLOCKED`), `criteriaMet`,
161
- `findings`, and a review-artifact `evidence` ref to snapshot/dispatchId/runtime.
162
- Findings include `severity` (`BLOCKER|HIGH|MEDIUM|LOW|INFO`), `status`
163
- (`OPEN|RESOLVED|ACCEPTED`) and `description`. An unresolved BLOCKER/HIGH or unmet
164
- required criterion prevents internal PASS. Review identity must differ from work.
165
-
166
- ## Reporting, external review and closure
167
-
168
- ```text
169
- node .claude/nccgs/tools/task.mjs report --id TASK --outcome blocked --summary "Actual blocker and missing evidence"
170
- node .claude/nccgs/tools/task.mjs check --id TASK --target done
171
- node .claude/nccgs/tools/task.mjs close --id TASK
172
- ```
173
-
174
- Reports accept `success|partial|blocked|failed` even when successful closure is
175
- unavailable. Generated Markdown includes evidence status and unresolved gates.
176
- `record --stage report` can supply `artifacts` refs for required closure outputs.
177
- Success wording does not override failed checks. Only `close` with all current gates
178
- passing establishes DONE. `inspect` remains usable with changed/malformed policy.
179
-
180
- `export-external --out .nccgs/evidence/external/requests/UNIQUE.json` writes an
181
- immutable task/contract/snapshot packet. An external actor reviews it and imports
182
- a receipt through `import-external --file FILE` outside the Claude executor:
183
-
184
- ```json
185
- {
186
- "schemaVersion": 1,
187
- "id": "REVIEW_ID",
188
- "taskId": "TASK",
189
- "contractHash": "EXPORTED_HASH",
190
- "snapshot": "EXPORTED_SNAPSHOT",
191
- "actor": "ACTUAL_EXTERNAL_REVIEWER",
192
- "verdict": "PASS",
193
- "findings": [],
194
- "reviewedAt": "ACTUAL_ISO_TIMESTAMP",
195
- "source": "ACTUAL_REVIEW_REFERENCE"
196
- }
197
- ```
198
-
199
- Off ignores external closure dependency. Advisory retains current findings without
200
- blocking. Required evaluates all active current receipts; a later empty PASS cannot
201
- erase earlier blocking findings. To replace a prior decision, include
202
- `supersedes: ["PRIOR_RECEIPT_ID"]` and `supersessionReason` identifying the new
203
- evidence. Old findings remain traceable. Stale/duplicate/malformed receipts fail.
204
-
205
- If acceptance is required, an external Product Owner decision references taskId,
206
- contractHash, snapshot, `actor: "Product Owner"`, `decision: "ACCEPTED"`, decidedAt,
207
- statement, reference and each manual gate `{id,decision:"ACCEPTED",reference}`.
208
- Import via `record --stage acceptance` with its evidence ref. Claude cannot accept
209
- on the user's behalf. NCCGS neither launches Astra nor sends external messages.
210
-
211
- ## Recovery and telemetry
212
-
213
- Use `checkpoint --reason TEXT`, `resume`, `dispatch-status` and `telemetry` with
214
- `--id TASK`. Resume preserves reservations, findings, attempts and budgets. A lost
215
- callback or dead worker does not refund a slot by timeout. An external operator can
216
- use `dispatch-reconcile --dispatch ID --request FILE` with `status: failed|cancelled`,
217
- reason and observed reference after confirming the process is no longer running.
218
- Never manually reset the ledger. Missing initialized history or altered durable
219
- evidence fails closed. A crashed lock requires operator inspection before recovery.
220
-
221
- Telemetry reports known subtotals and coverage for duration, tool calls, tokens and
222
- cost. Total is null if any started attempt lacks that metric. Observed zero remains
223
- zero. These are worker measurements; coordinator work, human delay and billing are
224
- not automatically covered. A configured spend/time ceiling cannot interrupt an
225
- already running provider request and refuses new dispatch with unknown measurements.
226
-
227
- Native capture follows the documented Claude Code [hook inputs and Agent tool
228
- response](https://code.claude.com/docs/en/hooks): resolvedModel/modelsUsed and native
229
- duration/token/tool-use fields when present. It does not invent effort or cost.
230
- Actual field availability and correlation must be confirmed by the real pilot.
231
-
232
- ## Release boundary
233
-
234
- Framework tests and the synthetic five-size benchmark validate mechanics. They
235
- cannot measure model reasoning, game quality or end-to-end team productivity.
236
- Use [the pilot protocol](NCCGS-1.5-PILOT.md) before stable promotion. CP0 remains
237
- reference-only; it is not a valid scored run for this purpose.
1
+ > Historical development/reference document. Version, status, commands and plans
2
+ > below describe their original scope, not the current package defaults. Read
3
+ > [current release guidance](RELEASE-STATUS.md) before use. Research/benchmark proposals
4
+ > do not automatically add requirements to a delivery contract.
5
+
6
+ # NCCGS 1.5 preview — implementation and operation
7
+
8
+ Version: **1.5.0-preview.1**. Target executor: **Claude Code**.
9
+ This is framework functionality with synthetic regression tests, pending real-runtime
10
+ pilot validation. Read [MEMORY.md](../MEMORY.md) before interpreting evaluation results.
11
+
12
+ The 2026-10-03 phase-1 maintenance patch adds managed verification jobs and optional
13
+ supervised headless runs. [Phase-1 operations](PHASE-1-OPERATIONS.md) supersedes the
14
+ older manual-lock and verification-operation details below. Its scoped native
15
+ lifecycle smoke passed; historical game evaluation results stay frozen.
16
+
17
+ [Phase-2 operations](PHASE-2-OPERATIONS.md) supersedes the check-only acceptance
18
+ examples and 4/12/24 dispatch defaults below: automatic criteria need measured
19
+ assertions, new FAST implementation tasks have a ceiling of 6, and new ledgers
20
+ protect repair/QA/review capacity. A real Claude coordinator smoke confirmed that
21
+ failed synthetic criteria block a success report. This does not validate game balance.
22
+
23
+ ## Policies and migration
24
+
25
+ New installs use `.nccgs/execution.json`:
26
+
27
+ ```json
28
+ {
29
+ "schemaVersion": 1,
30
+ "name": "standalone",
31
+ "externalReview": { "mode": "off" },
32
+ "acceptanceRequired": false,
33
+ "requireObservedEffort": false,
34
+ "maxParallelWorkers": 2
35
+ }
36
+ ```
37
+
38
+ Model profile lives separately in `.nccgs/project.yaml`; the default is
39
+ `claude-standalone`. Its Sonnet/Opus/Fable aliases are requests, never resolved observations.
40
+ Missing execution.json resolves to compatibility. Changing a model profile alone
41
+ does not remove an external, acceptance or historical task obligation.
42
+
43
+ Use `nccgs migrate-execution --to standalone --dry-run` after a framework update;
44
+ remove `--dry-run` to apply. Add `--model-profile claude-standalone` to explicitly
45
+ change models too. Configuration archives live under `.nccgs/backups/execution/ID`.
46
+ `--rollback ID --dry-run` checks restoration; rollback refuses changed configuration
47
+ or corrupted backup hashes. Tasks/evidence/budgets are preserved. See
48
+ [UPGRADING.md](../UPGRADING.md) for failure recovery and legacy task handling.
49
+
50
+ ## Intake, classification and modes
51
+
52
+ Example `.nccgs/evidence/intake/hud-fix.json`:
53
+
54
+ ```json
55
+ {
56
+ "schemaVersion": 1,
57
+ "objective": "Correct the pause-button offset at the declared reference resolution",
58
+ "mode": "implement",
59
+ "scope": "local",
60
+ "systems": ["HUD"],
61
+ "target": "fix",
62
+ "readiness": "ready",
63
+ "acceptance": [{ "id": "HUD-01", "description": "Offset matches the reference", "check": "layout-reference" }],
64
+ "requiredChecks": ["layout-reference"],
65
+ "requiredArtifacts": [],
66
+ "manualGates": [],
67
+ "assumptions": ["Gameplay and input behavior remain unchanged"],
68
+ "reassessWhen": ["The layout defect crosses multiple UI systems"]
69
+ }
70
+ ```
71
+
72
+ This is a template, not evidence that the check ran. For `audit` or `plan`, declare
73
+ `analysisArtifacts` such as `.nccgs/evidence/analysis/TASK-result.md`; source edits
74
+ are prohibited. Include real `sources` paths to hash authoritative documents.
75
+ Criteria with `check` add required objective checks; `{id,description,manual:true}`
76
+ adds a manual acceptance gate. Project-level gate manifests remain mandatory.
77
+
78
+ ```text
79
+ node .claude/nccgs/tools/task.mjs init --id hud-fix --intake .nccgs/evidence/intake/hud-fix.json
80
+ node .claude/nccgs/tools/task.mjs bind --id hud-fix --session ACTUAL_SESSION_ID
81
+ node .claude/nccgs/tools/task.mjs inspect --id hud-fix
82
+ ```
83
+
84
+ The classifier is deterministic and conservative, not a general semantic model.
85
+ Ready/local/fix can be FAST. Unknown or feature scope defaults to STANDARD.
86
+ Save/serialization, migration, network authority, commerce and cross-system signals
87
+ require CONTROLLED. The coordinator must inspect real risk and supply `riskSignals`,
88
+ reason and evidence; keyword absence is not proof of safety.
89
+
90
+ Explicit `reclassify --classification FILE` requires `reason` and `evidence`; optional
91
+ `risk`, `scope`, `target`, `readiness`, `systems` and `riskSignals` explain the change.
92
+ To change intake content, update the same file and use `refresh-inputs --reason TEXT`.
93
+ Reclassification invalidates affected stages while retaining old evidence and spent
94
+ review rounds. Source/input/policy changes never reuse old approval. Execution policy
95
+ changes cannot be adopted by input refresh: restore pinned policy for current work
96
+ or explicitly scope new work while retaining prior history and spent budgets. Audit/plan
97
+ baseline hashing still detects source edits after canonical inputs are refreshed.
98
+
99
+ ## Dispatch, budget and evidence
100
+
101
+ Save a request under `.nccgs/evidence/requests/`:
102
+
103
+ ```json
104
+ {
105
+ "requestKey": "hud-fix-implementation-1",
106
+ "kind": "implementation",
107
+ "agent": "nccgs-fast-implementer",
108
+ "writePaths": ["Assets/Game/UI/PauseButton.cs"],
109
+ "reason": "One ready local layout fix with a targeted reference check"
110
+ }
111
+ ```
112
+
113
+ ```text
114
+ node .claude/nccgs/tools/task.mjs reserve --id hud-fix --request .nccgs/evidence/requests/hud-fix.json
115
+ ```
116
+
117
+ Use the returned ID in the Agent prompt prefix `[NCCGS-DISPATCH:ID]`, select the
118
+ specified role and task route, and include contract, inputs, ownership and acceptance.
119
+ PreToolUse claims the slot with actual session/tool-use identity. SubagentStart binds
120
+ an unambiguous agent ID. Foreground PostToolUse completion captures final telemetry.
121
+ For this preview use foreground calls; background runs hold slots until correlated
122
+ final evidence or external reconciliation. SubagentStop alone cannot prove model,
123
+ effort or complete usage. Ambiguous same-role starts are not guessed.
124
+
125
+ Review requests use `kind: "review"`, `agent: "nccgs-adversarial-reviewer"`, and
126
+ empty writePaths. Analysis requests also have no source ownership. Dispatch ceilings
127
+ are 4/12/24 for FAST/STANDARD/CONTROLLED by default; first reservation may explicitly
128
+ set `limits.maxDispatches`, `maxDurationMs`, `maxCostUsd`. Limits are pinned, counted
129
+ across descendants, and cannot be raised by another reservation. Review limits are
130
+ 2/3/3. Failed, cancelled and uncertain attempts remain spent. Extensions of review
131
+ rounds require a reasoned external operator decision and never grant approval.
132
+
133
+ At most two implementation workers can reserve disjoint paths; review/analysis
134
+ cannot overlap source writers. Direct edit tools enforce ownership. Opaque shell/MCP
135
+ operations are not OS-sandboxed by NCCGS; inspect their actual diff and test effects.
136
+ Audit/plan/review block arbitrary shells and unknown tools. Use read tools, declared
137
+ analysis artifacts and externally supplied command evidence when required.
138
+
139
+ `task verify --id TASK --name CHECK -- EXECUTABLE ARGS` records the actual command,
140
+ exit code, bounded timeout, log hash and before/after source snapshot. Claude may
141
+ run it only for implementation tasks. The verifier must not change source.
142
+ `task ref --file PATH` produces a `{path,sha256}` reference without inventing evidence.
143
+
144
+ Record a completed work stage with a JSON payload (placeholders below must be
145
+ replaced with returned values, never copied as observations):
146
+
147
+ ```json
148
+ {
149
+ "snapshot": "ACTUAL_FINAL_SNAPSHOT",
150
+ "dispatchId": "ACTUAL_COMPLETED_DISPATCH_ID",
151
+ "runtime": { "path": ".nccgs/evidence/runtime/observations/ACTUAL.json", "sha256": "ACTUAL_HASH" },
152
+ "checks": [{ "name": "layout-reference", "status": "PASS", "evidence": { "path": ".nccgs/evidence/ACTUAL-check.json", "sha256": "ACTUAL_HASH" } }]
153
+ }
154
+ ```
155
+
156
+ Use `record --id TASK --stage implementation --evidence FILE`. Audit/plan use stage
157
+ `analysis` and include `evidence` referencing the declared result artifact. Each
158
+ accepted work/review dispatch can be consumed once, including across history.
159
+
160
+ Review payload adds `verdict` (`PASS|CHANGES_REQUIRED|BLOCKED`), `criteriaMet`,
161
+ `findings`, and a review-artifact `evidence` ref to snapshot/dispatchId/runtime.
162
+ Findings include `severity` (`BLOCKER|HIGH|MEDIUM|LOW|INFO`), `status`
163
+ (`OPEN|RESOLVED|ACCEPTED`) and `description`. An unresolved BLOCKER/HIGH or unmet
164
+ required criterion prevents internal PASS. Review identity must differ from work.
165
+
166
+ ## Reporting, external review and closure
167
+
168
+ ```text
169
+ node .claude/nccgs/tools/task.mjs report --id TASK --outcome blocked --summary "Actual blocker and missing evidence"
170
+ node .claude/nccgs/tools/task.mjs check --id TASK --target done
171
+ node .claude/nccgs/tools/task.mjs close --id TASK
172
+ ```
173
+
174
+ Reports accept `success|partial|blocked|failed` even when successful closure is
175
+ unavailable. Generated Markdown includes evidence status and unresolved gates.
176
+ `record --stage report` can supply `artifacts` refs for required closure outputs.
177
+ Success wording does not override failed checks. Only `close` with all current gates
178
+ passing establishes DONE. `inspect` remains usable with changed/malformed policy.
179
+
180
+ `export-external --out .nccgs/evidence/external/requests/UNIQUE.json` writes an
181
+ immutable task/contract/snapshot packet. An external actor reviews it and imports
182
+ a receipt through `import-external --file FILE` outside the Claude executor:
183
+
184
+ ```json
185
+ {
186
+ "schemaVersion": 1,
187
+ "id": "REVIEW_ID",
188
+ "taskId": "TASK",
189
+ "contractHash": "EXPORTED_HASH",
190
+ "snapshot": "EXPORTED_SNAPSHOT",
191
+ "actor": "ACTUAL_EXTERNAL_REVIEWER",
192
+ "verdict": "PASS",
193
+ "findings": [],
194
+ "reviewedAt": "ACTUAL_ISO_TIMESTAMP",
195
+ "source": "ACTUAL_REVIEW_REFERENCE"
196
+ }
197
+ ```
198
+
199
+ Off ignores external closure dependency. Advisory retains current findings without
200
+ blocking. Required evaluates all active current receipts; a later empty PASS cannot
201
+ erase earlier blocking findings. To replace a prior decision, include
202
+ `supersedes: ["PRIOR_RECEIPT_ID"]` and `supersessionReason` identifying the new
203
+ evidence. Old findings remain traceable. Stale/duplicate/malformed receipts fail.
204
+
205
+ If acceptance is required, an external Product Owner decision references taskId,
206
+ contractHash, snapshot, `actor: "Product Owner"`, `decision: "ACCEPTED"`, decidedAt,
207
+ statement, reference and each manual gate `{id,decision:"ACCEPTED",reference}`.
208
+ Import via `record --stage acceptance` with its evidence ref. Claude cannot accept
209
+ on the user's behalf. NCCGS neither launches Astra nor sends external messages.
210
+
211
+ ## Recovery and telemetry
212
+
213
+ Use `checkpoint --reason TEXT`, `resume`, `dispatch-status` and `telemetry` with
214
+ `--id TASK`. Resume preserves reservations, findings, attempts and budgets. A lost
215
+ callback or dead worker does not refund a slot by timeout. An external operator can
216
+ use `dispatch-reconcile --dispatch ID --request FILE` with `status: failed|cancelled`,
217
+ reason and observed reference after confirming the process is no longer running.
218
+ Never manually reset the ledger. Missing initialized history or altered durable
219
+ evidence fails closed. A crashed lock requires operator inspection before recovery.
220
+
221
+ Telemetry reports known subtotals and coverage for duration, tool calls, tokens and
222
+ cost. Total is null if any started attempt lacks that metric. Observed zero remains
223
+ zero. These are worker measurements; coordinator work, human delay and billing are
224
+ not automatically covered. A configured spend/time ceiling cannot interrupt an
225
+ already running provider request and refuses new dispatch with unknown measurements.
226
+
227
+ Native capture follows the documented Claude Code [hook inputs and Agent tool
228
+ response](https://code.claude.com/docs/en/hooks): resolvedModel/modelsUsed and native
229
+ duration/token/tool-use fields when present. It does not invent effort or cost.
230
+ Actual field availability and correlation must be confirmed by the real pilot.
231
+
232
+ ## Release boundary
233
+
234
+ Framework tests and the synthetic five-size benchmark validate mechanics. They
235
+ cannot measure model reasoning, game quality or end-to-end team productivity.
236
+ Use [the pilot protocol](NCCGS-1.5-PILOT.md) before stable promotion. CP0 remains
237
+ reference-only; it is not a valid scored run for this purpose.