@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,170 @@
1
+ # 交互创建流程(Creation Flow)
2
+
3
+ 设计系统创建的 6 步详细规程。**用户主导**:LLM 预填推荐值 + 报告选择原因,用户原样确认或调整。
4
+ **确定性**:相同的 5 维输入永远派生出相同的 token 体系(rule-based,非随机)。
5
+
6
+ > Token 四层模型(A1-identity / A1-structure / A2-derived / B-slot)+ C-extension 名单制,
7
+ > 与 prototype skill 的 `design-token-guard.mjs` 共享同一完整性约束。
8
+
9
+ ---
10
+
11
+ ## Step 1: 需求收集(5 维封闭词汇)
12
+
13
+ 用 **AskUserQuestion** 一次性收集 5 个维度。每个问题预填 LLM 推荐默认值,并附「为什么推荐这个」。
14
+ 用户可原样确认,也可改成封闭词汇内的其它值。**封闭词汇外的自由输入 → 追问澄清,不猜测。**
15
+
16
+ ### 维度 1:品牌调性(mood)— 决定调色板方向
17
+
18
+ | 值 | 含义 | 适配场景 |
19
+ |----|------|---------|
20
+ | `professional_minimal` | 专业克制 | B 端 SaaS、企业后台、金融/数据平台(**默认**) |
21
+ | `warm_approachable` | 温暖亲和 | C 端生活/教育/健康、社区产品 |
22
+ | `technical_dense` | 技术密集 | 开发者工具、监控/运维、IDE 类 |
23
+ | `editorial` | 编辑排版 | 内容/媒体/阅读类、品牌官网 |
24
+ | `brutalist` | 粗野主义 | 实验性/艺术/独立产品、强个性品牌 |
25
+
26
+ ### 维度 2:品牌主色(brand_color)
27
+
28
+ - 用户给具体 `#RRGGBB` → 直接采用为 `--accent`。
29
+ - 用户答「帮我选」/未给 → 按 mood 取映射表的 accent(见 Step 2 表),并记入透明报告。
30
+ - 非法 hex(非 6 位、非 hex 字符)→ 追问「你是指 #RRGGBB 格式吗?」。
31
+
32
+ ### 维度 3:展示字体(display_font)— 决定 `--font-display`
33
+
34
+ | 值 | font-display 栈 | 默认配 mood |
35
+ |----|----------------|------------|
36
+ | `serif_display` | `'Iowan Old Style', Charter, Georgia, serif` | editorial |
37
+ | `sans_display` | `-apple-system, 'Segoe UI', system-ui, sans-serif` | professional_minimal / warm_approachable / brutalist(**全局默认**) |
38
+ | `mono_accent` | `'SF Mono', 'JetBrains Mono', ui-monospace, monospace` | technical_dense |
39
+
40
+ > `--font-body` 恒定 `-apple-system, 'Segoe UI', system-ui, sans-serif`(A1-identity 必选);
41
+ > `--font-mono` 属 A2-derived,按代码场景派生。零外部依赖:只用系统字体栈,不引 webfont。
42
+
43
+ ### 维度 4:信息密度(density)— 决定 spacing/typography 变体
44
+
45
+ | 值 | 基准间距 `--space-4` | 行高 | 字号基准 | 默认配 |
46
+ |----|---------------------|------|---------|--------|
47
+ | `compact` | 12px | 1.4 | 14px | technical_dense |
48
+ | `balanced` | 16px | 1.5 | 16px | professional_minimal(**全局默认**) |
49
+ | `spacious` | 20px | 1.65 | 17px | warm_approachable / editorial |
50
+
51
+ ### 维度 5:目标端(target)— 决定产出几个变体文件
52
+
53
+ | 值 | 产出 |
54
+ |----|------|
55
+ | `b_end` | base.md + b-end.md |
56
+ | `c_end` | base.md + c-end.md |
57
+ | `both` | base.md + b-end.md + c-end.md(**默认**,覆盖最广) |
58
+
59
+ ---
60
+
61
+ ## Step 2: 确定性 Token 派生
62
+
63
+ ### Mood → 调色板映射表(确定性,同 mood 同色)
64
+
65
+ | mood | accent(品牌主色 `--accent`) | neutral 锚点(ink `--fg` 基调) |
66
+ |------|------------------------------|--------------------------------|
67
+ | `professional_minimal` | `#3B82F6`(blue) | `#64748B`(slate) |
68
+ | `warm_approachable` | `#C96442`(terracotta) | `#D97706`(amber) |
69
+ | `technical_dense` | `#0891B2`(cyan) | `#059669`(emerald) |
70
+ | `editorial` | `#1A1916`(ink) | `#6B6964`(stone) |
71
+ | `brutalist` | `#DC2626`(red) | `#000000`(black) |
72
+
73
+ - 用户给了 brand_color → 覆盖表中 accent,neutral 锚点仍按 mood 取。
74
+ - 派生顺序:**palette first** → A1-identity → A2-derived → B-slot。
75
+ - 5 方向调色板(neutral / primary / success / warning / danger)各派生 50–900 阶梯;
76
+ primary 阶梯以 accent 为 500 锚点向两端推。具体公式见 `token-derivation.md`。
77
+
78
+ ### A1-identity(8 必选,缺 = guard 失败)
79
+ `--bg` `--surface` `--fg` `--muted` `--border` `--accent` `--font-display` `--font-body`
80
+
81
+ ### A2-derived(color-mix 公式派生,不手写固定 hex)
82
+ ```
83
+ --accent-hover: color-mix(in oklab, var(--accent), black 8%)
84
+ --accent-active: color-mix(in oklab, var(--accent), black 14%)
85
+ --focus-ring: color-mix(in oklab, var(--accent), transparent 70%)
86
+ --elev-raised: color-mix(in oklab, var(--fg), transparent 92%)
87
+ ```
88
+ 另含 `--success` `--warn` `--danger` `--font-mono` `--space-1~12` `--radius-sm/md/lg/pill`
89
+ `--motion-fast/base` `--ease-standard`。
90
+
91
+ ### B-slot(4 别名,组件引用永远可解析)
92
+ `--fg-2 → var(--fg)` / `--meta → var(--muted)` / `--border-soft → var(--border)` / `--surface-warm → var(--surface)`
93
+
94
+ ---
95
+
96
+ ## Step 3-4: 草稿 + 预览
97
+ - 按 target 生成 base.md + 变体(schema 见 `variant-schema.md`)。
98
+ - 用 `preview-template.html` 填 token 值 → 自包含 `preview.html`(色板/排版/间距/组件/明暗切换)。
99
+
100
+ ## Step 5: 用户评审 + 确认
101
+ 呈现三件套:① token 摘要表 ② preview.html 路径 ③ **默认值透明报告**。
102
+ AskUserQuestion 三选项:**确认落盘 / 调整某项(回到 Step 1 对应维度)/ 重新来(清空重来)**。
103
+
104
+ ## Step 6: 落盘 + guard
105
+ 两阶段写入由子代理执行(confirmed:false 草案 → 人工确认 → confirmed:true 写正式路径)。
106
+ 落盘后运行 `node scripts/guard/design-token-guard.mjs`,校验 A1+A2+B-slot 完整性。
107
+
108
+ ---
109
+
110
+ ## 默认解析规则(Default Resolution)
111
+
112
+ | 触发条件 | 应用的默认 | 理由 |
113
+ |---------|-----------|------|
114
+ | mood 未给 | `professional_minimal` | 最通用,B 端覆盖面最大,风险最低 |
115
+ | brand_color 未给/「帮我选」 | mood 表 accent | 保持调性与色彩一致 |
116
+ | display_font 未给 | `sans_display` | 系统栈零依赖,跨端最稳 |
117
+ | density 未给 | `balanced` | 16px 基准,适配多数信息场景 |
118
+ | target 未给 | `both` | 一次产出双端,避免后续补做 |
119
+ | mood 与某维度冲突(如 technical_dense + spacious) | 保留用户显式选择,仅在透明报告标注「非常规组合」 | 用户显式输入优先于推荐 |
120
+
121
+ **优先级**:用户显式输入 > mood 联动推荐 > 全局默认。冲突时不静默改写,标注后由 Step 5 确认。
122
+
123
+ ---
124
+
125
+ ## 默认值透明报告模板(Transparency Report)
126
+
127
+ 每次创建/迭代都必须随 Step 5 呈现,逐项列出「用了什么默认 + 为什么」:
128
+
129
+ ```markdown
130
+ ## 默认值透明报告
131
+ | 维度 | 最终值 | 来源 | 选择原因 |
132
+ |------|--------|------|---------|
133
+ | 品牌调性 | professional_minimal | 默认 | 未指定,取最通用 B 端调性 |
134
+ | 品牌主色 | #3B82F6 | mood 推荐 | 未给主色,按 professional_minimal 取 blue |
135
+ | 展示字体 | sans_display | 默认 | 未指定,系统字体栈零外部依赖 |
136
+ | 信息密度 | balanced | 默认 | 未指定,16px 基准适配多数场景 |
137
+ | 目标端 | both | 默认 | 未指定,一次覆盖 B/C 双端 |
138
+
139
+ ### 非常规组合提示
140
+ - (若有)technical_dense + spacious:保留你的显式选择,已按此派生。
141
+
142
+ ### 假设(Assumptions)
143
+ - 无品牌输入,采用调性默认调色板;如需精确品牌色请提供 #RRGGBB。
144
+ ```
145
+
146
+ ---
147
+
148
+ ## AskUserQuestion 格式示例
149
+
150
+ 预填推荐 + 封闭选项,用户原样确认或改选:
151
+
152
+ ```
153
+ Q1 品牌调性?(推荐:professional_minimal — 最通用 B 端调性)
154
+ [ professional_minimal | warm_approachable | technical_dense | editorial | brutalist ]
155
+
156
+ Q2 品牌主色?(推荐:#3B82F6 — 按 professional_minimal 推荐)
157
+ [ 用推荐 #3B82F6 | 我来填 hex… ]
158
+
159
+ Q3 展示字体?(推荐:sans_display — 系统栈零依赖)
160
+ [ serif_display | sans_display | mono_accent ]
161
+
162
+ Q4 信息密度?(推荐:balanced — 16px 基准)
163
+ [ compact | balanced | spacious ]
164
+
165
+ Q5 目标端?(推荐:both — 一次覆盖双端)
166
+ [ b_end | c_end | both ]
167
+ ```
168
+
169
+ **封闭词汇校验**:用户答「极简」→ 追问「你是指 professional_minimal 吗?」;
170
+ 答「蓝绿色」→ 追问具体 hex,不自行映射。澄清前不进入 Step 2。
@@ -0,0 +1,319 @@
1
+ <!-- design-system 预览画廊(v0.19.0):由 design-system skill 生成,token 值已填充。零外部依赖。 -->
2
+ <!DOCTYPE html>
3
+ <html lang="zh-CN" data-theme="light" data-density="balanced">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Design System 预览画廊</title>
8
+ <style>
9
+ /* ===== TOKEN 定义(由 skill 从派生规则填充) ===== */
10
+ :root {
11
+ /* A1-identity */
12
+ --bg: #FAFAF9;
13
+ --surface: #FFFFFF;
14
+ --fg: #1A1916;
15
+ --muted: #6B6964;
16
+ --border: #E8E5DF;
17
+ --accent: #3B82F6;
18
+ --font-display: Georgia, serif;
19
+ --font-body: -apple-system, system-ui, sans-serif;
20
+
21
+ /* A2-derived */
22
+ --accent-hover: color-mix(in oklab, var(--accent), black 8%);
23
+ --accent-active: color-mix(in oklab, var(--accent), black 14%);
24
+ --accent-soft: color-mix(in oklab, var(--accent), transparent 86%);
25
+ --focus-ring: 0 0 0 3px color-mix(in oklab, var(--accent), transparent 70%);
26
+ --elev-raised: 0 2px 8px color-mix(in oklab, var(--fg), transparent 92%);
27
+ --success: #16A34A;
28
+ --warn: #EAB308;
29
+ --danger: #DC2626;
30
+ --font-mono: ui-monospace, 'JetBrains Mono', monospace;
31
+ --space-1: 4px; --space-2: 8px; --space-3: 12px;
32
+ --space-4: 16px; --space-5: 20px; --space-6: 24px;
33
+ --space-7: 32px; --space-8: 40px; --space-9: 48px;
34
+ --space-10: 64px; --space-11: 80px; --space-12: 96px;
35
+ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-pill: 9999px;
36
+ --motion-fast: 150ms; --motion-base: 200ms;
37
+ --ease-standard: cubic-bezier(0.2, 0, 0, 1);
38
+
39
+ /* B-slot 别名 */
40
+ --fg-2: var(--fg);
41
+ --meta: var(--muted);
42
+ --border-soft: var(--border);
43
+ --surface-warm: var(--surface);
44
+
45
+ /* 5 方向调色板 — primary */
46
+ --primary-50: color-mix(in oklab, var(--accent), white 95%);
47
+ --primary-100: color-mix(in oklab, var(--accent), white 90%);
48
+ --primary-200: color-mix(in oklab, var(--accent), white 75%);
49
+ --primary-300: color-mix(in oklab, var(--accent), white 55%);
50
+ --primary-400: color-mix(in oklab, var(--accent), white 30%);
51
+ --primary-500: var(--accent);
52
+ --primary-600: color-mix(in oklab, var(--accent), black 10%);
53
+ --primary-700: color-mix(in oklab, var(--accent), black 22%);
54
+ --primary-800: color-mix(in oklab, var(--accent), black 35%);
55
+ --primary-900: color-mix(in oklab, var(--accent), black 48%);
56
+
57
+ /* 密度修正(balanced 默认) */
58
+ --text-base: 16px;
59
+ --container: 1120px;
60
+ }
61
+
62
+ /* Dark 模式覆盖 */
63
+ [data-theme="dark"] {
64
+ --bg: #1A1916;
65
+ --surface: #26251F;
66
+ --fg: #F5F5F4;
67
+ --muted: #A8A29E;
68
+ --border: #44403C;
69
+ }
70
+
71
+ /* Density: compact */
72
+ [data-density="compact"] { --text-base: 14px; --container: 1280px; }
73
+ /* Density: spacious */
74
+ [data-density="spacious"] { --text-base: 18px; --container: 960px; }
75
+
76
+ /* ===== 基础样式 ===== */
77
+ * { box-sizing: border-box; margin: 0; }
78
+ body {
79
+ font-family: var(--font-body);
80
+ font-size: var(--text-base);
81
+ background: var(--bg);
82
+ color: var(--fg);
83
+ line-height: 1.6;
84
+ padding: var(--space-6);
85
+ transition: background var(--motion-base) var(--ease-standard),
86
+ color var(--motion-base) var(--ease-standard);
87
+ }
88
+ .container { max-width: var(--container); margin: 0 auto; }
89
+ h1, h2, h3, h4 { font-family: var(--font-display); line-height: 1.25; }
90
+ section { margin-bottom: var(--space-9); }
91
+ section > h2 { margin-bottom: var(--space-4); border-bottom: 1px solid var(--border-soft); padding-bottom: var(--space-2); }
92
+
93
+ /* ===== 控制面板 ===== */
94
+ .tweaks {
95
+ display: flex; gap: var(--space-3); align-items: center;
96
+ padding: var(--space-3) var(--space-4);
97
+ background: var(--surface); border: 1px solid var(--border);
98
+ border-radius: var(--radius-md); margin-bottom: var(--space-7);
99
+ }
100
+ .tweaks button {
101
+ padding: var(--space-1) var(--space-3);
102
+ border: 1px solid var(--border); border-radius: var(--radius-sm);
103
+ background: var(--surface); color: var(--fg); cursor: pointer;
104
+ font-size: 0.85em; transition: all var(--motion-fast) var(--ease-standard);
105
+ }
106
+ .tweaks button:hover { background: var(--accent-soft); }
107
+
108
+ /* ===== 色板区 ===== */
109
+ .swatch-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: var(--space-3); }
110
+ .swatch {
111
+ border: 1px solid var(--border-soft); border-radius: var(--radius-sm);
112
+ overflow: hidden; text-align: center; font-size: 0.75em;
113
+ }
114
+ .swatch .block { height: 64px; }
115
+ .swatch .label { padding: var(--space-1) var(--space-2); color: var(--meta); }
116
+ .palette-row { display: flex; gap: 2px; margin-bottom: var(--space-2); }
117
+ .palette-row .cell { flex: 1; height: 40px; display: flex; align-items: flex-end; justify-content: center; font-size: 0.6em; padding: 2px; }
118
+
119
+ /* ===== 排版区 ===== */
120
+ .type-specimen { margin-bottom: var(--space-3); }
121
+ .type-specimen .px-label { font-size: 0.7em; color: var(--meta); font-family: var(--font-mono); }
122
+
123
+ /* ===== 间距区 ===== */
124
+ .space-ruler { display: flex; flex-direction: column; gap: var(--space-2); }
125
+ .space-bar { display: flex; align-items: center; gap: var(--space-2); }
126
+ .space-bar .bar { height: 16px; background: var(--accent-soft); border: 1px solid var(--accent); border-radius: 2px; }
127
+ .space-bar .lbl { font-size: 0.75em; color: var(--meta); font-family: var(--font-mono); white-space: nowrap; }
128
+
129
+ /* ===== 组件区 ===== */
130
+ .component-row { display: flex; flex-wrap: wrap; gap: var(--space-4); align-items: flex-start; margin-bottom: var(--space-4); }
131
+ .btn {
132
+ padding: var(--space-2) var(--space-4); border-radius: var(--radius-sm);
133
+ font-size: 0.9em; cursor: pointer; border: 1px solid transparent;
134
+ transition: all var(--motion-fast) var(--ease-standard);
135
+ }
136
+ .btn-primary { background: var(--accent); color: #fff; }
137
+ .btn-primary:hover { background: var(--accent-hover); }
138
+ .btn-primary:active { background: var(--accent-active); }
139
+ .btn-secondary { background: var(--surface); color: var(--fg); border-color: var(--border); }
140
+ .btn-secondary:hover { background: var(--accent-soft); }
141
+ .btn-ghost { background: transparent; color: var(--accent); }
142
+ .btn-ghost:hover { background: var(--accent-soft); }
143
+ .input-field {
144
+ padding: var(--space-2) var(--space-3); border: 1px solid var(--border);
145
+ border-radius: var(--radius-sm); font-size: 0.9em; background: var(--surface); color: var(--fg);
146
+ width: 240px;
147
+ }
148
+ .input-field:focus { outline: none; box-shadow: var(--focus-ring); border-color: var(--accent); }
149
+ .card {
150
+ background: var(--surface); border: 1px solid var(--border-soft);
151
+ border-radius: var(--radius-md); padding: var(--space-5);
152
+ box-shadow: var(--elev-raised); max-width: 280px;
153
+ }
154
+ .card h4 { margin-bottom: var(--space-2); }
155
+ .card p { font-size: 0.85em; color: var(--meta); }
156
+ .demo-table { border-collapse: collapse; font-size: 0.85em; }
157
+ .demo-table th, .demo-table td {
158
+ padding: var(--space-2) var(--space-3); border: 1px solid var(--border); text-align: left;
159
+ }
160
+ .demo-table th { background: var(--accent-soft); font-weight: 600; }
161
+ .badge {
162
+ display: inline-block; padding: 2px var(--space-2);
163
+ border-radius: var(--radius-pill); font-size: 0.75em; font-weight: 500;
164
+ }
165
+ .badge-success { background: color-mix(in oklab, var(--success), transparent 85%); color: var(--success); }
166
+ .badge-warn { background: color-mix(in oklab, var(--warn), transparent 85%); color: #92610A; }
167
+ .badge-danger { background: color-mix(in oklab, var(--danger), transparent 85%); color: var(--danger); }
168
+
169
+ /* ===== 派生色区 ===== */
170
+ .state-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: var(--space-3); }
171
+ .state-chip {
172
+ padding: var(--space-3); border-radius: var(--radius-sm);
173
+ text-align: center; font-size: 0.8em; border: 1px solid var(--border-soft);
174
+ }
175
+ .focus-demo { padding: var(--space-3); box-shadow: var(--focus-ring); border-radius: var(--radius-sm); text-align: center; font-size: 0.8em; }
176
+ </style>
177
+ </head>
178
+ <body>
179
+ <div class="container">
180
+
181
+ <!-- 控制面板 -->
182
+ <div class="tweaks">
183
+ <button id="themeToggle">🌙 切换暗色</button>
184
+ <button id="densityCompact">紧凑</button>
185
+ <button id="densityBalanced">均衡</button>
186
+ <button id="densitySpacious">宽松</button>
187
+ </div>
188
+
189
+ <!-- 1. 色板区 -->
190
+ <section>
191
+ <h2>色板区 Color Palette</h2>
192
+ <div class="swatch-grid">
193
+ <div class="swatch"><div class="block" style="background:var(--bg)"></div><div class="label">--bg</div></div>
194
+ <div class="swatch"><div class="block" style="background:var(--surface)"></div><div class="label">--surface</div></div>
195
+ <div class="swatch"><div class="block" style="background:var(--fg)"></div><div class="label">--fg</div></div>
196
+ <div class="swatch"><div class="block" style="background:var(--muted)"></div><div class="label">--muted</div></div>
197
+ <div class="swatch"><div class="block" style="background:var(--border)"></div><div class="label">--border</div></div>
198
+ <div class="swatch"><div class="block" style="background:var(--accent)"></div><div class="label">--accent</div></div>
199
+ </div>
200
+ <h3 style="margin:var(--space-4) 0 var(--space-2)">Primary 50–900</h3>
201
+ <div class="palette-row">
202
+ <div class="cell" style="background:var(--primary-50)">50</div>
203
+ <div class="cell" style="background:var(--primary-100)">100</div>
204
+ <div class="cell" style="background:var(--primary-200)">200</div>
205
+ <div class="cell" style="background:var(--primary-300)">300</div>
206
+ <div class="cell" style="background:var(--primary-400)">400</div>
207
+ <div class="cell" style="background:var(--primary-500);color:#fff">500</div>
208
+ <div class="cell" style="background:var(--primary-600);color:#fff">600</div>
209
+ <div class="cell" style="background:var(--primary-700);color:#fff">700</div>
210
+ <div class="cell" style="background:var(--primary-800);color:#fff">800</div>
211
+ <div class="cell" style="background:var(--primary-900);color:#fff">900</div>
212
+ </div>
213
+ </section>
214
+
215
+ <!-- 2. 排版区 -->
216
+ <section>
217
+ <h2>排版区 Typography</h2>
218
+ <div class="type-specimen"><span class="px-label">32px / font-display</span><h1>Heading 1 标题一</h1></div>
219
+ <div class="type-specimen"><span class="px-label">26px / font-display</span><h2 style="border:none;padding:0">Heading 2 标题二</h2></div>
220
+ <div class="type-specimen"><span class="px-label">22px / font-display</span><h3>Heading 3 标题三</h3></div>
221
+ <div class="type-specimen"><span class="px-label">18px / font-display</span><h4>Heading 4 标题四</h4></div>
222
+ <div class="type-specimen"><span class="px-label">16px / font-body</span><p>正文段落。设计系统确保跨页面的视觉一致性,所有颜色与间距均来自 token 变量。</p></div>
223
+ <div class="type-specimen"><span class="px-label">14px / font-body small</span><p style="font-size:0.875em;color:var(--meta)">辅助文字 / 说明信息。</p></div>
224
+ <div class="type-specimen"><span class="px-label">14px / font-mono</span><code style="font-family:var(--font-mono);font-size:0.875em;background:var(--accent-soft);padding:2px 6px;border-radius:4px">const token = "deterministic";</code></div>
225
+ </section>
226
+
227
+ <!-- 3. 间距区 -->
228
+ <section>
229
+ <h2>间距区 Spacing</h2>
230
+ <div class="space-ruler">
231
+ <div class="space-bar"><div class="bar" style="width:var(--space-1)"></div><div class="lbl">space-1: 4px</div></div>
232
+ <div class="space-bar"><div class="bar" style="width:var(--space-2)"></div><div class="lbl">space-2: 8px</div></div>
233
+ <div class="space-bar"><div class="bar" style="width:var(--space-3)"></div><div class="lbl">space-3: 12px</div></div>
234
+ <div class="space-bar"><div class="bar" style="width:var(--space-4)"></div><div class="lbl">space-4: 16px</div></div>
235
+ <div class="space-bar"><div class="bar" style="width:var(--space-5)"></div><div class="lbl">space-5: 20px</div></div>
236
+ <div class="space-bar"><div class="bar" style="width:var(--space-6)"></div><div class="lbl">space-6: 24px</div></div>
237
+ <div class="space-bar"><div class="bar" style="width:var(--space-7)"></div><div class="lbl">space-7: 32px</div></div>
238
+ <div class="space-bar"><div class="bar" style="width:var(--space-8)"></div><div class="lbl">space-8: 40px</div></div>
239
+ <div class="space-bar"><div class="bar" style="width:var(--space-9)"></div><div class="lbl">space-9: 48px</div></div>
240
+ <div class="space-bar"><div class="bar" style="width:var(--space-10)"></div><div class="lbl">space-10: 64px</div></div>
241
+ <div class="space-bar"><div class="bar" style="width:var(--space-11)"></div><div class="lbl">space-11: 80px</div></div>
242
+ <div class="space-bar"><div class="bar" style="width:var(--space-12)"></div><div class="lbl">space-12: 96px</div></div>
243
+ </div>
244
+ </section>
245
+
246
+ <!-- 4. 组件区 -->
247
+ <section>
248
+ <h2>组件区 Components</h2>
249
+ <div class="component-row">
250
+ <button class="btn btn-primary">主按钮</button>
251
+ <button class="btn btn-secondary">次按钮</button>
252
+ <button class="btn btn-ghost">幽灵按钮</button>
253
+ </div>
254
+ <div class="component-row">
255
+ <input class="input-field" type="text" placeholder="输入框示例…">
256
+ <span class="badge badge-success">成功</span>
257
+ <span class="badge badge-warn">警告</span>
258
+ <span class="badge badge-danger">危险</span>
259
+ </div>
260
+ <div class="component-row">
261
+ <div class="card">
262
+ <h4>卡片标题</h4>
263
+ <p>卡片内容示例。所有样式均来自 token 变量,零硬编码色值。</p>
264
+ </div>
265
+ <table class="demo-table">
266
+ <thead><tr><th>列 A</th><th>列 B</th><th>状态</th></tr></thead>
267
+ <tbody>
268
+ <tr><td>数据 1</td><td>值 X</td><td><span class="badge badge-success">通过</span></td></tr>
269
+ <tr><td>数据 2</td><td>值 Y</td><td><span class="badge badge-warn">待定</span></td></tr>
270
+ </tbody>
271
+ </table>
272
+ </div>
273
+ </section>
274
+
275
+ <!-- 5. 派生色区 -->
276
+ <section>
277
+ <h2>派生色区 Derived States</h2>
278
+ <div class="state-grid">
279
+ <div class="state-chip" style="background:var(--accent);color:#fff">accent</div>
280
+ <div class="state-chip" style="background:var(--accent-hover);color:#fff">accent-hover</div>
281
+ <div class="state-chip" style="background:var(--accent-active);color:#fff">accent-active</div>
282
+ <div class="state-chip" style="background:var(--accent-soft)">accent-soft</div>
283
+ <div class="focus-demo">focus-ring 演示</div>
284
+ </div>
285
+ </section>
286
+
287
+ </div>
288
+
289
+ <script>
290
+ (function() {
291
+ var html = document.documentElement;
292
+ // 恢复 localStorage 偏好
293
+ var savedTheme = localStorage.getItem('ds-theme');
294
+ var savedDensity = localStorage.getItem('ds-density');
295
+ if (savedTheme) html.setAttribute('data-theme', savedTheme);
296
+ if (savedDensity) html.setAttribute('data-density', savedDensity);
297
+ updateLabels();
298
+
299
+ document.getElementById('themeToggle').addEventListener('click', function() {
300
+ var next = html.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
301
+ html.setAttribute('data-theme', next);
302
+ localStorage.setItem('ds-theme', next);
303
+ updateLabels();
304
+ });
305
+ ['compact','balanced','spacious'].forEach(function(d) {
306
+ document.getElementById('density' + d.charAt(0).toUpperCase() + d.slice(1))
307
+ .addEventListener('click', function() {
308
+ html.setAttribute('data-density', d);
309
+ localStorage.setItem('ds-density', d);
310
+ });
311
+ });
312
+ function updateLabels() {
313
+ document.getElementById('themeToggle').textContent =
314
+ html.getAttribute('data-theme') === 'dark' ? '☀️ 切换亮色' : '🌙 切换暗色';
315
+ }
316
+ })();
317
+ </script>
318
+ </body>
319
+ </html>
@@ -0,0 +1,115 @@
1
+ # 确定性 Token 派生规则(v0.19.0)
2
+
3
+ > **原则**: 同输入 = 同输出。不即兴发挥。每个 token 值由映射表确定性决定。
4
+
5
+ ---
6
+
7
+ ## A1-identity(8 必选 token)
8
+
9
+ | Token | Source | Example (professional_minimal) |
10
+ |-------|--------|-------------------------------|
11
+ | `--bg` | mood→bg mapping | `#FAFAF9` |
12
+ | `--surface` | mood→surface | `#FFFFFF` |
13
+ | `--fg` | mood→fg | `#1A1916` |
14
+ | `--muted` | fg lightened 40% | `#6B6964` |
15
+ | `--border` | fg lightened 80% | `#E8E5DF` |
16
+ | `--accent` | mood→accent mapping (or user hex) | `#3B82F6` |
17
+ | `--font-display` | font preference→stack | `Georgia, serif` (serif_display) |
18
+ | `--font-body` | always system sans | `-apple-system, system-ui, sans-serif` |
19
+
20
+ ---
21
+
22
+ ## Mood → 色彩映射表(5 moods × 6 colors = 确定性)
23
+
24
+ | Mood | bg | surface | fg | muted | border | accent |
25
+ |------|-----|---------|-----|-------|--------|--------|
26
+ | professional_minimal | #FAFAF9 | #FFFFFF | #1A1916 | #6B6964 | #E8E5DF | #3B82F6 |
27
+ | warm_approachable | #FDF8F4 | #FFFFFF | #292524 | #78716C | #E7E5E4 | #C96442 |
28
+ | technical_dense | #F8FAFC | #FFFFFF | #0F172A | #64748B | #E2E8F0 | #0891B2 |
29
+ | editorial | #FAFAF7 | #FFFFFF | #1A1916 | #6B6964 | #E8E5DF | #1A1916 |
30
+ | brutalist | #FFFFFF | #F5F5F5 | #000000 | #525252 | #D4D4D4 | #DC2626 |
31
+
32
+ ---
33
+
34
+ ## A2-derived(color-mix 公式,mood 无关)
35
+
36
+ ```css
37
+ /* 交互状态色 */
38
+ --accent-hover: color-mix(in oklab, var(--accent), black 8%);
39
+ --accent-active: color-mix(in oklab, var(--accent), black 14%);
40
+ --accent-soft: color-mix(in oklab, var(--accent), transparent 86%);
41
+ --focus-ring: 0 0 0 3px color-mix(in oklab, var(--accent), transparent 70%);
42
+ --elev-raised: 0 2px 8px color-mix(in oklab, var(--fg), transparent 92%);
43
+
44
+ /* 语义色(固定) */
45
+ --success: #16A34A;
46
+ --warn: #EAB308;
47
+ --danger: #DC2626;
48
+
49
+ /* 字体 */
50
+ --font-mono: ui-monospace, 'JetBrains Mono', monospace;
51
+
52
+ /* 间距(4px base scale) */
53
+ --space-1: 4px; --space-2: 8px; --space-3: 12px;
54
+ --space-4: 16px; --space-5: 20px; --space-6: 24px;
55
+ --space-7: 32px; --space-8: 40px; --space-9: 48px;
56
+ --space-10: 64px; --space-11: 80px; --space-12: 96px;
57
+
58
+ /* 圆角 */
59
+ --radius-sm: 8px;
60
+ --radius-md: 12px;
61
+ --radius-lg: 16px;
62
+ --radius-pill: 9999px;
63
+
64
+ /* 动效 */
65
+ --motion-fast: 150ms;
66
+ --motion-base: 200ms;
67
+ --ease-standard: cubic-bezier(0.2, 0, 0, 1);
68
+ ```
69
+
70
+ ---
71
+
72
+ ## B-slot 别名(4 项)
73
+
74
+ ```css
75
+ --fg-2: var(--fg);
76
+ --meta: var(--muted);
77
+ --border-soft: var(--border);
78
+ --surface-warm: var(--surface);
79
+ ```
80
+
81
+ 组件始终引用 B-slot 别名 → 永远可解析,与底层 A1 解耦。
82
+
83
+ ---
84
+
85
+ ## 5 方向调色板派生规则
86
+
87
+ 从 accent hex 生成 primary 方向 50–900 阶梯:
88
+
89
+ | Step | 派生公式 |
90
+ |------|---------|
91
+ | 50 | color-mix(in oklab, accent, white 95%) |
92
+ | 100 | color-mix(in oklab, accent, white 90%) |
93
+ | 200 | color-mix(in oklab, accent, white 75%) |
94
+ | 300 | color-mix(in oklab, accent, white 55%) |
95
+ | 400 | color-mix(in oklab, accent, white 30%) |
96
+ | 500 | accent(基准色) |
97
+ | 600 | color-mix(in oklab, accent, black 10%) |
98
+ | 700 | color-mix(in oklab, accent, black 22%) |
99
+ | 800 | color-mix(in oklab, accent, black 35%) |
100
+ | 900 | color-mix(in oklab, accent, black 48%) |
101
+
102
+ - **neutral** 方向:从 fg 同理派生(白/黑混合)。
103
+ - **success / warning / danger**:固定语义色(#16A34A / #EAB308 / #DC2626),各派生同结构阶梯。
104
+
105
+ ---
106
+
107
+ ## Density → 间距/排版修正
108
+
109
+ | Density | base font | space unit | container |
110
+ |---------|-----------|------------|-----------|
111
+ | compact | 14px | 4px | 1280px |
112
+ | balanced | 16px | 4px | 1120px |
113
+ | spacious | 18px | 8px | 960px |
114
+
115
+ density 只影响数值倍率,不影响 token 名称或色彩。
@@ -0,0 +1,60 @@
1
+ # Base / Variant 拆分 Schema(variant-schema)
2
+
3
+ 设计系统拆为 **base 品牌共享层** + **端变体层**。base 管「品牌是什么」,变体管「在该端怎么排布」。
4
+ 变体读 base 取色与品牌,覆写排版/间距/布局/组件/动效。合并后 = 一份完整 token 集(喂给 design-tokens.css)。
5
+
6
+ ```
7
+ .team-flow/design-system/
8
+ ├── base.md # 品牌共享层(color/brand/voice/anti-patterns/extensions)
9
+ ├── b-end.md # B 端变体(typography/spacing/layout/components/motion)
10
+ ├── c-end.md # C 端变体(同结构,按 C 端密度/字号覆写)
11
+ └── preview.html
12
+ ```
13
+
14
+ ---
15
+
16
+ ## base.md 段落(品牌共享,端无关)
17
+
18
+ | 段 | 内容 | Token 归属 |
19
+ |----|------|-----------|
20
+ | `color` | A1-identity 8 必选(`--bg/--surface/--fg/--muted/--border/--accent/--font-display/--font-body`)+ 5 方向调色板(neutral/primary/success/warning/danger,各 50–900 阶梯) | A1-identity + palette |
21
+ | `brand` | logo 规范 + 品牌主色(accent 的品牌语境用法、留白、最小尺寸) | brand |
22
+ | `voice` | 文案语气(专业/简洁/温度等级),跨端统一 | voice |
23
+ | `anti-patterns` | 禁止内联样式漂移 / 禁止非 token 颜色 / 禁止跨端私改品牌色(**必含前两条**) | anti-patterns |
24
+ | `extensions` | C-token 名单制清单:品牌专有 token + 提升路径标注(C→B→A2) | C-extension |
25
+
26
+ > base 不含排版/间距/布局——这些随端变化,归变体。base 的 A1+A2+B-slot 必须完整可过 guard。
27
+
28
+ ## 变体 .md 段落(b-end.md / c-end.md,端特定)
29
+
30
+ | 段 | 内容 | Token 归属 |
31
+ |----|------|-----------|
32
+ | `typography` | font-display/body/mono 引用 + type scale(`--text-xs~4xl`,1.25 比例)+ weights + line-height(按 density) | A1-structure |
33
+ | `spacing` | `--space-1~12` 阶梯(基于 density 基准:compact 12 / balanced 16 / spacious 20) | A2-derived |
34
+ | `layout` | 栅格 12 列 / 断点 sm/md/lg / 容器 max-width(B 端宽容器、C 端窄容器) | A1-structure |
35
+ | `components` | button / input / card / table 规范(**最少这 4 类**),全部 token-bound,引用 B-slot | components |
36
+ | `motion` | duration(`--motion-fast/base`,150–300ms)+ `--ease-standard` | A2-derived |
37
+
38
+ > B 端 vs C 端差异示例:B 端 compact + 14px + 宽表格容器;C 端 spacious + 17px + 窄卡片容器。
39
+ > 两端共享 base 的 color/brand/voice,绝不各自重定义品牌色。
40
+
41
+ ---
42
+
43
+ ## 继承规则(Inheritance)
44
+
45
+ 1. 变体**只读** base 的 `color` / `brand` / `voice` / `anti-patterns` / `extensions`——不复制、不覆写品牌色。
46
+ 2. 变体**覆写** `typography` / `spacing` / `layout` / `components` / `motion`——这是端差异的合法表达。
47
+ 3. 变体新增 token 必须引用 base 已有 token(如 `--card-bg: var(--surface)`),禁止孤立 token、禁止硬编码 hex。
48
+ 4. 变体需要的品牌专有 token → 先列入 base 的 `extensions`(C-token 名单制),达晋升条件再升级。
49
+
50
+ ## Token 合并规则(Merge → design-tokens.css)
51
+
52
+ ```
53
+ 完整 token 集 = base(A1-identity + A1-structure 颜色/字体部分 + A2-derived + B-slot + palette)
54
+ + 变体(A1-structure 排版/布局 + spacing + components + motion)
55
+ ```
56
+
57
+ - 渲染某端时:把 base `:root` + 该端变体 `:root` 合并进**单个 `<style>`**(无全局级联)。
58
+ - 缺任何一个 A1/A2/B-slot token → 规则悄悄失效 → `design-token-guard.mjs` 失败。
59
+ - 同 token 名 base 与变体冲突时:**变体优先**(仅限排版/间距/布局/动效类);颜色/品牌类冲突 = 错误,guard 报错。
60
+ - 迭代(iterate)走 MERGE 不 OVERWRITE:新组件进变体 `components`,新共享色进 base `color`,并记变更履历。