@xulthekl/team-flow 0.22.4

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 (405) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.agents/skills +1 -0
  3. package/.claude/always/phase-guard.md +3 -0
  4. package/.claude-plugin/marketplace.json +20 -0
  5. package/.claude-plugin/plugin.json +31 -0
  6. package/.codex-plugin/plugin.json +45 -0
  7. package/.codexignore +6 -0
  8. package/.cursor-plugin/marketplace.json +17 -0
  9. package/.cursor-plugin/plugin.json +31 -0
  10. package/.github/copilot-instructions.md +15 -0
  11. package/.github/dependabot.yml +10 -0
  12. package/.github/plugin/marketplace.json +42 -0
  13. package/.github/workflows/ci.yml +98 -0
  14. package/.github/workflows/hol-plugin-scanner.yml +17 -0
  15. package/.opencode/INSTALL.md +61 -0
  16. package/.opencode/plugins/team-flow.js +70 -0
  17. package/AGENTS.md +280 -0
  18. package/CHANGELOG.md +635 -0
  19. package/CONTRIBUTING.md +115 -0
  20. package/GEMINI.md +14 -0
  21. package/HANDOFF.md +219 -0
  22. package/INSTALL.md +810 -0
  23. package/LICENSE +21 -0
  24. package/README.md +185 -0
  25. package/SECURITY.md +37 -0
  26. package/agents/bug-investigator.md +180 -0
  27. package/agents/change-split-auditor.md +257 -0
  28. package/agents/code-reviewer.md +171 -0
  29. package/agents/cross-change-consistency-checker.md +215 -0
  30. package/agents/prd-completeness-reviewer.md +197 -0
  31. package/agents/prototype-builder.md +230 -0
  32. package/agents/prototype-env-scout.md +156 -0
  33. package/agents/prototype-reviewer.md +226 -0
  34. package/assets/icon.svg +6 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.js +5 -0
  37. package/dist/parsing/change-parser.d.ts +12 -0
  38. package/dist/parsing/change-parser.js +54 -0
  39. package/dist/parsing/requirement-blocks.d.ts +31 -0
  40. package/dist/parsing/requirement-blocks.js +192 -0
  41. package/dist/schema/base.d.ts +7 -0
  42. package/dist/schema/base.js +1 -0
  43. package/dist/schema/change.d.ts +25 -0
  44. package/dist/schema/change.js +1 -0
  45. package/dist/schema/index.d.ts +3 -0
  46. package/dist/schema/index.js +1 -0
  47. package/dist/schema/spec.d.ts +11 -0
  48. package/dist/schema/spec.js +1 -0
  49. package/dist/validation/constants.d.ts +42 -0
  50. package/dist/validation/constants.js +42 -0
  51. package/dist/validation/tokenizer.d.ts +17 -0
  52. package/dist/validation/tokenizer.js +173 -0
  53. package/dist/validation/types.d.ts +40 -0
  54. package/dist/validation/types.js +1 -0
  55. package/dist/validation/validator.d.ts +21 -0
  56. package/dist/validation/validator.js +489 -0
  57. package/docs/README_en.md +358 -0
  58. package/docs/artifact-contract.md +96 -0
  59. package/docs/decision-points.md +88 -0
  60. package/docs/e2e-integration-design.md +207 -0
  61. package/docs/examples/README.md +25 -0
  62. package/docs/examples/add-dark-mode/README.md +13 -0
  63. package/docs/examples/add-dark-mode/design.md +49 -0
  64. package/docs/examples/add-dark-mode/execution-contract.md +56 -0
  65. package/docs/examples/add-dark-mode/proposal.md +46 -0
  66. package/docs/examples/add-dark-mode/specs/ui-theme/spec.md +35 -0
  67. package/docs/examples/add-dark-mode/tasks.md +26 -0
  68. package/docs/examples/refactor-auth-boundary/README.md +15 -0
  69. package/docs/examples/refactor-auth-boundary/design.md +41 -0
  70. package/docs/examples/refactor-auth-boundary/execution-contract.md +61 -0
  71. package/docs/examples/refactor-auth-boundary/proposal.md +47 -0
  72. package/docs/examples/refactor-auth-boundary/specs/auth-boundary/spec.md +45 -0
  73. package/docs/examples/refactor-auth-boundary/tasks.md +25 -0
  74. package/docs/plans/2026-07-07-fix-batch-design.md +68 -0
  75. package/docs/plans/2026-07-20-001-refactor-skill-collaboration-protocol-plan.md +128 -0
  76. package/docs/platform-matrix.md +45 -0
  77. package/docs/prototype-design-research.md +206 -0
  78. package/docs/release-checklist.md +96 -0
  79. package/docs/showcase.html +699 -0
  80. package/docs/skill-rename-v0.8.0.md +49 -0
  81. package/docs/state-machine.md +162 -0
  82. package/gemini-extension.json +6 -0
  83. package/hooks/hooks-cursor.json +8 -0
  84. package/hooks/hooks.json +26 -0
  85. package/hooks/pre-tool-use-guard +116 -0
  86. package/hooks/session-start +14 -0
  87. package/llms.txt +51 -0
  88. package/package.json +48 -0
  89. package/plugin.json +27 -0
  90. package/prd/v1/plan.md +443 -0
  91. package/prd/v1/prd.md +580 -0
  92. package/scripts/check-update.mjs +91 -0
  93. package/scripts/check-version-consistency.mjs +345 -0
  94. package/scripts/ensure-branch.mjs +71 -0
  95. package/scripts/get-config +31 -0
  96. package/scripts/guard/checks/artifacts-exist.mjs +36 -0
  97. package/scripts/guard/checks/contract-current.mjs +33 -0
  98. package/scripts/guard/checks/contract-fresh.mjs +17 -0
  99. package/scripts/guard/checks/dp-gate-passed.mjs +35 -0
  100. package/scripts/guard/checks/dp3-approved.mjs +22 -0
  101. package/scripts/guard/checks/execution-plan-ready.mjs +40 -0
  102. package/scripts/guard/checks/execution-reviews-passed.mjs +36 -0
  103. package/scripts/guard/checks/schema-valid.mjs +63 -0
  104. package/scripts/guard/checks/specs-merged.mjs +51 -0
  105. package/scripts/guard/checks/tasks-complete.mjs +31 -0
  106. package/scripts/guard/checks/tests-passing.mjs +31 -0
  107. package/scripts/guard/design-token-guard.mjs +237 -0
  108. package/scripts/guard/guard.mjs +205 -0
  109. package/scripts/infer-workflow.mjs +136 -0
  110. package/scripts/install-amazon-q.mjs +9 -0
  111. package/scripts/install-cline.mjs +9 -0
  112. package/scripts/install-continue.mjs +9 -0
  113. package/scripts/install-cursor.mjs +265 -0
  114. package/scripts/install-git-hooks.mjs +82 -0
  115. package/scripts/install-kiro.mjs +9 -0
  116. package/scripts/install-pi.mjs +9 -0
  117. package/scripts/install-qoder.mjs +9 -0
  118. package/scripts/install-qwen.mjs +9 -0
  119. package/scripts/install-roocode.mjs +9 -0
  120. package/scripts/install-windsurf.mjs +9 -0
  121. package/scripts/install-zcode.mjs +265 -0
  122. package/scripts/lib/cmd-audit.mjs +127 -0
  123. package/scripts/lib/cmd-checkpoint.mjs +118 -0
  124. package/scripts/lib/cmd-config.mjs +88 -0
  125. package/scripts/lib/cmd-doctor.mjs +267 -0
  126. package/scripts/lib/cmd-execution.mjs +206 -0
  127. package/scripts/lib/cmd-handoff.mjs +94 -0
  128. package/scripts/lib/cmd-inject.mjs +310 -0
  129. package/scripts/lib/cmd-install-amazon-q.mjs +11 -0
  130. package/scripts/lib/cmd-install-cline.mjs +11 -0
  131. package/scripts/lib/cmd-install-continue.mjs +11 -0
  132. package/scripts/lib/cmd-install-cursor.mjs +14 -0
  133. package/scripts/lib/cmd-install-kiro.mjs +11 -0
  134. package/scripts/lib/cmd-install-pi.mjs +11 -0
  135. package/scripts/lib/cmd-install-qoder.mjs +11 -0
  136. package/scripts/lib/cmd-install-qwen.mjs +11 -0
  137. package/scripts/lib/cmd-install-roocode.mjs +11 -0
  138. package/scripts/lib/cmd-install-windsurf.mjs +11 -0
  139. package/scripts/lib/cmd-install-workbuddy.mjs +359 -0
  140. package/scripts/lib/cmd-install-zcode.mjs +14 -0
  141. package/scripts/lib/cmd-isolate.mjs +37 -0
  142. package/scripts/lib/cmd-list.mjs +71 -0
  143. package/scripts/lib/cmd-runtime.mjs +85 -0
  144. package/scripts/lib/cmd-solutions.mjs +71 -0
  145. package/scripts/lib/cmd-state.mjs +231 -0
  146. package/scripts/lib/cmd-sync.mjs +102 -0
  147. package/scripts/lib/cmd-validate.mjs +105 -0
  148. package/scripts/lib/cmd-version.mjs +148 -0
  149. package/scripts/lib/config-loader.mjs +107 -0
  150. package/scripts/lib/execution-plan.mjs +492 -0
  151. package/scripts/lib/execution-recommendation.mjs +221 -0
  152. package/scripts/lib/hash.mjs +74 -0
  153. package/scripts/lib/install.mjs +267 -0
  154. package/scripts/lib/platform-runtime-inventory.mjs +27 -0
  155. package/scripts/lib/platforms.mjs +165 -0
  156. package/scripts/lib/prototype-sync.mjs +192 -0
  157. package/scripts/lib/sdd-overlay.mjs +262 -0
  158. package/scripts/lib/shell-quote.mjs +4 -0
  159. package/scripts/lib/solutions-capture.mjs +102 -0
  160. package/scripts/lib/solutions-index-gen.mjs +112 -0
  161. package/scripts/lib/solutions-inject.mjs +77 -0
  162. package/scripts/lib/solutions-promote.mjs +145 -0
  163. package/scripts/lib/spec-paths.mjs +85 -0
  164. package/scripts/lib/state-loader.mjs +154 -0
  165. package/scripts/lint/lint-skills.mjs +149 -0
  166. package/scripts/lint/rules/behavior-consistency.mjs +56 -0
  167. package/scripts/lint/rules/dp-trigger-points.mjs +60 -0
  168. package/scripts/lint/rules/exception-handling.mjs +59 -0
  169. package/scripts/lint/rules/no-contradictory-instructions.mjs +67 -0
  170. package/scripts/lint/rules/no-redundant-checks.mjs +50 -0
  171. package/scripts/lint/rules/token-rules.mjs +122 -0
  172. package/scripts/review-package +44 -0
  173. package/scripts/task-brief +40 -0
  174. package/scripts/team-flow.mjs +164 -0
  175. package/scripts/token-baseline.mjs +158 -0
  176. package/scripts/validate-artifacts +96 -0
  177. package/scripts/verify-marketplace-release.mjs +59 -0
  178. package/skills/architecture-design/SKILL.md +140 -0
  179. package/skills/architecture-design/chapters/ch01-4a-domains.md +27 -0
  180. package/skills/architecture-design/chapters/ch02-change-cascade.md +27 -0
  181. package/skills/architecture-design/chapters/ch03-architecture-outputs.md +25 -0
  182. package/skills/architecture-design/chapters/ch04-entity-to-aggregate.md +27 -0
  183. package/skills/architecture-design/chapters/ch05-cqrs.md +32 -0
  184. package/skills/architecture-design/chapters/ch06-integration.md +54 -0
  185. package/skills/architecture-design/cheatsheet.md +51 -0
  186. package/skills/architecture-design/glossary.md +23 -0
  187. package/skills/architecture-design/patterns.md +32 -0
  188. package/skills/bug-investigator/SKILL.md +77 -0
  189. package/skills/build-executor/SKILL.md +163 -0
  190. package/skills/build-executor/implementer-prompt.md +162 -0
  191. package/skills/build-executor/references/execution-modes.md +86 -0
  192. package/skills/build-executor/task-reviewer-prompt.md +195 -0
  193. package/skills/ce-brainstorm/SKILL.md +415 -0
  194. package/skills/ce-brainstorm/references/agents/slack-researcher.md +127 -0
  195. package/skills/ce-brainstorm/references/blindspot-pass.md +70 -0
  196. package/skills/ce-brainstorm/references/brainstorm-sections.md +285 -0
  197. package/skills/ce-brainstorm/references/handoff.md +168 -0
  198. package/skills/ce-brainstorm/references/html-rendering.md +634 -0
  199. package/skills/ce-brainstorm/references/markdown-rendering.md +241 -0
  200. package/skills/ce-brainstorm/references/model-tiers.md +9 -0
  201. package/skills/ce-brainstorm/references/prd-mapping.md +71 -0
  202. package/skills/ce-brainstorm/references/product-pressure-test.md +42 -0
  203. package/skills/ce-brainstorm/references/reasoning-elevation.md +63 -0
  204. package/skills/ce-brainstorm/references/settled-decisions.md +45 -0
  205. package/skills/ce-brainstorm/references/synthesis-summary.md +282 -0
  206. package/skills/ce-brainstorm/references/universal-brainstorming.md +73 -0
  207. package/skills/ce-brainstorm/references/verdict-routing.md +26 -0
  208. package/skills/ce-brainstorm/references/visual-probes.md +158 -0
  209. package/skills/ce-brainstorm/scripts/visual-probe-server.js +418 -0
  210. package/skills/ce-compound/SKILL.md +114 -0
  211. package/skills/ce-compound/assets/resolution-template.md +94 -0
  212. package/skills/ce-compound/references/agents/best-practices-researcher.md +115 -0
  213. package/skills/ce-compound/references/agents/data-integrity-guardian.md +68 -0
  214. package/skills/ce-compound/references/agents/framework-docs-researcher.md +93 -0
  215. package/skills/ce-compound/references/agents/pattern-recognition-specialist.md +55 -0
  216. package/skills/ce-compound/references/agents/performance-oracle.md +108 -0
  217. package/skills/ce-compound/references/agents/security-sentinel.md +91 -0
  218. package/skills/ce-compound/references/agents/session-historian.md +83 -0
  219. package/skills/ce-compound/references/concepts-vocabulary.md +78 -0
  220. package/skills/ce-compound/references/full-mode-workflow.md +413 -0
  221. package/skills/ce-compound/references/grounding-validation.md +84 -0
  222. package/skills/ce-compound/references/lightweight-mode.md +53 -0
  223. package/skills/ce-compound/references/output-standards.md +182 -0
  224. package/skills/ce-compound/references/promotion-rules.md +38 -0
  225. package/skills/ce-compound/references/schema.yaml +231 -0
  226. package/skills/ce-compound/references/three-tier-index.md +55 -0
  227. package/skills/ce-compound/references/v0.5-upgrade.md +32 -0
  228. package/skills/ce-compound/references/write-flow.md +36 -0
  229. package/skills/ce-compound/references/yaml-schema.md +118 -0
  230. package/skills/ce-compound/scripts/session-history/discover-sessions.sh +130 -0
  231. package/skills/ce-compound/scripts/session-history/extract-errors.py +254 -0
  232. package/skills/ce-compound/scripts/session-history/extract-metadata.py +456 -0
  233. package/skills/ce-compound/scripts/session-history/extract-skeleton.py +575 -0
  234. package/skills/ce-compound/scripts/validate-doc-claims.py +346 -0
  235. package/skills/ce-compound/scripts/validate-frontmatter.py +137 -0
  236. package/skills/ce-ideate/SKILL.md +402 -0
  237. package/skills/ce-ideate/references/agents/issue-intelligence-analyst.md +200 -0
  238. package/skills/ce-ideate/references/agents/learnings-researcher.md +247 -0
  239. package/skills/ce-ideate/references/agents/slack-researcher.md +127 -0
  240. package/skills/ce-ideate/references/agents/web-researcher.md +121 -0
  241. package/skills/ce-ideate/references/divergent-ideation.md +89 -0
  242. package/skills/ce-ideate/references/html-rendering.md +634 -0
  243. package/skills/ce-ideate/references/ideation-sections.md +191 -0
  244. package/skills/ce-ideate/references/markdown-rendering.md +238 -0
  245. package/skills/ce-ideate/references/post-ideation-workflow.md +167 -0
  246. package/skills/ce-ideate/references/universal-ideation.md +107 -0
  247. package/skills/ce-ideate/references/web-research-cache.md +56 -0
  248. package/skills/ce-plan/SKILL.md +137 -0
  249. package/skills/ce-plan/references/agents/agent-native-planning-strategist.md +62 -0
  250. package/skills/ce-plan/references/agents/architecture-strategist.md +46 -0
  251. package/skills/ce-plan/references/agents/best-practices-researcher.md +114 -0
  252. package/skills/ce-plan/references/agents/data-integrity-guardian.md +68 -0
  253. package/skills/ce-plan/references/agents/data-migration-reviewer.md +103 -0
  254. package/skills/ce-plan/references/agents/deployment-verification-agent.md +157 -0
  255. package/skills/ce-plan/references/agents/framework-docs-researcher.md +93 -0
  256. package/skills/ce-plan/references/agents/git-history-analyzer.md +40 -0
  257. package/skills/ce-plan/references/agents/learnings-researcher.md +247 -0
  258. package/skills/ce-plan/references/agents/pattern-recognition-specialist.md +55 -0
  259. package/skills/ce-plan/references/agents/performance-oracle.md +108 -0
  260. package/skills/ce-plan/references/agents/repo-research-analyst.md +258 -0
  261. package/skills/ce-plan/references/agents/security-sentinel.md +91 -0
  262. package/skills/ce-plan/references/agents/slack-researcher.md +127 -0
  263. package/skills/ce-plan/references/agents/spec-flow-analyzer.md +80 -0
  264. package/skills/ce-plan/references/agents/web-researcher.md +121 -0
  265. package/skills/ce-plan/references/approach-altitude.md +55 -0
  266. package/skills/ce-plan/references/change-splitting.md +65 -0
  267. package/skills/ce-plan/references/completion-contract.md +33 -0
  268. package/skills/ce-plan/references/core-principles.md +40 -0
  269. package/skills/ce-plan/references/deepening-workflow.md +263 -0
  270. package/skills/ce-plan/references/dependency-graph.md +36 -0
  271. package/skills/ce-plan/references/html-rendering.md +634 -0
  272. package/skills/ce-plan/references/intake-routing.md +189 -0
  273. package/skills/ce-plan/references/markdown-rendering.md +238 -0
  274. package/skills/ce-plan/references/plan-handoff.md +150 -0
  275. package/skills/ce-plan/references/plan-sections.md +427 -0
  276. package/skills/ce-plan/references/plan-structure.md +120 -0
  277. package/skills/ce-plan/references/planning-modes.md +69 -0
  278. package/skills/ce-plan/references/reasoning-elevation.md +63 -0
  279. package/skills/ce-plan/references/research-workflow.md +165 -0
  280. package/skills/ce-plan/references/review-and-write.md +127 -0
  281. package/skills/ce-plan/references/settled-decisions.md +45 -0
  282. package/skills/ce-plan/references/synthesis-summary.md +418 -0
  283. package/skills/ce-plan/references/universal-planning.md +168 -0
  284. package/skills/ce-proof/SKILL.md +346 -0
  285. package/skills/ce-strategy/SKILL.md +97 -0
  286. package/skills/ce-strategy/references/interview.md +143 -0
  287. package/skills/ce-strategy/references/strategy-template.md +89 -0
  288. package/skills/code-reviewer/SKILL.md +84 -0
  289. package/skills/code-reviewer/code-reviewer-prompt.md +195 -0
  290. package/skills/contract-builder/SKILL.md +72 -0
  291. package/skills/design-system/SKILL.md +75 -0
  292. package/skills/design-system/references/agents/design-system-architect.md +138 -0
  293. package/skills/design-system/references/creation-flow.md +170 -0
  294. package/skills/design-system/references/preview-template.html +319 -0
  295. package/skills/design-system/references/token-derivation.md +115 -0
  296. package/skills/design-system/references/variant-schema.md +60 -0
  297. package/skills/e2e/SKILL.md +56 -0
  298. package/skills/e2e/references/test-verifier.md +40 -0
  299. package/skills/need-explorer/SKILL.md +79 -0
  300. package/skills/prototype/SKILL.md +98 -0
  301. package/skills/prototype/references/agents/design-system-architect.md +122 -0
  302. package/skills/prototype/references/checklist.md +82 -0
  303. package/skills/prototype/references/craft/accessibility-baseline.md +71 -0
  304. package/skills/prototype/references/craft/anti-ai-slop.md +87 -0
  305. package/skills/prototype/references/craft/laws-of-ux.md +60 -0
  306. package/skills/prototype/references/craft/state-coverage.md +81 -0
  307. package/skills/prototype/references/craft/typography-hierarchy.md +50 -0
  308. package/skills/prototype/references/layouts.md +223 -0
  309. package/skills/prototype/references/orchestration-flow.md +101 -0
  310. package/skills/prototype/references/prototype-scaffold/assets/design-tokens.css +19 -0
  311. package/skills/prototype/references/prototype-scaffold/components/button.html +3 -0
  312. package/skills/prototype/references/prototype-scaffold/design-system.md +7 -0
  313. package/skills/prototype/references/prototype-scaffold/flow.md +11 -0
  314. package/skills/prototype/references/prototype-scaffold/index.html +20 -0
  315. package/skills/prototype/references/prototype-scaffold/pages/index.html +11 -0
  316. package/skills/prototype/references/template.html +396 -0
  317. package/skills/release-archivist/SKILL.md +166 -0
  318. package/skills/release-archivist/references/closing-procedures.md +81 -0
  319. package/skills/session-handoff/SKILL.md +110 -0
  320. package/skills/session-handoff/references/context-extraction.md +70 -0
  321. package/skills/session-handoff/references/handoff-template.md +90 -0
  322. package/skills/session-handoff/references/skill-recommendation.md +43 -0
  323. package/skills/spec-merger/SKILL.md +66 -0
  324. package/skills/spec-writer/SKILL.md +149 -0
  325. package/skills/workflow-bootstrap/SKILL.md +148 -0
  326. package/skills/workflow-bootstrap/references/agents/codebase-recon-analyst.md +121 -0
  327. package/skills/workflow-bootstrap/references/b1-reconnaissance.md +80 -0
  328. package/skills/workflow-bootstrap/scripts/recon-probe.sh +328 -0
  329. package/skills/workflow-feedback/SKILL.md +120 -0
  330. package/skills/workflow-feedback/references/category-guide.md +121 -0
  331. package/skills/workflow-feedback/references/feedback-template.md +73 -0
  332. package/skills/workflow-feedback/references/review-mode.md +92 -0
  333. package/skills/workflow-orchestrator/SKILL.md +94 -0
  334. package/skills/workflow-orchestrator/references/feedback-loops.md +56 -0
  335. package/skills/workflow-orchestrator/references/s1-path-router.md +81 -0
  336. package/skills/workflow-orchestrator/references/s2-prd-prototype-loop.md +96 -0
  337. package/skills/workflow-orchestrator/references/s3-plan-pipeline.md +50 -0
  338. package/skills/workflow-orchestrator/references/s4-split-validate.md +108 -0
  339. package/skills/workflow-orchestrator/references/s5-monitoring.md +61 -0
  340. package/skills/workflow-orchestrator/references/state-model.md +185 -0
  341. package/skills/workflow-start/SKILL.md +147 -0
  342. package/skills/workflow-start/references/routing-rules.md +155 -0
  343. package/src/index.ts +16 -0
  344. package/src/parsing/change-parser.ts +79 -0
  345. package/src/parsing/requirement-blocks.ts +244 -0
  346. package/src/schema/base.ts +8 -0
  347. package/src/schema/change.ts +29 -0
  348. package/src/schema/index.ts +3 -0
  349. package/src/schema/spec.ts +12 -0
  350. package/src/validation/constants.ts +53 -0
  351. package/src/validation/tokenizer.ts +180 -0
  352. package/src/validation/types.ts +47 -0
  353. package/src/validation/validator.ts +552 -0
  354. package/templates/abandonment-summary.md +29 -0
  355. package/templates/design.md +37 -0
  356. package/templates/execution-contract.md +99 -0
  357. package/templates/plan.md +86 -0
  358. package/templates/prd.md +468 -0
  359. package/templates/proposal.md +37 -0
  360. package/templates/spec.md +31 -0
  361. package/templates/tasks.md +47 -0
  362. package/tests/e2e.test.mjs +266 -0
  363. package/tests/lib/cmd-audit.test.mjs +202 -0
  364. package/tests/lib/cmd-checkpoint.test.mjs +98 -0
  365. package/tests/lib/cmd-config.test.mjs +101 -0
  366. package/tests/lib/cmd-doctor.test.mjs +450 -0
  367. package/tests/lib/cmd-execution.test.mjs +647 -0
  368. package/tests/lib/cmd-handoff.test.mjs +137 -0
  369. package/tests/lib/cmd-inject.test.mjs +218 -0
  370. package/tests/lib/cmd-install-workbuddy.test.mjs +113 -0
  371. package/tests/lib/cmd-install-zcode.test.mjs +42 -0
  372. package/tests/lib/cmd-isolate.test.mjs +68 -0
  373. package/tests/lib/cmd-list.test.mjs +127 -0
  374. package/tests/lib/cmd-runtime.test.mjs +83 -0
  375. package/tests/lib/cmd-state-missing.test.mjs +65 -0
  376. package/tests/lib/cmd-state.test.mjs +365 -0
  377. package/tests/lib/cmd-sync-paths.test.mjs +84 -0
  378. package/tests/lib/cmd-validate-paths.test.mjs +90 -0
  379. package/tests/lib/config-loader.test.mjs +175 -0
  380. package/tests/lib/ensure-branch.test.mjs +59 -0
  381. package/tests/lib/execution-control-plane.test.mjs +168 -0
  382. package/tests/lib/execution-plan.test.mjs +474 -0
  383. package/tests/lib/guard-specs-merged.test.mjs +108 -0
  384. package/tests/lib/guard-tests-passing.test.mjs +112 -0
  385. package/tests/lib/guard-transitions.test.mjs +262 -0
  386. package/tests/lib/guard.test.mjs +611 -0
  387. package/tests/lib/hash.test.mjs +138 -0
  388. package/tests/lib/infer-workflow.test.mjs +161 -0
  389. package/tests/lib/install-git-hooks.test.mjs +20 -0
  390. package/tests/lib/marketplace-release-docs.test.mjs +31 -0
  391. package/tests/lib/minimality-discipline.test.mjs +37 -0
  392. package/tests/lib/model-profiles-docs.test.mjs +33 -0
  393. package/tests/lib/node20-compatibility.test.mjs +73 -0
  394. package/tests/lib/node20-test-entry.test.mjs +17 -0
  395. package/tests/lib/platform-runtime-distribution.test.mjs +150 -0
  396. package/tests/lib/raw-mode-smoke.test.mjs +42 -0
  397. package/tests/lib/sdd-overlay.test.mjs +118 -0
  398. package/tests/lib/spec-paths.test.mjs +80 -0
  399. package/tests/lib/state-loader.test.mjs +251 -0
  400. package/tests/lib/token-baseline.test.mjs +72 -0
  401. package/tests/lib/token-rules.test.mjs +94 -0
  402. package/tests/lib/verify-marketplace-release.test.mjs +128 -0
  403. package/tests/tsconfig.json +12 -0
  404. package/token-baseline.json +95 -0
  405. package/tsconfig.json +14 -0
@@ -0,0 +1,112 @@
1
+ // tests/lib/guard-tests-passing.test.mjs
2
+ // Regression for BUG-A: the `executing → closing` transition was unreachable
3
+ // because `test_result` was never written, yet the tests-passing guard required it.
4
+ // Now the guard also accepts `dp_6_result` starting with "pass".
5
+
6
+ import { describe, it, before, after } from 'node:test';
7
+ import assert from 'node:assert/strict';
8
+ import { execFileSync } from 'node:child_process';
9
+ import { mkdtempSync, writeFileSync, rmSync, mkdirSync, existsSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ import { tmpdir } from 'node:os';
12
+ import { fileURLToPath } from 'node:url';
13
+ import { dirname } from 'node:path';
14
+
15
+ const __dirname = dirname(fileURLToPath(import.meta.url));
16
+ const ROOT = join(__dirname, '..', '..');
17
+ const GUARD = join(ROOT, 'scripts', 'guard', 'guard.mjs');
18
+ const CLI = join(ROOT, 'scripts', 'team-flow.mjs');
19
+
20
+ function makeChangeDir() {
21
+ const dir = mkdtempSync(join(tmpdir(), 'tf-tests-passing-'));
22
+ mkdirSync(join(dir, 'specs'), { recursive: true });
23
+ writeFileSync(join(dir, 'proposal.md'), '# Test\n\n## Why\nTest.\n\n## What Changes\n- Test.\n');
24
+ writeFileSync(join(dir, 'design.md'), '# Design\n\n## Context\nTest.\n\n## Goals\nTest.\n\n## Decisions\n\n### Decision 1\n- Choice: Test\n- Rationale: Test\n\n## Risks And Trade-Offs\nNone.\n');
25
+ writeFileSync(join(dir, 'tasks.md'), '# Tasks\n\n- [x] Task 1\n- [x] Task 2\n');
26
+ writeFileSync(join(dir, 'specs', 'test.md'), '## ADDED Requirements\n\n### Requirement: Test\n\nThe system SHALL test.\n\n#### Scenario: Test\n- **WHEN** test\n- **THEN** test\n');
27
+ writeFileSync(join(dir, 'execution-contract.md'), '# Execution Contract\n\n## Intent Lock\nTest.\n');
28
+ initializeGitRepository(dir);
29
+ return dir;
30
+ }
31
+
32
+ function runGit(directory, args) {
33
+ return execFileSync('git', args, { cwd: directory, encoding: 'utf8' }).trim();
34
+ }
35
+
36
+ function initializeGitRepository(directory) {
37
+ runGit(directory, ['init', '--quiet']);
38
+ runGit(directory, ['config', 'user.email', 'tests@example.invalid']);
39
+ runGit(directory, ['config', 'user.name', 'Guard Tests Passing Test']);
40
+ runGit(directory, ['add', '--all']);
41
+ runGit(directory, ['commit', '--quiet', '--message', 'initial closing guard change']);
42
+ const base = runGit(directory, ['rev-parse', 'HEAD']);
43
+ writeFileSync(join(directory, 'git-range-marker.txt'), 'second commit\n');
44
+ runGit(directory, ['add', 'git-range-marker.txt']);
45
+ runGit(directory, ['commit', '--quiet', '--message', 'second closing guard change']);
46
+ return { base, head: runGit(directory, ['rev-parse', 'HEAD']) };
47
+ }
48
+
49
+ function cleanup(dir) {
50
+ if (existsSync(dir)) rmSync(dir, { recursive: true, force: true });
51
+ }
52
+
53
+ // Writes a state file in `executing` and runs the guard for executing -> closing.
54
+ // The guard emits the structured result to stdout (--json mode), so capture both
55
+ // stdout and stderr for assertions.
56
+ function runClosingGuard(dir, extraState = '') {
57
+ try {
58
+ // `spec_merged: true` is in the base state so the #28 specs-merged gate
59
+ // passes — these tests isolate the tests-passing dimension only.
60
+ // (The specs-merged dimension is covered separately in
61
+ // tests/lib/guard-specs-merged.test.mjs.)
62
+ writeFileSync(
63
+ join(dir, '.team-flow.yaml'),
64
+ `state: executing\nworkflow: full\nchange_name: test\nspec_merged: true\n${extraState}`,
65
+ );
66
+ rmSync(join(dir, '.superpowers'), { recursive: true, force: true });
67
+ execFileSync('node', [CLI, 'execution', 'recommend', dir,
68
+ '--wave', 'close:serial:1.1'], { stdio: 'pipe', timeout: 5000 });
69
+ execFileSync('node', [CLI, 'execution', 'plan', dir, '--mode', 'sdd',
70
+ '--confirm', '--acknowledge-recommendation', '--reason', 'closing guard regression fixture',
71
+ '--wave', 'close:serial:1.1'], { stdio: 'pipe', timeout: 5000 });
72
+ const report = join(dir, '.superpowers', 'sdd', 'reviews', 'close-review.md');
73
+ mkdirSync(join(dir, '.superpowers', 'sdd', 'reviews'), { recursive: true });
74
+ writeFileSync(report, 'review passed\n');
75
+ const base = runGit(dir, ['rev-parse', 'HEAD~1']);
76
+ const head = runGit(dir, ['rev-parse', 'HEAD']);
77
+ execFileSync('node', [CLI, 'execution', 'review', dir, '--wave', 'close',
78
+ '--base', base, '--head', head, '--report', report, '--verdict', 'pass'], { stdio: 'pipe', timeout: 5000 });
79
+ execFileSync('node', [GUARD, 'check', dir, 'executing', 'closing', '--json'], { stdio: 'pipe', timeout: 5000 });
80
+ return { ok: true, stderr: '' };
81
+ } catch (e) {
82
+ const out = `${e.stdout?.toString() || ''}\n${e.stderr?.toString() || ''}`;
83
+ return { ok: false, stderr: out || e.message };
84
+ }
85
+ }
86
+
87
+ describe('BUG-A: executing -> closing reachable once verification recorded', () => {
88
+ let dir;
89
+ before(() => { dir = makeChangeDir(); });
90
+ after(() => { cleanup(dir); });
91
+
92
+ it('SHALL fail when no verification outcome recorded', () => {
93
+ const r = runClosingGuard(dir);
94
+ assert.equal(r.ok, false, 'closing must be blocked without a verification result');
95
+ assert.match(r.stderr, /verification outcome missing/i);
96
+ });
97
+
98
+ it('SHALL pass when dp_6_result starts with "pass" (the release-archivist signal)', () => {
99
+ const r = runClosingGuard(dir, 'dp_6_result: pass: all green\n');
100
+ assert.equal(r.ok, true, `closing should be allowed via dp_6_result, got: ${r.stderr || ''}`);
101
+ });
102
+
103
+ it('SHALL pass when test_result is explicitly "pass"', () => {
104
+ const r = runClosingGuard(dir, 'test_result: pass\n');
105
+ assert.equal(r.ok, true, `closing should be allowed via test_result, got: ${r.stderr || ''}`);
106
+ });
107
+
108
+ it('SHALL fail when dp_6_result is "fail" (not a pass signal)', () => {
109
+ const r = runClosingGuard(dir, 'dp_6_result: fail: broken\n');
110
+ assert.equal(r.ok, false, 'closing must be blocked when verification failed');
111
+ });
112
+ });
@@ -0,0 +1,262 @@
1
+ // tests/lib/guard-transitions.test.mjs
2
+ // Regression tests for state machine transition guard matrix
3
+ // Covers specs/guard-transitions/spec.md requirements
4
+
5
+ import { describe, it, before, after } from 'node:test';
6
+ import assert from 'node:assert/strict';
7
+ import { execSync } from 'node:child_process';
8
+ import { mkdtempSync, writeFileSync, rmSync, mkdirSync, existsSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { tmpdir } from 'node:os';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { dirname } from 'node:path';
13
+
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const ROOT = join(__dirname, '..', '..');
16
+ const GUARD = join(ROOT, 'scripts', 'guard', 'guard.mjs');
17
+
18
+ // All legal transitions (from docs/state-machine.md)
19
+ const ALL_TRANSITIONS = [
20
+ // Mainline
21
+ { from: 'exploring', to: 'specifying' },
22
+ { from: 'specifying', to: 'bridging' },
23
+ { from: 'bridging', to: 'approved-for-build' },
24
+ { from: 'approved-for-build', to: 'executing' },
25
+ { from: 'executing', to: 'closing' },
26
+ // Fast-path
27
+ { from: 'exploring', to: 'bridging', workflow: 'hotfix' },
28
+ { from: 'exploring', to: 'approved-for-build', workflow: 'tweak' },
29
+ // Rewind
30
+ { from: 'executing', to: 'specifying' },
31
+ { from: 'executing', to: 'bridging' },
32
+ { from: 'approved-for-build', to: 'specifying' },
33
+ { from: 'approved-for-build', to: 'bridging' },
34
+ { from: 'specifying', to: 'exploring' },
35
+ { from: 'bridging', to: 'specifying' },
36
+ // Debugging round-trip
37
+ { from: 'executing', to: 'debugging' },
38
+ { from: 'debugging', to: 'executing' },
39
+ // Abandon
40
+ { from: 'exploring', to: 'abandoned' },
41
+ { from: 'specifying', to: 'abandoned' },
42
+ { from: 'bridging', to: 'abandoned' },
43
+ { from: 'approved-for-build', to: 'abandoned' },
44
+ { from: 'executing', to: 'abandoned' },
45
+ { from: 'debugging', to: 'abandoned' },
46
+ ];
47
+
48
+ // Illegal transitions (should be rejected)
49
+ const ILLEGAL_TRANSITIONS = [
50
+ { from: 'exploring', to: 'closing' },
51
+ { from: 'exploring', to: 'executing' },
52
+ { from: 'specifying', to: 'executing' },
53
+ { from: 'specifying', to: 'closing' },
54
+ { from: 'bridging', to: 'closing' },
55
+ { from: 'closing', to: 'abandoned' },
56
+ { from: 'abandoned', to: 'exploring' },
57
+ { from: 'abandoned', to: 'specifying' },
58
+ ];
59
+
60
+ function makeChangeDir() {
61
+ const dir = mkdtempSync(join(tmpdir(), 'tf-guard-test-'));
62
+ mkdirSync(join(dir, 'specs', 'test'), { recursive: true });
63
+ return dir;
64
+ }
65
+
66
+ function cleanup(dir) {
67
+ if (existsSync(dir)) rmSync(dir, { recursive: true, force: true });
68
+ }
69
+
70
+ function runGuard(from, to, dir, workflow = 'full') {
71
+ try {
72
+ // Write a minimal .team-flow.yaml so guard can read state
73
+ const stateFile = join(dir, '.team-flow.yaml');
74
+ writeFileSync(stateFile, `state: ${from}\nworkflow: ${workflow}\nchange_name: test\n`);
75
+
76
+ // Also need a minimal proposal.md for artifacts-exist check
77
+ writeFileSync(join(dir, 'proposal.md'), '# Test\n\n## Why\n\nTest change for guard matrix audit.\n\n## What Changes\n\n- Test.\n');
78
+ writeFileSync(join(dir, 'design.md'), '# Design\n\n## Context\n\nTest.\n\n## Goals\n\nTest.\n\n## Decisions\n\n### Decision 1\n- Choice: Test\n- Rationale: Test\n\n## Risks And Trade-Offs\n\nNone.\n');
79
+ writeFileSync(join(dir, 'tasks.md'), '# Tasks\n\n- [x] Task 1\n- [x] Task 2\n');
80
+ writeFileSync(join(dir, 'specs', 'test', 'spec.md'), '## ADDED Requirements\n\n### Requirement: Test\n\nThe system SHALL test.\n\n#### Scenario: Test\n- **WHEN** test\n- **THEN** test\n');
81
+ writeFileSync(join(dir, 'execution-contract.md'), '# Execution Contract\n\n## Intent Lock\n\nTest.\n');
82
+
83
+ const cmd = `node ${GUARD} check "${dir}" ${from} ${to}`;
84
+ if (workflow !== 'full') {
85
+ execSync(`${cmd} --workflow ${workflow} --json`, { stdio: 'pipe', timeout: 5000 });
86
+ } else {
87
+ execSync(`${cmd} --json`, { stdio: 'pipe', timeout: 5000 });
88
+ }
89
+ return { ok: true };
90
+ } catch (e) {
91
+ return { ok: false, stdout: e.stdout?.toString() || '', stderr: e.stderr?.toString() || e.message };
92
+ }
93
+ }
94
+
95
+ function guardOutput(result) {
96
+ return `${result.stdout || ''}\n${result.stderr || ''}`;
97
+ }
98
+
99
+ // ─── D1: Guard 检查矩阵完整性 ───
100
+ // Requirement: Guard 检查矩阵完整性
101
+ // Scenario: 主线 transition 全覆盖
102
+
103
+ describe('Guard transition matrix completeness', () => {
104
+ let dir;
105
+ before(() => { dir = makeChangeDir(); });
106
+ after(() => { cleanup(dir); });
107
+
108
+ for (const t of ALL_TRANSITIONS) {
109
+ const label = `${t.from} → ${t.to}${t.workflow ? ' (' + t.workflow + ')' : ''}`;
110
+ it(`SHALL define checks for ${label}`, () => {
111
+ const result = runGuard(t.from, t.to, dir, t.workflow || 'full');
112
+ // The transition should be handled (either pass or fail with specific reason, but not "unknown transition")
113
+ if (!result.ok) {
114
+ const output = guardOutput(result);
115
+ assert.ok(
116
+ !output.includes('unknown transition') && !output.includes('Unknown transition'),
117
+ `Transition ${label} is not defined in guard matrix: ${output}`
118
+ );
119
+ }
120
+ });
121
+ }
122
+ });
123
+
124
+ // Requirement: Guard 检查矩阵完整性
125
+ // Scenario: 非法 transition 被拦截
126
+ describe('Illegal transition rejection', () => {
127
+ let dir;
128
+ before(() => { dir = makeChangeDir(); });
129
+ after(() => { cleanup(dir); });
130
+
131
+ for (const t of ILLEGAL_TRANSITIONS) {
132
+ it(`SHALL reject illegal transition ${t.from} → ${t.to}`, () => {
133
+ const result = runGuard(t.from, t.to, dir);
134
+ assert.equal(result.ok, false, `Illegal transition ${t.from} → ${t.to} should be rejected`);
135
+ });
136
+ }
137
+ });
138
+
139
+ // Requirement: Guard 脚本错误处理
140
+ // Scenario: guard 脚本异常时报告给用户
141
+ describe('Guard error handling', () => {
142
+ it('SHALL return non-zero exit when called without arguments', () => {
143
+ try {
144
+ execSync(`node ${GUARD} check`, { stdio: 'pipe', timeout: 5000 });
145
+ assert.fail('Should have thrown');
146
+ } catch (e) {
147
+ assert.ok(e.status !== 0, 'Guard should exit non-zero for missing arguments');
148
+ }
149
+ });
150
+
151
+ it('SHALL output error for nonexistent change directory', () => {
152
+ try {
153
+ execSync(`node ${GUARD} check /nonexistent/path exploring specifying`, { stdio: 'pipe', timeout: 5000 });
154
+ assert.fail('Should have thrown');
155
+ } catch (e) {
156
+ assert.ok(e.status !== 0, 'Guard should exit non-zero for nonexistent directory');
157
+ }
158
+ });
159
+ });
160
+
161
+ // ─── D1: Debugging 状态往返 ───
162
+ // Requirement: Debugging 状态往返无副作用
163
+ // Scenario: debugging 返回 executing 后进度保留
164
+ describe('Debugging round-trip', () => {
165
+ let dir;
166
+ before(() => { dir = makeChangeDir(); });
167
+ after(() => { cleanup(dir); });
168
+
169
+ it('SHALL allow executing → debugging transition', () => {
170
+ const result = runGuard('executing', 'debugging', dir);
171
+ // The transition may fail due to missing execution artifacts, but should NOT be "unknown transition"
172
+ if (!result.ok) {
173
+ const output = guardOutput(result);
174
+ assert.ok(!output.includes('unknown'), `Should not reject with unknown: ${output}`);
175
+ }
176
+ });
177
+
178
+ it('SHALL allow debugging → executing transition', () => {
179
+ const result = runGuard('debugging', 'executing', dir);
180
+ if (!result.ok) {
181
+ const output = guardOutput(result);
182
+ assert.ok(!output.includes('unknown'), `Should not reject with unknown: ${output}`);
183
+ }
184
+ });
185
+ });
186
+
187
+ // ─── D1: Terminal state protection ───
188
+ // Requirement: 废弃状态转换禁止
189
+ // Scenario: abandoned 后拒绝所有 transition
190
+ describe('Terminal state protection — abandoned', () => {
191
+ let dir;
192
+ before(() => { dir = makeChangeDir(); });
193
+ after(() => { cleanup(dir); });
194
+
195
+ const allTargets = ['exploring', 'specifying', 'bridging', 'approved-for-build', 'executing', 'debugging', 'closing'];
196
+
197
+ for (const target of allTargets) {
198
+ it(`SHALL reject abandoned → ${target}`, () => {
199
+ const result = runGuard('abandoned', target, dir);
200
+ assert.equal(result.ok, false, `Abandoned → ${target} must be rejected (terminal state)`);
201
+ });
202
+ }
203
+ });
204
+
205
+ // Scenario: 从 closing 不能进入 abandoned
206
+ describe('Terminal state protection — closing', () => {
207
+ let dir;
208
+ before(() => { dir = makeChangeDir(); });
209
+ after(() => { cleanup(dir); });
210
+
211
+ it('SHALL reject closing → abandoned', () => {
212
+ const result = runGuard('closing', 'abandoned', dir);
213
+ assert.equal(result.ok, false, 'Closing → abandoned must be rejected (both terminal)');
214
+ });
215
+ });
216
+
217
+ // ─── D1: Fast-path validation ───
218
+ // Requirement: Guard 检查矩阵完整性
219
+ // Scenario: fast-path 有降级保护
220
+ describe('Fast-path validation', () => {
221
+ let dir;
222
+ before(() => { dir = makeChangeDir(); });
223
+ after(() => { cleanup(dir); });
224
+
225
+ it('SHALL support hotfix fast-path (exploring → bridging)', () => {
226
+ const result = runGuard('exploring', 'bridging', dir, 'hotfix');
227
+ // May fail on schema-valid or other checks, but should NOT be "unknown transition"
228
+ if (!result.ok) {
229
+ const output = guardOutput(result);
230
+ assert.ok(!output.includes('unknown'), `Hotfix fast-path should be defined: ${output}`);
231
+ }
232
+ });
233
+
234
+ it('SHALL support tweak fast-path (exploring → approved-for-build)', () => {
235
+ const result = runGuard('exploring', 'approved-for-build', dir, 'tweak');
236
+ if (!result.ok) {
237
+ const output = guardOutput(result);
238
+ assert.ok(!output.includes('unknown'), `Tweak fast-path should be defined: ${output}`);
239
+ }
240
+ });
241
+
242
+ it('SHALL reject hotfix fast-path when workflow is full', () => {
243
+ const result = runGuard('exploring', 'bridging', dir, 'full');
244
+ const output = guardOutput(result);
245
+ assert.equal(result.ok, false, 'exploring -> bridging must be rejected in full workflow');
246
+ assert.match(output, /workflow-mode|fast-path|hotfix|tweak/i);
247
+ });
248
+
249
+ it('SHALL reject tweak route to bridging', () => {
250
+ const result = runGuard('exploring', 'bridging', dir, 'tweak');
251
+ const output = guardOutput(result);
252
+ assert.equal(result.ok, false, 'tweak should use exploring -> approved-for-build, not bridging');
253
+ assert.match(output, /workflow-mode|hotfix/i);
254
+ });
255
+
256
+ it('SHALL reject tweak fast-path when workflow is full', () => {
257
+ const result = runGuard('exploring', 'approved-for-build', dir, 'full');
258
+ const output = guardOutput(result);
259
+ assert.equal(result.ok, false, 'exploring -> approved-for-build must be rejected in full workflow');
260
+ assert.match(output, /workflow-mode|fast-path|tweak/i);
261
+ });
262
+ });