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
@@ -1,260 +1,260 @@
1
- {
2
- "schemaVersion": 1,
3
- "defaultProfile": "claude-standalone",
4
- "profiles": {
5
- "astra-claude": {
6
- "models": {
7
- "lightweight": {
8
- "model": "sonnet",
9
- "effort": "medium"
10
- },
11
- "standard": {
12
- "model": "claude-opus-5-5",
13
- "effort": "medium"
14
- },
15
- "deep": {
16
- "model": "claude-opus-5-5",
17
- "effort": "high"
18
- },
19
- "leadership": {
20
- "model": "claude-opus-5-5",
21
- "effort": "high"
22
- },
23
- "review": {
24
- "model": "fable",
25
- "effort": "high"
26
- }
27
- },
28
- "session": {
29
- "class": "standard"
30
- },
31
- "activeAgents": [
32
- "nccgs-fast-implementer",
33
- "nccgs-task-scout",
34
- "nccgs-game-designer",
35
- "nccgs-gameplay-programmer",
36
- "nccgs-engine-programmer",
37
- "nccgs-ui-programmer",
38
- "nccgs-unity-implementer",
39
- "nccgs-unity-systems-specialist",
40
- "nccgs-unity-ui-specialist",
41
- "nccgs-unity-build-specialist",
42
- "nccgs-qa-engineer",
43
- "nccgs-verification-engineer",
44
- "nccgs-adversarial-reviewer"
45
- ]
46
- },
47
- "quality": {
48
- "models": {
49
- "lightweight": {
50
- "model": "haiku",
51
- "effort": null
52
- },
53
- "standard": {
54
- "model": "sonnet",
55
- "effort": null
56
- },
57
- "deep": {
58
- "model": "opus",
59
- "effort": null
60
- },
61
- "leadership": {
62
- "model": "opus",
63
- "effort": null
64
- },
65
- "review": {
66
- "model": "opus",
67
- "effort": null
68
- }
69
- },
70
- "session": null,
71
- "activeAgents": "all"
72
- },
73
- "balanced": {
74
- "models": {
75
- "lightweight": {
76
- "model": "haiku",
77
- "effort": null
78
- },
79
- "standard": {
80
- "model": "sonnet",
81
- "effort": null
82
- },
83
- "deep": {
84
- "model": "opus",
85
- "effort": null
86
- },
87
- "leadership": {
88
- "model": "sonnet",
89
- "effort": null
90
- },
91
- "review": {
92
- "model": "opus",
93
- "effort": null
94
- }
95
- },
96
- "session": null,
97
- "activeAgents": "all"
98
- },
99
- "inherit": {
100
- "models": {
101
- "lightweight": {
102
- "model": null,
103
- "effort": null
104
- },
105
- "standard": {
106
- "model": null,
107
- "effort": null
108
- },
109
- "deep": {
110
- "model": null,
111
- "effort": null
112
- },
113
- "leadership": {
114
- "model": null,
115
- "effort": null
116
- },
117
- "review": {
118
- "model": null,
119
- "effort": null
120
- }
121
- },
122
- "session": null,
123
- "activeAgents": "all"
124
- },
125
- "claude-standalone": {
126
- "models": {
127
- "lightweight": {
128
- "effort": "medium",
129
- "model": "sonnet"
130
- },
131
- "standard": {
132
- "effort": "medium",
133
- "model": "opus"
134
- },
135
- "deep": {
136
- "effort": "high",
137
- "model": "opus"
138
- },
139
- "leadership": {
140
- "effort": "high",
141
- "model": "opus"
142
- },
143
- "review": {
144
- "effort": "high",
145
- "model": "opus"
146
- }
147
- },
148
- "session": {
149
- "class": "standard"
150
- },
151
- "activeAgents": [
152
- "nccgs-fast-implementer",
153
- "nccgs-task-scout",
154
- "nccgs-game-designer",
155
- "nccgs-gameplay-programmer",
156
- "nccgs-engine-programmer",
157
- "nccgs-ui-programmer",
158
- "nccgs-unity-implementer",
159
- "nccgs-unity-systems-specialist",
160
- "nccgs-unity-ui-specialist",
161
- "nccgs-unity-build-specialist",
162
- "nccgs-qa-engineer",
163
- "nccgs-verification-engineer",
164
- "nccgs-adversarial-reviewer"
165
- ]
166
- }
167
- },
168
- "contract": {
169
- "planningOwner": "Astra",
170
- "documentsOwner": "Astra",
171
- "reviewAgent": "nccgs-adversarial-reviewer",
172
- "sequence": [
173
- "astra-plan",
174
- "risk-routed-implementation",
175
- "fable-review",
176
- "report-to-astra",
177
- "astra-check",
178
- "product-owner-acceptance"
179
- ],
180
- "requiredForAllCodeChanges": true,
181
- "allowInheritFallback": false,
182
- "taskTiers": {
183
- "FAST": {
184
- "implementationClass": "lightweight",
185
- "maxReviewRounds": 2
186
- },
187
- "STANDARD": {
188
- "implementationClass": "standard",
189
- "maxReviewRounds": 3
190
- },
191
- "CONTROLLED": {
192
- "implementationClass": "deep",
193
- "maxReviewRounds": 3
194
- }
195
- },
196
- "astraWorkflows": [
197
- "design",
198
- "context-pack",
199
- "plan-feature",
200
- "architecture-decision",
201
- "closure",
202
- "qa-plan",
203
- "project-stage",
204
- "sprint-plan",
205
- "milestone-review",
206
- "retrospective"
207
- ],
208
- "reviewWorkflows": [
209
- "review",
210
- "nccgs-code-review"
211
- ]
212
- },
213
- "snapshotExcludes": [
214
- ".git",
215
- ".nccgs",
216
- "Library",
217
- "Temp",
218
- "Logs",
219
- "obj",
220
- "node_modules",
221
- ".vs"
222
- ],
223
- "coreAgents": [
224
- "nccgs-fast-implementer",
225
- "nccgs-task-scout",
226
- "nccgs-game-designer",
227
- "nccgs-gameplay-programmer",
228
- "nccgs-engine-programmer",
229
- "nccgs-ui-programmer",
230
- "nccgs-unity-implementer",
231
- "nccgs-unity-systems-specialist",
232
- "nccgs-unity-ui-specialist",
233
- "nccgs-unity-build-specialist",
234
- "nccgs-qa-engineer",
235
- "nccgs-verification-engineer",
236
- "nccgs-adversarial-reviewer"
237
- ],
238
- "executionPolicies": {
239
- "standalone": {
240
- "reviewAgent": "nccgs-adversarial-reviewer",
241
- "documentsOwner": "Claude Code",
242
- "runtime": "claude-code",
243
- "sequence": [
244
- "intake",
245
- "plan",
246
- "implementation",
247
- "verification",
248
- "independent-review",
249
- "report",
250
- "optional-external-review",
251
- "contract-acceptance"
252
- ],
253
- "planningOwner": "Claude Code"
254
- },
255
- "compatibility": {
256
- "contract": "astra-claude",
257
- "runtime": "claude-code"
258
- }
259
- }
260
- }
1
+ {
2
+ "schemaVersion": 1,
3
+ "defaultProfile": "claude-standalone",
4
+ "profiles": {
5
+ "astra-claude": {
6
+ "models": {
7
+ "lightweight": {
8
+ "model": "sonnet",
9
+ "effort": "medium"
10
+ },
11
+ "standard": {
12
+ "model": "claude-opus-5-5",
13
+ "effort": "medium"
14
+ },
15
+ "deep": {
16
+ "model": "claude-opus-5-5",
17
+ "effort": "high"
18
+ },
19
+ "leadership": {
20
+ "model": "claude-opus-5-5",
21
+ "effort": "high"
22
+ },
23
+ "review": {
24
+ "model": "fable",
25
+ "effort": "high"
26
+ }
27
+ },
28
+ "session": {
29
+ "class": "standard"
30
+ },
31
+ "activeAgents": [
32
+ "nccgs-fast-implementer",
33
+ "nccgs-task-scout",
34
+ "nccgs-game-designer",
35
+ "nccgs-gameplay-programmer",
36
+ "nccgs-engine-programmer",
37
+ "nccgs-ui-programmer",
38
+ "nccgs-unity-implementer",
39
+ "nccgs-unity-systems-specialist",
40
+ "nccgs-unity-ui-specialist",
41
+ "nccgs-unity-build-specialist",
42
+ "nccgs-qa-engineer",
43
+ "nccgs-verification-engineer",
44
+ "nccgs-adversarial-reviewer"
45
+ ]
46
+ },
47
+ "quality": {
48
+ "models": {
49
+ "lightweight": {
50
+ "model": "haiku",
51
+ "effort": null
52
+ },
53
+ "standard": {
54
+ "model": "sonnet",
55
+ "effort": null
56
+ },
57
+ "deep": {
58
+ "model": "opus",
59
+ "effort": null
60
+ },
61
+ "leadership": {
62
+ "model": "opus",
63
+ "effort": null
64
+ },
65
+ "review": {
66
+ "model": "opus",
67
+ "effort": null
68
+ }
69
+ },
70
+ "session": null,
71
+ "activeAgents": "all"
72
+ },
73
+ "balanced": {
74
+ "models": {
75
+ "lightweight": {
76
+ "model": "haiku",
77
+ "effort": null
78
+ },
79
+ "standard": {
80
+ "model": "sonnet",
81
+ "effort": null
82
+ },
83
+ "deep": {
84
+ "model": "opus",
85
+ "effort": null
86
+ },
87
+ "leadership": {
88
+ "model": "sonnet",
89
+ "effort": null
90
+ },
91
+ "review": {
92
+ "model": "opus",
93
+ "effort": null
94
+ }
95
+ },
96
+ "session": null,
97
+ "activeAgents": "all"
98
+ },
99
+ "inherit": {
100
+ "models": {
101
+ "lightweight": {
102
+ "model": null,
103
+ "effort": null
104
+ },
105
+ "standard": {
106
+ "model": null,
107
+ "effort": null
108
+ },
109
+ "deep": {
110
+ "model": null,
111
+ "effort": null
112
+ },
113
+ "leadership": {
114
+ "model": null,
115
+ "effort": null
116
+ },
117
+ "review": {
118
+ "model": null,
119
+ "effort": null
120
+ }
121
+ },
122
+ "session": null,
123
+ "activeAgents": "all"
124
+ },
125
+ "claude-standalone": {
126
+ "models": {
127
+ "lightweight": {
128
+ "effort": "high",
129
+ "model": "sonnet"
130
+ },
131
+ "standard": {
132
+ "effort": "high",
133
+ "model": "opus"
134
+ },
135
+ "deep": {
136
+ "effort": "xhigh",
137
+ "model": "opus"
138
+ },
139
+ "leadership": {
140
+ "effort": "xhigh",
141
+ "model": "opus"
142
+ },
143
+ "review": {
144
+ "effort": "high",
145
+ "model": "fable"
146
+ }
147
+ },
148
+ "session": {
149
+ "class": "standard"
150
+ },
151
+ "activeAgents": [
152
+ "nccgs-fast-implementer",
153
+ "nccgs-task-scout",
154
+ "nccgs-game-designer",
155
+ "nccgs-gameplay-programmer",
156
+ "nccgs-engine-programmer",
157
+ "nccgs-ui-programmer",
158
+ "nccgs-unity-implementer",
159
+ "nccgs-unity-systems-specialist",
160
+ "nccgs-unity-ui-specialist",
161
+ "nccgs-unity-build-specialist",
162
+ "nccgs-qa-engineer",
163
+ "nccgs-verification-engineer",
164
+ "nccgs-adversarial-reviewer"
165
+ ]
166
+ }
167
+ },
168
+ "contract": {
169
+ "planningOwner": "Astra",
170
+ "documentsOwner": "Astra",
171
+ "reviewAgent": "nccgs-adversarial-reviewer",
172
+ "sequence": [
173
+ "astra-plan",
174
+ "risk-routed-implementation",
175
+ "fable-review",
176
+ "report-to-astra",
177
+ "astra-check",
178
+ "product-owner-acceptance"
179
+ ],
180
+ "requiredForAllCodeChanges": true,
181
+ "allowInheritFallback": false,
182
+ "taskTiers": {
183
+ "FAST": {
184
+ "implementationClass": "lightweight",
185
+ "maxReviewRounds": 2
186
+ },
187
+ "STANDARD": {
188
+ "implementationClass": "standard",
189
+ "maxReviewRounds": 3
190
+ },
191
+ "CONTROLLED": {
192
+ "implementationClass": "deep",
193
+ "maxReviewRounds": 3
194
+ }
195
+ },
196
+ "astraWorkflows": [
197
+ "design",
198
+ "context-pack",
199
+ "plan-feature",
200
+ "architecture-decision",
201
+ "closure",
202
+ "qa-plan",
203
+ "project-stage",
204
+ "sprint-plan",
205
+ "milestone-review",
206
+ "retrospective"
207
+ ],
208
+ "reviewWorkflows": [
209
+ "review",
210
+ "nccgs-code-review"
211
+ ]
212
+ },
213
+ "snapshotExcludes": [
214
+ ".git",
215
+ ".nccgs",
216
+ "Library",
217
+ "Temp",
218
+ "Logs",
219
+ "obj",
220
+ "node_modules",
221
+ ".vs"
222
+ ],
223
+ "coreAgents": [
224
+ "nccgs-fast-implementer",
225
+ "nccgs-task-scout",
226
+ "nccgs-game-designer",
227
+ "nccgs-gameplay-programmer",
228
+ "nccgs-engine-programmer",
229
+ "nccgs-ui-programmer",
230
+ "nccgs-unity-implementer",
231
+ "nccgs-unity-systems-specialist",
232
+ "nccgs-unity-ui-specialist",
233
+ "nccgs-unity-build-specialist",
234
+ "nccgs-qa-engineer",
235
+ "nccgs-verification-engineer",
236
+ "nccgs-adversarial-reviewer"
237
+ ],
238
+ "executionPolicies": {
239
+ "standalone": {
240
+ "reviewAgent": "nccgs-adversarial-reviewer",
241
+ "documentsOwner": "Claude Code",
242
+ "runtime": "claude-code",
243
+ "sequence": [
244
+ "intake",
245
+ "plan",
246
+ "implementation",
247
+ "verification",
248
+ "independent-review",
249
+ "report",
250
+ "optional-external-review",
251
+ "contract-acceptance"
252
+ ],
253
+ "planningOwner": "Claude Code"
254
+ },
255
+ "compatibility": {
256
+ "contract": "astra-claude",
257
+ "runtime": "claude-code"
258
+ }
259
+ }
260
+ }
@@ -3,6 +3,11 @@
3
3
  A context packet is a task-specific map, not a copy of project documentation. Store
4
4
  it under `.nccgs/context/<feature-id>.yaml` for STANDARD or CONTROLLED work.
5
5
 
6
+ For a project that has adopted the external shared workflow, follow
7
+ [shared workflow context](shared-workflow-context.md) for its optional common Graphify
8
+ consumer. Link its generation/readiness in the existing packet; keep one shared graph
9
+ and freshness record. Missing setup skips without installing or bootstrapping it.
10
+
6
11
  Include objective, risk tier, domains, accountable owner, requirement IDs, exact
7
12
  canonical sections, decision summaries with source anchors, affected/protected paths,
8
13
  approved semantics, out-of-scope boundaries, dependencies, verification, PO gates,
@@ -1,46 +1,46 @@
1
- # Model routing protocol
2
-
3
- NCCGS runs in Claude Code. Resolve execution obligations independently of models.
4
- `pipeline.json` is the routing source; generated catalog/frontmatter and
5
- [routing.generated.md](../routing.generated.md) must match it. Thirteen roles
6
- load by default; 34 optional specialists remain in `agent-library/` until needed.
7
-
8
- ## Standalone default
9
-
10
- | Risk | Implementation | Requested effort | Review rounds |
11
- |---|---|---|---|
12
- | FAST | Sonnet, lightweight class | medium | 2 |
13
- | STANDARD | Opus, standard class | medium | 3 |
14
- | CONTROLLED | Opus, deep class | high | 3 |
15
-
16
- Independent review uses Opus/high. These are family aliases, not claims about a
17
- particular resolved provider version. Runtime observations must identify actual
18
- Claude models. Unknown effort remains null unless project policy requires observed
19
- effort, in which case missing evidence blocks the stage. Never infer observed
20
- effort, model, duration or cost from configuration.
21
-
22
- Use `nccgs-fast-implementer` for bounded FAST work; use a domain programmer for
23
- STANDARD and `nccgs-unity-implementer` for CONTROLLED. A scout resolves one missing
24
- fact; it is optional. Do not promote work merely because a role sounds senior.
25
- The same model family may implement and review, but review must run in a separate
26
- observed agent invocation and consume a reserved review attempt.
27
-
28
- `configure-models.mjs` renders profile model/effort settings. Local settings,
29
- environment, provider restrictions and existing sessions may override them.
30
- Restart/recheck the real session after configuration changes. Classify and reserve
31
- before dispatch, then use the task's route. Do not silently fall back when a model
32
- is unavailable. Report the actual blocker and measurements.
33
-
34
- ## Compatibility
35
-
36
- Missing `.nccgs/execution.json` means compatibility. Historical `astra-claude`
37
- retains Sonnet/medium for FAST, `claude-opus-5-5` medium/high for larger work,
38
- Fable/high review, external Astra check and explicit Product Owner acceptance.
39
- These historical identifiers are preserved configuration, not new availability
40
- claims. See [its protocol](astra-claude.md).
41
-
42
- `quality`, `balanced` and `inherit` remain available for historical workflows.
43
- Changing only a model profile cannot waive task gates. Standalone schema-2 tasks
44
- require explicit implementation/review families; an unpinned inherit route cannot
45
- prove them. Ordinary updates retain configuration. Use explicit execution migration
46
- to adopt standalone; historical task records and spent budgets remain intact.
1
+ # Model routing protocol
2
+
3
+ NCCGS runs in Claude Code. Resolve execution obligations independently of models.
4
+ `pipeline.json` is the routing source; generated catalog/frontmatter and
5
+ [routing.generated.md](../routing.generated.md) must match it. Thirteen roles
6
+ load by default; 34 optional specialists remain in `agent-library/` until needed.
7
+
8
+ ## Standalone default
9
+
10
+ | Risk | Implementation | Requested effort | Review rounds |
11
+ |---|---|---|---|
12
+ | FAST | Sonnet, lightweight class | high | 2 |
13
+ | STANDARD | Opus, standard class | high | 3 |
14
+ | CONTROLLED | Opus, deep class | xhigh | 3 |
15
+
16
+ Independent review uses Fable/high. Leadership requests Opus/xhigh. These are family aliases, not claims about a
17
+ particular resolved provider version. Runtime observations must identify actual
18
+ Claude models. Unknown effort remains null unless project policy requires observed
19
+ effort, in which case missing evidence blocks the stage. Never infer observed
20
+ effort, model, duration or cost from configuration.
21
+
22
+ Use `nccgs-fast-implementer` for bounded FAST work; use a domain programmer for
23
+ STANDARD and `nccgs-unity-implementer` for CONTROLLED. A scout resolves one missing
24
+ fact; it is optional. Do not promote work merely because a role sounds senior.
25
+ The same model family may implement and review, but review must run in a separate
26
+ observed agent invocation and consume a reserved review attempt.
27
+
28
+ `configure-models.mjs` renders profile model/effort settings. Local settings,
29
+ environment, provider restrictions and existing sessions may override them.
30
+ Restart/recheck the real session after configuration changes. Classify and reserve
31
+ before dispatch, then use the task's route. Do not silently fall back when a model
32
+ is unavailable. Report the actual blocker and measurements.
33
+
34
+ ## Compatibility
35
+
36
+ Missing `.nccgs/execution.json` means compatibility. Historical `astra-claude`
37
+ retains Sonnet/medium for FAST, `claude-opus-5-5` medium/high for larger work,
38
+ Fable/high review, external Astra check and explicit Product Owner acceptance.
39
+ These historical identifiers are preserved configuration, not new availability
40
+ claims. See [its protocol](astra-claude.md).
41
+
42
+ `quality`, `balanced` and `inherit` remain available for historical workflows.
43
+ Changing only a model profile cannot waive task gates. Standalone schema-2 tasks
44
+ require explicit implementation/review families; an unpinned inherit route cannot
45
+ prove them. Ordinary updates retain configuration. Use explicit execution migration
46
+ to adopt standalone; historical task records and spent budgets remain intact.
@@ -2,7 +2,13 @@
2
2
 
3
3
  For a reservation with `handoffTransport: "native-result"`, return the entire
4
4
  Markdown handoff as one final text block and do not write a file. The native hook
5
- copies it verbatim into the single declared fresh handoff path. The exact same
5
+ copies it verbatim into the single declared fresh handoff path. The consumer
6
+ re-evaluates the actual response with the native completion policy and preserves
7
+ any upstream completion failure. Only validated provider-designated informational
8
+ leading/tail blocks are removed; exactly one nonempty model text block of at most
9
+ 262144 UTF-8 bytes must remain. Unknown, invalid, incomplete or ambiguous responses
10
+ reject without publishing. Model-authored lookalike tags, review JSON, conditions
11
+ and completion markers are never rewritten. The exact same
6
12
  review contract, independent identity and gates below still apply. Other
7
13
  reservations retain the existing file-writing workflow.
8
14
 
@@ -77,5 +83,19 @@ external inspection. Arbitrary quoted text in a worker's response is not harness
77
83
  metadata and does not itself change completion status. Captured observations retain
78
84
  the reported invocation status and a diagnosis/hash, not arbitrary response text.
79
85
 
86
+ The provider-designated informational block
87
+ `<tools-used-before-summary>Edit</tools-used-before-summary>` is recognized as a
88
+ tool inventory. Recognition applies only inside the declared leading/tail harness
89
+ blocks, never to the model handoff. The whole text block must be at most 4096
90
+ characters and contain only that exact case-sensitive wrapper, one or more
91
+ comma-separated tool identifiers, and optional surrounding whitespace. Identifiers
92
+ start with an ASCII letter and continue with ASCII letters, digits, `_`, `.`, `:`
93
+ or `-`; whitespace may surround commas. Empty lists, nested tags, extra prose,
94
+ non-text blocks and any other advisory remain unrecognized and fail closed.
95
+ Turn-limit notices retain priority even when mixed with a recognized inventory.
96
+ An informational note preserves its hash and the provider's reported status;
97
+ it never upgrades a failed or unknown invocation. This compatibility rule does
98
+ not rewrite a previous failed dispatch or waive its consumed quota or review.
99
+
80
100
  Older pinned policies remain unchanged. Upgrade policy only for fresh authorized
81
101
  tasks; never retrofit frozen evaluation records or reset attempts to obtain PASS.