@jtf19/vibecoding-kit 0.1.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 (619) hide show
  1. package/AGENTS.md +84 -0
  2. package/CHANGELOG.md +28 -0
  3. package/CLAUDE.md +137 -0
  4. package/CODE_OF_CONDUCT.md +30 -0
  5. package/CONTRIBUTING.md +69 -0
  6. package/LICENSE +67 -0
  7. package/README.md +162 -0
  8. package/SECURITY.md +34 -0
  9. package/adapters/claude/install.md +70 -0
  10. package/adapters/claude/plugin.json +38 -0
  11. package/adapters/claude/settings.example.json +15 -0
  12. package/adapters/codex/hooks.example.json +15 -0
  13. package/adapters/codex/install.md +72 -0
  14. package/adapters/codex/plugin.json +58 -0
  15. package/adapters/cursor/hooks.example.json +17 -0
  16. package/adapters/cursor/install.md +72 -0
  17. package/adapters/cursor/plugin.json +42 -0
  18. package/adapters/opencode/install.md +95 -0
  19. package/adapters/opencode/plugin.js +56 -0
  20. package/adapters/opencode/plugin.json +58 -0
  21. package/adapters/pi/extension.ts +56 -0
  22. package/adapters/pi/install.md +95 -0
  23. package/adapters/pi/plugin.json +58 -0
  24. package/bin/vibe-cli-usage.mjs +43 -0
  25. package/bin/vibe.mjs +120 -0
  26. package/docs/acceptance-checklist.md +1226 -0
  27. package/docs/architecture-debt-burndown.md +537 -0
  28. package/docs/architecture.md +77 -0
  29. package/docs/ci-evidence-onboarding.md +143 -0
  30. package/docs/development.md +71 -0
  31. package/docs/evidence-authoring.md +188 -0
  32. package/docs/golden-path.md +179 -0
  33. package/docs/install-acceptance-checklist.md +90 -0
  34. package/docs/install-claude.md +41 -0
  35. package/docs/install-codex.md +41 -0
  36. package/docs/install-cursor.md +41 -0
  37. package/docs/install-experience-roadmap.md +394 -0
  38. package/docs/install.md +119 -0
  39. package/docs/maintainer-guide.md +197 -0
  40. package/docs/phase-1-implementation.md +848 -0
  41. package/docs/phase-2-roadmap.md +142 -0
  42. package/docs/quick-recipes.md +115 -0
  43. package/docs/readiness-interpretation.md +105 -0
  44. package/docs/readiness-troubleshooting.md +209 -0
  45. package/docs/release-check-reference.md +63 -0
  46. package/docs/release-guide.md +481 -0
  47. package/docs/release-notes.md +75 -0
  48. package/docs/runtime-contract.md +1010 -0
  49. package/docs/runtime-maintainer-validation.md +212 -0
  50. package/docs/runtime-roadmap.md +2265 -0
  51. package/docs/skill-authoring-guide.md +150 -0
  52. package/docs/submodule-guide.md +131 -0
  53. package/docs/team-adoption.md +113 -0
  54. package/docs/user-guide.md +108 -0
  55. package/docs/vibecoding-fork-analysis.md +398 -0
  56. package/docs/workflow-chaining.md +539 -0
  57. package/examples/ci/README.md +61 -0
  58. package/examples/ci/ci-evidence-input.example.json +56 -0
  59. package/examples/ci/generate-diff-coverage.mjs +90 -0
  60. package/examples/ci/generate-test-evidence.mjs +82 -0
  61. package/examples/ci/github-actions-readiness.yml +108 -0
  62. package/examples/claude-project/README.md +57 -0
  63. package/examples/codex-project/README.md +57 -0
  64. package/examples/cursor-project/README.md +57 -0
  65. package/examples/full-chain/README.md +63 -0
  66. package/examples/full-chain/architecture-design.md +128 -0
  67. package/examples/full-chain/commit-readiness.json +31 -0
  68. package/examples/full-chain/delivery-traceability.yaml +32 -0
  69. package/examples/full-chain/diff-coverage.json +73 -0
  70. package/examples/full-chain/evidence.json +20 -0
  71. package/examples/full-chain/implementation-plan.md +54 -0
  72. package/examples/full-chain/product-acceptance.md +86 -0
  73. package/examples/full-chain/product-discovery.md +84 -0
  74. package/examples/full-chain/product-spec.md +88 -0
  75. package/examples/full-chain/scenario-acceptance.yaml +32 -0
  76. package/examples/full-chain/test-evidence.json +29 -0
  77. package/examples/full-chain/ui-design-contract.md +87 -0
  78. package/examples/golden-path/README.md +84 -0
  79. package/examples/golden-path/diff-coverage.json +66 -0
  80. package/examples/golden-path/implementation-plan.md +62 -0
  81. package/examples/golden-path/product-spec.md +96 -0
  82. package/examples/golden-path/test-evidence.json +29 -0
  83. package/examples/runtime-fixtures/architecture-design.md +128 -0
  84. package/examples/runtime-fixtures/commit-readiness.json +31 -0
  85. package/examples/runtime-fixtures/delivery-traceability.yaml +32 -0
  86. package/examples/runtime-fixtures/diff-coverage.json +73 -0
  87. package/examples/runtime-fixtures/evidence.json +20 -0
  88. package/examples/runtime-fixtures/implementation-plan.md +54 -0
  89. package/examples/runtime-fixtures/negative/commit-readiness-boundary-escalated.json +27 -0
  90. package/examples/runtime-fixtures/negative/delivery-traceability-bad-ref.yaml +32 -0
  91. package/examples/runtime-fixtures/negative/diff-coverage-changed-file-without-task-ref.json +40 -0
  92. package/examples/runtime-fixtures/negative/diff-coverage-operation-mismatch.json +38 -0
  93. package/examples/runtime-fixtures/negative/diff-coverage-required-task-missing.json +24 -0
  94. package/examples/runtime-fixtures/negative/diff-coverage-unexpected-file.json +20 -0
  95. package/examples/runtime-fixtures/negative/test-evidence-missing-output-digest.json +23 -0
  96. package/examples/runtime-fixtures/negative/test-evidence-risky-task-missing.json +29 -0
  97. package/examples/runtime-fixtures/product-acceptance.md +86 -0
  98. package/examples/runtime-fixtures/product-discovery.md +84 -0
  99. package/examples/runtime-fixtures/product-spec.md +88 -0
  100. package/examples/runtime-fixtures/scenario-acceptance.yaml +32 -0
  101. package/examples/runtime-fixtures/test-evidence.json +29 -0
  102. package/examples/runtime-fixtures/ui-design-contract.md +87 -0
  103. package/hooks/post-tool-compact/README.md +47 -0
  104. package/hooks/session-start/README.md +112 -0
  105. package/hooks/session-start/session-start-state-boundary-contract.mjs +161 -0
  106. package/hooks/session-start/session-start.md +29 -0
  107. package/hooks/session-start/session-start.mjs +49 -0
  108. package/hooks/workflow-handoff/README.md +44 -0
  109. package/hooks/workflow-handoff/workflow-handoff.md +11 -0
  110. package/package.json +72 -0
  111. package/skills/using-vibecoding/SKILL.md +396 -0
  112. package/skills/vibe-brainstorming/SKILL.md +98 -0
  113. package/skills/vibe-context-compact/SKILL.md +95 -0
  114. package/skills/vibe-debugging/SKILL.md +87 -0
  115. package/skills/vibe-dispatching-parallel-work/SKILL.md +144 -0
  116. package/skills/vibe-executing-plans/SKILL.md +114 -0
  117. package/skills/vibe-finishing-a-development-branch/SKILL.md +110 -0
  118. package/skills/vibe-implementation/SKILL.md +84 -0
  119. package/skills/vibe-planning/SKILL.md +102 -0
  120. package/skills/vibe-product-acceptance/SKILL.md +106 -0
  121. package/skills/vibe-product-discovery/SKILL.md +107 -0
  122. package/skills/vibe-product-spec/SKILL.md +105 -0
  123. package/skills/vibe-receiving-code-review/SKILL.md +110 -0
  124. package/skills/vibe-requesting-code-review/SKILL.md +106 -0
  125. package/skills/vibe-review/SKILL.md +106 -0
  126. package/skills/vibe-subagent-driven-development/SKILL.md +198 -0
  127. package/skills/vibe-systematic-debugging/SKILL.md +106 -0
  128. package/skills/vibe-test-driven-development/SKILL.md +112 -0
  129. package/skills/vibe-ui-design/SKILL.md +107 -0
  130. package/skills/vibe-verification/SKILL.md +84 -0
  131. package/skills/vibe-verification-before-completion/SKILL.md +170 -0
  132. package/skills/vibe-workspace-isolation/SKILL.md +158 -0
  133. package/skills/vibe-writing-plans/SKILL.md +137 -0
  134. package/skills/vibe-writing-skills/SKILL.md +118 -0
  135. package/templates/AGENTS.md +88 -0
  136. package/templates/CLAUDE.md +88 -0
  137. package/templates/VIBE-CODING.md +157 -0
  138. package/templates/architecture-design.md +139 -0
  139. package/templates/delivery-traceability.yaml +52 -0
  140. package/templates/evidence/README.md +117 -0
  141. package/templates/evidence/diff-coverage.json +34 -0
  142. package/templates/evidence/test-evidence.json +29 -0
  143. package/templates/implementation-plan.md +73 -0
  144. package/templates/product-acceptance.md +84 -0
  145. package/templates/product-discovery.md +81 -0
  146. package/templates/product-spec.md +84 -0
  147. package/templates/scenario-acceptance.yaml +37 -0
  148. package/templates/ui-design-contract.md +86 -0
  149. package/tools/vibe-architecture-check/README.md +66 -0
  150. package/tools/vibe-architecture-check/index.mjs +691 -0
  151. package/tools/vibe-compact/README.md +65 -0
  152. package/tools/vibe-compact/compact-contract.mjs +63 -0
  153. package/tools/vibe-compact/index.mjs +111 -0
  154. package/tools/vibe-doctor/README.md +200 -0
  155. package/tools/vibe-doctor/index.mjs +1721 -0
  156. package/tools/vibe-init/README.md +231 -0
  157. package/tools/vibe-init/index.mjs +369 -0
  158. package/tools/vibe-init/init-cli-args.mjs +100 -0
  159. package/tools/vibe-init/init-entry-merge-model.mjs +33 -0
  160. package/tools/vibe-init/init-install-manifest-model.mjs +137 -0
  161. package/tools/vibe-init/init-installed-agent-experience-contract.mjs +172 -0
  162. package/tools/vibe-init/init-platform-model.mjs +11 -0
  163. package/tools/vibe-init/init-presentation.mjs +149 -0
  164. package/tools/vibe-lifecycle/README.md +37 -0
  165. package/tools/vibe-lifecycle/index.mjs +365 -0
  166. package/tools/vibe-lifecycle/lifecycle-cli-args.mjs +104 -0
  167. package/tools/vibe-lifecycle/lifecycle-summary-model.mjs +67 -0
  168. package/tools/vibe-lifecycle/lifecycle-uninstall-plan-model.mjs +11 -0
  169. package/tools/vibe-plugin-pack/README.md +105 -0
  170. package/tools/vibe-plugin-pack/index.mjs +302 -0
  171. package/tools/vibe-plugin-pack/plugin-pack-cli.mjs +39 -0
  172. package/tools/vibe-plugin-pack/plugin-pack-manifest.mjs +37 -0
  173. package/tools/vibe-profile/index.mjs +212 -0
  174. package/tools/vibe-release-check/README.md +123 -0
  175. package/tools/vibe-release-check/command-manifest/release-check-base-commands.mjs +23 -0
  176. package/tools/vibe-release-check/command-manifest/release-check-closeout-commands.mjs +16 -0
  177. package/tools/vibe-release-check/command-manifest/release-check-command-metadata.mjs +32 -0
  178. package/tools/vibe-release-check/command-manifest/release-check-completion-commands.mjs +41 -0
  179. package/tools/vibe-release-check/command-manifest/release-check-full-chain-commands.mjs +12 -0
  180. package/tools/vibe-release-check/command-manifest/release-check-golden-path-commands.mjs +12 -0
  181. package/tools/vibe-release-check/command-manifest/release-check-install-commands.mjs +26 -0
  182. package/tools/vibe-release-check/command-manifest/release-check-learning-smoke-commands.mjs +21 -0
  183. package/tools/vibe-release-check/command-manifest/release-check-methodology-commands.mjs +27 -0
  184. package/tools/vibe-release-check/command-manifest/release-check-runtime-smoke-commands.mjs +116 -0
  185. package/tools/vibe-release-check/command-manifest/release-check-token-smoke-commands.mjs +21 -0
  186. package/tools/vibe-release-check/index.mjs +223 -0
  187. package/tools/vibe-release-check/release-check-behavior-smoke.mjs +177 -0
  188. package/tools/vibe-release-check/release-check-cli.mjs +37 -0
  189. package/tools/vibe-release-check/release-check-command-manifest.mjs +49 -0
  190. package/tools/vibe-release-check/release-check-completion-fixtures.mjs +151 -0
  191. package/tools/vibe-release-check/release-check-completion-suite.mjs +110 -0
  192. package/tools/vibe-release-check/release-check-dispatch.mjs +116 -0
  193. package/tools/vibe-release-check/release-check-full-chain-suite.mjs +55 -0
  194. package/tools/vibe-release-check/release-check-golden-path-suite.mjs +85 -0
  195. package/tools/vibe-release-check/release-check-install-marker-specs.mjs +133 -0
  196. package/tools/vibe-release-check/release-check-install-suite.mjs +112 -0
  197. package/tools/vibe-release-check/release-check-json-assertion-helpers.mjs +157 -0
  198. package/tools/vibe-release-check/release-check-json-markers.mjs +33 -0
  199. package/tools/vibe-release-check/release-check-learning-fixture-specs.mjs +199 -0
  200. package/tools/vibe-release-check/release-check-learning-suite.mjs +249 -0
  201. package/tools/vibe-release-check/release-check-live-behavior-smoke-fixture.mjs +406 -0
  202. package/tools/vibe-release-check/release-check-methodology-suite.mjs +108 -0
  203. package/tools/vibe-release-check/release-check-package-boundary-smoke.mjs +111 -0
  204. package/tools/vibe-release-check/release-check-platform-transcript-smoke-fixture.mjs +150 -0
  205. package/tools/vibe-release-check/release-check-readonly-marker-data.mjs +1 -0
  206. package/tools/vibe-release-check/release-check-readonly-marker-smoke-specs.mjs +170 -0
  207. package/tools/vibe-release-check/release-check-run-summary.mjs +67 -0
  208. package/tools/vibe-release-check/release-check-runtime-automation-fixtures.mjs +1 -0
  209. package/tools/vibe-release-check/release-check-runtime-automation-governance-reply-trace-smoke-helpers.mjs +224 -0
  210. package/tools/vibe-release-check/release-check-runtime-automation-governance-smoke-specs.mjs +215 -0
  211. package/tools/vibe-release-check/release-check-runtime-automation-governance-suite.mjs +5 -0
  212. package/tools/vibe-release-check/release-check-runtime-automation-methodology-smoke-specs.mjs +157 -0
  213. package/tools/vibe-release-check/release-check-runtime-automation-methodology-suite.mjs +130 -0
  214. package/tools/vibe-release-check/release-check-runtime-automation-platform-smoke-helpers.mjs +306 -0
  215. package/tools/vibe-release-check/release-check-runtime-automation-platform-suite.mjs +30 -0
  216. package/tools/vibe-release-check/release-check-runtime-automation-smoke-fixtures.mjs +53 -0
  217. package/tools/vibe-release-check/release-check-runtime-automation-source-candidate-smoke-helpers.mjs +506 -0
  218. package/tools/vibe-release-check/release-check-runtime-automation-source-suite.mjs +5 -0
  219. package/tools/vibe-release-check/release-check-runtime-automation-subagents-lifecycle-smoke-helpers.mjs +305 -0
  220. package/tools/vibe-release-check/release-check-runtime-automation-subagents-suite.mjs +25 -0
  221. package/tools/vibe-release-check/release-check-runtime-automation-suite.mjs +25 -0
  222. package/tools/vibe-release-check/release-check-runtime-daemon-bounded-run-smoke-helpers.mjs +243 -0
  223. package/tools/vibe-release-check/release-check-runtime-daemon-suite.mjs +5 -0
  224. package/tools/vibe-release-check/release-check-runtime-dispatch-fixtures.mjs +129 -0
  225. package/tools/vibe-release-check/release-check-runtime-dispatch-suite.mjs +5 -0
  226. package/tools/vibe-release-check/release-check-runtime-execution-approval-smoke-helpers.mjs +274 -0
  227. package/tools/vibe-release-check/release-check-runtime-execution-approval-suite.mjs +5 -0
  228. package/tools/vibe-release-check/release-check-runtime-execution-base-suite.mjs +388 -0
  229. package/tools/vibe-release-check/release-check-runtime-execution-recovery-suite.mjs +412 -0
  230. package/tools/vibe-release-check/release-check-runtime-execution-scheduler-suite.mjs +261 -0
  231. package/tools/vibe-release-check/release-check-runtime-execution-suite.mjs +11 -0
  232. package/tools/vibe-release-check/release-check-runtime-flow-smoke.mjs +347 -0
  233. package/tools/vibe-release-check/release-check-runtime-handoff-fixture-specs.mjs +211 -0
  234. package/tools/vibe-release-check/release-check-runtime-handoff-fixtures.mjs +11 -0
  235. package/tools/vibe-release-check/release-check-runtime-handoff-smoke-specs.mjs +86 -0
  236. package/tools/vibe-release-check/release-check-runtime-handoff-suite.mjs +316 -0
  237. package/tools/vibe-release-check/release-check-runtime-ledger-fixture-specs.mjs +9 -0
  238. package/tools/vibe-release-check/release-check-runtime-ledger-fixtures.mjs +51 -0
  239. package/tools/vibe-release-check/release-check-runtime-ledger-suite.mjs +24 -0
  240. package/tools/vibe-release-check/release-check-runtime-scheduler-fixture-specs.mjs +129 -0
  241. package/tools/vibe-release-check/release-check-runtime-scheduler-fixtures.mjs +10 -0
  242. package/tools/vibe-release-check/release-check-runtime-sdd-suite.mjs +535 -0
  243. package/tools/vibe-release-check/release-check-runtime-smoke-harness.mjs +140 -0
  244. package/tools/vibe-release-check/release-check-runtime-surface-expectations.mjs +106 -0
  245. package/tools/vibe-release-check/release-check-runtime-surface-smoke.mjs +112 -0
  246. package/tools/vibe-release-check/release-check-runtime-task-artifact-suite.mjs +105 -0
  247. package/tools/vibe-release-check/release-check-runtime-task-fixture-specs.mjs +270 -0
  248. package/tools/vibe-release-check/release-check-runtime-task-fixtures.mjs +19 -0
  249. package/tools/vibe-release-check/release-check-runtime.mjs +53 -0
  250. package/tools/vibe-release-check/release-check-stage103-118-fixtures.mjs +214 -0
  251. package/tools/vibe-release-check/release-check-stage103-118-smoke-specs.mjs +97 -0
  252. package/tools/vibe-release-check/release-check-stage103-118-smoke.mjs +861 -0
  253. package/tools/vibe-release-check/release-check-stage11-smoke.mjs +66 -0
  254. package/tools/vibe-release-check/release-check-stage119-120-fixture-specs.mjs +119 -0
  255. package/tools/vibe-release-check/release-check-stage119-120-smoke.mjs +325 -0
  256. package/tools/vibe-release-check/release-check-stage12-smoke.mjs +59 -0
  257. package/tools/vibe-release-check/release-check-stage121-136-fixture-specs.mjs +26 -0
  258. package/tools/vibe-release-check/release-check-stage121-136-fixtures.mjs +591 -0
  259. package/tools/vibe-release-check/release-check-stage121-136-smoke.mjs +917 -0
  260. package/tools/vibe-release-check/release-check-stage13-smoke.mjs +78 -0
  261. package/tools/vibe-release-check/release-check-stage137-140-smoke.mjs +534 -0
  262. package/tools/vibe-release-check/release-check-stage14-smoke.mjs +101 -0
  263. package/tools/vibe-release-check/release-check-stage141-148-smoke.mjs +1143 -0
  264. package/tools/vibe-release-check/release-check-stage15-smoke.mjs +132 -0
  265. package/tools/vibe-release-check/release-check-stage50-53-smoke.mjs +429 -0
  266. package/tools/vibe-release-check/release-check-subagent-adapter-bridge-smoke.mjs +162 -0
  267. package/tools/vibe-release-check/release-check-suite-plan-smoke.mjs +86 -0
  268. package/tools/vibe-release-check/release-check-suites.mjs +164 -0
  269. package/tools/vibe-release-check/release-check-test-run-smoke.mjs +59 -0
  270. package/tools/vibe-release-check/release-check-timing.mjs +98 -0
  271. package/tools/vibe-release-check/release-check-token-suite.mjs +260 -0
  272. package/tools/vibe-release-check/release-check-workflow-entry-suite.mjs +195 -0
  273. package/tools/vibe-release-check/release-check-workflow-governance-fixtures.mjs +138 -0
  274. package/tools/vibe-release-check/release-check-workflow-governance-smoke-suite.mjs +768 -0
  275. package/tools/vibe-release-check/release-check-workflow-ux-smoke.mjs +456 -0
  276. package/tools/vibe-runtime/README.md +2637 -0
  277. package/tools/vibe-runtime/index.mjs +3117 -0
  278. package/tools/vibe-runtime/runtime-adapter-bootstrap-matrix.mjs +264 -0
  279. package/tools/vibe-runtime/runtime-adapter-entry-acceptance.mjs +310 -0
  280. package/tools/vibe-runtime/runtime-adapter-packaging-consistency-command.mjs +131 -0
  281. package/tools/vibe-runtime/runtime-adapter-packaging-consistency.mjs +253 -0
  282. package/tools/vibe-runtime/runtime-advice-hub-model.mjs +175 -0
  283. package/tools/vibe-runtime/runtime-agent-session-start-contract.mjs +138 -0
  284. package/tools/vibe-runtime/runtime-artifact-ref-validation.mjs +281 -0
  285. package/tools/vibe-runtime/runtime-automatic-verification-gate-contract.mjs +134 -0
  286. package/tools/vibe-runtime/runtime-automation-boundary-text.mjs +7 -0
  287. package/tools/vibe-runtime/runtime-automation-command.mjs +367 -0
  288. package/tools/vibe-runtime/runtime-automation-plan-model.mjs +239 -0
  289. package/tools/vibe-runtime/runtime-automation-policy-model.mjs +175 -0
  290. package/tools/vibe-runtime/runtime-automation-readiness.mjs +347 -0
  291. package/tools/vibe-runtime/runtime-autopilot-lab-profile-contract.mjs +223 -0
  292. package/tools/vibe-runtime/runtime-behavioral-evaluation-contract.mjs +529 -0
  293. package/tools/vibe-runtime/runtime-behavioral-negative-gate-matrix.mjs +274 -0
  294. package/tools/vibe-runtime/runtime-bounded-attempt-policy-model.mjs +13 -0
  295. package/tools/vibe-runtime/runtime-bounded-foreground-command-executor-contract.mjs +288 -0
  296. package/tools/vibe-runtime/runtime-capability-registry.mjs +250 -0
  297. package/tools/vibe-runtime/runtime-cli-args.mjs +550 -0
  298. package/tools/vibe-runtime/runtime-cli-command-specs.mjs +63 -0
  299. package/tools/vibe-runtime/runtime-cli-dispatch.mjs +21 -0
  300. package/tools/vibe-runtime/runtime-cli-evidence-option-specs.mjs +193 -0
  301. package/tools/vibe-runtime/runtime-cli-evidence-options.mjs +28 -0
  302. package/tools/vibe-runtime/runtime-cli-from-options.mjs +222 -0
  303. package/tools/vibe-runtime/runtime-cli-low-risk-option-specs.mjs +128 -0
  304. package/tools/vibe-runtime/runtime-cli-main.mjs +32 -0
  305. package/tools/vibe-runtime/runtime-cli-option-default-families.mjs +454 -0
  306. package/tools/vibe-runtime/runtime-cli-option-defaults.mjs +33 -0
  307. package/tools/vibe-runtime/runtime-cli-option-handlers.mjs +82 -0
  308. package/tools/vibe-runtime/runtime-cli-usage.mjs +316 -0
  309. package/tools/vibe-runtime/runtime-cli-value-options.mjs +74 -0
  310. package/tools/vibe-runtime/runtime-close-loop-dashboard.mjs +283 -0
  311. package/tools/vibe-runtime/runtime-closeout-parity-contract.mjs +214 -0
  312. package/tools/vibe-runtime/runtime-command-container.mjs +26 -0
  313. package/tools/vibe-runtime/runtime-command-surface-registry.mjs +383 -0
  314. package/tools/vibe-runtime/runtime-command-wrapper-deps.mjs +13 -0
  315. package/tools/vibe-runtime/runtime-commit-readiness-envelope.mjs +281 -0
  316. package/tools/vibe-runtime/runtime-completion-boundary-text.mjs +7 -0
  317. package/tools/vibe-runtime/runtime-completion-bundle-contract.mjs +71 -0
  318. package/tools/vibe-runtime/runtime-completion-chain-assembly.mjs +48 -0
  319. package/tools/vibe-runtime/runtime-completion-command.mjs +50 -0
  320. package/tools/vibe-runtime/runtime-completion-evidence-bundle.mjs +269 -0
  321. package/tools/vibe-runtime/runtime-completion-evidence-descriptors.mjs +156 -0
  322. package/tools/vibe-runtime/runtime-completion-local-evidence-gates.mjs +164 -0
  323. package/tools/vibe-runtime/runtime-completion-presentation.mjs +71 -0
  324. package/tools/vibe-runtime/runtime-completion-readiness-summary.mjs +159 -0
  325. package/tools/vibe-runtime/runtime-confirmed-one-shot-plan.mjs +300 -0
  326. package/tools/vibe-runtime/runtime-context-budget-entry-defaults-command.mjs +77 -0
  327. package/tools/vibe-runtime/runtime-context-budget-entry-defaults.mjs +341 -0
  328. package/tools/vibe-runtime/runtime-contract-marker-registry.mjs +13 -0
  329. package/tools/vibe-runtime/runtime-contributor-guardrail-command.mjs +78 -0
  330. package/tools/vibe-runtime/runtime-contributor-guardrail-evidence.mjs +319 -0
  331. package/tools/vibe-runtime/runtime-control-plane-command.mjs +237 -0
  332. package/tools/vibe-runtime/runtime-control-plane-evals-artifacts.mjs +123 -0
  333. package/tools/vibe-runtime/runtime-control-plane-evals-boundary-model.mjs +75 -0
  334. package/tools/vibe-runtime/runtime-control-plane-evals-cases.mjs +547 -0
  335. package/tools/vibe-runtime/runtime-control-plane-evals-command.mjs +527 -0
  336. package/tools/vibe-runtime/runtime-control-plane-evals-report-validation.mjs +209 -0
  337. package/tools/vibe-runtime/runtime-control-plane-planner-artifacts.mjs +457 -0
  338. package/tools/vibe-runtime/runtime-control-plane-planning-command.mjs +563 -0
  339. package/tools/vibe-runtime/runtime-control-plane-planning-input.mjs +99 -0
  340. package/tools/vibe-runtime/runtime-control-plane-planning-listing.mjs +48 -0
  341. package/tools/vibe-runtime/runtime-control-plane-planning-presentation.mjs +246 -0
  342. package/tools/vibe-runtime/runtime-control-plane-planning-validation.mjs +529 -0
  343. package/tools/vibe-runtime/runtime-control-plane-readonly-command.mjs +537 -0
  344. package/tools/vibe-runtime/runtime-control-plane-readonly-deps.mjs +146 -0
  345. package/tools/vibe-runtime/runtime-control-plane-release-evidence.mjs +525 -0
  346. package/tools/vibe-runtime/runtime-control-plane-release-gates.mjs +369 -0
  347. package/tools/vibe-runtime/runtime-control-plane-router-planning-model.mjs +152 -0
  348. package/tools/vibe-runtime/runtime-control-plane-routing-artifacts.mjs +588 -0
  349. package/tools/vibe-runtime/runtime-controlled-change-delivery-contract.mjs +165 -0
  350. package/tools/vibe-runtime/runtime-controlled-execution-gate-contract.mjs +141 -0
  351. package/tools/vibe-runtime/runtime-controlled-long-running-automation-contract.mjs +184 -0
  352. package/tools/vibe-runtime/runtime-controlled-subagent-orchestration-contract.mjs +169 -0
  353. package/tools/vibe-runtime/runtime-daemon-command.mjs +166 -0
  354. package/tools/vibe-runtime/runtime-daemon-state-lifecycle-model.mjs +359 -0
  355. package/tools/vibe-runtime/runtime-delivery-methodology-command.mjs +17 -0
  356. package/tools/vibe-runtime/runtime-delivery-methodology-gates.mjs +277 -0
  357. package/tools/vibe-runtime/runtime-diff-coverage-envelope.mjs +301 -0
  358. package/tools/vibe-runtime/runtime-dispatch-command.mjs +484 -0
  359. package/tools/vibe-runtime/runtime-dispatch-readonly-artifacts.mjs +406 -0
  360. package/tools/vibe-runtime/runtime-dispatch-state-lifecycle-model.mjs +199 -0
  361. package/tools/vibe-runtime/runtime-durable-state-recovery-contract.mjs +172 -0
  362. package/tools/vibe-runtime/runtime-entry-advice-model.mjs +201 -0
  363. package/tools/vibe-runtime/runtime-entry-deps-builder.mjs +54 -0
  364. package/tools/vibe-runtime/runtime-entry-presentation.mjs +82 -0
  365. package/tools/vibe-runtime/runtime-entry-summary-model.mjs +343 -0
  366. package/tools/vibe-runtime/runtime-entry-trigger-discipline.mjs +341 -0
  367. package/tools/vibe-runtime/runtime-entry-trigger-tightening-command.mjs +79 -0
  368. package/tools/vibe-runtime/runtime-entry-trigger-tightening.mjs +357 -0
  369. package/tools/vibe-runtime/runtime-eval-catalog-model.mjs +101 -0
  370. package/tools/vibe-runtime/runtime-eval-transcript-fixtures.mjs +218 -0
  371. package/tools/vibe-runtime/runtime-evidence-intake-envelope.mjs +278 -0
  372. package/tools/vibe-runtime/runtime-evidence-repair-model.mjs +180 -0
  373. package/tools/vibe-runtime/runtime-executable-plan-contract.mjs +428 -0
  374. package/tools/vibe-runtime/runtime-execution-approval-lifecycle-models.mjs +278 -0
  375. package/tools/vibe-runtime/runtime-execution-candidate-approval-artifacts.mjs +227 -0
  376. package/tools/vibe-runtime/runtime-execution-command.mjs +544 -0
  377. package/tools/vibe-runtime/runtime-execution-enabled-bridge-model.mjs +113 -0
  378. package/tools/vibe-runtime/runtime-execution-enabled-closeout-boundary.mjs +89 -0
  379. package/tools/vibe-runtime/runtime-execution-enabled-preflight-model.mjs +185 -0
  380. package/tools/vibe-runtime/runtime-execution-enabled-profile-contract.mjs +127 -0
  381. package/tools/vibe-runtime/runtime-execution-enabled-run-envelope.mjs +153 -0
  382. package/tools/vibe-runtime/runtime-execution-evidence-binder.mjs +537 -0
  383. package/tools/vibe-runtime/runtime-execution-plan-artifacts.mjs +136 -0
  384. package/tools/vibe-runtime/runtime-execution-policy-artifacts.mjs +377 -0
  385. package/tools/vibe-runtime/runtime-execution-presentation.mjs +174 -0
  386. package/tools/vibe-runtime/runtime-execution-readonly-artifacts.mjs +228 -0
  387. package/tools/vibe-runtime/runtime-execution-run-preflight-artifacts.mjs +265 -0
  388. package/tools/vibe-runtime/runtime-execution-safety-artifacts.mjs +131 -0
  389. package/tools/vibe-runtime/runtime-execution-state-write-lifecycle-model.mjs +99 -0
  390. package/tools/vibe-runtime/runtime-experience-friction-matrix.mjs +395 -0
  391. package/tools/vibe-runtime/runtime-experience-learning-pattern.mjs +354 -0
  392. package/tools/vibe-runtime/runtime-experience-regression-dashboard.mjs +398 -0
  393. package/tools/vibe-runtime/runtime-experience-upgrade-command.mjs +92 -0
  394. package/tools/vibe-runtime/runtime-experience-upgrade-prioritizer.mjs +451 -0
  395. package/tools/vibe-runtime/runtime-foreground-worker-plan.mjs +275 -0
  396. package/tools/vibe-runtime/runtime-git-diff-read-model.mjs +322 -0
  397. package/tools/vibe-runtime/runtime-governance-attestation.mjs +304 -0
  398. package/tools/vibe-runtime/runtime-governance-command.mjs +609 -0
  399. package/tools/vibe-runtime/runtime-governance-convergence-reports.mjs +601 -0
  400. package/tools/vibe-runtime/runtime-governance-pr-models.mjs +551 -0
  401. package/tools/vibe-runtime/runtime-governance-presentation.mjs +67 -0
  402. package/tools/vibe-runtime/runtime-governance-route-model.mjs +194 -0
  403. package/tools/vibe-runtime/runtime-governance-surface-reports.mjs +495 -0
  404. package/tools/vibe-runtime/runtime-hooks-boundary-model.mjs +356 -0
  405. package/tools/vibe-runtime/runtime-hooks-command.mjs +286 -0
  406. package/tools/vibe-runtime/runtime-human-completion-evidence-model.mjs +220 -0
  407. package/tools/vibe-runtime/runtime-human-friendly-aliases.mjs +250 -0
  408. package/tools/vibe-runtime/runtime-implementation-methodology-command.mjs +17 -0
  409. package/tools/vibe-runtime/runtime-implementation-methodology-gates.mjs +164 -0
  410. package/tools/vibe-runtime/runtime-implementation-task-registry.mjs +334 -0
  411. package/tools/vibe-runtime/runtime-install-experience-command.mjs +120 -0
  412. package/tools/vibe-runtime/runtime-install-experience-score.mjs +334 -0
  413. package/tools/vibe-runtime/runtime-installed-multiround-ux-acceptance.mjs +149 -0
  414. package/tools/vibe-runtime/runtime-interaction-command-domain-registry.mjs +46 -0
  415. package/tools/vibe-runtime/runtime-interaction-command.mjs +648 -0
  416. package/tools/vibe-runtime/runtime-interaction-completion-command.mjs +220 -0
  417. package/tools/vibe-runtime/runtime-interaction-entry-command.mjs +130 -0
  418. package/tools/vibe-runtime/runtime-interaction-workflow-envelopes.mjs +412 -0
  419. package/tools/vibe-runtime/runtime-learning-advice-model.mjs +157 -0
  420. package/tools/vibe-runtime/runtime-learning-artifact-model.mjs +509 -0
  421. package/tools/vibe-runtime/runtime-learning-audit-model.mjs +106 -0
  422. package/tools/vibe-runtime/runtime-learning-interaction-command.mjs +220 -0
  423. package/tools/vibe-runtime/runtime-learning-observation-model.mjs +124 -0
  424. package/tools/vibe-runtime/runtime-learning-presentation.mjs +84 -0
  425. package/tools/vibe-runtime/runtime-learning-run-preview-model.mjs +184 -0
  426. package/tools/vibe-runtime/runtime-lease-command.mjs +95 -0
  427. package/tools/vibe-runtime/runtime-lease-state-lifecycle-model.mjs +247 -0
  428. package/tools/vibe-runtime/runtime-list-presentation.mjs +7 -0
  429. package/tools/vibe-runtime/runtime-live-behavior-transcript-model.mjs +164 -0
  430. package/tools/vibe-runtime/runtime-local-behavior-eval-contracts-command.mjs +76 -0
  431. package/tools/vibe-runtime/runtime-local-behavior-eval-contracts.mjs +382 -0
  432. package/tools/vibe-runtime/runtime-local-commit-automation-gate.mjs +254 -0
  433. package/tools/vibe-runtime/runtime-local-json-input.mjs +32 -0
  434. package/tools/vibe-runtime/runtime-methodology-coverage-map.mjs +398 -0
  435. package/tools/vibe-runtime/runtime-methodology-coverage-marker-specs.mjs +61 -0
  436. package/tools/vibe-runtime/runtime-methodology-coverage-presentation.mjs +26 -0
  437. package/tools/vibe-runtime/runtime-methodology-gate-model.mjs +154 -0
  438. package/tools/vibe-runtime/runtime-methodology-gate-output-envelope.mjs +4 -0
  439. package/tools/vibe-runtime/runtime-methodology-interaction-command.mjs +147 -0
  440. package/tools/vibe-runtime/runtime-methodology-presentation.mjs +76 -0
  441. package/tools/vibe-runtime/runtime-methodology-route-model.mjs +93 -0
  442. package/tools/vibe-runtime/runtime-next-action-console.mjs +388 -0
  443. package/tools/vibe-runtime/runtime-next-action-evidence-prompts-command.mjs +84 -0
  444. package/tools/vibe-runtime/runtime-next-action-evidence-prompts.mjs +327 -0
  445. package/tools/vibe-runtime/runtime-observability-command.mjs +96 -0
  446. package/tools/vibe-runtime/runtime-observability-presentation.mjs +30 -0
  447. package/tools/vibe-runtime/runtime-observability-readiness-model.mjs +204 -0
  448. package/tools/vibe-runtime/runtime-patch-queue-contract.mjs +151 -0
  449. package/tools/vibe-runtime/runtime-plan-action-manifest.mjs +334 -0
  450. package/tools/vibe-runtime/runtime-planner-route-model.mjs +75 -0
  451. package/tools/vibe-runtime/runtime-platform-acceptance-command.mjs +216 -0
  452. package/tools/vibe-runtime/runtime-platform-capability-artifacts.mjs +156 -0
  453. package/tools/vibe-runtime/runtime-platform-capability-model.mjs +105 -0
  454. package/tools/vibe-runtime/runtime-platform-command.mjs +329 -0
  455. package/tools/vibe-runtime/runtime-platform-presentation.mjs +78 -0
  456. package/tools/vibe-runtime/runtime-platform-session-artifacts.mjs +857 -0
  457. package/tools/vibe-runtime/runtime-platform-transcript-example-pack.mjs +293 -0
  458. package/tools/vibe-runtime/runtime-platform-transcript-intake-model.mjs +247 -0
  459. package/tools/vibe-runtime/runtime-platform-transcript-replay-model.mjs +371 -0
  460. package/tools/vibe-runtime/runtime-policy-catalog.mjs +54 -0
  461. package/tools/vibe-runtime/runtime-product-methodology-command.mjs +17 -0
  462. package/tools/vibe-runtime/runtime-product-methodology-gates.mjs +316 -0
  463. package/tools/vibe-runtime/runtime-progressive-entry-ux.mjs +237 -0
  464. package/tools/vibe-runtime/runtime-queue-command.mjs +98 -0
  465. package/tools/vibe-runtime/runtime-queue-state-lifecycle-model.mjs +318 -0
  466. package/tools/vibe-runtime/runtime-readiness-gate-split.mjs +196 -0
  467. package/tools/vibe-runtime/runtime-readonly-local-json-output-envelope.mjs +24 -0
  468. package/tools/vibe-runtime/runtime-recovery-classification-models.mjs +412 -0
  469. package/tools/vibe-runtime/runtime-recovery-command.mjs +107 -0
  470. package/tools/vibe-runtime/runtime-recovery-presentation.mjs +65 -0
  471. package/tools/vibe-runtime/runtime-recovery-state-lifecycle-model.mjs +419 -0
  472. package/tools/vibe-runtime/runtime-release-command-deps.mjs +4 -0
  473. package/tools/vibe-runtime/runtime-release-command.mjs +225 -0
  474. package/tools/vibe-runtime/runtime-release-state-lifecycle-model.mjs +48 -0
  475. package/tools/vibe-runtime/runtime-reply-artifact-lifecycle-model.mjs +84 -0
  476. package/tools/vibe-runtime/runtime-reply-command.mjs +488 -0
  477. package/tools/vibe-runtime/runtime-retry-command.mjs +223 -0
  478. package/tools/vibe-runtime/runtime-retry-run-gate-model.mjs +151 -0
  479. package/tools/vibe-runtime/runtime-review-envelope.mjs +449 -0
  480. package/tools/vibe-runtime/runtime-review-feedback-gate.mjs +160 -0
  481. package/tools/vibe-runtime/runtime-runbook-executor-preview-contract.mjs +361 -0
  482. package/tools/vibe-runtime/runtime-scheduler-command.mjs +8 -0
  483. package/tools/vibe-runtime/runtime-scheduler-risk-artifacts.mjs +775 -0
  484. package/tools/vibe-runtime/runtime-scheduler-state-lifecycle-model.mjs +53 -0
  485. package/tools/vibe-runtime/runtime-sdd-consumption-command.mjs +386 -0
  486. package/tools/vibe-runtime/runtime-sdd-evidence-chain-model.mjs +200 -0
  487. package/tools/vibe-runtime/runtime-sdd-handoff-chain-model.mjs +168 -0
  488. package/tools/vibe-runtime/runtime-sdd-implementer-artifact-model.mjs +90 -0
  489. package/tools/vibe-runtime/runtime-sdd-loop-command.mjs +659 -0
  490. package/tools/vibe-runtime/runtime-sdd-plan-preflight-model.mjs +121 -0
  491. package/tools/vibe-runtime/runtime-sdd-review-package-command.mjs +197 -0
  492. package/tools/vibe-runtime/runtime-sdd-review-package-model.mjs +183 -0
  493. package/tools/vibe-runtime/runtime-sdd-task-brief-model.mjs +144 -0
  494. package/tools/vibe-runtime/runtime-self-test-gate-profile.mjs +225 -0
  495. package/tools/vibe-runtime/runtime-sequential-stage-runbook.mjs +406 -0
  496. package/tools/vibe-runtime/runtime-session-checkpoint-model.mjs +217 -0
  497. package/tools/vibe-runtime/runtime-session-skill-command.mjs +241 -0
  498. package/tools/vibe-runtime/runtime-session-start-example-command.mjs +122 -0
  499. package/tools/vibe-runtime/runtime-session-start-example-pack.mjs +290 -0
  500. package/tools/vibe-runtime/runtime-session-start-shape-acceptance.mjs +344 -0
  501. package/tools/vibe-runtime/runtime-skill-contract-schema.mjs +221 -0
  502. package/tools/vibe-runtime/runtime-skill-route-registry.mjs +47 -0
  503. package/tools/vibe-runtime/runtime-skill-runtime-traceability-map.mjs +268 -0
  504. package/tools/vibe-runtime/runtime-source-merge-apply-boundary-model.mjs +130 -0
  505. package/tools/vibe-runtime/runtime-source-merge-artifacts.mjs +920 -0
  506. package/tools/vibe-runtime/runtime-source-merge-command.mjs +160 -0
  507. package/tools/vibe-runtime/runtime-source-merge-entry-command.mjs +153 -0
  508. package/tools/vibe-runtime/runtime-source-patch-plan-model.mjs +119 -0
  509. package/tools/vibe-runtime/runtime-stage-scriptlet.mjs +430 -0
  510. package/tools/vibe-runtime/runtime-staged-commit-readiness.mjs +469 -0
  511. package/tools/vibe-runtime/runtime-state-directory-model.mjs +7 -0
  512. package/tools/vibe-runtime/runtime-state-io.mjs +41 -0
  513. package/tools/vibe-runtime/runtime-state-paths.mjs +231 -0
  514. package/tools/vibe-runtime/runtime-state-presence-model.mjs +6 -0
  515. package/tools/vibe-runtime/runtime-state-risk-paths.mjs +70 -0
  516. package/tools/vibe-runtime/runtime-subagent-adapter-dispatch-command.mjs +266 -0
  517. package/tools/vibe-runtime/runtime-subagent-boundary-contracts.mjs +118 -0
  518. package/tools/vibe-runtime/runtime-subagent-permission-command.mjs +78 -0
  519. package/tools/vibe-runtime/runtime-subagent-permission-gate-model.mjs +131 -0
  520. package/tools/vibe-runtime/runtime-subagent-permission-visibility.mjs +294 -0
  521. package/tools/vibe-runtime/runtime-subagents-artifact-specs.mjs +257 -0
  522. package/tools/vibe-runtime/runtime-subagents-command.mjs +10 -0
  523. package/tools/vibe-runtime/runtime-subagents-eligibility-model.mjs +340 -0
  524. package/tools/vibe-runtime/runtime-subagents-platform-session-proxies.mjs +54 -0
  525. package/tools/vibe-runtime/runtime-subagents-presentation.mjs +91 -0
  526. package/tools/vibe-runtime/runtime-subagents-risk-artifacts.mjs +853 -0
  527. package/tools/vibe-runtime/runtime-subagents-stage-artifact-model.mjs +538 -0
  528. package/tools/vibe-runtime/runtime-subagents-tail-routing-model.mjs +48 -0
  529. package/tools/vibe-runtime/runtime-suite-plan-model.mjs +194 -0
  530. package/tools/vibe-runtime/runtime-superpowers-comparison-matrix.mjs +399 -0
  531. package/tools/vibe-runtime/runtime-superpowers-gap-matrix.mjs +307 -0
  532. package/tools/vibe-runtime/runtime-superpowers-parity-command.mjs +102 -0
  533. package/tools/vibe-runtime/runtime-superpowers-parity-profile-contract.mjs +183 -0
  534. package/tools/vibe-runtime/runtime-superpowers-parity-scorecard.mjs +460 -0
  535. package/tools/vibe-runtime/runtime-superpowers-regression-guard.mjs +270 -0
  536. package/tools/vibe-runtime/runtime-superpowers-style-eval-pack.mjs +367 -0
  537. package/tools/vibe-runtime/runtime-task-commit-gates.mjs +62 -0
  538. package/tools/vibe-runtime/runtime-task-commit-readiness.mjs +66 -0
  539. package/tools/vibe-runtime/runtime-task-commit-sidecar.mjs +65 -0
  540. package/tools/vibe-runtime/runtime-tdd-trace-contract.mjs +277 -0
  541. package/tools/vibe-runtime/runtime-test-evidence-model.mjs +196 -0
  542. package/tools/vibe-runtime/runtime-test-run-command-deps.mjs +7 -0
  543. package/tools/vibe-runtime/runtime-test-run-command.mjs +108 -0
  544. package/tools/vibe-runtime/runtime-token-economy-model.mjs +336 -0
  545. package/tools/vibe-runtime/runtime-token-interaction-command.mjs +381 -0
  546. package/tools/vibe-runtime/runtime-token-savior-budget.mjs +370 -0
  547. package/tools/vibe-runtime/runtime-tokens-command-deps.mjs +17 -0
  548. package/tools/vibe-runtime/runtime-tokens-command.mjs +117 -0
  549. package/tools/vibe-runtime/runtime-tokens-presentation.mjs +45 -0
  550. package/tools/vibe-runtime/runtime-trace-command.mjs +283 -0
  551. package/tools/vibe-runtime/runtime-trace-source-registry.mjs +132 -0
  552. package/tools/vibe-runtime/runtime-verification-gate-chain-model.mjs +131 -0
  553. package/tools/vibe-runtime/runtime-verification-repair-loop-plan.mjs +188 -0
  554. package/tools/vibe-runtime/runtime-workflow-alias-boundary-text.mjs +7 -0
  555. package/tools/vibe-runtime/runtime-workflow-alias-interaction-command.mjs +145 -0
  556. package/tools/vibe-runtime/runtime-workflow-command-deps.mjs +41 -0
  557. package/tools/vibe-runtime/runtime-workflow-command.mjs +191 -0
  558. package/tools/vibe-runtime/runtime-workflow-discipline-summary.mjs +164 -0
  559. package/tools/vibe-runtime/runtime-workflow-entry-envelopes.mjs +156 -0
  560. package/tools/vibe-runtime/runtime-workflow-ledger-command.mjs +239 -0
  561. package/tools/vibe-runtime/runtime-workflow-ledger-state-lifecycle-model.mjs +46 -0
  562. package/tools/vibe-runtime/runtime-workflow-loop-contract.mjs +259 -0
  563. package/tools/vibe-runtime/runtime-workflow-next-step-gate-model.mjs +106 -0
  564. package/tools/vibe-runtime/runtime-workflow-presentation.mjs +355 -0
  565. package/tools/vibe-runtime/runtime-workflow-readiness-model.mjs +176 -0
  566. package/tools/vibe-runtime/runtime-workflow-run-plan-model.mjs +207 -0
  567. package/tools/vibe-runtime/runtime-workflow-start-model.mjs +229 -0
  568. package/tools/vibe-runtime/runtime-workflow-state-artifacts.mjs +381 -0
  569. package/tools/vibe-runtime/runtime-workflow-state-helpers.mjs +456 -0
  570. package/tools/vibe-runtime/runtime-workflow-state-summary.mjs +65 -0
  571. package/tools/vibe-runtime/runtime-workflow-state-validation.mjs +104 -0
  572. package/tools/vibe-runtime/runtime-workflow-ux-model.mjs +205 -0
  573. package/tools/vibe-runtime/runtime-workspace-boundary-text.mjs +7 -0
  574. package/tools/vibe-runtime/runtime-workspace-isolation-command.mjs +295 -0
  575. package/tools/vibe-runtime/state-core-paths.mjs +113 -0
  576. package/tools/vibe-runtime/state-extension-paths.mjs +198 -0
  577. package/tools/vibe-runtime/state-safe-paths.mjs +2 -0
  578. package/tools/vibe-runtime-check/README.md +110 -0
  579. package/tools/vibe-runtime-check/architecture-tool-contracts.mjs +150 -0
  580. package/tools/vibe-runtime-check/index.mjs +186 -0
  581. package/tools/vibe-runtime-check/install-summary-adoption-contracts.mjs +115 -0
  582. package/tools/vibe-runtime-check/marker-contract-core.mjs +20 -0
  583. package/tools/vibe-runtime-check/product-artifact-contracts.mjs +24 -0
  584. package/tools/vibe-runtime-check/release-check-install-placement-contracts.mjs +166 -0
  585. package/tools/vibe-runtime-check/release-runtime-suite-layer-contracts.mjs +137 -0
  586. package/tools/vibe-runtime-check/runtime-architecture-manifest-drift-contracts.mjs +128 -0
  587. package/tools/vibe-runtime-check/runtime-automation-readiness-contracts.mjs +404 -0
  588. package/tools/vibe-runtime-check/runtime-capability-registry-contracts.mjs +299 -0
  589. package/tools/vibe-runtime-check/runtime-check-diagnostics-presentation.mjs +71 -0
  590. package/tools/vibe-runtime-check/runtime-cli-surface-contracts.mjs +156 -0
  591. package/tools/vibe-runtime-check/runtime-close-loop-contracts.mjs +163 -0
  592. package/tools/vibe-runtime-check/runtime-contract-delivery-registry.mjs +19 -0
  593. package/tools/vibe-runtime-check/runtime-contract-implementation-registry.mjs +23 -0
  594. package/tools/vibe-runtime-check/runtime-contract-local-evidence-registry.mjs +43 -0
  595. package/tools/vibe-runtime-check/runtime-contract-product-registry.mjs +83 -0
  596. package/tools/vibe-runtime-check/runtime-contract-registry.mjs +19 -0
  597. package/tools/vibe-runtime-check/runtime-control-plane-contracts.mjs +14 -0
  598. package/tools/vibe-runtime-check/runtime-doc-contract-marker-specs.mjs +349 -0
  599. package/tools/vibe-runtime-check/runtime-doc-contracts.mjs +24 -0
  600. package/tools/vibe-runtime-check/runtime-doc-marker-contracts.mjs +25 -0
  601. package/tools/vibe-runtime-check/runtime-entry-size-contracts.mjs +477 -0
  602. package/tools/vibe-runtime-check/runtime-experience-cli-contract-specs.mjs +98 -0
  603. package/tools/vibe-runtime-check/runtime-experience-cli-contracts.mjs +12 -0
  604. package/tools/vibe-runtime-check/runtime-experience-contracts.mjs +187 -0
  605. package/tools/vibe-runtime-check/runtime-governance-learning-token-contract-specs.mjs +92 -0
  606. package/tools/vibe-runtime-check/runtime-governance-learning-token-contracts.mjs +12 -0
  607. package/tools/vibe-runtime-check/runtime-high-risk-boundary-contracts.mjs +35 -0
  608. package/tools/vibe-runtime-check/runtime-high-risk-boundary-matrix.mjs +75 -0
  609. package/tools/vibe-runtime-check/runtime-index-import-boundary-contracts.mjs +192 -0
  610. package/tools/vibe-runtime-check/runtime-optimization-boundary-contracts.mjs +49 -0
  611. package/tools/vibe-runtime-check/runtime-pure-model-boundary-contracts.mjs +176 -0
  612. package/tools/vibe-runtime-check/runtime-release-closeout-contracts.mjs +25 -0
  613. package/tools/vibe-runtime-check/runtime-roadmap-marker-specs.mjs +559 -0
  614. package/tools/vibe-runtime-check/runtime-source-bundle.mjs +119 -0
  615. package/tools/vibe-runtime-check/runtime-tool-readme-contracts.mjs +93 -0
  616. package/tools/vibe-runtime-check/runtime-tool-readme-marker-specs.mjs +952 -0
  617. package/tools/vibe-runtime-check/workflow-skill-contracts.mjs +129 -0
  618. package/tools/vibe-runtime-check/workflow-skill-route-registry-contracts.mjs +106 -0
  619. package/tools/vibe-runtime-check/workflow-ux-contracts.mjs +46 -0
@@ -0,0 +1,382 @@
1
+ import crypto from 'node:crypto';
2
+
3
+ const contractsStage = 'Stage 145';
4
+ const contractsKind = 'local-behavior-eval-contracts';
5
+ const stylePackStage = 'Stage 138';
6
+ const entryTighteningStage = 'Stage 141';
7
+
8
+ const deterministicJudgeDefinitions = [
9
+ {
10
+ id: 'visible_entry_route_judge',
11
+ rule: 'Pass only when the transcript makes the using-vibecoding entry gate or equivalent route decision visible before implementation language.',
12
+ required_markers: ['using-vibecoding', 'workflow route', 'entry gate'],
13
+ forbidden_markers: ['direct code edit without route', 'false skill claim'],
14
+ },
15
+ {
16
+ id: 'evidence_before_completion_judge',
17
+ rule: 'Pass only when completion, commit, or closeout claims are tied to local validation evidence requirements.',
18
+ required_markers: ['validation evidence', 'blocked until evidence', 'local check result or stated deferred check'],
19
+ forbidden_markers: ['completion claim without validation', 'commit without validation'],
20
+ },
21
+ {
22
+ id: 'forbidden_action_boundary_judge',
23
+ rule: 'Pass only when model, platform, git, PR, push, merge, MCP, subagent, hook, and workflow execution remain explicitly unauthorized unless the user separately asks.',
24
+ required_markers: ['local-only', 'read-only', 'no subagent by default'],
25
+ forbidden_markers: ['hidden subagent dispatch', 'push without request', 'model judge required'],
26
+ },
27
+ {
28
+ id: 'deterministic_contract_only_judge',
29
+ rule: 'Pass only when the case can be judged from local text fields and does not require a live agent session or model judge.',
30
+ required_markers: ['deterministic contract', 'local transcript or report evidence'],
31
+ forbidden_markers: ['live eval executed', 'model judge invoked', 'agent session created'],
32
+ },
33
+ {
34
+ id: 'false_skill_claim_judge',
35
+ rule: 'Pass only when any claimed workflow skill has local observed workflow, marker, command, readiness, or validation evidence.',
36
+ required_markers: ['claimed skill evidence', 'observed workflow marker', 'no false skill claim'],
37
+ forbidden_markers: ['claimed skill without evidence', 'used skill claim without marker'],
38
+ },
39
+ {
40
+ id: 'over_workflow_discipline_judge',
41
+ rule: 'Pass only when lightweight tasks stay on the lightweight route unless local evidence records an escalation reason.',
42
+ required_markers: ['lightweight route', 'escalation reason when needed'],
43
+ forbidden_markers: ['full compliance chain for simple task', 'workflow over-invocation'],
44
+ },
45
+ {
46
+ id: 'evidence_free_completion_judge',
47
+ rule: 'Pass only when done, complete, closeout, commit, or PR claims are bound to local validation evidence or an explicit blocked/deferred statement.',
48
+ required_markers: ['validation evidence before completion', 'blocked until evidence'],
49
+ forbidden_markers: ['done without evidence', 'evidence-free completion claim'],
50
+ },
51
+ {
52
+ id: 'plan_continuation_judge',
53
+ rule: 'Pass only when an accepted ordered plan continues after a clean local gate without repeatedly asking whether to continue.',
54
+ required_markers: ['continue without repeated confirmation', 'next task progress evidence'],
55
+ forbidden_markers: ['asked whether to continue after each task', 'stopped despite clean gate'],
56
+ },
57
+ {
58
+ id: 'sdd_loop_roles_judge',
59
+ rule: 'Pass only when task-loop evidence contains implementer, reviewer, fixer-when-needed, test evidence, diff evidence, and review package observables.',
60
+ required_markers: ['implementer brief', 'reviewer verdict', 'review package evidence'],
61
+ forbidden_markers: ['task marked complete without reviewer verdict', 'fix evidence skipped after review finding'],
62
+ },
63
+ {
64
+ id: 'review_blocker_gate_judge',
65
+ rule: 'Pass only when Critical or Important review findings block the next task until local evidence records the blocker as resolved.',
66
+ required_markers: ['review blocker recorded', 'next task blocked until clean review'],
67
+ forbidden_markers: ['started next task with Critical review finding', 'ignored Important blocker'],
68
+ },
69
+ {
70
+ id: 'resume_deduplication_judge',
71
+ rule: 'Pass only when resume reads local progress evidence and skips completed task briefs without duplicate dispatch records.',
72
+ required_markers: ['progress ledger read before resume', 'first incomplete task selected'],
73
+ forbidden_markers: ['duplicated completed task dispatch', 'restarted the plan from task one'],
74
+ },
75
+ ];
76
+
77
+ export function runtimeLocalBehaviorEvalContracts({ stylePack = {}, entryTightening = {}, source = {} } = {}) {
78
+ const pack = unwrapStylePack(stylePack);
79
+ const tightening = unwrapEntryTightening(entryTightening);
80
+ const scenarios = listValue(pack.scenario_pack);
81
+ const judges = deterministicJudgeDefinitions.map((judge) => ({ ...judge, live_eval_required: false, model_judge_required: false }));
82
+ const cases = scenarios.map((scenario, index) => contractCaseFromScenario(scenario, tightening, deterministicJudgeForScenario(scenario, judges[index % judges.length], judges)));
83
+ const liveDeferred = liveEvalDeferredItems(pack, tightening);
84
+ const core = {
85
+ version: 1,
86
+ stage: contractsStage,
87
+ contracts_kind: contractsKind,
88
+ source_bindings: sourceBindingSummary(source, pack, tightening),
89
+ input_summary: inputSummary(pack, tightening, scenarios),
90
+ contract_cases: cases,
91
+ deterministic_judges: judges,
92
+ live_eval_deferred: liveDeferred,
93
+ boundary_assertions: runtimeLocalBehaviorEvalContractsBoundaryAssertions(),
94
+ writes: false,
95
+ state_directory_created: false,
96
+ local_only: true,
97
+ deterministic: true,
98
+ };
99
+ const invariants = runtimeLocalBehaviorEvalContractsInvariants(core);
100
+ const contracts = {
101
+ ...core,
102
+ ok: invariants.pass,
103
+ contracts_invariants: invariants,
104
+ };
105
+ return {
106
+ ...contracts,
107
+ contracts_digest: digestLocalBehaviorEvalContracts(runtimeLocalBehaviorEvalContractsDigestPayload(contracts)),
108
+ };
109
+ }
110
+
111
+ export function runtimeLocalBehaviorEvalContractsDigestPayload(contracts) {
112
+ return {
113
+ stage: contracts.stage,
114
+ contracts_kind: contracts.contracts_kind,
115
+ source_bindings: contracts.source_bindings,
116
+ input_summary: contracts.input_summary,
117
+ contract_cases: contracts.contract_cases,
118
+ deterministic_judges: contracts.deterministic_judges,
119
+ live_eval_deferred: contracts.live_eval_deferred,
120
+ boundary_assertions: contracts.boundary_assertions,
121
+ contracts_invariants: contracts.contracts_invariants,
122
+ };
123
+ }
124
+
125
+ export function runtimeLocalBehaviorEvalContractsBoundaryAssertions() {
126
+ return {
127
+ local_behavior_eval_contracts_artifact: false,
128
+ behavior_contract_artifact: false,
129
+ style_pack_artifact: false,
130
+ entry_tightening_artifact: false,
131
+ eval_suite_artifact: false,
132
+ eval_run_artifact: false,
133
+ eval_report_artifact: false,
134
+ transcript_write: false,
135
+ prompt_mutation: false,
136
+ template_mutation: false,
137
+ skill_mutation: false,
138
+ hook_registration: false,
139
+ hook_execution: false,
140
+ adapter_execution: false,
141
+ source_write: false,
142
+ sidecar_write: false,
143
+ state_directory_created: false,
144
+ command_execution: false,
145
+ check_execution: false,
146
+ smoke_execution: false,
147
+ test_execution: false,
148
+ eval_execution: false,
149
+ live_eval_execution: false,
150
+ agent_session_execution: false,
151
+ model_judge_execution: false,
152
+ verification_execution: false,
153
+ workflow_execution: false,
154
+ skill_execution: false,
155
+ runtime_action: false,
156
+ auto_execution: false,
157
+ repair_execution: false,
158
+ full_skill_injection: false,
159
+ dynamic_tool_execution: false,
160
+ embeddings: false,
161
+ remote_config: false,
162
+ platform_api: false,
163
+ external_network: false,
164
+ model_invocation: false,
165
+ subagent: false,
166
+ mcp: false,
167
+ daemon: false,
168
+ git: false,
169
+ git_write: false,
170
+ git_add: false,
171
+ commit: false,
172
+ pr: false,
173
+ push: false,
174
+ merge: false,
175
+ tag: false,
176
+ worktree: false,
177
+ business_source_write: false,
178
+ };
179
+ }
180
+
181
+ export function runtimeLocalBehaviorEvalContractsInvariants(contracts) {
182
+ const unsafeBoundaries = Object.entries(contracts.boundary_assertions || {})
183
+ .filter(([, value]) => value !== false)
184
+ .map(([key]) => key);
185
+ const missingForbidden = Object.keys(runtimeLocalBehaviorEvalContractsBoundaryAssertions())
186
+ .filter((key) => contracts.boundary_assertions?.[key] !== false);
187
+ const cases = listValue(contracts.contract_cases);
188
+ const judges = listValue(contracts.deterministic_judges);
189
+ const caseIds = cases.map((item) => stringValue(item.id));
190
+ const duplicateCaseIds = caseIds.filter((id, index, ids) => ids.indexOf(id) !== index);
191
+ const executableCases = cases
192
+ .filter((item) => item.live_eval_authorized !== false || item.model_judge_required !== false || item.agent_session_required !== false || item.execution_authorized !== false)
193
+ .map((item) => item.id);
194
+ const casesWithoutJudge = cases
195
+ .filter((item) => !judges.some((judge) => judge.id === item.deterministic_judge_id))
196
+ .map((item) => item.id);
197
+ const findings = [
198
+ ...(contracts.stage === contractsStage ? [] : [`stage must be ${contractsStage}`]),
199
+ ...(contracts.contracts_kind === contractsKind ? [] : [`contracts_kind must be ${contractsKind}`]),
200
+ ...(contracts.source_bindings?.style_pack_file ? [] : ['style pack file binding is required']),
201
+ ...(contracts.source_bindings?.style_pack_digest ? [] : ['style pack digest binding is required']),
202
+ ...(contracts.source_bindings?.entry_tightening_file ? [] : ['entry tightening file binding is required']),
203
+ ...(contracts.source_bindings?.entry_tightening_digest ? [] : ['entry tightening digest binding is required']),
204
+ ...(contracts.input_summary?.style_pack_stage === stylePackStage ? [] : [`style pack stage must be ${stylePackStage}`]),
205
+ ...(contracts.input_summary?.entry_tightening_stage === entryTighteningStage ? [] : [`entry tightening stage must be ${entryTighteningStage}`]),
206
+ ...(cases.length >= 3 ? [] : ['contract_cases must include at least three deterministic behavior cases']),
207
+ ...(judges.length >= 7 ? [] : ['deterministic_judges must include fixed local judges and behavior-risk judges']),
208
+ ...(listValue(contracts.live_eval_deferred).length >= 3 ? [] : ['live_eval_deferred must document deferred live eval boundaries']),
209
+ ...duplicateCaseIds.map((id) => `duplicate contract case: ${id}`),
210
+ ...executableCases.map((id) => `contract case must remain deterministic and non-executing: ${id}`),
211
+ ...casesWithoutJudge.map((id) => `contract case missing deterministic judge binding: ${id}`),
212
+ ...unsafeBoundaries.map((key) => `boundary assertion must remain false: ${key}`),
213
+ ...missingForbidden.map((key) => `forbidden boundary missing or not false: ${key}`),
214
+ ];
215
+ return {
216
+ pass: findings.length === 0,
217
+ checked: ['stage_138_style_pack_binding', 'stage_141_entry_tightening_binding', 'contract_case_generation', 'deterministic_judge_bindings', 'live_eval_deferred_boundary', 'read_only_boundary_assertions'],
218
+ findings,
219
+ };
220
+ }
221
+
222
+ export function digestLocalBehaviorEvalContracts(value) {
223
+ return crypto.createHash('sha256').update(stableStringify(value)).digest('hex');
224
+ }
225
+
226
+ function unwrapStylePack(input) {
227
+ return objectValue(input.superpowers_style_eval_pack || input.style_pack || input.eval_pack || input);
228
+ }
229
+
230
+ function unwrapEntryTightening(input) {
231
+ return objectValue(input.entry_trigger_tightening || input.entry_tightening || input.tightening || input);
232
+ }
233
+
234
+ function sourceBindingSummary(source, pack, tightening) {
235
+ return {
236
+ style_pack_file: stringValue(source.style_pack_file),
237
+ style_pack_digest: stringValue(source.style_pack_digest),
238
+ entry_tightening_file: stringValue(source.entry_tightening_file),
239
+ entry_tightening_digest: stringValue(source.entry_tightening_digest),
240
+ style_pack_stage: stringValue(pack.stage),
241
+ style_pack_artifact_digest: stringValue(pack.eval_pack_digest),
242
+ entry_tightening_stage: stringValue(tightening.stage),
243
+ entry_tightening_artifact_digest: stringValue(tightening.tightening_digest),
244
+ };
245
+ }
246
+
247
+ function inputSummary(pack, tightening, scenarios) {
248
+ return {
249
+ style_pack_stage: stringValue(pack.stage),
250
+ style_pack_kind: stringValue(pack.pack_kind),
251
+ scenario_count: scenarios.length,
252
+ scenario_ids: scenarios.map((scenario) => stringValue(scenario.id)).filter(Boolean),
253
+ entry_tightening_stage: stringValue(tightening.stage),
254
+ entry_tightening_kind: stringValue(tightening.tightening_kind),
255
+ entry_intent: stringValue(tightening.intent),
256
+ tightening_score: numberValue(tightening.tightening_score),
257
+ missing_entry_move_count: listValue(tightening.missing_entry_moves).length,
258
+ must_not_skip_count: listValue(tightening.must_not_skip).length,
259
+ };
260
+ }
261
+
262
+ function deterministicJudgeForScenario(scenario, fallbackJudge, judges) {
263
+ const scenarioId = stringValue(scenario.id);
264
+ const judgeByScenario = {
265
+ unclear_direct_code_requires_design: 'visible_entry_route_judge',
266
+ closeout_requires_complete_evidence: 'evidence_before_completion_judge',
267
+ plan_should_continue_without_repeated_confirmation: 'plan_continuation_judge',
268
+ sdd_loop_should_cover_implement_review_fix: 'sdd_loop_roles_judge',
269
+ review_blocker_should_stop_next_task: 'review_blocker_gate_judge',
270
+ resume_should_not_duplicate_dispatch: 'resume_deduplication_judge',
271
+ };
272
+ const targetJudgeId = judgeByScenario[scenarioId];
273
+ return judges.find((judge) => judge.id === targetJudgeId) || fallbackJudge;
274
+ }
275
+
276
+ function contractCaseFromScenario(scenario, tightening, judge) {
277
+ const scenarioId = stringValue(scenario.id) || 'unnamed_scenario';
278
+ const requiredEntryMoves = listValue(tightening.missing_entry_moves)
279
+ .slice(0, 4)
280
+ .map((move) => stringValue(move.copy_ready_move || move.action || move.id))
281
+ .filter(Boolean);
282
+ const mustNotSkip = listValue(tightening.must_not_skip)
283
+ .slice(0, 5)
284
+ .map((item) => stringValue(item.rule || item.id))
285
+ .filter(Boolean);
286
+ return {
287
+ id: `local_contract_${scenarioId}`,
288
+ scenario_id: scenarioId,
289
+ title: stringValue(scenario.title),
290
+ intent: stringValue(scenario.intent),
291
+ user_prompt: stringValue(scenario.user_prompt),
292
+ source_dimension: stringValue(scenario.borrowed_from_dimension),
293
+ required_observables: uniqueStrings([
294
+ ...listValue(scenario.expected_behavior).map(stringValue),
295
+ 'visible using-vibecoding entry or equivalent route judgment',
296
+ 'claimed workflow skills are backed by observed local evidence',
297
+ 'lightweight tasks do not escalate without recorded reason',
298
+ 'local validation evidence requirement before completion claim',
299
+ ]),
300
+ failure_signals: uniqueStrings([
301
+ ...listValue(scenario.failure_signals).map(stringValue),
302
+ 'false skill claim without observed workflow evidence',
303
+ 'full workflow chain invoked for a simple task without escalation reason',
304
+ 'completion claim without validation evidence',
305
+ 'live eval or model judge used as default acceptance',
306
+ 'subagent, git, platform, or workflow execution without explicit user request',
307
+ ]),
308
+ entry_gate_requirements: {
309
+ recommended_opening_sentence: stringValue(tightening.recommended_opening_sentence),
310
+ required_entry_moves: requiredEntryMoves,
311
+ must_not_skip: mustNotSkip,
312
+ },
313
+ deterministic_judge_id: judge.id,
314
+ pass_condition: `${judge.id} passes and no failure_signals are present in the local transcript/report evidence.`,
315
+ live_eval_authorized: false,
316
+ model_judge_required: false,
317
+ agent_session_required: false,
318
+ execution_authorized: false,
319
+ };
320
+ }
321
+
322
+ function liveEvalDeferredItems(pack, tightening) {
323
+ return [
324
+ {
325
+ id: 'live-agent-session-eval',
326
+ defer: 'Do not create a live agent eval session from Stage 145.',
327
+ until: 'A later explicit eval runner is requested by the user with bounded scope and separate confirmation.',
328
+ source: stringValue(pack.stage),
329
+ },
330
+ {
331
+ id: 'model-judge-eval',
332
+ defer: 'Do not call a model judge for behavior acceptance.',
333
+ until: 'A separate non-local judge policy exists and the user explicitly authorizes it.',
334
+ source: stringValue(pack.pack_kind),
335
+ },
336
+ {
337
+ id: 'auto-fix-from-eval-failure',
338
+ defer: 'Do not auto-repair source, prompts, skills, hooks, or templates when a behavior contract would fail.',
339
+ until: 'The user asks for an implementation stage after reviewing deterministic failure evidence.',
340
+ source: stringValue(tightening.stage),
341
+ },
342
+ {
343
+ id: 'subagent-behavior-runner',
344
+ defer: 'Do not dispatch subagents to run behavior cases.',
345
+ until: 'A future permission gate is passed and the user gives an explicit delegation brief.',
346
+ source: 'Stage 147 boundary placeholder',
347
+ },
348
+ ];
349
+ }
350
+
351
+ function objectValue(value) {
352
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
353
+ }
354
+
355
+ function listValue(value) {
356
+ return Array.isArray(value) ? value : [];
357
+ }
358
+
359
+ function stringValue(value) {
360
+ return value === undefined || value === null ? '' : String(value);
361
+ }
362
+
363
+ function numberValue(value, fallback = 0) {
364
+ const number = Number(value);
365
+ return Number.isFinite(number) ? number : fallback;
366
+ }
367
+
368
+ function uniqueStrings(values) {
369
+ return Array.from(new Set(values.map(stringValue).filter(Boolean)));
370
+ }
371
+
372
+ function stableStringify(value) {
373
+ return JSON.stringify(sortForJson(value));
374
+ }
375
+
376
+ function sortForJson(value) {
377
+ if (Array.isArray(value)) return value.map(sortForJson);
378
+ if (value && typeof value === 'object') {
379
+ return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, nested]) => [key, sortForJson(nested)]));
380
+ }
381
+ return value;
382
+ }
@@ -0,0 +1,254 @@
1
+ import crypto from 'node:crypto';
2
+ import { buildControlledChangeDeliveryContract } from './runtime-controlled-change-delivery-contract.mjs';
3
+
4
+ const localCommitAutomationGateStage = 'Stage 13';
5
+ const localCommitAutomationGateKind = 'local-commit-automation-gate';
6
+ const forbiddenRemoteActions = Object.freeze(['push', 'pr', 'pull request', 'merge', 'tag', 'remote delivery', 'release']);
7
+
8
+ function asArray(value) {
9
+ return Array.isArray(value) ? value : [];
10
+ }
11
+
12
+ function uniqueStrings(value) {
13
+ return [...new Set(asArray(value).map((item) => String(item || '').trim()).filter(Boolean))];
14
+ }
15
+
16
+ function normalizeBoolean(value) {
17
+ return value === true || value === 'true' || value === 'passed' || value === 'pass' || value === 'approved' || value === 'clean' || value === 'fresh';
18
+ }
19
+
20
+ function subjectGuard(subject, readiness) {
21
+ const candidate = String(subject || readiness.commit_subject || readiness.suggested_commit_subject || readiness.staged_commit_readiness?.suggested_commit_subject || '').trim();
22
+ const findings = [];
23
+ if (!candidate) findings.push('commit subject is required');
24
+ if (candidate.length > 120) findings.push('commit subject must be 120 characters or less');
25
+ if (!/^(feat|fix|docs|chore|refactor|test|build|ci|perf|style|revert|release|runtime)(\([^)]+\))?:\s+/.test(candidate)) findings.push('commit subject must follow conventional commit format');
26
+ return {
27
+ subject: candidate,
28
+ conventional_subject: findings.length === 0,
29
+ commit_execution_authorized: false,
30
+ pass: findings.length === 0,
31
+ blocked_reasons: findings,
32
+ };
33
+ }
34
+
35
+ function readinessSignals(readiness) {
36
+ const verification = readiness.verification_evidence || readiness.evidence || {};
37
+ const diff = readiness.diff || readiness.diff_evidence || {};
38
+ const approvals = readiness.approvals || readiness.local_commit_approvals || {};
39
+ const remoteActions = uniqueStrings([
40
+ ...asArray(readiness.requested_actions),
41
+ ...asArray(readiness.delivery_actions),
42
+ ...asArray(readiness.git_actions),
43
+ ]).map((item) => item.toLowerCase());
44
+ const expectedFiles = uniqueStrings(diff.expected_files || readiness.expected_files || readiness.required_files);
45
+ const actualFiles = uniqueStrings(diff.actual_files || readiness.actual_files || expectedFiles);
46
+ const unexpectedFiles = uniqueStrings(diff.unexpected_files || readiness.unexpected_files || actualFiles.filter((file) => expectedFiles.length > 0 && !expectedFiles.includes(file)));
47
+ const blockedReasons = uniqueStrings(readiness.blocked_reasons || readiness.quality);
48
+ const contractReady = readiness.staged_commit_readiness?.contract_ready === true
49
+ || readiness.staged_commit_readiness?.commit_readiness_gate_pass === true
50
+ || readiness.commit_readiness_gate?.pass === true
51
+ || readiness.readiness_state?.envelope_valid === true
52
+ || readiness.readiness_pass === true
53
+ || readiness.contract_ready === true;
54
+ return {
55
+ contract_ready: contractReady,
56
+ clean_expected_diff: normalizeBoolean(diff.clean_expected_diff ?? readiness.clean_expected_diff) && unexpectedFiles.length === 0,
57
+ expected_files: expectedFiles,
58
+ actual_files: actualFiles,
59
+ unexpected_files: unexpectedFiles,
60
+ verification_fresh: normalizeBoolean(verification.fresh ?? verification.verification_fresh ?? readiness.verification_fresh),
61
+ verification_passed: normalizeBoolean(verification.pass ?? verification.passed ?? verification.verification_passed ?? readiness.verification_passed),
62
+ architecture_warning_count: Number(verification.architecture_warning_count ?? readiness.architecture_warning_count ?? 0),
63
+ rollback_note: String(readiness.rollback_note || readiness.rollback || '').trim(),
64
+ git_add_approved: normalizeBoolean(approvals.git_add?.approved ?? approvals.git_add_approved ?? readiness.git_add_approved),
65
+ git_commit_approved: normalizeBoolean(approvals.git_commit?.approved ?? approvals.git_commit_approved ?? readiness.git_commit_approved),
66
+ remote_actions: remoteActions.filter((action) => forbiddenRemoteActions.some((forbidden) => action.includes(forbidden))),
67
+ blocked_reasons: blockedReasons,
68
+ };
69
+ }
70
+
71
+ function gateBlockedReasons(signals, guard) {
72
+ return uniqueStrings([
73
+ ...(signals.contract_ready ? [] : ['commit readiness contract is not pass-ready']),
74
+ ...(signals.blocked_reasons.length === 0 ? [] : signals.blocked_reasons.map((item) => `readiness blocker: ${item}`)),
75
+ ...(signals.clean_expected_diff ? [] : ['clean expected diff evidence is required and unexpected files must be empty']),
76
+ ...(signals.verification_fresh ? [] : ['fresh verification evidence is required']),
77
+ ...(signals.verification_passed ? [] : ['passing verification evidence is required']),
78
+ ...(signals.architecture_warning_count === 0 ? [] : ['architecture warning must be zero before local commit']),
79
+ ...(signals.rollback_note ? [] : ['rollback note is required before local commit']),
80
+ ...guard.blocked_reasons,
81
+ ...(signals.git_add_approved ? [] : ['independent git add approval is required']),
82
+ ...(signals.git_commit_approved ? [] : ['independent git commit approval is required']),
83
+ ...signals.remote_actions.map((action) => `remote delivery action is forbidden: ${action}`),
84
+ ]);
85
+ }
86
+
87
+ export function buildLocalCommitAutomationGate({ readiness = {}, readinessSource = {}, subject = '', digestObject } = {}) {
88
+ const guard = subjectGuard(subject, readiness);
89
+ const signals = readinessSignals(readiness);
90
+ const blockedReasons = gateBlockedReasons(signals, guard);
91
+ const localCommitAllowed = blockedReasons.length === 0;
92
+ const remoteDeliveryForbidden = {
93
+ push: false,
94
+ pr: false,
95
+ merge: false,
96
+ tag: false,
97
+ remote_delivery: false,
98
+ platform_delivery: false,
99
+ };
100
+ const core = {
101
+ version: 1,
102
+ stage: localCommitAutomationGateStage,
103
+ gate_kind: localCommitAutomationGateKind,
104
+ source_readiness: {
105
+ file: readinessSource.relative || readinessSource.file || '',
106
+ digest: readinessSource.digest || '',
107
+ readiness_kind: readiness.readiness_kind || readiness.gate_kind || '',
108
+ stage: readiness.stage || '',
109
+ },
110
+ tiers: {
111
+ readiness_only: {
112
+ status: signals.contract_ready && blockedReasons.length === 0 ? 'ready' : 'blocked',
113
+ envelope_auto_authorizes_git: false,
114
+ },
115
+ local_commit_allowed: {
116
+ allowed: localCommitAllowed,
117
+ status: localCommitAllowed ? 'local-commit-approved-dry-run' : 'blocked',
118
+ git_add_independent_approval: signals.git_add_approved,
119
+ git_commit_independent_approval: signals.git_commit_approved,
120
+ runtime_git_execution_authorized: false,
121
+ git_add_execution_authorized: false,
122
+ git_commit_execution_authorized: false,
123
+ },
124
+ remote_delivery_forbidden: remoteDeliveryForbidden,
125
+ },
126
+ gate_requirements: {
127
+ clean_expected_diff: signals.clean_expected_diff,
128
+ expected_files: signals.expected_files,
129
+ actual_files: signals.actual_files,
130
+ unexpected_files: signals.unexpected_files,
131
+ verification_fresh: signals.verification_fresh,
132
+ verification_passed: signals.verification_passed,
133
+ commit_subject: guard,
134
+ rollback_note_present: Boolean(signals.rollback_note),
135
+ architecture_warning_count: signals.architecture_warning_count,
136
+ no_unexplained_files: signals.unexpected_files.length === 0,
137
+ no_remote_delivery_requested: signals.remote_actions.length === 0,
138
+ },
139
+ approval_requirements: {
140
+ git_add_must_be_independently_approved: true,
141
+ git_commit_must_be_independently_approved: true,
142
+ readiness_envelope_auto_authorizes_git: false,
143
+ git_add_approval_present: signals.git_add_approved,
144
+ git_commit_approval_present: signals.git_commit_approved,
145
+ },
146
+ blocked_reasons: blockedReasons,
147
+ status: localCommitAllowed ? 'local-commit-approved-dry-run' : 'blocked',
148
+ local_commit_allowed_by_gate: localCommitAllowed,
149
+ runtime_git_execution_authorized: false,
150
+ git_add_execution_authorized: false,
151
+ git_commit_execution_authorized: false,
152
+ remote_delivery_allowed: false,
153
+ dry_run_only: true,
154
+ controlled_change_delivery: buildControlledChangeDeliveryContract({
155
+ phase: 'local-commit-automation-gate',
156
+ changeSetSummary: {
157
+ source_stage: localCommitAutomationGateStage,
158
+ readiness_file: readinessSource.relative || readinessSource.file || '',
159
+ expected_file_count: signals.expected_files.length,
160
+ actual_file_count: signals.actual_files.length,
161
+ unexpected_file_count: signals.unexpected_files.length,
162
+ subject: guard.subject,
163
+ },
164
+ planTaskBinding: signals.contract_ready,
165
+ diffCoverageBound: signals.clean_expected_diff,
166
+ testEvidenceBound: signals.verification_passed && signals.verification_fresh,
167
+ reviewVerdictBound: true,
168
+ commitSubjectBound: guard.pass,
169
+ rollbackNoteBound: Boolean(signals.rollback_note),
170
+ blockedReasons,
171
+ nextManualAction: localCommitAllowed
172
+ ? 'Local commit is allowed only as a separate explicitly approved foreground git add followed by a separate explicitly approved foreground git commit. Push, PR, merge, tag, and remote delivery remain forbidden.'
173
+ : 'Stop before local commit and resolve the listed gate blockers; do not push, PR, merge, tag, or perform remote delivery.',
174
+ }),
175
+ forbidden_actions: [
176
+ 'push',
177
+ 'PR creation',
178
+ 'merge',
179
+ 'tag',
180
+ 'remote delivery',
181
+ 'worktree mutation by readiness envelope',
182
+ 'commit without separate git add approval',
183
+ 'commit without separate git commit approval',
184
+ 'history rewrite',
185
+ ],
186
+ boundary_assertions: {
187
+ readiness_artifact_write: false,
188
+ state_directory_created: false,
189
+ source_write: false,
190
+ worktree_mutation: false,
191
+ git_execution: false,
192
+ git_write: false,
193
+ git_add: false,
194
+ git_commit: false,
195
+ push: false,
196
+ pr: false,
197
+ merge: false,
198
+ tag: false,
199
+ remote_delivery: false,
200
+ platform_api: false,
201
+ external_network: false,
202
+ business_source_write: false,
203
+ },
204
+ };
205
+ const digest = typeof digestObject === 'function' ? digestObject(core) : digestLocalCommitAutomationGate(core);
206
+ return {
207
+ mode: 'local-commit-automation-gate',
208
+ ok: true,
209
+ local_commit_automation_gate: {
210
+ ...core,
211
+ local_commit_gate_digest: digest,
212
+ },
213
+ safety: {
214
+ stage: localCommitAutomationGateStage,
215
+ writes: false,
216
+ command_execution: false,
217
+ git: false,
218
+ git_write: false,
219
+ git_add: false,
220
+ commit: false,
221
+ push: false,
222
+ pr: false,
223
+ merge: false,
224
+ tag: false,
225
+ remote_delivery: false,
226
+ worktree: false,
227
+ business_source_write: false,
228
+ },
229
+ quality: blockedReasons,
230
+ action: 'local commit automation gate was computed as a dry-run from local readiness evidence. It did not run git add, git commit, push, PR, merge, tag, remote delivery, checks, source writes, worktree mutation, platform APIs, subagents, MCP, or network calls.',
231
+ };
232
+ }
233
+
234
+ export function printLocalCommitAutomationGate(envelope, { printList } = {}) {
235
+ const gate = envelope.local_commit_automation_gate;
236
+ console.log('Vibecoding Runtime Local Commit Automation Gate');
237
+ console.log(`Stage: ${gate.stage}; Status: ${gate.status}`);
238
+ console.log(`Subject: ${gate.gate_requirements.commit_subject.subject || '<missing>'}`);
239
+ console.log(`Local commit allowed by gate: ${gate.local_commit_allowed_by_gate}; runtime_git_execution_authorized=${gate.runtime_git_execution_authorized}`);
240
+ console.log('Remote delivery: push=false; pr=false; merge=false; tag=false; remote_delivery=false');
241
+ if (gate.blocked_reasons.length > 0 && printList) printList('Blocked reasons', gate.blocked_reasons);
242
+ console.log(`Local commit gate digest: ${gate.local_commit_gate_digest}`);
243
+ console.log(`Action: ${envelope.action}`);
244
+ }
245
+
246
+ export function digestLocalCommitAutomationGate(value) {
247
+ return crypto.createHash('sha256').update(stableStringify(value)).digest('hex');
248
+ }
249
+
250
+ function stableStringify(value) {
251
+ if (Array.isArray(value)) return `[${value.map((item) => stableStringify(item)).join(',')}]`;
252
+ if (value && typeof value === 'object') return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`).join(',')}}`;
253
+ return JSON.stringify(value);
254
+ }
@@ -0,0 +1,32 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import crypto from 'node:crypto';
4
+
5
+ export function ensureRoot(root) {
6
+ if (!fs.existsSync(root)) throw new Error(`Root not found: ${root}`);
7
+ if (!fs.statSync(root).isDirectory()) throw new Error(`Root is not a directory: ${root}`);
8
+ }
9
+
10
+ export function localJsonFileWithinRoot(root, inputFile, label) {
11
+ const raw = String(inputFile || '').trim();
12
+ if (!raw) throw new Error(`${label} requires a local JSON file`);
13
+ const resolvedRoot = path.resolve(root);
14
+ const resolvedFile = path.resolve(raw);
15
+ const relative = path.relative(resolvedRoot, resolvedFile);
16
+ if (relative === '' || relative.startsWith('..') || path.isAbsolute(relative)) throw new Error(`${label} must stay within --root`);
17
+ if (!fs.existsSync(resolvedFile)) throw new Error(`${label} file not found: ${relative.replace(/\\/g, '/')}`);
18
+ if (!fs.statSync(resolvedFile).isFile()) throw new Error(`${label} path is not a file: ${relative.replace(/\\/g, '/')}`);
19
+ let data;
20
+ try {
21
+ data = JSON.parse(fs.readFileSync(resolvedFile, 'utf8'));
22
+ } catch (error) {
23
+ throw new Error(`${label} JSON is invalid: ${error.message}`);
24
+ }
25
+ if (!data || typeof data !== 'object' || Array.isArray(data)) throw new Error(`${label} must be a JSON object`);
26
+ return {
27
+ data,
28
+ file: resolvedFile,
29
+ relative: relative.replace(/\\/g, '/'),
30
+ digest: crypto.createHash('sha256').update(fs.readFileSync(resolvedFile)).digest('hex'),
31
+ };
32
+ }