@cassiomc1/forgeloop 1.6.5 → 1.7.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.
Files changed (71) hide show
  1. package/DOCS_INDEX.md +1 -0
  2. package/GUIDE_ROUTER.md +26 -1
  3. package/LOOP_ENGINEERING.md +48 -0
  4. package/ORCHESTRATOR_INTEGRATION.md +38 -0
  5. package/PROTOCOL_INTEGRATION.md +62 -0
  6. package/README.md +25 -0
  7. package/benchmarks/execution-profiles/README.md +44 -0
  8. package/benchmarks/execution-profiles/api-feature.json +18 -0
  9. package/benchmarks/execution-profiles/authentication-change.json +18 -0
  10. package/benchmarks/execution-profiles/documentation-correction.json +18 -0
  11. package/benchmarks/execution-profiles/infrastructure-release.json +18 -0
  12. package/benchmarks/execution-profiles/novatask-saas-landing-page.json +36 -0
  13. package/benchmarks/execution-profiles/small-bug-fix.json +18 -0
  14. package/benchmarks/execution-profiles/static-landing-page.json +18 -0
  15. package/completions/_forgeloop +6 -4
  16. package/completions/forgeloop.bash +8 -4
  17. package/completions/forgeloop.fish +24 -1
  18. package/docs/AGENT_PROTOCOL_SUMMARY.md +45 -1
  19. package/docs/ARTIFACT_REFERENCE.md +53 -7
  20. package/docs/CLI_REFERENCE.md +83 -1
  21. package/docs/EXECUTION_PROFILE_BENCHMARKS.md +208 -0
  22. package/docs/GETTING_STARTED.md +28 -0
  23. package/docs/MCP.md +6 -0
  24. package/docs/RELEASE_CHECKLIST.md +4 -0
  25. package/docs/TROUBLESHOOTING.md +6 -0
  26. package/docs/UNIVERSAL_INTEGRATION.md +58 -0
  27. package/package.json +13 -2
  28. package/schemas/config.schema.json +1 -0
  29. package/schemas/execution-profile-benchmark-aggregate.schema.json +43 -0
  30. package/schemas/execution-profile-benchmark-run.schema.json +106 -0
  31. package/schemas/execution-profile-benchmark-scenario.schema.json +66 -0
  32. package/schemas/routing-result.schema.json +12 -0
  33. package/schemas/usage.schema.json +30 -0
  34. package/scripts/check-efficiency-regression.mjs +99 -0
  35. package/scripts/generate-agent-protocol-summary.mjs +35 -0
  36. package/scripts/lib/execution-profile-benchmark-io.mjs +67 -0
  37. package/scripts/run-execution-profile-benchmarks.mjs +265 -0
  38. package/scripts/summarize-execution-profile-benchmarks.mjs +84 -0
  39. package/scripts/validate-execution-profile-benchmarks.mjs +120 -0
  40. package/src/cli.js +16 -4
  41. package/src/commands/efficiency.js +12 -0
  42. package/src/commands/eval.js +8 -2
  43. package/src/commands/metrics.js +2 -2
  44. package/src/commands/next.js +26 -2
  45. package/src/commands/route.js +20 -2
  46. package/src/commands/task-show.js +31 -2
  47. package/src/commands/usage-record.js +61 -0
  48. package/src/core/artifact-registry.js +12 -0
  49. package/src/core/cli-command-definitions.js +27 -0
  50. package/src/core/command-executors.js +29 -5
  51. package/src/core/command-input.js +34 -0
  52. package/src/core/config.js +9 -0
  53. package/src/core/efficiency.js +197 -0
  54. package/src/core/error-codes.js +18 -0
  55. package/src/core/execution-profile-benchmarks.js +674 -0
  56. package/src/core/execution-profile-context.js +177 -0
  57. package/src/core/execution-profile.js +248 -0
  58. package/src/core/integration-invocation-policy.js +43 -0
  59. package/src/core/integration-resources.js +22 -1
  60. package/src/core/protocol-info.js +42 -0
  61. package/src/core/router.js +23 -1
  62. package/src/core/runtime-context.js +11 -0
  63. package/src/core/schema-validation.js +4 -0
  64. package/src/core/task-paths.js +2 -0
  65. package/src/core/templates.js +4 -0
  66. package/src/core/trace.js +1 -0
  67. package/src/core/trajectory-evaluation.js +2 -2
  68. package/src/core/trajectory-metrics.js +18 -2
  69. package/src/core/usage.js +137 -0
  70. package/src/integration.d.ts +84 -0
  71. package/src/integration.js +14 -0
package/DOCS_INDEX.md CHANGED
@@ -30,6 +30,7 @@ integration and guide context. Use this map before editing documentation.
30
30
  | Platform adapters | [`docs/PLATFORM_ADAPTERS.md`](./docs/PLATFORM_ADAPTERS.md) | Generic CI boundary and platform mapping guidance |
31
31
  | Universal integration API | [`docs/UNIVERSAL_INTEGRATION.md`](./docs/UNIVERSAL_INTEGRATION.md) | Programmatic integration subpath, envelope semantics, and consumer map |
32
32
  | Local-first MCP adapter | [`docs/MCP.md`](./docs/MCP.md) | stdio default, optional strict loopback HTTP; server modes/capabilities and canonical resources |
33
+ | Adaptive execution-profile benchmarks | [`docs/EXECUTION_PROFILE_BENCHMARKS.md`](./docs/EXECUTION_PROFILE_BENCHMARKS.md) | Measured provider/host runs, comparability, aggregates, and profile-aware host context |
33
34
  | Documentation guide | [`docs/DOCUMENTATION_GUIDE.md`](./docs/DOCUMENTATION_GUIDE.md) | Rules and checklist for modifying documentation |
34
35
  | Current release checklist | [`docs/RELEASE_CHECKLIST.md`](./docs/RELEASE_CHECKLIST.md) | Package, protocol, attestation, integration, and publication gates |
35
36
  | ForgeLoop 1.6.1 release checklist (historical) | [`docs/RELEASE_CHECKLIST_1_6_1.md`](./docs/RELEASE_CHECKLIST_1_6_1.md) | Verification adapter boundary, isolation invariants, and publication gates |
package/GUIDE_ROUTER.md CHANGED
@@ -237,7 +237,9 @@ The first routing contract is versioned as `schemaVersion: 1`. It accepts:
237
237
  - `surfaces`: `ui`, `forms`, `api`, `auth`, `data`, `database`, `mobile`,
238
238
  `desktop`, `game`, `video`, `ci`, `config`, `critical-path`, or `documentation`;
239
239
  - `risks`: `untrusted-input`, `personal-data`, `secrets`, `external-service`,
240
- `publication`, `critical-path`, `performance`, or `accessibility`;
240
+ `publication`, `critical-path`, `performance`, `accessibility`, `destructive`,
241
+ `irreversible`, `production-deployment`, `credentials`, `payment`, or
242
+ `migration`;
241
243
  - `platforms`: `web`, `mobile`, `desktop`, `server`, `ci`, or
242
244
  `cross-platform`;
243
245
  - optional boolean `behaviorChange` and `executableChange` signals.
@@ -326,3 +328,26 @@ Verify Markdown, links, paths, commands, and examples.
326
328
  If investigation reveals a new surface, update the guide set before editing that area. Record only the concise reason; do not create a versioned task log.
327
329
 
328
330
  If an applicable guide is missing or inaccessible, use conservative defaults, do not invent its content, and disclose the limitation in the delivery.
331
+
332
+ ## Execution profile routing
333
+
334
+ Guide selection and execution depth are separate deterministic decisions. The
335
+ persisted route also contains `executionProfile` with `requested`, `floor`,
336
+ `resolved`, `reasons`, and `escalated` fields. It is resolved from the same
337
+ declared route signals plus contract and task-scope metadata; no model
338
+ confidence, token estimate, or subjective complexity judgment is used.
339
+
340
+ The safety floor is `light` for narrow low-risk documentation, copy, and local
341
+ UI work; `balanced` for behavior or executable changes, ordinary application
342
+ engineering, data/configuration/CI surfaces, and moderate scope; and `full`
343
+ for authentication, critical paths, secrets, personal data, publication,
344
+ infrastructure, destructive or irreversible operations, and authority-sensitive
345
+ external mutations. A CLI request overrides project configuration only as a
346
+ request: it cannot lower the resolved safety floor.
347
+
348
+ Hosts should present `light` tasks with targeted guide sections, a compact
349
+ plan, focused checks, and bounded `next --compact` or `task-show --compact`
350
+ responses. Required gates, evidence, verification truth, lifecycle chronology,
351
+ and validator-backed completion remain unchanged. Historical protocol-v1
352
+ routes without the optional field remain valid and project to `balanced` for
353
+ compatibility without being rewritten.
@@ -19,6 +19,7 @@
19
19
  - [Project Discovery](#project-discovery)
20
20
  - [Capability Discovery & Authority](#capability-discovery-and-on-demand-extensions)
21
21
  - [Guide Selection](#guide-selection)
22
+ - [Adaptive Execution Profiles](#adaptive-execution-profiles)
22
23
  - [Design & Implementation Gates](#design-and-implementation-gates)
23
24
  - [Proportional Planning](#proportional-planning)
24
25
  - [Execution Loop](#execution-loop)
@@ -69,6 +70,53 @@ If it discovered the ForgeLoop project adapter, evaluate capabilities:
69
70
  Never downgrade ForgeLoop to optional guidance solely because the runtime
70
71
  name is unknown.
71
72
 
73
+ ## Adaptive execution profiles
74
+
75
+ ForgeLoop separates compliance policy from execution depth:
76
+
77
+ - `complianceMode` (`advisory`, `standard`, `strict`) controls how strongly
78
+ project policy is enforced.
79
+ - `executionProfile` (`auto`, `light`, `balanced`, `full`) controls how much
80
+ process and context depth is appropriate for the task.
81
+
82
+ The default request is `auto`. ForgeLoop resolves it deterministically from
83
+ route signals, the task contract, and task scope. A CLI request takes
84
+ precedence over project configuration, and project configuration takes
85
+ precedence over `auto`; the safety floor always wins. A low explicit request is
86
+ escalated with a structured reason rather than treated as an error.
87
+
88
+ `light` is intended for small, local, reversible, low-risk work. Hosts should
89
+ use the smallest sufficient discovery, compact plans, targeted guide sections,
90
+ focused verification, and `next --compact` or `task-show --compact`. It does
91
+ not remove contracts, routes, preflight, required gates, verification truth,
92
+ provenance, lifecycle phases, review, or validator-backed completion.
93
+
94
+ `balanced` remains the normal profile for behavior changes, ordinary bugs,
95
+ refactors, APIs, configuration, and moderate scope. `full` is required by
96
+ authentication, secrets, personal data, publication, infrastructure,
97
+ critical-path, destructive, irreversible, and authority-sensitive work.
98
+
99
+ Optional reflection, trajectory evaluation, handoff, responsibility,
100
+ attestation, benchmark, and continuity artifacts are lazy: they are created
101
+ only when required by policy, requested by the user or host, or needed for
102
+ recovery. The first profile release does not change lifecycle chronology or
103
+ introduce a fast path.
104
+
105
+ The profile-aware context projection is presentation guidance only. A host may
106
+ use `task/context` to select targeted, normal, or expanded context, but a
107
+ profile never authorizes skipping a lifecycle phase, required gate,
108
+ verification requirement, authority check, provenance binding, safety floor,
109
+ or validator-backed completion. A phase may be absent only when the canonical
110
+ protocol determines that it is not applicable; it may never be omitted because
111
+ the resolved profile is `light`.
112
+
113
+ Usage telemetry is a separate informational domain. Only a trusted provider or
114
+ host can report `PROVIDER_REPORTED` or `HOST_REPORTED`; the CLI fallback is
115
+ explicitly `ACTOR_REPORTED`; absent data is `UNKNOWN`. ForgeLoop never
116
+ estimates tokens, promotes actor data, or treats usage as verification
117
+ evidence. `efficiency --task` reports comparisons only for a metadata-compatible
118
+ project-local baseline.
119
+
72
120
  ### CLI-owned artifact policy
73
121
 
74
122
  Lifecycle-owned ForgeLoop artifacts must be created or mutated only through
@@ -86,6 +86,44 @@ edited by hand.
86
86
 
87
87
  <!-- END FORGELOOP GENERATED: work-transitions -->
88
88
 
89
+ ## Profile-aware host behavior
90
+
91
+ The host may adapt context and presentation depth after reading the resolved
92
+ `executionProfile` from the persisted route or a compact task projection.
93
+ `light` uses targeted guide sections, a compact plan, focused checks, and
94
+ bounded lifecycle output; `balanced` keeps the normal relevant context; `full`
95
+ permits broader risk and dependency context. The host must not reinterpret the
96
+ profile or use it to skip lifecycle phases, required gates, verification
97
+ requirements, authority checks, provenance, or completion validation.
98
+
99
+ Hosts can consume the canonical `task/context` projection from the universal
100
+ integration API (or `forgeloop://task/{taskId}/context` through MCP). It
101
+ provides the objective, deliverables, constraints, selected guide IDs, next
102
+ action, verification requirements, and the profile-specific presentation
103
+ policy. A phase may be absent only when the canonical protocol says it is not
104
+ applicable; `light` is never a reason to omit it.
105
+
106
+ The profile changes context depth only. Required phases and gates, evidence and
107
+ verification truth, authority and provenance, the safety floor, and
108
+ validator-backed completion remain invariant.
109
+
110
+ The canonical integration capability is `executionProfileContext`, and the
111
+ host-facing `task/context` projection is the default input for profile-aware
112
+ presentation. A host that cannot read that resource falls back to balanced
113
+ compatibility behavior. It must consume `executionProfile.resolved`, preserve
114
+ the safety floor, and pass missing context or usage as unavailable rather than
115
+ estimating it.
116
+
117
+ The profile is orthogonal to `complianceMode`. CLI requests take precedence
118
+ over project configuration only as requests, while the deterministic safety
119
+ floor always wins. Historical routes without the optional profile field remain
120
+ readable and project to `balanced` compatibility behavior. The first release
121
+ does not add a lifecycle fast path.
122
+
123
+ Optional reflection, evaluation, handoff, responsibility, attestation,
124
+ benchmark, and continuity artifacts are lazy. Create them only when required
125
+ by policy, requested by the user or host, or needed for recovery.
126
+
89
127
  The host may skip proportional phases, but it must preserve the state
90
128
  invariants and record why a skipped phase was not applicable.
91
129
 
@@ -138,6 +138,68 @@ versions. A harness must not infer compatibility from the package version
138
138
  alone, and it must fail closed when its required protocol or schema version is
139
139
  absent from the relevant list.
140
140
 
141
+ ## Adaptive execution profiles and context presentation
142
+
143
+ `complianceMode` and `executionProfile` are independent dimensions. Compliance
144
+ mode (`advisory`, `standard`, or `strict`) describes enforcement policy;
145
+ execution profile (`auto`, `light`, `balanced`, or `full`) describes process and
146
+ context depth. ForgeLoop resolves the profile deterministically from route,
147
+ contract, and task-scope metadata. CLI requests override project configuration
148
+ as requests, but never lower the safety floor.
149
+
150
+ Hosts may use the resolved profile to control presentation. For `light`, pass
151
+ the objective, deliverables, constraints, profile, selected guide IDs, phase,
152
+ next action, and verification requirements; reuse unchanged state locally and
153
+ avoid reinjecting complete ledgers, schemas, receipts, and protocol documents.
154
+ `next --compact` and `task-show --compact` provide bounded machine-readable
155
+ projections. These presentation choices never alter required gates, evidence,
156
+ verification truth, lifecycle chronology, authority, or validator-backed
157
+ completion. A protocol-v1 route without profile metadata remains readable and
158
+ projects to `balanced` compatibility behavior.
159
+
160
+ The integration API also exposes the read-only `task/context` projection. It
161
+ contains the resolved profile, objective, deliverables, constraints, selected
162
+ guide IDs, next action, verification requirements, and a bounded context
163
+ policy for hosts. A host may omit optional presentation context, but
164
+ `light` never authorizes a skipped lifecycle phase or required gate. A phase
165
+ may be absent only when the canonical protocol marks it not applicable.
166
+
167
+ The capability handshake names this contract as `executionProfileContext` and
168
+ marks `executionProfile.resolved` as authoritative. Historical consumers that
169
+ do not expose `task/context` must use balanced compatibility behavior rather
170
+ than inventing a local LIGHT heuristic. Optional benchmark context telemetry is
171
+ host-reported or `UNKNOWN`; ForgeLoop does not tokenize provider prompts.
172
+
173
+ The profile invariant block is explicit:
174
+
175
+ ```text
176
+ execution depth changes presentation and optional context only.
177
+ required lifecycle phases remain unchanged.
178
+ required gates remain unchanged.
179
+ verification truth and evidence requirements remain unchanged.
180
+ authority, provenance, and safety-floor decisions remain unchanged.
181
+ validator-backed completion remains unchanged.
182
+ ```
183
+
184
+ Optional observability is lazy. Reflection, trajectory evaluation, handoff,
185
+ responsibility, attestation, benchmark analysis, and continuity artifacts are
186
+ not required merely because the capability exists; policy, user/host request,
187
+ or recovery need must require them.
188
+
189
+ Usage telemetry is a separate informational boundary. A runtime may supply an
190
+ optional `ForgeLoopUsageProvider.getTaskUsage({ projectPath, taskId })`; the
191
+ provider must report only `PROVIDER_REPORTED` or `HOST_REPORTED`. The CLI
192
+ fallback records only `ACTOR_REPORTED`, and absent data is `UNKNOWN`. ForgeLoop
193
+ never estimates tokens or accepts usage as verification evidence. The
194
+ read-only `efficiency --task` command reports `NOT_COMPARABLE` until an
195
+ optional project-local baseline has matching metadata.
196
+
197
+ Execution-profile benchmark evidence is a separate observational boundary.
198
+ The reproducible runner compares direct, balanced, and adaptive modes only
199
+ when provider or host usage, actual timing, PASS verification, comparable
200
+ steps, and matching metadata are present. Missing or non-comparable values
201
+ remain `UNKNOWN`/`NOT_COMPARABLE`; no efficiency claim is inferred.
202
+
141
203
  ## CLI resolution policy
142
204
 
143
205
  Lifecycle-owned protocol state must be managed through the project-local ForgeLoop CLI:
package/README.md CHANGED
@@ -195,6 +195,31 @@ configuration under `.forgeloop/`, and stores task-scoped protocol artifacts
195
195
  under `.forgeloop/task-state/<taskKey>/`.
196
196
  `update` preserves target-specific profile facts and locally modified files.
197
197
 
198
+ ForgeLoop adapts protocol depth to task risk and scope, preserving verifiable
199
+ completion while avoiding unnecessary context overhead for small tasks. The
200
+ orthogonal `executionProfile` resolves to `light`, `balanced`, or `full`; it
201
+ never weakens compliance policy, required verification, provenance, or
202
+ validator-backed completion. Hosts can request bounded lifecycle context with
203
+ `forgeloop next --task <id> --compact --json` and
204
+ `forgeloop task-show --task <id> --compact --json`.
205
+
206
+ Usage telemetry is optional and never estimated. `usage-record` keeps CLI data
207
+ explicitly `ACTOR_REPORTED`; `efficiency --task` is read-only and compares only
208
+ when a local baseline is metadata-compatible.
209
+
210
+ Hosts can consume the read-only `task/context` integration resource for a
211
+ profile-aware objective, guide, next-action, and verification projection. The
212
+ profile changes presentation depth only; it never skips a required lifecycle
213
+ phase or gate. Measured profile comparisons use the reproducible commands in
214
+ [`docs/EXECUTION_PROFILE_BENCHMARKS.md`](./docs/EXECUTION_PROFILE_BENCHMARKS.md)
215
+ and do not claim efficiency when provider or host telemetry is unavailable or
216
+ non-comparable.
217
+
218
+ The integration capability handshake marks the resolved profile as
219
+ authoritative. Hosts without `task/context` use balanced compatibility behavior
220
+ and must not invent a local LIGHT heuristic. Optional context usage is
221
+ host-reported or `UNKNOWN`; values are never estimated.
222
+
198
223
  Before npm publication, the same source checkout can be exercised without a
199
224
  network or package lookup:
200
225
 
@@ -0,0 +1,44 @@
1
+ # Adaptive execution-profile benchmark scenarios
2
+
3
+ These scenarios define the deterministic routing inputs used to compare direct
4
+ execution, the historical balanced workflow, and the adaptive ForgeLoop
5
+ workflow. They are scenario specifications, not provider measurements.
6
+
7
+ Record provider or host usage only when it is actually reported. Keep unknown
8
+ token, cache, cost, and timing values as `null`; ForgeLoop must not estimate
9
+ them. A comparison is valid only when task/scenario, model, provider, prompt or
10
+ spec fingerprint, project revision, benchmark version, and environment class
11
+ match.
12
+
13
+ The target profile is a guidance expectation. It does not change lifecycle
14
+ phases, required gates, verification truth, authority boundaries, or validated
15
+ completion.
16
+
17
+ The required reference set includes the six original scenarios and
18
+ `novatask-saas-landing-page.json`. NovaTask represents the original small SaaS
19
+ landing-page workload: HTML5, CSS3, vanilla JavaScript, local static files,
20
+ and no external services, auth, secrets, or publication. Its canonical
21
+ `executionProfile.resolved` value is `light`.
22
+
23
+ Record these dimensions independently when a real run is available: input and
24
+ output tokens, cache reads and writes, total tokens, wall-clock time,
25
+ verification status, verification cycles, comparable steps, visual quality,
26
+ responsive quality, accessibility basics, interaction polish, and requirement
27
+ completeness. Unavailable provider or reviewer measurements remain `null` or
28
+ `NOT_AVAILABLE`; they are never inferred.
29
+
30
+ Hosts may add optional `contextUsage` to a raw run with `HOST_REPORTED` values
31
+ for task context, guides, history, protocol instructions, repository context,
32
+ and other context. Use `UNKNOWN` with null items when unavailable. Complete
33
+ light-versus-balanced context observations may report `CONTEXT_INFLATION`; the
34
+ status is observational and never a lifecycle gate.
35
+
36
+ For UI scenarios, an independent evaluator or blind human review may also
37
+ report 0–5 scores for visual quality, responsive quality, accessibility,
38
+ interaction polish, and requirements completeness. Missing scores remain null;
39
+ implementer self-ratings are not an independent quality source.
40
+
41
+ Initial non-blocking efficiency goals for LIGHT scenarios are P50 token
42
+ overhead of at most +35% and P95 token overhead of at most +60% against a
43
+ comparable direct baseline. These are benchmark objectives, not completion
44
+ rules, and quality or verification coverage may not be traded for them.
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "benchmarkVersion": "1",
4
+ "scenarioId": "api-feature",
5
+ "description": "Ordinary API behavior change without authentication or publication authority.",
6
+ "input": {
7
+ "workType": "api",
8
+ "surfaces": ["api", "data"],
9
+ "risks": [],
10
+ "platforms": ["server"]
11
+ },
12
+ "expectedProfile": "balanced",
13
+ "measurements": {
14
+ "direct": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
15
+ "forgeloopBalanced": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
16
+ "forgeloopAdaptive": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" }
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "benchmarkVersion": "1",
4
+ "scenarioId": "authentication-change",
5
+ "description": "Authentication behavior change crossing a trust boundary.",
6
+ "input": {
7
+ "workType": "api-auth",
8
+ "surfaces": ["auth", "api"],
9
+ "risks": [],
10
+ "platforms": ["server"]
11
+ },
12
+ "expectedProfile": "full",
13
+ "measurements": {
14
+ "direct": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
15
+ "forgeloopBalanced": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
16
+ "forgeloopAdaptive": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" }
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "benchmarkVersion": "1",
4
+ "scenarioId": "documentation-correction",
5
+ "description": "Narrow documentation correction with no executable behavior or sensitive content.",
6
+ "input": {
7
+ "workType": "documentation",
8
+ "surfaces": [],
9
+ "risks": [],
10
+ "platforms": []
11
+ },
12
+ "expectedProfile": "light",
13
+ "measurements": {
14
+ "direct": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
15
+ "forgeloopBalanced": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
16
+ "forgeloopAdaptive": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" }
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "benchmarkVersion": "1",
4
+ "scenarioId": "infrastructure-release",
5
+ "description": "Infrastructure or release/publication work with external and potentially irreversible effects.",
6
+ "input": {
7
+ "workType": "release",
8
+ "surfaces": ["ci"],
9
+ "risks": ["publication"],
10
+ "platforms": ["ci"]
11
+ },
12
+ "expectedProfile": "full",
13
+ "measurements": {
14
+ "direct": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
15
+ "forgeloopBalanced": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
16
+ "forgeloopAdaptive": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" }
17
+ }
18
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "benchmarkVersion": "1",
4
+ "scenarioId": "novatask-saas-landing-page",
5
+ "description": "NovaTask reference workload: a local static SaaS landing page with no external or sensitive boundary.",
6
+ "input": {
7
+ "workType": "complete-website",
8
+ "surfaces": ["ui"],
9
+ "risks": [],
10
+ "platforms": ["web"],
11
+ "behaviorChange": false,
12
+ "executableChange": false
13
+ },
14
+ "expectedProfile": "light",
15
+ "referenceTask": {
16
+ "name": "NovaTask static SaaS landing page",
17
+ "requirements": [
18
+ "HTML5",
19
+ "CSS3",
20
+ "vanilla JavaScript",
21
+ "local static files"
22
+ ],
23
+ "exclusions": [
24
+ "external services",
25
+ "authentication",
26
+ "secrets",
27
+ "publication"
28
+ ],
29
+ "artifactMode": "local-static-files"
30
+ },
31
+ "measurements": {
32
+ "direct": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
33
+ "forgeloopBalanced": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
34
+ "forgeloopAdaptive": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" }
35
+ }
36
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "benchmarkVersion": "1",
4
+ "scenarioId": "small-bug-fix",
5
+ "description": "Small application bug fix with behavior implications and focused regression checks.",
6
+ "input": {
7
+ "workType": "bug",
8
+ "surfaces": [],
9
+ "risks": [],
10
+ "platforms": []
11
+ },
12
+ "expectedProfile": "balanced",
13
+ "measurements": {
14
+ "direct": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
15
+ "forgeloopBalanced": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
16
+ "forgeloopAdaptive": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" }
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "benchmarkVersion": "1",
4
+ "scenarioId": "static-landing-page",
5
+ "description": "Small local HTML, CSS, and JavaScript landing page without external services or sensitive boundaries.",
6
+ "input": {
7
+ "workType": "complete-website",
8
+ "surfaces": ["ui"],
9
+ "risks": [],
10
+ "platforms": ["web"]
11
+ },
12
+ "expectedProfile": "light",
13
+ "measurements": {
14
+ "direct": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
15
+ "forgeloopBalanced": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" },
16
+ "forgeloopAdaptive": { "inputTokens": null, "outputTokens": null, "cacheReadTokens": null, "cacheWriteTokens": null, "totalTokens": null, "wallClockMs": null, "verification": "NOT_AVAILABLE" }
17
+ }
18
+ }
@@ -1,7 +1,7 @@
1
1
  #compdef forgeloop
2
2
  # Generated by scripts/generate-shell-completions.mjs. Do not edit.
3
3
  _arguments \
4
- '1:command:(action-authorize action-propose action-reconcile action-record action-show action-verify activate advance approval-request approval-resolve attestation-create attestation-status attestation-verify attestation-verify-range audit baseline bundle clear-continuity clear-state complete continuity doctor eval handoff-create handoff-list handoff-show history init inspect metrics migrate-protocol next policy policy-diff policy-discover policy-status preflight prepare-completion profile-interview progress protocol-info reconcile-closure reconcile-continuity record-check record-continuity record-decision-criterion record-diagnosis record-hypothesis-disposition record-intervention record-terminal-result reflect report responsibility-set responsibility-status route rule-verify run-action run-check status task-create task-list task-lock-status task-migrate task-recover task-repair-legacy-recovery task-resume task-scope task-show task-unlock trace update validate-protocol validate-receipt validate-state verify-scope workspace-bind workspace-status)' \
4
+ '1:command:(action-authorize action-propose action-reconcile action-record action-show action-verify activate advance approval-request approval-resolve attestation-create attestation-status attestation-verify attestation-verify-range audit baseline bundle clear-continuity clear-state complete continuity doctor efficiency eval handoff-create handoff-list handoff-show history init inspect metrics migrate-protocol next policy policy-diff policy-discover policy-status preflight prepare-completion profile-interview progress protocol-info reconcile-closure reconcile-continuity record-check record-continuity record-decision-criterion record-diagnosis record-hypothesis-disposition record-intervention record-terminal-result reflect report responsibility-set responsibility-status route rule-verify run-action run-check status task-create task-list task-lock-status task-migrate task-recover task-repair-legacy-recovery task-resume task-scope task-show task-unlock trace update usage-record validate-protocol validate-receipt validate-state verify-scope workspace-bind workspace-status)' \
5
5
  '*::options:->options'
6
6
  case $words[2] in
7
7
  action-authorize) _arguments '--action[durable action ID]' '--approval[current fingerprint-bound approval]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
@@ -26,6 +26,7 @@ case $words[2] in
26
26
  complete) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--strict[require strict protocol compliance]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
27
27
  continuity) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
28
28
  doctor) _arguments '--adopt[preserve an existing adapter in the manifest]' '--fix[restore missing managed template files]' '--help[show this help]' '--json[emit doctor findings as JSON]' '--path[target project directory (default: current directory)]' '--strict[treat warnings as unhealthy]' '--version[show the installed package version]' ;;
29
+ efficiency) _arguments '--baseline[optional comparable efficiency baseline JSON]' '--help[show this help]' '--json[emit efficiency metrics as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
29
30
  eval) _arguments '--help[show this help]' '--json[emit evaluation as JSON]' '--path[target project directory (default: current directory)]' '--scenario[project-local trajectory scenario JSON]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
30
31
  handoff-create) _arguments '--help[show this help]' '--json[emit handoff as JSON]' '--note[non-authoritative handoff note]' '--path[target project directory (default: current directory)]' '--recipient[non-authoritative recipient hint]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
31
32
  handoff-list) _arguments '--help[show this help]' '--json[emit handoff list as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
@@ -35,7 +36,7 @@ case $words[2] in
35
36
  inspect) _arguments '--contract-file[current JSON contract used for freshness comparison]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
36
37
  metrics) _arguments '--help[show this help]' '--json[emit trajectory metrics as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
37
38
  migrate-protocol) _arguments '--dry-run[show migration actions without writing or deleting artifacts]' '--help[show this help]' '--json[emit structured migration result as JSON]' '--path[target project directory (default: current directory)]' '--to[target supported protocol version]' '--version[show the installed package version]' ;;
38
- next) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
39
+ next) _arguments '--compact[emit a bounded next-action projection]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
39
40
  policy) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
40
41
  policy-diff) _arguments '--after[path to after policy JSON]' '--before[path to before policy JSON]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
41
42
  policy-discover) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--version[show the installed package version]' '--write[persist discovered policy to .forgeloop/policy/discovery.json]' ;;
@@ -58,7 +59,7 @@ case $words[2] in
58
59
  report) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--strict[require strict protocol compliance]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
59
60
  responsibility-set) _arguments '--allowed-path[path prefix allowed during this pass]' '--freeze-claims[freeze the current effective claims fingerprint]' '--freeze-contract[freeze the current contract fingerprint]' '--freeze-route[freeze the current route fingerprint]' '--help[show this help]' '--json[emit responsibility result as JSON]' '--label[descriptive pass label; not an identity or role]' '--path[target project directory (default: current directory)]' '--read-only-path[path prefix that must not change during this pass]' '--required-check[current-cycle check required by this pass]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
60
61
  responsibility-status) _arguments '--help[show this help]' '--json[emit responsibility status as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
61
- route) _arguments '--behavior-change[declare behavior change]' '--executable-change[declare executable/configuration change]' '--help[show this help]' '--json[emit route result as JSON]' '--path[target project directory (default: current directory)]' '--platform[affected platform]' '--risk[task risk]' '--surface[affected surface]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' '--work[declared work type]' ;;
62
+ route) _arguments '--behavior-change[declare behavior change]' '--executable-change[declare executable/configuration change]' '--execution-profile[requested execution profile; safety floors always win]' '--help[show this help]' '--json[emit route result as JSON]' '--path[target project directory (default: current directory)]' '--platform[affected platform]' '--risk[task risk]' '--surface[affected surface]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' '--work[declared work type]' ;;
62
63
  rule-verify) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--rule[verify a specific policy rule ID]' '--version[show the installed package version]' ;;
63
64
  run-action) _arguments '--[exact command argv; shell mode is never used]' '--action[stable durable action ID]' '--approval[current fingerprint-bound approval]' '--capability[canonical action capability]' '--effect-class[durable action effect class]' '--help[show this help]' '--idempotency-key[immutable logical action idempotency key]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--required-for-completion[mark the action as required for completion]' '--requirement[bound completion requirement]' '--target[bounded external action target]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--timeout-ms[maximum command duration before termination]' '--version[show the installed package version]' ;;
64
65
  run-check) _arguments '--[exact command argv to classify, execute, and attest]' '--details[additional structured check details]' '--help[show this help]' '--id[stable check identifier]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--requirement[completion requirement covered by the check]' '--scope-ref[current verification-scope.json to bind to execution evidence]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--timeout-ms[maximum command duration before termination]' '--version[show the installed package version]' ;;
@@ -71,10 +72,11 @@ case $words[2] in
71
72
  task-repair-legacy-recovery) _arguments '--acknowledge-recovery[fresh explicit acknowledgement of the legacy boundary migration (required)]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
72
73
  task-resume) _arguments '--claim[write claim to reacquire (defaults to all released claims)]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
73
74
  task-scope) _arguments '--claim[scoped file path or directory prefix claimed for mutation]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
74
- task-show) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
75
+ task-show) _arguments '--compact[emit a bounded task-status projection]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
75
76
  task-unlock) _arguments '--force[force release of an orphaned task lock]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--stale-only[release only a lock whose lease is expired]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
76
77
  trace) _arguments '--help[show this help]' '--json[emit structured trace output as JSON (default rendering is a summary)]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
77
78
  update) _arguments '--dry-run[perform deterministic update planning and conflict detection without writing]' '--help[show this help]' '--path[target project directory (default: current directory)]' '--version[show the installed package version]' ;;
79
+ usage-record) _arguments '--cache-read-tokens[provider-reported cache-read token count]' '--cache-write-tokens[provider-reported cache-write token count]' '--cost-usd[provider-reported cost in USD; never estimated]' '--help[show this help]' '--input-tokens[provider-reported input token count]' '--json[emit usage telemetry as JSON]' '--model[model name reported by the actor]' '--output-tokens[provider-reported output token count]' '--path[target project directory (default: current directory)]' '--provider[provider name reported by the actor]' '--source[usage source; CLI fallback accepts only ACTOR_REPORTED]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--total-tokens[provider-reported total token count; never estimated]' '--version[show the installed package version]' ;;
78
80
  validate-protocol) _arguments '--continuity-file[optional execution-continuity JSON relative to target]' '--contract-file[current JSON contract used for freshness comparison]' '--delegated-result-file[delegated result JSON file]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--receipt-file[execution-receipt JSON relative to target]' '--route-file[routing-result JSON relative to target]' '--state-file[work-state JSON relative to target]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--task-brief-file[task brief JSON file]' '--version[show the installed package version]' ;;
79
81
  validate-receipt) _arguments '--file[receipt file relative to target (overrides task-based receipt resolution)]' '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
80
82
  validate-state) _arguments '--help[show this help]' '--json[emit structured output as JSON]' '--path[target project directory (default: current directory)]' '--task[task ID to operate on (when omitted, resolved from context or single active task)]' '--version[show the installed package version]' ;;
@@ -28,6 +28,7 @@ _forgeloop() {
28
28
  complete) command="complete" ;;
29
29
  continuity) command="continuity" ;;
30
30
  doctor) command="doctor" ;;
31
+ efficiency) command="efficiency" ;;
31
32
  eval) command="eval" ;;
32
33
  handoff-create) command="handoff-create" ;;
33
34
  handoff-list) command="handoff-list" ;;
@@ -77,6 +78,7 @@ _forgeloop() {
77
78
  task-unlock) command="task-unlock" ;;
78
79
  trace) command="trace" ;;
79
80
  update) command="update" ;;
81
+ usage-record) command="usage-record" ;;
80
82
  validate-protocol) command="validate-protocol" ;;
81
83
  validate-receipt) command="validate-receipt" ;;
82
84
  validate-state) command="validate-state" ;;
@@ -86,7 +88,7 @@ _forgeloop() {
86
88
  esac
87
89
  done
88
90
  if [[ -z "\${command}" && "\${cur}" != -* ]]; then
89
- COMPREPLY=( $(compgen -W 'action-authorize action-propose action-reconcile action-record action-show action-verify activate advance approval-request approval-resolve attestation-create attestation-status attestation-verify attestation-verify-range audit baseline bundle clear-continuity clear-state complete continuity doctor eval handoff-create handoff-list handoff-show history init inspect metrics migrate-protocol next policy policy-diff policy-discover policy-status preflight prepare-completion profile-interview progress protocol-info reconcile-closure reconcile-continuity record-check record-continuity record-decision-criterion record-diagnosis record-hypothesis-disposition record-intervention record-terminal-result reflect report responsibility-set responsibility-status route rule-verify run-action run-check status task-create task-list task-lock-status task-migrate task-recover task-repair-legacy-recovery task-resume task-scope task-show task-unlock trace update validate-protocol validate-receipt validate-state verify-scope workspace-bind workspace-status' -- "$cur") )
91
+ COMPREPLY=( $(compgen -W 'action-authorize action-propose action-reconcile action-record action-show action-verify activate advance approval-request approval-resolve attestation-create attestation-status attestation-verify attestation-verify-range audit baseline bundle clear-continuity clear-state complete continuity doctor efficiency eval handoff-create handoff-list handoff-show history init inspect metrics migrate-protocol next policy policy-diff policy-discover policy-status preflight prepare-completion profile-interview progress protocol-info reconcile-closure reconcile-continuity record-check record-continuity record-decision-criterion record-diagnosis record-hypothesis-disposition record-intervention record-terminal-result reflect report responsibility-set responsibility-status route rule-verify run-action run-check status task-create task-list task-lock-status task-migrate task-recover task-repair-legacy-recovery task-resume task-scope task-show task-unlock trace update usage-record validate-protocol validate-receipt validate-state verify-scope workspace-bind workspace-status' -- "$cur") )
90
92
  return
91
93
  fi
92
94
  case "\${command}" in
@@ -112,6 +114,7 @@ _forgeloop() {
112
114
  complete) COMPREPLY=( $(compgen -W '--help --json --path --strict --task --version' -- "$cur") );;
113
115
  continuity) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
114
116
  doctor) COMPREPLY=( $(compgen -W '--adopt --fix --help --json --path --strict --version' -- "$cur") );;
117
+ efficiency) COMPREPLY=( $(compgen -W '--baseline --help --json --path --task --version' -- "$cur") );;
115
118
  eval) COMPREPLY=( $(compgen -W '--help --json --path --scenario --task --version' -- "$cur") );;
116
119
  handoff-create) COMPREPLY=( $(compgen -W '--help --json --note --path --recipient --task --version' -- "$cur") );;
117
120
  handoff-list) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
@@ -121,7 +124,7 @@ _forgeloop() {
121
124
  inspect) COMPREPLY=( $(compgen -W '--contract-file --help --json --path --task --version' -- "$cur") );;
122
125
  metrics) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
123
126
  migrate-protocol) COMPREPLY=( $(compgen -W '--dry-run --help --json --path --to --version' -- "$cur") );;
124
- next) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
127
+ next) COMPREPLY=( $(compgen -W '--compact --help --json --path --task --version' -- "$cur") );;
125
128
  policy) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
126
129
  policy-diff) COMPREPLY=( $(compgen -W '--after --before --help --json --path --task --version' -- "$cur") );;
127
130
  policy-discover) COMPREPLY=( $(compgen -W '--help --json --path --version --write' -- "$cur") );;
@@ -144,7 +147,7 @@ _forgeloop() {
144
147
  report) COMPREPLY=( $(compgen -W '--help --json --path --strict --task --version' -- "$cur") );;
145
148
  responsibility-set) COMPREPLY=( $(compgen -W '--allowed-path --freeze-claims --freeze-contract --freeze-route --help --json --label --path --read-only-path --required-check --task --version' -- "$cur") );;
146
149
  responsibility-status) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
147
- route) COMPREPLY=( $(compgen -W '--behavior-change --executable-change --help --json --path --platform --risk --surface --task --version --work' -- "$cur") );;
150
+ route) COMPREPLY=( $(compgen -W '--behavior-change --executable-change --execution-profile --help --json --path --platform --risk --surface --task --version --work' -- "$cur") );;
148
151
  rule-verify) COMPREPLY=( $(compgen -W '--help --json --path --rule --version' -- "$cur") );;
149
152
  run-action) COMPREPLY=( $(compgen -W '-- --action --approval --capability --effect-class --help --idempotency-key --json --path --required-for-completion --requirement --target --task --timeout-ms --version' -- "$cur") );;
150
153
  run-check) COMPREPLY=( $(compgen -W '-- --details --help --id --json --path --requirement --scope-ref --task --timeout-ms --version' -- "$cur") );;
@@ -157,10 +160,11 @@ _forgeloop() {
157
160
  task-repair-legacy-recovery) COMPREPLY=( $(compgen -W '--acknowledge-recovery --help --json --path --task --version' -- "$cur") );;
158
161
  task-resume) COMPREPLY=( $(compgen -W '--claim --help --json --path --task --version' -- "$cur") );;
159
162
  task-scope) COMPREPLY=( $(compgen -W '--claim --help --json --path --task --version' -- "$cur") );;
160
- task-show) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
163
+ task-show) COMPREPLY=( $(compgen -W '--compact --help --json --path --task --version' -- "$cur") );;
161
164
  task-unlock) COMPREPLY=( $(compgen -W '--force --help --json --path --stale-only --task --version' -- "$cur") );;
162
165
  trace) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;
163
166
  update) COMPREPLY=( $(compgen -W '--dry-run --help --path --version' -- "$cur") );;
167
+ usage-record) COMPREPLY=( $(compgen -W '--cache-read-tokens --cache-write-tokens --cost-usd --help --input-tokens --json --model --output-tokens --path --provider --source --task --total-tokens --version' -- "$cur") );;
164
168
  validate-protocol) COMPREPLY=( $(compgen -W '--continuity-file --contract-file --delegated-result-file --help --json --path --receipt-file --route-file --state-file --task --task-brief-file --version' -- "$cur") );;
165
169
  validate-receipt) COMPREPLY=( $(compgen -W '--file --help --json --path --task --version' -- "$cur") );;
166
170
  validate-state) COMPREPLY=( $(compgen -W '--help --json --path --task --version' -- "$cur") );;