@cassiomc1/forgeloop 1.13.0 → 1.14.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 (211) hide show
  1. package/AGENT_COMPATIBILITY.md +8 -0
  2. package/DOCS_INDEX.md +35 -3
  3. package/ENG/nodejs-backend-development-eng.md +2 -2
  4. package/ENG/sec-code-eng.md +7 -7
  5. package/EXECUTION_STATE.md +12 -0
  6. package/LOOP_ENGINEERING.md +28 -2
  7. package/ORCHESTRATOR_INTEGRATION.md +9 -5
  8. package/PROTOCOL_INTEGRATION.md +55 -2
  9. package/README.md +40 -25
  10. package/TERMINOLOGY.md +2 -0
  11. package/THREAT_MODEL.md +140 -1
  12. package/completions/_forgeloop +19 -1
  13. package/completions/forgeloop.bash +37 -1
  14. package/completions/forgeloop.fish +123 -1
  15. package/docs/ADVISORY_CONTEXT.md +25 -0
  16. package/docs/AGENT_BROWSER_ADAPTER.md +81 -0
  17. package/docs/AGENT_BROWSER_VERIFICATION.md +6 -0
  18. package/docs/AGENT_PROTOCOL_SUMMARY.md +27 -2
  19. package/docs/AGENT_SKILL.md +66 -0
  20. package/docs/ARTIFACT_REFERENCE.md +123 -0
  21. package/docs/AUDIT_UX.md +46 -0
  22. package/docs/BROWSER_VERIFICATION.md +136 -0
  23. package/docs/CLI_REFERENCE.md +366 -6
  24. package/docs/CODE_ATTESTATION.md +2 -2
  25. package/docs/DOCUMENTATION_GUIDE.md +32 -11
  26. package/docs/JEV_BENCHMARKS.md +31 -0
  27. package/docs/MODEL_ROUTING.md +37 -0
  28. package/docs/OPENSRC_ADAPTER.md +241 -0
  29. package/docs/PACKAGE_CONTENTS.md +35 -8
  30. package/docs/PROVIDERS.md +126 -0
  31. package/docs/PROVIDER_ARCHITECTURE.md +199 -0
  32. package/docs/RECIPES.md +9 -0
  33. package/docs/RELEASE_CHECKLIST.md +38 -5
  34. package/docs/SECURITY_REVIEW.md +71 -0
  35. package/docs/SEMANTIC_DECISION_PLANE.md +71 -0
  36. package/docs/TEST_INTELLIGENCE.md +29 -0
  37. package/docs/TEST_PRUNING.md +14 -0
  38. package/docs/TROUBLESHOOTING.md +198 -1
  39. package/docs/UNIVERSAL_INTEGRATION.md +31 -0
  40. package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +2 -2
  41. package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +5 -5
  42. package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +1 -1
  43. package/docs/assets/diagrams/forgeloop-engineering-flow.html +39 -26
  44. package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
  45. package/docs/assets/diagrams/forgeloop-engineering-flow.svg +26 -26
  46. package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +2 -1
  47. package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +5 -5
  48. package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +1 -1
  49. package/docs/diagrams/README.md +13 -9
  50. package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +1 -1
  51. package/docs/diagrams/forgeloop-engineering-flow.workflow.json +24 -19
  52. package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +1 -0
  53. package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +4 -4
  54. package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +4 -4
  55. package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +4 -4
  56. package/docs/documentation-manifest.json +750 -5
  57. package/docs/protocol-requirements.json +24 -0
  58. package/package.json +30 -3
  59. package/schemas/config.schema.json +14 -0
  60. package/schemas/context-plan.schema.json +18 -0
  61. package/schemas/semantic-decision.schema.json +46 -0
  62. package/schemas/test-utility.schema.json +44 -0
  63. package/scripts/CI_VALIDATORS.md +6 -6
  64. package/scripts/benchmark-jev.mjs +5 -0
  65. package/scripts/benchmark-test-intelligence.mjs +4 -0
  66. package/scripts/generate-agent-protocol-summary.mjs +4 -1
  67. package/scripts/generate-forgeloop-skill.mjs +133 -0
  68. package/scripts/jev-smoke.mjs +19 -0
  69. package/skills/forgeloop/README.md +9 -0
  70. package/skills/forgeloop/SKILL.md +77 -0
  71. package/skills/forgeloop/references/lifecycle.md +9 -0
  72. package/skills/forgeloop/references/recovery.md +7 -0
  73. package/skills/forgeloop/references/verification.md +7 -0
  74. package/src/adapters/agent-browser/assertions.js +47 -0
  75. package/src/adapters/agent-browser/commands.js +54 -0
  76. package/src/adapters/agent-browser/index.js +3 -0
  77. package/src/adapters/agent-browser/locator.js +40 -0
  78. package/src/adapters/agent-browser/process.js +215 -0
  79. package/src/adapters/agent-browser/provider.js +313 -0
  80. package/src/adapters/emulated-services/constants.js +24 -0
  81. package/src/adapters/emulated-services/index.js +7 -0
  82. package/src/adapters/emulated-services/process.js +162 -0
  83. package/src/adapters/emulated-services/provider.js +282 -0
  84. package/src/adapters/opensrc/normalize.js +90 -0
  85. package/src/adapters/opensrc/process.js +248 -0
  86. package/src/adapters/opensrc/provider.js +338 -0
  87. package/src/adapters/opensrc/search.js +264 -0
  88. package/src/adapters/typesafe/client.js +28 -0
  89. package/src/adapters/typesafe/engine.js +63 -0
  90. package/src/adapters/typesafe/normalize.js +41 -0
  91. package/src/cli.js +108 -0
  92. package/src/commands/checkpoint-revalidate.js +176 -0
  93. package/src/commands/context-plan.js +38 -0
  94. package/src/commands/contract-create.js +264 -0
  95. package/src/commands/contract-revise.js +236 -0
  96. package/src/commands/decision-show.js +14 -0
  97. package/src/commands/decision-status.js +22 -0
  98. package/src/commands/discover.js +41 -0
  99. package/src/commands/doctor.js +15 -0
  100. package/src/commands/gate-record.js +205 -0
  101. package/src/commands/gate-revalidate.js +137 -0
  102. package/src/commands/model-route.js +32 -0
  103. package/src/commands/route.js +146 -18
  104. package/src/commands/semantic-plan.js +17 -0
  105. package/src/commands/task-abandon.js +224 -0
  106. package/src/commands/task-migrate-contract-bootstrap-repair.js +288 -0
  107. package/src/commands/task-repair-contract-bootstrap.js +263 -0
  108. package/src/commands/test-inventory.js +5 -0
  109. package/src/commands/test-prune-plan.js +5 -0
  110. package/src/commands/test-prune-probe.js +5 -0
  111. package/src/commands/test-utility.js +5 -0
  112. package/src/commands/validate-protocol.js +10 -1
  113. package/src/core/artifact-registry.js +24 -0
  114. package/src/core/audit-ux.js +514 -0
  115. package/src/core/browser-verification/constants.js +149 -0
  116. package/src/core/browser-verification/normalize.js +254 -0
  117. package/src/core/browser-verification/provider.js +519 -0
  118. package/src/core/browser-verification/service.js +115 -0
  119. package/src/core/checkpoint-revalidation.js +319 -0
  120. package/src/core/cli-command-definitions.js +241 -0
  121. package/src/core/command-executors.js +110 -0
  122. package/src/core/command-input.js +115 -43
  123. package/src/core/completion-artifacts.js +14 -5
  124. package/src/core/completion.js +4 -6
  125. package/src/core/config.js +3 -0
  126. package/src/core/context-compiler/budget.js +9 -0
  127. package/src/core/context-compiler/candidates.js +39 -0
  128. package/src/core/context-compiler/compiler.js +63 -0
  129. package/src/core/context-compiler/fingerprint.js +11 -0
  130. package/src/core/context-compiler/policy.js +13 -0
  131. package/src/core/context-compiler/result.js +23 -0
  132. package/src/core/contract-bootstrap-recovery.js +655 -0
  133. package/src/core/contract-revision.js +210 -0
  134. package/src/core/decision/artifact.js +69 -0
  135. package/src/core/decision/benchmarks.js +103 -0
  136. package/src/core/decision/cache.js +27 -0
  137. package/src/core/decision/constants.js +58 -0
  138. package/src/core/decision/cutover.js +34 -0
  139. package/src/core/decision/engine.js +22 -0
  140. package/src/core/decision/errors.js +68 -0
  141. package/src/core/decision/events.js +101 -0
  142. package/src/core/decision/freshness.js +19 -0
  143. package/src/core/decision/normalizers/index.js +115 -0
  144. package/src/core/decision/policy.js +18 -0
  145. package/src/core/decision/projection.js +16 -0
  146. package/src/core/decision/question-registry.js +201 -0
  147. package/src/core/decision/request.js +26 -0
  148. package/src/core/decision/resolver.js +130 -0
  149. package/src/core/decision/result.js +58 -0
  150. package/src/core/decision/service.js +156 -0
  151. package/src/core/decision/state-builder.js +65 -0
  152. package/src/core/decision/task-bindings.js +30 -0
  153. package/src/core/decision/test-provider.js +32 -0
  154. package/src/core/decision/thresholds.js +15 -0
  155. package/src/core/error-codes.js +278 -0
  156. package/src/core/events.js +226 -57
  157. package/src/core/evidence-readiness.js +9 -0
  158. package/src/core/execution-prerequisites.js +14 -0
  159. package/src/core/execution-profile.js +63 -38
  160. package/src/core/gate-provenance.js +124 -0
  161. package/src/core/integration-invocation-policy.js +27 -4
  162. package/src/core/integration-resources.js +86 -61
  163. package/src/core/model-router/constants.js +10 -0
  164. package/src/core/model-router/policy.js +103 -0
  165. package/src/core/model-router/router.js +37 -0
  166. package/src/core/next-action-model.js +58 -0
  167. package/src/core/next-action-phases.js +130 -42
  168. package/src/core/next-action-refresh.js +43 -9
  169. package/src/core/next-action-review-phase.js +7 -2
  170. package/src/core/next-action.js +35 -7
  171. package/src/core/phase.js +128 -10
  172. package/src/core/preflight-consistency.js +23 -9
  173. package/src/core/preflight-loaders.js +37 -5
  174. package/src/core/protocol-info.js +65 -0
  175. package/src/core/protocol.js +20 -0
  176. package/src/core/reconcile-closure.js +128 -52
  177. package/src/core/recovery-history.js +1 -0
  178. package/src/core/resumability.js +154 -44
  179. package/src/core/route-artifact.js +15 -1
  180. package/src/core/router.js +67 -1
  181. package/src/core/runtime-context.js +118 -61
  182. package/src/core/schema-validation.js +3 -0
  183. package/src/core/security-review/constants.js +64 -0
  184. package/src/core/security-review/normalize.js +245 -0
  185. package/src/core/security-review/provider.js +204 -0
  186. package/src/core/security-review/service.js +134 -0
  187. package/src/core/semantic-planning/constants.js +19 -0
  188. package/src/core/semantic-planning/projection.js +94 -0
  189. package/src/core/semantic-planning/service.js +15 -0
  190. package/src/core/sources.js +37 -0
  191. package/src/core/task-claim-state.js +201 -1
  192. package/src/core/task-conflict-inspection.js +31 -5
  193. package/src/core/task-paths.js +13 -0
  194. package/src/core/task-recovery.js +1 -0
  195. package/src/core/templates.js +3 -0
  196. package/src/core/test-intelligence/benchmarks.js +68 -0
  197. package/src/core/test-intelligence/inventory.js +73 -0
  198. package/src/core/test-intelligence/prune.js +90 -0
  199. package/src/core/test-intelligence/semantic-state.js +15 -0
  200. package/src/core/test-intelligence/service.js +40 -0
  201. package/src/core/test-intelligence/utility.js +50 -0
  202. package/src/core/trace.js +11 -7
  203. package/src/core/transaction.js +1 -0
  204. package/src/integration.d.ts +492 -0
  205. package/src/integration.js +54 -0
  206. package/src/providers/README.md +47 -0
  207. package/src/providers/capabilities.js +46 -0
  208. package/src/providers/errors.js +15 -0
  209. package/src/providers/index.js +29 -0
  210. package/src/providers/json-snapshot.js +105 -0
  211. package/src/providers/registry.js +152 -0
@@ -1,5 +1,5 @@
1
1
  # Generated by scripts/generate-shell-completions.mjs. Do not edit.
2
- complete -c forgeloop -f -n '__fish_use_subcommand' -a '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-accept handoff-create handoff-list handoff-show history index-rebuild index-setup index-start index-status index-stop init inspect metrics migrate-protocol next policy policy-diff policy-discover policy-status preflight prepare-completion profile-interview progress protocol-info quality-baseline quality-status quality-verify 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 search 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'
2
+ complete -c forgeloop -f -n '__fish_use_subcommand' -a '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 checkpoint-revalidate clear-continuity clear-state complete context-plan continuity contract-create contract-revise decision-show decision-status discover doctor efficiency eval gate-record gate-revalidate handoff-accept handoff-create handoff-list handoff-show history index-rebuild index-setup index-start index-status index-stop init inspect metrics migrate-protocol model-route next policy policy-diff policy-discover policy-status preflight prepare-completion profile-interview progress protocol-info quality-baseline quality-status quality-verify 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 search semantic-plan status task-abandon task-create task-list task-lock-status task-migrate task-migrate-contract-bootstrap-repair task-recover task-repair-contract-bootstrap task-repair-legacy-recovery task-resume task-scope task-show task-unlock test-inventory test-prune-plan test-prune-probe test-utility trace update usage-record validate-protocol validate-receipt validate-state verify-scope workspace-bind workspace-status'
3
3
  complete -c forgeloop -f -n '__fish_seen_subcommand_from action-authorize' -l 'action' -d 'durable action ID'
4
4
  complete -c forgeloop -f -n '__fish_seen_subcommand_from action-authorize' -l 'approval' -d 'current fingerprint-bound approval'
5
5
  complete -c forgeloop -f -n '__fish_seen_subcommand_from action-authorize' -l 'help' -d 'show this help'
@@ -133,6 +133,11 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from bundle' -l 'json' -d 'e
133
133
  complete -c forgeloop -f -n '__fish_seen_subcommand_from bundle' -l 'path' -d 'target project directory (default: current directory)'
134
134
  complete -c forgeloop -f -n '__fish_seen_subcommand_from bundle' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
135
135
  complete -c forgeloop -f -n '__fish_seen_subcommand_from bundle' -l 'version' -d 'show the installed package version'
136
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from checkpoint-revalidate' -l 'help' -d 'show this help'
137
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from checkpoint-revalidate' -l 'json' -d 'emit structured revalidation output as JSON'
138
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from checkpoint-revalidate' -l 'path' -d 'target project directory (default: current directory)'
139
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from checkpoint-revalidate' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
140
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from checkpoint-revalidate' -l 'version' -d 'show the installed package version'
136
141
  complete -c forgeloop -f -n '__fish_seen_subcommand_from clear-continuity' -l 'help' -d 'show this help'
137
142
  complete -c forgeloop -f -n '__fish_seen_subcommand_from clear-continuity' -l 'json' -d 'emit structured output as JSON'
138
143
  complete -c forgeloop -f -n '__fish_seen_subcommand_from clear-continuity' -l 'path' -d 'target project directory (default: current directory)'
@@ -149,11 +154,48 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from complete' -l 'path' -d
149
154
  complete -c forgeloop -f -n '__fish_seen_subcommand_from complete' -l 'strict' -d 'require strict protocol compliance'
150
155
  complete -c forgeloop -f -n '__fish_seen_subcommand_from complete' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
151
156
  complete -c forgeloop -f -n '__fish_seen_subcommand_from complete' -l 'version' -d 'show the installed package version'
157
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from context-plan' -l 'decision' -d 'persisted Jev decision artifact ID'
158
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from context-plan' -l 'help' -d 'show this help'
159
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from context-plan' -l 'json' -d 'emit the bounded context plan as JSON'
160
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from context-plan' -l 'path' -d 'target project directory (default: current directory)'
161
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from context-plan' -l 'profile' -d 'bounded context budget profile'
162
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from context-plan' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
163
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from context-plan' -l 'version' -d 'show the installed package version'
152
164
  complete -c forgeloop -f -n '__fish_seen_subcommand_from continuity' -l 'help' -d 'show this help'
153
165
  complete -c forgeloop -f -n '__fish_seen_subcommand_from continuity' -l 'json' -d 'emit structured output as JSON'
154
166
  complete -c forgeloop -f -n '__fish_seen_subcommand_from continuity' -l 'path' -d 'target project directory (default: current directory)'
155
167
  complete -c forgeloop -f -n '__fish_seen_subcommand_from continuity' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
156
168
  complete -c forgeloop -f -n '__fish_seen_subcommand_from continuity' -l 'version' -d 'show the installed package version'
169
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-create' -l 'contract-file' -d 'validated JSON contract relative to the target'
170
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-create' -l 'help' -d 'show this help'
171
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-create' -l 'json' -d 'emit structured contract output as JSON'
172
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-create' -l 'path' -d 'target project directory (default: current directory)'
173
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-create' -l 'preset' -d 'bounded contract preset: documentation, bug, feature, or release'
174
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-create' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
175
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-create' -l 'version' -d 'show the installed package version'
176
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-revise' -l 'contract-file' -d 'validated replacement JSON contract relative to the target'
177
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-revise' -l 'help' -d 'show this help'
178
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-revise' -l 'json' -d 'emit structured contract revision output as JSON'
179
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-revise' -l 'path' -d 'target project directory (default: current directory)'
180
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-revise' -l 'preset' -d 'bounded replacement contract preset: documentation, bug, feature, or release'
181
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-revise' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
182
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from contract-revise' -l 'version' -d 'show the installed package version'
183
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-show' -l 'decision' -d 'decision artifact ID'
184
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-show' -l 'help' -d 'show this help'
185
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-show' -l 'json' -d 'emit the decision artifact as JSON'
186
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-show' -l 'path' -d 'target project directory (default: current directory)'
187
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-show' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
188
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-show' -l 'version' -d 'show the installed package version'
189
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-status' -l 'health' -d 'perform a bounded live Jev health check when credentials are configured'
190
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-status' -l 'help' -d 'show this help'
191
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-status' -l 'json' -d 'emit decision-plane status as JSON'
192
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-status' -l 'path' -d 'target project directory (default: current directory)'
193
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from decision-status' -l 'version' -d 'show the installed package version'
194
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from discover' -l 'help' -d 'show this help'
195
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from discover' -l 'json' -d 'emit structured discovery output as JSON'
196
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from discover' -l 'path' -d 'target project directory (default: current directory)'
197
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from discover' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
198
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from discover' -l 'version' -d 'show the installed package version'
157
199
  complete -c forgeloop -f -n '__fish_seen_subcommand_from doctor' -l 'adopt' -d 'preserve an existing adapter in the manifest'
158
200
  complete -c forgeloop -f -n '__fish_seen_subcommand_from doctor' -l 'fix' -d 'restore missing managed template files'
159
201
  complete -c forgeloop -f -n '__fish_seen_subcommand_from doctor' -l 'help' -d 'show this help'
@@ -173,6 +215,25 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from eval' -l 'path' -d 'tar
173
215
  complete -c forgeloop -f -n '__fish_seen_subcommand_from eval' -l 'scenario' -d 'project-local trajectory scenario JSON'
174
216
  complete -c forgeloop -f -n '__fish_seen_subcommand_from eval' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
175
217
  complete -c forgeloop -f -n '__fish_seen_subcommand_from eval' -l 'version' -d 'show the installed package version'
218
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'artifact' -d 'project-relative evidence artifact'
219
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'assumption' -d 'approved local assumption'
220
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'decision' -d 'caller-recorded gate decision'
221
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'evidence-file' -d 'bounded local descriptive evidence JSON'
222
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'gate' -d 'required gate name'
223
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'help' -d 'show this help'
224
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'json' -d 'emit structured gate output as JSON'
225
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'path' -d 'target project directory (default: current directory)'
226
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'status' -d 'satisfied, unverified, or blocked'
227
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
228
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'unknown' -d 'known unresolved item'
229
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-record' -l 'version' -d 'show the installed package version'
230
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-revalidate' -l 'acknowledge-stale' -d 'explicitly acknowledge refresh of stale gate artifacts inside active task claims'
231
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-revalidate' -l 'gate' -d 'satisfied gate to refresh after safe artifact drift'
232
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-revalidate' -l 'help' -d 'show this help'
233
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-revalidate' -l 'json' -d 'emit structured gate revalidation output as JSON'
234
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-revalidate' -l 'path' -d 'target project directory (default: current directory)'
235
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-revalidate' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
236
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from gate-revalidate' -l 'version' -d 'show the installed package version'
176
237
  complete -c forgeloop -f -n '__fish_seen_subcommand_from handoff-accept' -l 'consumer-id' -d 'consumer identifier accepting the handoff'
177
238
  complete -c forgeloop -f -n '__fish_seen_subcommand_from handoff-accept' -l 'handoff' -d 'handoff identifier'
178
239
  complete -c forgeloop -f -n '__fish_seen_subcommand_from handoff-accept' -l 'harness' -d 'optional harness accepting the handoff'
@@ -257,6 +318,21 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from migrate-protocol' -l 'j
257
318
  complete -c forgeloop -f -n '__fish_seen_subcommand_from migrate-protocol' -l 'path' -d 'target project directory (default: current directory)'
258
319
  complete -c forgeloop -f -n '__fish_seen_subcommand_from migrate-protocol' -l 'to' -d 'target supported protocol version'
259
320
  complete -c forgeloop -f -n '__fish_seen_subcommand_from migrate-protocol' -l 'version' -d 'show the installed package version'
321
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'ambiguous' -d 'declare unresolved ambiguity'
322
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'architecture-change' -d 'declare an architectural change'
323
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'behavior-change' -d 'declare behavior change'
324
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'decision' -d 'persisted Jev decision artifact ID'
325
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'executable-change' -d 'declare executable/configuration change'
326
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'generation-required' -d 'declare that generation is required'
327
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'help' -d 'show this help'
328
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'json' -d 'emit model-route projection as JSON'
329
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'path' -d 'target project directory (default: current directory)'
330
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'platform' -d 'affected platform'
331
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'risk' -d 'task risk'
332
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'surface' -d 'affected surface'
333
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
334
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'version' -d 'show the installed package version'
335
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from model-route' -l 'work' -d 'declared work type'
260
336
  complete -c forgeloop -f -n '__fish_seen_subcommand_from next' -l 'compact' -d 'emit a bounded next-action projection'
261
337
  complete -c forgeloop -f -n '__fish_seen_subcommand_from next' -l 'explain' -d 'include bounded read-only blocker and recovery explanation'
262
338
  complete -c forgeloop -f -n '__fish_seen_subcommand_from next' -l 'help' -d 'show this help'
@@ -502,12 +578,26 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from search' -l 'stats' -d '
502
578
  complete -c forgeloop -f -n '__fish_seen_subcommand_from search' -l 'type' -d 'include files of a tgrep type'
503
579
  complete -c forgeloop -f -n '__fish_seen_subcommand_from search' -l 'version' -d 'show the installed package version'
504
580
  complete -c forgeloop -f -n '__fish_seen_subcommand_from search' -l 'word-regexp' -d 'match whole words only'
581
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'decision' -d 'persisted Jev decision artifact ID'
582
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'help' -d 'show this help'
583
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'input' -d 'bounded failure, diagnosis, or review context'
584
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'json' -d 'emit semantic plan projection as JSON'
585
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'kind' -d 'bounded semantic planning projection'
586
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'path' -d 'target project directory (default: current directory)'
587
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
588
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from semantic-plan' -l 'version' -d 'show the installed package version'
505
589
  complete -c forgeloop -f -n '__fish_seen_subcommand_from status' -l 'contract-file' -d 'current JSON contract used for freshness comparison'
506
590
  complete -c forgeloop -f -n '__fish_seen_subcommand_from status' -l 'help' -d 'show this help'
507
591
  complete -c forgeloop -f -n '__fish_seen_subcommand_from status' -l 'json' -d 'emit structured output as JSON'
508
592
  complete -c forgeloop -f -n '__fish_seen_subcommand_from status' -l 'path' -d 'target project directory (default: current directory)'
509
593
  complete -c forgeloop -f -n '__fish_seen_subcommand_from status' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
510
594
  complete -c forgeloop -f -n '__fish_seen_subcommand_from status' -l 'version' -d 'show the installed package version'
595
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-abandon' -l 'acknowledge-abandonment' -d 'explicitly acknowledge abandonment of an active task (required; not completion authority)'
596
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-abandon' -l 'help' -d 'show this help'
597
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-abandon' -l 'json' -d 'emit structured abandonment output as JSON'
598
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-abandon' -l 'path' -d 'target project directory (default: current directory)'
599
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-abandon' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
600
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-abandon' -l 'version' -d 'show the installed package version'
511
601
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-create' -l 'claim' -d 'scoped file path or directory prefix claimed for mutation'
512
602
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-create' -l 'contract-file' -d 'path to initial contract file'
513
603
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-create' -l 'help' -d 'show this help'
@@ -535,6 +625,12 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate' -l 'help'
535
625
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate' -l 'json' -d 'emit structured output as JSON'
536
626
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate' -l 'path' -d 'target project directory (default: current directory)'
537
627
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate' -l 'version' -d 'show the installed package version'
628
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate-contract-bootstrap-repair' -l 'acknowledge-migration' -d 'fresh explicit caller acknowledgement of the exact legacy marker migration (required)'
629
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate-contract-bootstrap-repair' -l 'help' -d 'show this help'
630
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate-contract-bootstrap-repair' -l 'json' -d 'emit structured migration output as JSON'
631
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate-contract-bootstrap-repair' -l 'path' -d 'target project directory (default: current directory)'
632
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate-contract-bootstrap-repair' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
633
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-migrate-contract-bootstrap-repair' -l 'version' -d 'show the installed package version'
538
634
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-recover' -l 'acknowledge-recovery' -d 'acknowledge release of claims for a STALE or ABANDONED task (required; not host attestation)'
539
635
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-recover' -l 'help' -d 'show this help'
540
636
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-recover' -l 'json' -d 'emit structured output as JSON'
@@ -542,6 +638,12 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-recover' -l 'opera
542
638
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-recover' -l 'path' -d 'target project directory (default: current directory)'
543
639
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-recover' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
544
640
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-recover' -l 'version' -d 'show the installed package version'
641
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-contract-bootstrap' -l 'acknowledge-repair' -d 'explicit caller acknowledgement of the exact append-only repair (required)'
642
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-contract-bootstrap' -l 'help' -d 'show this help'
643
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-contract-bootstrap' -l 'json' -d 'emit structured repair output as JSON'
644
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-contract-bootstrap' -l 'path' -d 'target project directory (default: current directory)'
645
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-contract-bootstrap' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
646
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-contract-bootstrap' -l 'version' -d 'show the installed package version'
545
647
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-legacy-recovery' -l 'acknowledge-recovery' -d 'fresh explicit acknowledgement of the legacy boundary migration (required)'
546
648
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-legacy-recovery' -l 'help' -d 'show this help'
547
649
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-repair-legacy-recovery' -l 'json' -d 'emit structured output as JSON'
@@ -573,6 +675,26 @@ complete -c forgeloop -f -n '__fish_seen_subcommand_from task-unlock' -l 'path'
573
675
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-unlock' -l 'stale-only' -d 'release only a lock whose lease is expired'
574
676
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-unlock' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
575
677
  complete -c forgeloop -f -n '__fish_seen_subcommand_from task-unlock' -l 'version' -d 'show the installed package version'
678
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-inventory' -l 'help' -d 'show this help'
679
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-inventory' -l 'json' -d 'emit deterministic test inventory as JSON'
680
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-inventory' -l 'path' -d 'target project directory (default: current directory)'
681
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-inventory' -l 'version' -d 'show the installed package version'
682
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-plan' -l 'help' -d 'show this help'
683
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-plan' -l 'json' -d 'emit test prune plan as JSON'
684
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-plan' -l 'path' -d 'target project directory (default: current directory)'
685
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-plan' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
686
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-plan' -l 'version' -d 'show the installed package version'
687
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-probe' -l 'help' -d 'show this help'
688
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-probe' -l 'json' -d 'emit test prune probe as JSON'
689
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-probe' -l 'path' -d 'target project directory (default: current directory)'
690
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-probe' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
691
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-probe' -l 'test' -d 'stable test ID to probe in isolation'
692
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-prune-probe' -l 'version' -d 'show the installed package version'
693
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-utility' -l 'help' -d 'show this help'
694
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-utility' -l 'json' -d 'emit test utility analysis as JSON'
695
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-utility' -l 'path' -d 'target project directory (default: current directory)'
696
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-utility' -l 'task' -d 'task ID to operate on (when omitted, resolved from context or single active task)'
697
+ complete -c forgeloop -f -n '__fish_seen_subcommand_from test-utility' -l 'version' -d 'show the installed package version'
576
698
  complete -c forgeloop -f -n '__fish_seen_subcommand_from trace' -l 'help' -d 'show this help'
577
699
  complete -c forgeloop -f -n '__fish_seen_subcommand_from trace' -l 'json' -d 'emit structured trace output as JSON (default rendering is a summary)'
578
700
  complete -c forgeloop -f -n '__fish_seen_subcommand_from trace' -l 'path' -d 'target project directory (default: current directory)'
@@ -196,3 +196,28 @@ opt-in real-binary smoke test, and the retrieval benchmark. A real binary and
196
196
  its exact version must be qualified by the host; ForgeLoop does not install or
197
197
  discover Ripwire and does not treat an unavailable smoke test as proof of
198
198
  interoperability.
199
+
200
+ ## OpenSrc adapter
201
+
202
+ ForgeLoop includes an optional host-injected adapter for
203
+ [OpenSrc](https://github.com/vercel-labs/opensrc) external package and
204
+ repository source context. The adapter is deliberately outside the default
205
+ runtime: the host must provide an absolute executable path, an exact expected
206
+ version, a dedicated absolute cache root outside the project, and an explicit
207
+ source allowlist, then register the returned provider under the `opensrc` key
208
+ and invoke `recallAdvisoryContext` explicitly. Creating the provider performs
209
+ no discovery, network access, process start, cache write, or lifecycle write.
210
+
211
+ The adapter qualifies `<absolute-opensrc> --version` before every recall,
212
+ resolves each configured source once through `opensrc path <source> --cwd
213
+ <projectRoot>` with `shell: false` and `OPENSRC_HOME` set to the dedicated
214
+ cache root, canonicalizes every returned path inside that cache, and searches
215
+ resolved sources locally with bounded deterministic Node.js traversal (no
216
+ `rg`, embeddings, or network search). It never exposes absolute cache paths,
217
+ raw stderr, environment, or credentials, and source text stays inert bounded
218
+ context under the standard advisory trust projection.
219
+
220
+ See [OPENSRC_ADAPTER.md](OPENSRC_ADAPTER.md) for registration, limits, cache
221
+ and network behavior, tests, and troubleshooting. `opensrc path` may contact
222
+ registries or remotes and populate its own cache on miss; ForgeLoop persists
223
+ nothing and never auto-recalls.
@@ -0,0 +1,81 @@
1
+ # Agent Browser Adapter
2
+
3
+ ForgeLoop ships an optional, host-injected adapter for Vercel Labs
4
+ `agent-browser`. It implements the existing provider-neutral Browser
5
+ Verification contract; it is not canonical browser infrastructure and it does
6
+ not create lifecycle evidence.
7
+
8
+ ## Installation ownership
9
+
10
+ The host must provide an already-installed `agent-browser` executable and pass
11
+ its absolute path to `createAgentBrowserVerificationProvider`. ForgeLoop never
12
+ discovers a binary through `PATH`, installs or upgrades Agent Browser, installs
13
+ Chrome, or runs `doctor --fix`.
14
+
15
+ ```js
16
+ import {
17
+ createAgentBrowserVerificationProvider,
18
+ createForgeLoopContext,
19
+ runBrowserVerification,
20
+ } from "@cassiomc1/forgeloop/integration";
21
+
22
+ const provider = createAgentBrowserVerificationProvider({
23
+ executablePath: "/opt/agent-browser/bin/agent-browser",
24
+ expectedVersion: "0.38.1",
25
+ });
26
+ const runtimeContext = createForgeLoopContext({
27
+ browserVerificationProviders: { "agent-browser": provider },
28
+ });
29
+ ```
30
+
31
+ ## Supported mapping
32
+
33
+ The adapter maps `NAVIGATE`, `CLICK`, `FILL`, `PRESS`, and bounded polling for
34
+ `WAIT_FOR` to Agent Browser commands. CSS locators are passed directly;
35
+ TEXT, LABEL, and ROLE locators are resolved from one accessibility snapshot and
36
+ ambiguity is `BLOCKED`. Assertions cover visibility, hidden state, text,
37
+ value, attribute, URL, URL prefix, and title. Requested assertion order is
38
+ preserved.
39
+
40
+ ## Security and lifecycle
41
+
42
+ Each invocation probes the explicitly supplied executable version lazily, uses
43
+ a fresh random session, runs in an adapter-owned temporary cwd, and closes the
44
+ session in `finally`. Profiles, restore/state replay, CDP, auto-connect,
45
+ plugins, init scripts, and ambient cloud/authentication variables are filtered.
46
+ The target repository is never used as the Agent Browser cwd.
47
+
48
+ ForgeLoop validates exact `http`/`https` origins. Agent Browser receives the
49
+ corresponding hostname allowlist as defense in depth, while ForgeLoop remains
50
+ authoritative for scheme, host, and port. Redirects outside the allowlist are
51
+ rejected. Subprocess argv uses `shell: false`; stdout, stderr, time, and
52
+ diagnostics are bounded, and abort/timeout sends bounded termination signals.
53
+
54
+ ## Screenshots and trust model
55
+
56
+ `NEVER`, `ON_FAILURE`, and `ALWAYS` screenshot policies are supported. Screenshot
57
+ bytes remain temporary; results expose only bounded PNG metadata, a SHA-256
58
+ digest, and a portable `agent-browser/<verification>/<digest>.png` reference.
59
+
60
+ The result is observation-only: `persisted: false`, `evidenceAuthority: NONE`,
61
+ and no lifecycle, claim, completion, evidence, or next-action fields. Calling
62
+ `runBrowserVerification` does not mutate ForgeLoop artifacts and a PASS is never
63
+ auto-promoted to a check or completion.
64
+
65
+ Command responses must use the complete `{success: true, data}` envelope and
66
+ scalar observations are type-checked before assertions run. Missing or extra
67
+ envelope fields, malformed observations, non-zero exits, unsupported versions,
68
+ cancellation, timeout, and output overflow fail closed; process success alone
69
+ never produces a PASS. Any internal test-only temporary-root override must stay
70
+ outside the verification target; the public TypeScript API exposes only the
71
+ host-selected executables.
72
+
73
+ ## Troubleshooting and limitations
74
+
75
+ Use an absolute regular executable path and, when desired, set
76
+ `expectedVersion` to the host-qualified version. A missing executable, version
77
+ mismatch, timeout, malformed response, output overflow, locator ambiguity, or
78
+ origin escape fails closed. The default test suite does not require Agent
79
+ Browser, Chrome, network access, or a Node 24 runtime. An optional localhost
80
+ smoke test is available only when explicitly enabled with
81
+ `FORGELOOP_AGENT_BROWSER_E2E=1` and `FORGELOOP_AGENT_BROWSER_EXECUTABLE`.
@@ -0,0 +1,6 @@
1
+ # Agent Browser Verification
2
+
3
+ This page is a short navigation entry for the concrete optional adapter. See
4
+ [`AGENT_BROWSER_ADAPTER.md`](./AGENT_BROWSER_ADAPTER.md) for host installation
5
+ ownership, the public factory, command mapping, isolation, exact-origin policy,
6
+ screenshots, troubleshooting, and the non-authoritative trust boundary.
@@ -7,7 +7,7 @@
7
7
  ForgeLoop is a portable protocol and support CLI for verifiable engineering workflows. It records and validates task state, contracts, routing, checks, evidence, continuity, and optional code attestations. It does not become an agent scheduler, delegation service, source-control authority, or secret manager.
8
8
 
9
9
  Protocol version: 1
10
- Package version: 1.13.0
10
+ Package version: 1.14.0
11
11
 
12
12
  ## Canonical loop
13
13
 
@@ -89,7 +89,7 @@ or `NOT_COMPARABLE` when evidence is absent or incompatible. See
89
89
  - Responsibility contracts constrain paths, checks, and frozen inputs; they do not prove identity or authorship.
90
90
  - Verification scope describes planned verification breadth. Attestation coverage proves content for a concrete revision. These are separate claims.
91
91
  - Attestation manifests exclude ForgeLoop protocol metadata and bind to the completion receipt and append-only ledger without circular references.
92
- - Verification commands are read-only. Signing is external; private keys and credentials are never persisted by ForgeLoop.
92
+ - Verification command execution is external and provenance-bearing; ForgeLoop records the exact argv and result, while the authorized command may perform its declared effects. Signing is external; private keys and credentials are never persisted by ForgeLoop.
93
93
 
94
94
  ## Lifecycle
95
95
 
@@ -101,6 +101,7 @@ Phases: RECEIVED, DISCOVERING, CONTRACT_READY, ROUTED, DESIGNING, PLANNED, EXECU
101
101
  | --- | --- | --- |
102
102
  | adaptiveExecutionProfiles | 1 | yes |
103
103
  | advisoryContextProviders | 1 | yes |
104
+ | auditUx | 1 | yes |
104
105
  | canonicalHandoffs | 2 | yes |
105
106
  | capabilityPolicy | 1 | yes |
106
107
  | codeAttestation | 1 | yes |
@@ -115,9 +116,11 @@ Phases: RECEIVED, DISCOVERING, CONTRACT_READY, ROUTED, DESIGNING, PLANNED, EXECU
115
116
  | executionProfileContext | 1 | yes |
116
117
  | integrationApi | 1 | yes |
117
118
  | observabilityStability | n/a | yes |
119
+ | providerExtensions | 1 | yes |
118
120
  | reflection | 1 | yes |
119
121
  | repositoryIndex | 1 | yes |
120
122
  | responsibilityConstraints | 1 | yes |
123
+ | semanticDecisionPlane | 1 | yes |
121
124
  | structuralQuality | 1 | yes |
122
125
  | structuredTrace | 1 | yes |
123
126
  | taskClaimRecovery | 1 | yes |
@@ -139,6 +142,8 @@ Phases: RECEIVED, DISCOVERING, CONTRACT_READY, ROUTED, DESIGNING, PLANNED, EXECU
139
142
  Integration-API-only, lazy, and opt-in. Provider results are not persisted by
140
143
  ForgeLoop and are never lifecycle state, evidence, authority, or executable
141
144
  instructions.
145
+ - `providerExtensions` v1 is provider-neutral and
146
+ experimental. The generic provider registry remains internal and unexported.
142
147
 
143
148
  Protocol v1, schema v1, and Integration API v1 remain independent of these
144
149
  capability-family versions.
@@ -199,10 +204,12 @@ capability-family versions.
199
204
  | recovery | TASK | .forgeloop/task-state/<task-key>/recovery.json | task-recovery | TASK_RECOVERY_STATE |
200
205
  | responsibility | TASK | .forgeloop/task-state/<task-key>/responsibility.json | responsibility | RESPONSIBILITY_CONSTRAINT |
201
206
  | route | TASK | .forgeloop/task-state/<task-key>/routing-result.json | routing-result | GUIDE_ROUTING_SPECIFICATION |
207
+ | semanticDecisions | TASK | .forgeloop/task-state/<task-key>/decisions/<decision-id>.json | semantic-decision | SEMANTIC_DECISION |
202
208
  | session | SESSION | .forgeloop/sessions/<session-id>.json | activation | SESSION_MARKER |
203
209
  | sources | PROJECT | .forgeloop/sources.json | source-registry | SOURCE_ATTESTATION |
204
210
  | state | TASK | .forgeloop/task-state/<task-key>/work-state.json | work-state | CANONICAL_LIFECYCLE_STATE |
205
211
  | structuralQuality | TASK | .forgeloop/task-state/<task-key>/structural-quality/baseline.json | structural-quality | STRUCTURAL_QUALITY_EVIDENCE |
212
+ | testUtility | TASK | .forgeloop/task-state/<task-key>/test-utility.json | test-utility | NON_EVIDENCE_TEST_ANALYSIS |
206
213
  | usage | TASK | .forgeloop/task-state/<task-key>/usage.json | usage | INFORMATIONAL_USAGE_TELEMETRY |
207
214
  | verificationScope | TASK | .forgeloop/task-state/<task-key>/verification-scope.json | verification-scope | VERIFICATION_SCOPE_PLAN |
208
215
  | workspaceBinding | TASK | .forgeloop/task-state/<task-key>/workspace-binding.json | workspace-binding | WORKSPACE_IDENTITY_BINDING |
@@ -248,6 +255,9 @@ capability-family versions.
248
255
 
249
256
  | Command | Mutation | Purpose |
250
257
  | --- | --- | --- |
258
+ | context-plan | READ_ONLY | Compiles a bounded non-authoritative context plan from deterministic candidates. |
259
+ | decision-show | READ_ONLY | Shows one persisted semantic decision artifact without performing a live request. |
260
+ | decision-status | READ_ONLY | Reports the pinned semantic decision-plane configuration without exposing credentials. |
251
261
  | doctor | MUTATING | Diagnoses project health, discovers adapters, and optionally repairs missing template files. |
252
262
  | efficiency | READ_ONLY | Projects usage and timing efficiency, comparing only against a metadata-compatible local baseline. |
253
263
  | eval | MUTATING | Evaluates the current trajectory against a validated project-local reference scenario. |
@@ -255,12 +265,17 @@ capability-family versions.
255
265
  | index-status | READ_ONLY | Reports provider-neutral repository-index health, metadata, and owned-server status. |
256
266
  | inspect | READ_ONLY | Inspects target repository health, dirty files, active branch, and artifact freshness. |
257
267
  | metrics | READ_ONLY | Projects trajectory, action, execution, timing, and known usage metrics without mutating state. |
268
+ | model-route | READ_ONLY | Projects a deterministic model-routing floor with advisory Jev escalation only. |
258
269
  | profile-interview | READ_ONLY | Optional interactive or dry-run interview to refine project profile facts. |
259
270
  | progress | READ_ONLY | Evaluates task progress across verification cycles and detects stalls deterministically. |
260
271
  | protocol-info | READ_ONLY | Reports versioning, lifecycle, command, guide, and public error compatibility metadata for external harnesses. |
261
272
  | reflect | READ_ONLY | Analyzes diagnostic and correction history deterministically for information gain, repeated failures, ineffective interventions, and oscillation. |
262
273
  | search | READ_ONLY | Searches the ForgeLoop repository index through the provider-neutral search contract. |
274
+ | semantic-plan | READ_ONLY | Projects fail-closed failure triage, diagnosis priority, or review planning without authority. |
263
275
  | status | READ_ONLY | Displays current lifecycle phase, active checks, blockers, and artifact freshness bindings. |
276
+ | test-inventory | READ_ONLY | Discovers tests deterministically and assigns stable semantic test IDs without pruning authority. |
277
+ | test-prune-plan | READ_ONLY | Projects KEEP, PROBE_REMOVAL, or BLOCKED without deleting tests. |
278
+ | test-utility | MUTATING | Persists non-evidence test utility analysis; never deletes tests or authorizes pruning. |
264
279
  | trace | READ_ONLY | Emits detailed structured task trace with provenance and artifact relationships. |
265
280
  | usage-record | MUTATING | Records actor-reported usage telemetry without treating it as verification evidence. |
266
281
  | validate-protocol | READ_ONLY | Validates end-to-end cryptographic freshness, fingerprint bindings, and ledger integrity. |
@@ -274,6 +289,10 @@ capability-family versions.
274
289
  | advance | MUTATING | Transitions the canonical lifecycle work state to an allowed target phase. |
275
290
  | clear-state | MUTATING | Removes work-state.json for the active task only, preserving sibling contract, routing, and ledger files. |
276
291
  | complete | MUTATING | Evaluates verification receipt coverage, gates, and ledger integrity to authorize task completion. |
292
+ | contract-create | MUTATING | Persists a validated contract and materializes the first real lifecycle checkpoint. |
293
+ | discover | MUTATING | Records the canonical initial discovery milestone for a newly created task. |
294
+ | gate-record | MUTATING | Records a required pre-execution gate with ForgeLoop-owned artifact hashes. |
295
+ | gate-revalidate | MUTATING | Refreshes a stale satisfied gate after execution only when current identity and active claims prove the change is safe. |
277
296
  | next | READ_ONLY | Returns deterministic next-action guidance and command recommendations based on active state. |
278
297
  | preflight | MUTATING | Evaluates pre-implementation contract, routing, and gates; synchronizes work state when READY. |
279
298
  | reconcile-closure | MUTATING | Refreshes the work-state checkpoint of an EXECUTING, VERIFYING, or REVIEWING task whose objective is already satisfied in the current repository, after contract-bound executed evidence, so canonical completion can proceed. |
@@ -304,14 +323,19 @@ capability-family versions.
304
323
 
305
324
  | Command | Mutation | Purpose |
306
325
  | --- | --- | --- |
326
+ | checkpoint-revalidate | MUTATING | Revalidates a safe ROUTED checkpoint after repository-only drift without changing contract or route identity. |
327
+ | contract-revise | MUTATING | Replaces an existing contract canonically before execution while preserving task identity and invalidating derived evidence. |
307
328
  | index-rebuild | MUTATING | Atomically rebuilds the repository index and restarts its owned watcher. |
308
329
  | index-setup | MUTATING | Provisions the pinned tgrep engine, builds the repository index, and starts its owned watcher. |
309
330
  | index-start | MUTATING | Starts the owned tgrep repository-index watcher after an index has been built. |
310
331
  | index-stop | MUTATING | Stops only a tgrep server whose process identity is provably owned by ForgeLoop. |
311
332
  | init | MUTATING | Initializes a target project directory with ForgeLoop discovery adapters, schemas, and templates. |
312
333
  | migrate-protocol | MUTATING | Safely migrates explicitly supported protocol state; unknown target versions fail without rewriting artifacts. |
334
+ | task-abandon | MUTATING | Explicitly abandons an active non-terminal task; records append-only evidence and releases claims without completion authority. |
313
335
  | task-migrate | MUTATING | Migrates a legacy 1.0 singleton task state layout into a task-namespaced layout. |
336
+ | task-migrate-contract-bootstrap-repair | MUTATING | Migrates the exact legacy contract bootstrap repair marker by appending a bound migration event; the original marker and artifacts remain unchanged. |
314
337
  | task-recover | MUTATING | Caller-acknowledged recovery of a STALE or ABANDONED task; records durable state and releases effective write claims. |
338
+ | task-repair-contract-bootstrap | MUTATING | Repairs the exact duplicate contract bootstrap defect without rewriting history; idempotent and append-only. |
315
339
  | task-repair-legacy-recovery | MUTATING | Migrates one recognized legacy OPERATOR_RECOVERY_RECORDED boundary event into the modern durable recovery representation (append-only; original event unchanged). |
316
340
  | task-resume | MUTATING | Reacquires a recovered task's write claims under project serialization and restores ordinary mutation authority. |
317
341
  | task-unlock | MUTATING | Removes an orphaned task lock file to recover an interrupted task. |
@@ -343,6 +367,7 @@ capability-family versions.
343
367
  | record-terminal-result | MUTATING | Records external terminal result evidence (PUBLICATION or PRODUCTION_READINESS) into receipt. |
344
368
  | report | READ_ONLY | Emits a human-readable or structured JSON summary report of protocol state. |
345
369
  | run-check | EXTERNAL_EXECUTION | Runs an exact command, records the execution provenance artifact, and binds observed check evidence. |
370
+ | test-prune-probe | EXTERNAL_EXECUTION | Runs only an isolated, fail-closed removal probe; never modifies the live worktree. |
346
371
  | validate-receipt | READ_ONLY | Validates schema conformance and cryptographic bounds of an execution receipt file. |
347
372
  | verify-scope | MUTATING | Resolves a provable changed, claimed, full, or unresolved verification boundary without launching checks. |
348
373
 
@@ -0,0 +1,66 @@
1
+ # ForgeLoop Agent Skill
2
+
3
+ ## Status
4
+
5
+ ForgeLoop ships a generated, portable Agent Skill at
6
+ [`skills/forgeloop/SKILL.md`](../skills/forgeloop/SKILL.md). It is operational
7
+ guidance, not protocol authority, and it does not certify any particular agent
8
+ harness.
9
+
10
+ ## Purpose and Architecture
11
+
12
+ The documented precedence direction is:
13
+
14
+ ```text
15
+ runtime protocol registries and validators
16
+ -> canonical protocol documentation
17
+ -> docs/AGENT_PROTOCOL_SUMMARY.md
18
+ -> generated Skill
19
+ ```
20
+
21
+ The Skill generator itself reads the generated summary and runtime protocol
22
+ metadata. It does not parse the canonical Markdown protocol documents.
23
+
24
+ The Skill never becomes lifecycle, completion, evidence, claim, scheduler,
25
+ provider, or installation authority.
26
+
27
+ ## Generation and Freshness
28
+
29
+ Generation is deterministic, offline, and has no external Agent Skills
30
+ dependency:
31
+
32
+ ```bash
33
+ npm run summary:generate
34
+ npm run skill:generate
35
+ npm run summary:check
36
+ npm run skill:check
37
+ ```
38
+
39
+ The writer is bounded to the five known files under `skills/forgeloop/` and
40
+ does not delete unknown files. Documentation checks run Skill freshness after
41
+ Agent Protocol Summary freshness.
42
+
43
+ ## Compatibility
44
+
45
+ The Skill follows the portable `skills/forgeloop/SKILL.md` convention with only
46
+ `name` and `description` frontmatter. This is format compatibility, not
47
+ behavioral certification for every external harness. Existing native
48
+ `AGENTS.md`, `CLAUDE.md`, Cursor, and Copilot integration surfaces remain
49
+ intact.
50
+
51
+ ## Safety Boundaries
52
+
53
+ Agents must discover tasks first, follow `next`, respect claims, require
54
+ preflight `READY`, preserve command provenance, distinguish `run-check` from
55
+ `record-check`, use supported recovery, require `complete -> VALID`, and query
56
+ `next` again for a terminal result. Tokens, credentials, private keys, and
57
+ authorization headers must never be persisted in ForgeLoop artifacts.
58
+
59
+ External Agent Skills tooling is not a ForgeLoop dependency and is not used in
60
+ CI. ForgeLoop adds no runtime Skill installation or synchronization command.
61
+
62
+ ## Packaging
63
+
64
+ The generated Skill, this document, and the bounded generator ship in the npm
65
+ package as instruction/documentation content. They add no runtime dependency.
66
+ Harness-specific installed copies and caches are not shipped.