@namewta/speculo 1.0.22 → 2.0.1
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.
- package/README.md +31 -100
- package/THIRD-PARTY-NOTICES.md +69 -0
- package/dist/src/agent-files.js +9 -36
- package/dist/src/agent-files.js.map +1 -1
- package/dist/src/agent-skills.d.ts +22 -48
- package/dist/src/agent-skills.js +146 -508
- package/dist/src/agent-skills.js.map +1 -1
- package/dist/src/assets.d.ts +21 -0
- package/dist/src/assets.js +111 -0
- package/dist/src/assets.js.map +1 -0
- package/dist/src/cli.js +10 -11
- package/dist/src/cli.js.map +1 -1
- package/dist/src/coordination.d.ts +23 -0
- package/dist/src/coordination.js +60 -0
- package/dist/src/coordination.js.map +1 -0
- package/dist/src/doctor.js +39 -20
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.js +28 -28
- package/dist/src/index.js.map +1 -1
- package/dist/src/media-state.d.ts +2 -0
- package/dist/src/media-state.js +52 -0
- package/dist/src/media-state.js.map +1 -0
- package/dist/src/paths.d.ts +17 -4
- package/dist/src/paths.js +103 -17
- package/dist/src/paths.js.map +1 -1
- package/dist/src/refresh.d.ts +16 -2
- package/dist/src/refresh.js +66 -85
- package/dist/src/refresh.js.map +1 -1
- package/dist/src/runtime-entry.d.ts +4 -0
- package/dist/src/runtime-entry.js +5 -0
- package/dist/src/runtime-entry.js.map +1 -0
- package/dist/src/specdev-artifacts.d.ts +77 -0
- package/dist/src/specdev-artifacts.js +323 -0
- package/dist/src/specdev-artifacts.js.map +1 -0
- package/dist/src/structured.d.ts +1 -7
- package/dist/src/structured.js +20 -242
- package/dist/src/structured.js.map +1 -1
- package/dist/src/transaction.d.ts +3 -10
- package/dist/src/transaction.js +94 -176
- package/dist/src/transaction.js.map +1 -1
- package/dist/src/workflows.js +25 -87
- package/dist/src/workflows.js.map +1 -1
- package/package.json +19 -9
- package/template/.speculo/README.md +24 -27
- package/template/.speculo/refresh-contract.json +4 -6
- package/template/.speculo/workspace.json +10 -7
- package/template/AGENTS.md +8 -5
- package/template/canonical/README.md +6 -0
- package/template/canonical/canonical-learning-lesson.md +116 -0
- package/template/canonical/canonical-learning-question.md +185 -0
- package/template/canonical/canonical-media-content.md +50 -0
- package/template/canonical/canonical-media-operations.md +53 -0
- package/template/canonical/canonical-media-video.md +48 -0
- package/template/canonical/canonical-media-visual.md +94 -0
- package/template/canonical/canonical-specdev-goal-plan.md +2927 -864
- package/template/canonical/canonical-specdev-grill-with-docs.md +2559 -421
- package/template/canonical/canonical-specdev-spec.md +2398 -321
- package/template/canonical/canonical-specdev-tickets.md +2392 -543
- package/template/canonical/canonical-specdev-wayfinder.md +2897 -463
- package/template/commands/archive-and-consolidate/COMMAND.md +30 -0
- package/template/commands/docs-sync/COMMAND.md +25 -0
- package/template/commands/docs-sync/assets/agents-template.md +19 -0
- package/template/commands/docs-sync/assets/report-template.md +32 -0
- package/template/commands/docs-sync/references/agents-contract.md +27 -0
- package/template/commands/docs-sync/references/changelog-contract.md +39 -0
- package/template/commands/docs-sync/references/git-state-contract.md +39 -0
- package/template/commands/docs-sync/references/handbook-discovery.md +11 -0
- package/template/commands/docs-sync/references/operation-contract.md +62 -0
- package/template/commands/docs-sync/references/readme-contract.md +24 -0
- package/template/commands/docs-sync/references/workflow-scope-contract.md +32 -0
- package/template/commands/engineering-standards-builder/COMMAND.md +163 -0
- package/template/commands/engineering-standards-builder/manifest.txt +118 -0
- package/template/commands/engineering-standards-builder/scripts/validate-builder.mjs +268 -0
- package/template/commands/git-history-squash/COMMAND.md +72 -0
- package/template/commands/git-history-squash/references/operation-contract.md +99 -0
- package/template/commands/git-history-squash/references/rewrite-contract.md +127 -0
- package/template/commands/git-history-squash/scripts/git-history-squash.mjs +1210 -0
- package/template/commands/git-repository-audit/COMMAND.md +80 -0
- package/template/commands/handoff/COMMAND.md +61 -0
- package/template/commands/manifest.json +15 -0
- package/template/commands/retro/COMMAND.md +72 -0
- package/template/commands/source-code-zip/COMMAND.md +58 -0
- package/template/commands/status/COMMAND.md +14 -0
- package/template/commands/upstream-fork-sync/COMMAND.md +85 -0
- package/template/commands/upstream-fork-sync/references/report-contract.md +40 -0
- package/template/commands/upstream-fork-sync/references/repository-contract.md +54 -0
- package/template/commands/upstream-fork-sync/references/state-schema.md +55 -0
- package/template/lib/design-validators.mjs +5460 -0
- package/template/lib/legacy-status-validator.cjs +3238 -0
- package/template/lib/speculo-runtime.mjs +7949 -0
- package/template/references/coordination/coordination-contract.md +50 -0
- package/template/references/coordination/exchange/external-web.md +132 -0
- package/template/references/coordination/exchange/source-package.md +239 -0
- package/template/references/coordination/modes/cli.md +11 -0
- package/template/references/coordination/modes/herdr.md +12 -0
- package/template/references/coordination/modes/orca.md +13 -0
- package/template/references/coordination/project-facts.example.json +5 -0
- package/template/references/coordination/project-facts.schema.json +113 -0
- package/template/references/coordination/result-and-recovery.md +36 -0
- package/template/references/coordination/task-brief.md +43 -0
- package/template/references/retrospective/references/issue-drafting-sop.md +69 -0
- package/template/references/retrospective/retrospective-contract.md +37 -0
- package/template/references/writing-for-agents/GLOSSARY.md +201 -0
- package/template/references/writing-for-agents/references/current-facts-docs.md +35 -0
- package/template/references/writing-for-agents/references/document-contract.md +25 -0
- package/template/references/writing-for-agents/writing-contract.md +17 -0
- package/template/workflows/learning/SKILL.md +40 -0
- package/template/workflows/learning/common/rules/artifact-layouts.md +5 -0
- package/template/workflows/learning/common/rules/domain-runtime.md +94 -0
- package/template/workflows/learning/common/rules/inquiry-depth-policy.md +31 -0
- package/template/workflows/learning/common/rules/lesson-contract.md +9 -1
- package/template/workflows/learning/common/rules/portable-learning-runtime.md +95 -0
- package/template/workflows/learning/common/rules/production-inquiry.md +24 -0
- package/template/workflows/learning/common/rules/question-map-contract.md +28 -0
- package/template/workflows/learning/common/rules/questioning-policy.md +12 -2
- package/template/workflows/learning/common/rules/teaching-policy.md +4 -0
- package/template/workflows/learning/common/skills/socratic-questioning/SKILL.md +2 -2
- package/template/workflows/learning/common/skills/topic-synthesis/SKILL.md +2 -0
- package/template/workflows/learning/common/tools/validate-learning.mjs +38 -50
- package/template/workflows/learning/learning-a-archive/SKILL.md +32 -0
- package/template/workflows/learning/learning-a-assess-and-plan/SKILL.md +40 -0
- package/template/workflows/learning/learning-c-consolidate/SKILL.md +40 -0
- package/template/workflows/learning/learning-g-goal/SKILL.md +63 -0
- package/template/workflows/learning/learning-g-goal/assets/goal-plan-template.md +310 -0
- package/template/workflows/learning/learning-g-goal/assets/probe-template.md +64 -0
- package/template/workflows/learning/learning-g-goal/assets/progress-template.md +19 -0
- package/template/workflows/learning/learning-g-goal/references/coverage-bar.md +36 -0
- package/template/workflows/learning/learning-g-goal/references/external-goal-runner.md +54 -0
- package/template/workflows/learning/learning-g-goal/references/lead-orchestration.md +52 -0
- package/template/workflows/learning/learning-g-goal/references/orchestration-protocol.md +26 -0
- package/template/workflows/learning/learning-g-goal/references/planning-modes.md +19 -0
- package/template/workflows/learning/learning-h-homework/SKILL.md +38 -0
- package/template/workflows/learning/learning-i-init-setup/SKILL.md +34 -0
- package/template/workflows/learning/learning-l-lesson/SKILL.md +43 -0
- package/template/workflows/learning/learning-l-lesson/assets/lesson-template.md +55 -0
- package/template/workflows/learning/learning-q-question/SKILL.md +48 -0
- package/template/workflows/learning/learning-q-question/assets/exploration-template.md +28 -0
- package/template/workflows/learning/learning-q-question/assets/inquiry-template.md +75 -0
- package/template/workflows/learning/learning-q-question/assets/question-map-template.json +4 -0
- package/template/workflows/learning/learning-q-question/references/exploration-mode.md +35 -0
- package/template/workflows/learning/learning-q-question/references/tutor-mode.md +31 -0
- package/template/workflows/learning/learning-q-question/scripts/validate-exploration.mjs +190 -0
- package/template/workflows/learning/learning-r-review/SKILL.md +37 -0
- package/template/workflows/learning/manifest.json +103 -1
- package/template/workflows/media/SKILL.md +37 -0
- package/template/workflows/media/_state/archive/.gitkeep +1 -0
- package/template/workflows/media/_state/changes/.gitkeep +1 -0
- package/template/workflows/media/_state/context/INDEX.md +6 -0
- package/template/workflows/media/_state/status.json +6 -0
- package/template/workflows/media/common/rules/activation-and-memory.md +7 -0
- package/template/workflows/media/common/rules/artifact-contract.md +17 -0
- package/template/workflows/media/common/rules/content-method.md +18 -0
- package/template/workflows/media/common/rules/domain-runtime.md +66 -0
- package/template/workflows/media/common/rules/external-skills.md +33 -0
- package/template/workflows/media/common/rules/operations-method.md +21 -0
- package/template/workflows/media/common/rules/safety-and-recovery.md +15 -0
- package/template/workflows/media/common/rules/video-method.md +16 -0
- package/template/workflows/media/common/rules/visual-method.md +16 -0
- package/template/workflows/media/common/schemas/change-status.schema.json +75 -0
- package/template/workflows/media/common/schemas/status.schema.json +35 -0
- package/template/workflows/media/common/tests/media-tools.test.mjs +91 -0
- package/template/workflows/media/common/tools/media-tools.mjs +235 -0
- package/template/workflows/media/common/tools/validate-media.mjs +57 -0
- package/template/workflows/media/manifest.json +126 -0
- package/template/workflows/media/media-b-brief/SKILL.md +19 -0
- package/template/workflows/media/media-b-brief/assets/brief-template.json +32 -0
- package/template/workflows/media/media-d-deconstruct/SKILL.md +19 -0
- package/template/workflows/media/media-h-hand-drawn/SKILL.md +19 -0
- package/template/workflows/media/media-h-hand-drawn/references/production.md +9 -0
- package/template/workflows/media/media-h-hand-drawn/references/style-catalog.json +226 -0
- package/template/workflows/media/media-i-init-setup/SKILL.md +19 -0
- package/template/workflows/media/media-p-publish-draft/SKILL.md +19 -0
- package/template/workflows/media/media-p-publish-draft/assets/draft-request-template.json +14 -0
- package/template/workflows/media/media-r-retro/SKILL.md +19 -0
- package/template/workflows/media/media-r-retro/assets/retro-template.md +13 -0
- package/template/workflows/media/media-v-video/SKILL.md +19 -0
- package/template/workflows/media/media-v-video/assets/review-template.json +27 -0
- package/template/workflows/media/media-v-video/assets/shot-plan-template.json +18 -0
- package/template/workflows/media/media-v-video/references/production.md +9 -0
- package/template/workflows/media/media-v-video/scripts/render_preview.py +168 -0
- package/template/workflows/media/runtime-contract.json +10 -0
- package/template/workflows/ops/SKILL.md +37 -0
- package/template/workflows/ops/common/WORKSPACE-USAGE.md +2 -2
- package/template/workflows/ops/common/rules/domain-runtime.md +54 -0
- package/template/workflows/ops/common/tests/test_ops.mjs +12 -10
- package/template/workflows/ops/common/tests/test_ops_bootstrap.mjs +10 -10
- package/template/workflows/ops/common/tests/test_ops_onboarding.mjs +2 -2
- package/template/workflows/ops/common/tests/test_ops_workspace.mjs +6 -6
- package/template/workflows/ops/common/tools/opslib/workspace.mjs +2 -2
- package/template/workflows/ops/common/tools/validate-ops.mjs +4 -4
- package/template/workflows/ops/manifest.json +17 -2
- package/template/workflows/ops/ops-d-project-deploy/SKILL.md +41 -0
- package/template/workflows/ops/ops-h-host-manage/SKILL.md +35 -0
- package/template/workflows/ops/ops-i-initialize/SKILL.md +29 -0
- package/template/workflows/ops/ops-s-server-connect/SKILL.md +29 -0
- package/template/workflows/ops/ops-v-inventory-view/SKILL.md +33 -0
- package/template/workflows/person/SKILL.md +32 -0
- package/template/workflows/person/manifest.json +57 -1
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/SKILL.md +43 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/books/README.md +17 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/books/src/SUMMARY.md +231 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/books/src//347/233/256/345/275/225.md +243 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/activate.md +83 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/deliver.md +116 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/diagnose.md +83 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/mobilize.md +85 -0
- package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/strategize.md +76 -0
- package/template/workflows/person/person-s-steelman-deliberation/SKILL.md +114 -0
- package/template/workflows/person/person-s-steelman-deliberation/assets/canonical-body.md +518 -0
- package/template/workflows/person/person-s-steelman-deliberation/references/state-and-publication.md +86 -0
- package/template/workflows/person/{S-steelman-deliberation/tools → person-s-steelman-deliberation/scripts}/validate-steelman-change.mjs +0 -0
- package/template/workflows/specdev/SKILL.md +51 -0
- package/template/workflows/specdev/common/README.md +11 -3
- package/template/workflows/specdev/common/rules/activation-and-memory.md +5 -1
- package/template/workflows/specdev/common/rules/adr-format.md +3 -3
- package/template/workflows/specdev/common/rules/agent-experience.md +29 -0
- package/template/workflows/specdev/common/rules/artifact-contract.md +28 -15
- package/template/workflows/specdev/common/rules/change-completion.md +24 -5
- package/template/workflows/specdev/common/rules/codebase-design.md +16 -14
- package/template/workflows/specdev/common/rules/design-contract.md +51 -0
- package/template/workflows/specdev/common/rules/design-it-twice.md +9 -9
- package/template/workflows/specdev/common/rules/design-portability.md +48 -0
- package/template/workflows/specdev/common/rules/deviation-control.md +3 -3
- package/template/workflows/specdev/common/rules/documentation-standard.md +33 -0
- package/template/workflows/specdev/common/rules/domain-modeling.md +1 -1
- package/template/workflows/specdev/common/rules/domain-runtime.md +35 -0
- package/template/workflows/specdev/common/rules/engineering-evidence.md +31 -0
- package/template/workflows/specdev/common/rules/error-handling.md +40 -0
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +17 -1
- package/template/workflows/specdev/common/rules/operating-governance.md +3 -3
- package/template/workflows/specdev/common/rules/parent-implementation-orchestration.md +3 -3
- package/template/workflows/specdev/common/rules/path-ownership.md +5 -5
- package/template/workflows/specdev/common/rules/path-reference-contract.md +15 -6
- package/template/workflows/specdev/common/rules/readiness-and-depth.md +6 -1
- package/template/workflows/specdev/common/rules/test-reliability.md +37 -0
- package/template/workflows/specdev/common/rules/workflow-routing.md +15 -2
- package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +26 -75
- package/template/workflows/specdev/common/schemas/change-design.schema.json +254 -0
- package/template/workflows/specdev/common/schemas/config.schema.json +4 -4
- package/template/workflows/specdev/common/schemas/goal-plan.schema.json +144 -23
- package/template/workflows/specdev/common/schemas/implementation-plan.schema.json +139 -24
- package/template/workflows/specdev/common/schemas/project-design.schema.json +164 -0
- package/template/workflows/specdev/common/schemas/prototype-browser-evidence.schema.json +153 -0
- package/template/workflows/specdev/common/schemas/ticket.schema.json +40 -0
- package/template/workflows/specdev/common/skills/code-review/SKILL.md +12 -6
- package/template/workflows/specdev/common/skills/code-review/references/result-reuse.md +2 -2
- package/template/workflows/specdev/common/skills/code-review/references/reviewer-contracts.md +2 -2
- package/template/workflows/specdev/common/skills/code-review/references/source-discovery.md +3 -1
- package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +1 -1
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +1 -1
- package/template/workflows/specdev/common/skills/plan-quality-review/SKILL.md +1 -1
- package/template/workflows/specdev/common/skills/research/SKILL.md +1 -1
- package/template/workflows/specdev/common/tools/README.md +31 -5
- package/template/workflows/specdev/common/tools/change-artifacts.mjs +170 -0
- package/template/workflows/specdev/common/tools/design-artifacts.mjs +277 -0
- package/template/workflows/specdev/common/tools/engineering-evidence.mjs +150 -0
- package/template/workflows/specdev/common/tools/plan-contract.mjs +160 -17
- package/template/workflows/specdev/common/tools/publish-design.mjs +341 -0
- package/template/workflows/specdev/common/tools/review-scope.mjs +125 -0
- package/template/workflows/specdev/common/tools/tests/engineering.test.mjs +265 -0
- package/template/workflows/specdev/common/tools/tests/review-source-files.test.mjs +74 -0
- package/template/workflows/specdev/common/tools/ticket-control.mjs +19 -25
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +292 -503
- package/template/workflows/specdev/manifest.json +52 -3
- package/template/workflows/specdev/runtime-contract.json +6 -6
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/SKILL.md +39 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/assets/archive-plan-template.md +32 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/assets/cleanup-candidate-template.md +69 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/assets/consolidation-plan-template.md +78 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/archive-receipt-contract.md +40 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/archive-rules.md +20 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/cleanup-rules.md +79 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/consolidation-interview.md +67 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/consolidation-rules.md +86 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/design-knowledge-gateway.md +61 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/knowledge-graduation.md +58 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/operation-contract.md +48 -0
- package/template/workflows/specdev/specdev-c-code-review/SKILL.md +55 -0
- package/template/workflows/specdev/specdev-c-code-review/assets/code-review-template.md +53 -0
- package/template/workflows/specdev/specdev-c-code-review/references/source-files-review.md +14 -0
- package/template/workflows/specdev/specdev-d-diagnose-bugs/SKILL.md +84 -0
- package/template/workflows/specdev/specdev-d-diagnose-bugs/assets/diagnosis-template.md +72 -0
- package/template/workflows/specdev/specdev-d-diagnose-bugs/references/feedback-loop.md +43 -0
- package/template/workflows/specdev/specdev-d-diagnose-bugs/references/hypothesis-and-instrumentation.md +36 -0
- package/template/workflows/specdev/specdev-d-diagnose-bugs/references/incident-evidence.md +21 -0
- package/template/workflows/specdev/specdev-g-grill-with-docs/SKILL.md +34 -0
- package/template/workflows/specdev/specdev-g-grill-with-docs/references/grilling-protocol.md +30 -0
- package/template/workflows/specdev/specdev-g-grill-with-docs/references/interview-procedure.md +138 -0
- package/template/workflows/specdev/specdev-i-implement/SKILL.md +49 -0
- package/template/workflows/specdev/specdev-i-implement/assets/evidence-template.md +153 -0
- package/template/workflows/specdev/specdev-i-implement/references/documentation-procedure.md +23 -0
- package/template/workflows/specdev/specdev-i-implement/references/execution-preflight.md +51 -0
- package/template/workflows/specdev/specdev-i-implement/references/implementation-procedure.md +170 -0
- package/template/workflows/specdev/specdev-i-implement/references/merge-conflict-protocol.md +21 -0
- package/template/workflows/specdev/specdev-i-implement/references/tdd-mocking.md +23 -0
- package/template/workflows/specdev/specdev-i-implement/references/tdd-rules.md +25 -0
- package/template/workflows/specdev/specdev-i-implement/references/tdd-test-design.md +29 -0
- package/template/workflows/specdev/specdev-i-init-setup/SKILL.md +31 -0
- package/template/workflows/specdev/specdev-i-init-setup/assets/change-readme-template.md +32 -0
- package/template/workflows/specdev/specdev-i-init-setup/assets/config-template.json +31 -0
- package/template/workflows/specdev/specdev-i-init-setup/assets/domain-layout-template.md +29 -0
- package/template/workflows/specdev/specdev-i-init-setup/assets/tracking-template.md +13 -0
- package/template/workflows/specdev/specdev-i-init-setup/references/change-record-examples.md +62 -0
- package/template/workflows/specdev/specdev-i-init-setup/references/first-setup.md +11 -0
- package/template/workflows/specdev/specdev-l-learn-change/SKILL.md +33 -0
- package/template/workflows/specdev/specdev-l-learn-change/references/lesson-format.md +51 -0
- package/template/workflows/specdev/specdev-p-goal-plan/SKILL.md +71 -0
- package/template/workflows/specdev/specdev-p-goal-plan/assets/goal-plan-template.md +150 -0
- package/template/workflows/specdev/specdev-p-goal-plan/assets/lightweight-goal-plan-template.md +21 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/completion-control.md +47 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/goal-lifecycle.md +35 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/goal-tickets-map-template.md +15 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/lead-orchestration.md +44 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/map-control.md +28 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/multi-change-plan.md +126 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/multi-execution-loop.md +31 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/multi-input-readiness.md +25 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/multi-super-dag.md +27 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/orchestration-protocol.md +58 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/planning-modes.md +78 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/replan-and-recovery.md +15 -0
- package/template/workflows/specdev/specdev-p-goal-plan/references/single-change-plan.md +157 -0
- package/template/workflows/specdev/specdev-p-prototype/SKILL.md +56 -0
- package/template/workflows/specdev/specdev-p-prototype/assets/change-design-template.md +68 -0
- package/template/workflows/specdev/specdev-p-prototype/assets/design-package.schema.json +248 -0
- package/template/workflows/specdev/specdev-p-prototype/assets/design-system-template.md +307 -0
- package/template/workflows/specdev/specdev-p-prototype/assets/project-design-template.md +60 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/INDEX.md +50 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/catalog.json +384 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/catalog.schema.json +42 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/color-and-theme.md +65 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/composition.md +39 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/foundations.md +66 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/gallery.html +14 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/gallery.js +55 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/interaction-patterns.md +61 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/product-pattern-index.md +73 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/research-provenance.md +60 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/responsive-and-platforms.md +53 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/style-index.md +47 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/assets/prototypes.css +13 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/assets/prototypes.js +146 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/brand-editorial.html +18 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/brand-editorial.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/commerce-service.html +10 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/commerce-service.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/cross-platform-workspace.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/dense-ide.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/enterprise-data.html +21 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/enterprise-data.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/local-first-content.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/marketing-conversion.html +13 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/marketing-conversion.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/media-first.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/mobile-supervisor.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/monochrome-console.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/responsive-web.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/templates/soft-personal-ai.md +25 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/LICENSE +21 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/README.md +14 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/airbnb/DESIGN.md +545 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/apple/DESIGN.md +562 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/figma/DESIGN.md +578 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/ibm/DESIGN.md +550 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/linear/DESIGN.md +548 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/mintlify/DESIGN.md +852 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/notion/DESIGN.md +821 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/provenance.json +95 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/spotify/DESIGN.md +246 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/stripe/DESIGN.md +487 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/vercel/DESIGN.md +736 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/airbnb.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/apple.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/figma.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/ibm.md +29 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/linear.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/mintlify.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/notion.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/spotify.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/stripe.md +27 -0
- package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/vercel.md +29 -0
- package/template/workflows/specdev/specdev-p-prototype/references/detect-existing-style.md +53 -0
- package/template/workflows/specdev/specdev-p-prototype/references/generate-design-package.md +78 -0
- package/template/workflows/specdev/specdev-p-prototype/references/logic-protocol.md +11 -0
- package/template/workflows/specdev/specdev-p-prototype/references/project-preview-protocol.md +9 -0
- package/template/workflows/specdev/specdev-p-prototype/references/style-selection-protocol.md +36 -0
- package/template/workflows/specdev/specdev-p-prototype/scripts/validate-design-package.mjs +133 -0
- package/template/workflows/specdev/specdev-r-retro/SKILL.md +31 -0
- package/template/workflows/specdev/specdev-r-retro/assets/retro-template.md +31 -0
- package/template/workflows/specdev/specdev-r-review-architecture/SKILL.md +104 -0
- package/template/workflows/specdev/specdev-r-review-architecture/assets/architecture-review-template.md +73 -0
- package/template/workflows/specdev/specdev-r-review-architecture/references/performance-review.md +27 -0
- package/template/workflows/specdev/specdev-r-review-architecture/references/proposal-to-ticket.md +13 -0
- package/template/workflows/specdev/specdev-r-review-architecture/references/review-rubric.md +56 -0
- package/template/workflows/specdev/specdev-r-review-architecture/references/selected-design.md +27 -0
- package/template/workflows/specdev/specdev-s-spec/SKILL.md +43 -0
- package/template/workflows/specdev/specdev-s-spec/assets/spec-template.md +99 -0
- package/template/workflows/specdev/specdev-s-spec/references/spec-readiness.md +17 -0
- package/template/workflows/specdev/specdev-t-tickets/SKILL.md +51 -0
- package/template/workflows/specdev/specdev-t-tickets/assets/ticket-template.md +157 -0
- package/template/workflows/specdev/specdev-t-tickets/assets/tickets-map-template.md +102 -0
- package/template/workflows/specdev/specdev-t-tickets/references/decomposition-rules.md +60 -0
- package/template/workflows/specdev/specdev-t-tickets/references/planning-procedure.md +235 -0
- package/template/workflows/specdev/specdev-t-tickets/references/ticket-readiness.md +56 -0
- package/template/workflows/specdev/specdev-t-triage/SKILL.md +58 -0
- package/template/workflows/specdev/specdev-t-triage/assets/capture-template.md +42 -0
- package/template/workflows/specdev/specdev-t-triage/assets/close-comment-template.md +42 -0
- package/template/workflows/specdev/specdev-t-triage/assets/issue-body-template.md +34 -0
- package/template/workflows/specdev/specdev-t-triage/assets/issue-record-template.md +27 -0
- package/template/workflows/specdev/specdev-t-triage/assets/triage-template.md +57 -0
- package/template/workflows/specdev/specdev-t-triage/references/capture-protocol.md +89 -0
- package/template/workflows/specdev/specdev-t-triage/references/ci-security-protocol.md +15 -0
- package/template/workflows/specdev/specdev-t-triage/references/intake-protocol.md +63 -0
- package/template/workflows/specdev/specdev-t-triage/references/issue-pr-policy.md +23 -0
- package/template/workflows/specdev/specdev-t-triage/references/pr-delivery-protocol.md +17 -0
- package/template/workflows/specdev/specdev-t-triage/references/publish-protocol.md +92 -0
- package/template/workflows/specdev/specdev-t-triage/references/queue-protocol.md +7 -0
- package/template/workflows/specdev/specdev-t-triage/references/reconcile-protocol.md +34 -0
- package/template/workflows/specdev/specdev-t-triage/references/release-preflight.md +17 -0
- package/template/workflows/specdev/specdev-t-triage/references/release-protocol.md +16 -0
- package/template/workflows/specdev/specdev-t-triage/references/release-recovery.md +22 -0
- package/template/workflows/specdev/specdev-t-triage/references/remote-operations.md +25 -0
- package/template/workflows/specdev/specdev-t-triage/scripts/capture-status.mjs +126 -0
- package/template/workflows/specdev/specdev-t-triage/scripts/publish-status.mjs +137 -0
- package/template/workflows/specdev/specdev-w-wayfinder/SKILL.md +49 -0
- package/template/workflows/specdev/specdev-w-wayfinder/assets/investigation-ticket-template.md +20 -0
- package/template/workflows/specdev/specdev-w-wayfinder/assets/wayfinder-map-template.md +33 -0
- package/template/workflows/specdev/specdev-w-wayfinder/references/initiative-discovery.md +29 -0
- package/template/workflows/specdev/specdev-w-wayfinder/references/local-tracker-contract.md +33 -0
- package/template/workflows/specdev/specdev-w-wayfinder/references/map-traversal.md +120 -0
- package/scripts/validate-skills.mjs +0 -56
- package/template/commands/archive-and-consolidate.md +0 -72
- package/template/commands/docs-sync.md +0 -28
- package/template/commands/git-history-squash.md +0 -76
- package/template/commands/git-repository-audit.md +0 -83
- package/template/commands/handoff.md +0 -66
- package/template/commands/retro.md +0 -75
- package/template/commands/status.md +0 -17
- package/template/skills/archive-and-consolidate/SKILL.md +0 -175
- package/template/skills/archive-and-consolidate/assets/archive-plan-template.md +0 -35
- package/template/skills/archive-and-consolidate/assets/cleanup-candidate-template.md +0 -69
- package/template/skills/archive-and-consolidate/assets/consolidation-plan-template.md +0 -67
- package/template/skills/archive-and-consolidate/references/archive-rules.md +0 -48
- package/template/skills/archive-and-consolidate/references/cleanup-rules.md +0 -73
- package/template/skills/archive-and-consolidate/references/consolidation-rules.md +0 -69
- package/template/skills/archive-and-consolidate/references/knowledge-graduation.md +0 -53
- package/template/skills/docs-sync/SKILL.md +0 -32
- package/template/skills/docs-sync/assets/report-template.md +0 -46
- package/template/skills/docs-sync/references/agents/agent-writing.md +0 -75
- package/template/skills/docs-sync/references/agents/claude-redirect.md +0 -39
- package/template/skills/docs-sync/references/agents/content-contract.md +0 -213
- package/template/skills/docs-sync/references/agents/evidence-collection.md +0 -184
- package/template/skills/docs-sync/references/agents/manifest-discovery.md +0 -126
- package/template/skills/docs-sync/references/agents/role-classification.md +0 -141
- package/template/skills/docs-sync/references/agents/templates/aggregator-AGENTS.md +0 -69
- package/template/skills/docs-sync/references/agents/templates/capability-module-AGENTS.md +0 -68
- package/template/skills/docs-sync/references/agents/templates/contract-module-AGENTS.md +0 -65
- package/template/skills/docs-sync/references/agents/templates/repo-root-AGENTS.md +0 -71
- package/template/skills/docs-sync/references/agents/templates/runnable-app-AGENTS.md +0 -69
- package/template/skills/docs-sync/references/agents/templates/scripts-docs-AGENTS.md +0 -51
- package/template/skills/docs-sync/references/agents/writing-style.md +0 -145
- package/template/skills/docs-sync/references/agents-contract.md +0 -67
- package/template/skills/docs-sync/references/changelog-contract.md +0 -39
- package/template/skills/docs-sync/references/document-lifecycle-contract.md +0 -40
- package/template/skills/docs-sync/references/git-state-contract.md +0 -67
- package/template/skills/docs-sync/references/mode-contract.md +0 -21
- package/template/skills/docs-sync/references/readme-contract.md +0 -46
- package/template/skills/docs-sync/references/readme-writing-guide.md +0 -294
- package/template/skills/docs-sync/references/workflow-scope-contract.md +0 -52
- package/template/skills/engineering-standards-builder/SKILL.md +0 -161
- package/template/skills/engineering-standards-builder/manifest.txt +0 -118
- package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +0 -272
- package/template/skills/git-history-squash/SKILL.md +0 -99
- package/template/skills/git-history-squash/references/rewrite-contract.md +0 -123
- package/template/skills/git-history-squash/scripts/git-history-squash.mjs +0 -1171
- package/template/skills/retrospective/SKILL.md +0 -43
- package/template/skills/retrospective/references/issue-drafting-sop.md +0 -69
- package/template/skills/source-code-zip/SKILL.md +0 -54
- package/template/skills/upstream-fork-sync/SKILL.md +0 -82
- package/template/skills/upstream-fork-sync/references/report-contract.md +0 -40
- package/template/skills/upstream-fork-sync/references/repository-contract.md +0 -54
- package/template/skills/upstream-fork-sync/references/state-schema.md +0 -55
- package/template/skills/writing-for-agents/GLOSSARY.md +0 -201
- package/template/skills/writing-for-agents/SKILL.md +0 -22
- package/template/skills/writing-for-agents/agents/openai.yaml +0 -2
- package/template/skills/writing-for-agents/references/document-contract.md +0 -23
- package/template/workflows/learning/A-archive/A-archive.md +0 -31
- package/template/workflows/learning/A-assess-and-plan/A-assess-and-plan.md +0 -39
- package/template/workflows/learning/C-consolidate/C-consolidate.md +0 -39
- package/template/workflows/learning/G-goal/G-goal.md +0 -62
- package/template/workflows/learning/G-goal/goal-plan-template.md +0 -310
- package/template/workflows/learning/G-goal/orchestration-protocol.md +0 -26
- package/template/workflows/learning/G-goal/planning-modes.md +0 -19
- package/template/workflows/learning/G-goal/probe-template.md +0 -62
- package/template/workflows/learning/G-goal/progress-template.md +0 -19
- package/template/workflows/learning/G-goal/references/coverage-bar.md +0 -32
- package/template/workflows/learning/G-goal/references/external-goal-runner.md +0 -54
- package/template/workflows/learning/G-goal/references/lead-orchestration.md +0 -52
- package/template/workflows/learning/H-homework/H-homework.md +0 -37
- package/template/workflows/learning/I-init-setup/I-init-setup.md +0 -33
- package/template/workflows/learning/INDEX.md +0 -26
- package/template/workflows/learning/L-lesson/L-lesson.md +0 -38
- package/template/workflows/learning/L-lesson/lesson-template.md +0 -51
- package/template/workflows/learning/Q-question/Q-question.md +0 -55
- package/template/workflows/learning/Q-question/inquiry-template.md +0 -71
- package/template/workflows/learning/R-review/R-review.md +0 -36
- package/template/workflows/learning/README.md +0 -94
- package/template/workflows/ops/D-project-deploy/D-project-deploy.md +0 -40
- package/template/workflows/ops/H-host-manage/H-host-manage.md +0 -34
- package/template/workflows/ops/I-initialize/I-initialize.md +0 -28
- package/template/workflows/ops/INDEX.md +0 -36
- package/template/workflows/ops/README.md +0 -62
- package/template/workflows/ops/S-server-connect/S-server-connect.md +0 -28
- package/template/workflows/ops/V-inventory-view/V-inventory-view.md +0 -32
- package/template/workflows/person/INDEX.md +0 -15
- package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +0 -42
- package/template/workflows/person/M-mao-zedong-cognitive-os/activate.md +0 -81
- package/template/workflows/person/M-mao-zedong-cognitive-os/books/README.md +0 -17
- package/template/workflows/person/M-mao-zedong-cognitive-os/books/src/SUMMARY.md +0 -231
- package/template/workflows/person/M-mao-zedong-cognitive-os/books/src//347/233/256/345/275/225.md +0 -243
- package/template/workflows/person/M-mao-zedong-cognitive-os/deliver.md +0 -114
- package/template/workflows/person/M-mao-zedong-cognitive-os/diagnose.md +0 -83
- package/template/workflows/person/M-mao-zedong-cognitive-os/mobilize.md +0 -85
- package/template/workflows/person/M-mao-zedong-cognitive-os/strategize.md +0 -76
- package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +0 -113
- package/template/workflows/person/S-steelman-deliberation/references/state-and-publication.md +0 -86
- package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +0 -50
- package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +0 -63
- package/template/workflows/specdev/C-code-review/C-code-review.md +0 -40
- package/template/workflows/specdev/C-code-review/code-review-template.md +0 -46
- package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +0 -77
- package/template/workflows/specdev/D-diagnose-bugs/diagnosis-template.md +0 -68
- package/template/workflows/specdev/D-diagnose-bugs/feedback-loop.md +0 -41
- package/template/workflows/specdev/D-diagnose-bugs/hypothesis-and-instrumentation.md +0 -32
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +0 -27
- package/template/workflows/specdev/G-grill-with-docs/grilling-protocol.md +0 -26
- package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +0 -134
- package/template/workflows/specdev/I-implement/I-implement.md +0 -30
- package/template/workflows/specdev/I-implement/evidence-template.md +0 -141
- package/template/workflows/specdev/I-implement/execution-preflight.md +0 -44
- package/template/workflows/specdev/I-implement/merge-conflict-protocol.md +0 -21
- package/template/workflows/specdev/I-implement/references/implementation-procedure.md +0 -158
- package/template/workflows/specdev/I-implement/tdd-mocking.md +0 -19
- package/template/workflows/specdev/I-implement/tdd-rules.md +0 -21
- package/template/workflows/specdev/I-implement/tdd-test-design.md +0 -25
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +0 -41
- package/template/workflows/specdev/I-init-setup/change-status-template.json +0 -28
- package/template/workflows/specdev/I-init-setup/config-template.json +0 -31
- package/template/workflows/specdev/I-init-setup/domain-layout-template.md +0 -23
- package/template/workflows/specdev/I-init-setup/references/first-setup.md +0 -46
- package/template/workflows/specdev/I-init-setup/status-template.json +0 -6
- package/template/workflows/specdev/I-init-setup/tracking-template.md +0 -13
- package/template/workflows/specdev/INDEX.md +0 -26
- package/template/workflows/specdev/L-learn-change/L-learn-change.md +0 -28
- package/template/workflows/specdev/L-learn-change/references/lesson-format.md +0 -47
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +0 -52
- package/template/workflows/specdev/P-goal-plan/completion-control.md +0 -43
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +0 -146
- package/template/workflows/specdev/P-goal-plan/lead-orchestration.md +0 -38
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +0 -56
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +0 -74
- package/template/workflows/specdev/P-goal-plan/references/goal-lifecycle.md +0 -35
- package/template/workflows/specdev/P-goal-plan/references/goal-tickets-map-template.md +0 -15
- package/template/workflows/specdev/P-goal-plan/references/map-control.md +0 -28
- package/template/workflows/specdev/P-goal-plan/references/multi-change-plan.md +0 -126
- package/template/workflows/specdev/P-goal-plan/references/multi-execution-loop.md +0 -31
- package/template/workflows/specdev/P-goal-plan/references/multi-input-readiness.md +0 -25
- package/template/workflows/specdev/P-goal-plan/references/multi-super-dag.md +0 -27
- package/template/workflows/specdev/P-goal-plan/references/replan-and-recovery.md +0 -21
- package/template/workflows/specdev/P-goal-plan/references/single-change-plan.md +0 -151
- package/template/workflows/specdev/P-prototype/P-prototype.md +0 -49
- package/template/workflows/specdev/P-prototype/design-library/INDEX.md +0 -43
- package/template/workflows/specdev/P-prototype/design-library/color-and-theme.md +0 -65
- package/template/workflows/specdev/P-prototype/design-library/foundations.md +0 -66
- package/template/workflows/specdev/P-prototype/design-library/interaction-patterns.md +0 -61
- package/template/workflows/specdev/P-prototype/design-library/product-pattern-index.md +0 -73
- package/template/workflows/specdev/P-prototype/design-library/research-provenance.md +0 -54
- package/template/workflows/specdev/P-prototype/design-library/responsive-and-platforms.md +0 -53
- package/template/workflows/specdev/P-prototype/design-library/style-index.md +0 -32
- package/template/workflows/specdev/P-prototype/design-package.schema.json +0 -70
- package/template/workflows/specdev/P-prototype/design-system-template.md +0 -366
- package/template/workflows/specdev/P-prototype/detect-existing-style.md +0 -53
- package/template/workflows/specdev/P-prototype/generate-design-package.md +0 -50
- package/template/workflows/specdev/P-prototype/logic-protocol.md +0 -11
- package/template/workflows/specdev/P-prototype/project-preview-protocol.md +0 -9
- package/template/workflows/specdev/P-prototype/style-selection-protocol.md +0 -41
- package/template/workflows/specdev/P-prototype/tools/validate-design-package.mjs +0 -155
- package/template/workflows/specdev/R-retro/R-retro.md +0 -26
- package/template/workflows/specdev/R-retro/retro-template.md +0 -27
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +0 -93
- package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +0 -69
- package/template/workflows/specdev/R-review-architecture/proposal-to-ticket.md +0 -13
- package/template/workflows/specdev/R-review-architecture/references/selected-design.md +0 -23
- package/template/workflows/specdev/R-review-architecture/review-rubric.md +0 -52
- package/template/workflows/specdev/README.md +0 -97
- package/template/workflows/specdev/S-spec/S-spec.md +0 -34
- package/template/workflows/specdev/S-spec/spec-readiness.md +0 -16
- package/template/workflows/specdev/S-spec/spec-template.md +0 -95
- package/template/workflows/specdev/T-tickets/T-tickets.md +0 -40
- package/template/workflows/specdev/T-tickets/decomposition-rules.md +0 -56
- package/template/workflows/specdev/T-tickets/references/planning-procedure.md +0 -233
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +0 -50
- package/template/workflows/specdev/T-tickets/ticket-template.md +0 -151
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +0 -102
- package/template/workflows/specdev/T-triage/T-triage.md +0 -51
- package/template/workflows/specdev/T-triage/capture-protocol.md +0 -89
- package/template/workflows/specdev/T-triage/capture-template.md +0 -42
- package/template/workflows/specdev/T-triage/ci-security-protocol.md +0 -11
- package/template/workflows/specdev/T-triage/close-comment-template.md +0 -42
- package/template/workflows/specdev/T-triage/intake-protocol.md +0 -63
- package/template/workflows/specdev/T-triage/issue-body-template.md +0 -34
- package/template/workflows/specdev/T-triage/issue-record-template.md +0 -27
- package/template/workflows/specdev/T-triage/pr-delivery-protocol.md +0 -13
- package/template/workflows/specdev/T-triage/publish-protocol.md +0 -92
- package/template/workflows/specdev/T-triage/queue-protocol.md +0 -7
- package/template/workflows/specdev/T-triage/reconcile-protocol.md +0 -34
- package/template/workflows/specdev/T-triage/references/issue-pr-policy.md +0 -23
- package/template/workflows/specdev/T-triage/release-preflight.md +0 -13
- package/template/workflows/specdev/T-triage/release-protocol.md +0 -12
- package/template/workflows/specdev/T-triage/release-recovery.md +0 -18
- package/template/workflows/specdev/T-triage/remote-operations.md +0 -25
- package/template/workflows/specdev/T-triage/tools/capture-status.mjs +0 -125
- package/template/workflows/specdev/T-triage/tools/publish-status.mjs +0 -148
- package/template/workflows/specdev/T-triage/triage-template.md +0 -57
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +0 -42
- package/template/workflows/specdev/W-wayfinder/investigation-ticket-template.md +0 -16
- package/template/workflows/specdev/W-wayfinder/local-tracker-contract.md +0 -35
- package/template/workflows/specdev/W-wayfinder/references/initiative-discovery.md +0 -29
- package/template/workflows/specdev/W-wayfinder/references/map-traversal.md +0 -120
- package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +0 -33
- package/template/workflows/specdev/_state/archive/.gitkeep +0 -0
- package/template/workflows/specdev/_state/changes/.gitkeep +0 -0
- package/template/workflows/specdev/_state/status.json +0 -6
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +0 -51
- package/template/workflows/specdev/common/skills/subagent-delivery/references/dispatch-and-accept.md +0 -87
- package/template/workflows/specdev/common/skills/subagent-delivery/references/external-web-subagent.md +0 -132
- package/template/workflows/specdev/common/skills/subagent-delivery/references/native-subagent.md +0 -28
- package/template/workflows/specdev/common/skills/subagent-delivery/references/source-package.md +0 -239
- /package/template/{skills → commands}/docs-sync/assets/state-template.json +0 -0
- /package/template/{skills → commands}/docs-sync/assets/workflow-scope-template.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/agents/openai.yaml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/fallback/kotlin-gradle/build.gradle.kts +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/fallback/kotlin-gradle/expected.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/fallback/kotlin-gradle/src/main/kotlin/example/App.kt +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/.golangci.yml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/cmd/api/main.go +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/expected.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/go.mod +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/internal/service/service.go +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/internal/service/service_test.go +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/expected.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/pom.xml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/src/main/java/dev/speculo/orders/OrdersApplication.java +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/src/test/java/dev/speculo/orders/OrdersApplicationTest.java +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/.github/workflows/ci.yml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/apps/web/package.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/apps/web/src/App.vue +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/apps/web/tsconfig.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/expected.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/package.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/pnpm-workspace.yaml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/orders/pom.xml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/orders/src/main/java/dev/speculo/orders/OrdersApplication.java +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/worker/go.mod +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/worker/main.go +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/Cargo.toml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/cli/Cargo.toml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/cli/src/main.rs +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/core/Cargo.toml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/core/src/lib.rs +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/expected.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/rust-toolchain.toml +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/expected.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/package.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/src/App.test.tsx +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/src/App.tsx +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/src/main.tsx +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/tsconfig.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/expected.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/package.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/src/App.test.ts +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/src/App.vue +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/src/main.ts +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/tsconfig.json +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/vite.config.ts +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/go/00-detection-and-scope.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/go/01-language-and-idioms.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/go/02-modules-packages-and-layout.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/go/03-errors-context-and-concurrency.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/go/04-testing-tooling-quality-gates.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/go/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/java/00-detection-and-scope.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/java/01-language-packages-and-api.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/java/02-build-modules-and-dependencies.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/java/03-errors-nullability-resources-concurrency.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/java/04-testing-tooling-quality-gates.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/java/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/java/frameworks/spring-boot.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/00-governance-and-precedence.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/01-project-discovery.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/02-evidence-topology-and-scope.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/03-interview-and-decisions.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/04-architecture-and-dependency-boundaries.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/05-files-directories-and-naming.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/06-apis-errors-resources-and-concurrency.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/07-documentation-and-comments.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/08-testing-strategy.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/09-mechanical-guardrails.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/09-security-configuration-and-data.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/10-performance-observability-and-i18n.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/11-tooling-quality-gates-and-ci.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/12-git-review-and-delivery.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/13-adoption-exceptions-and-ratchets.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/14-generation-contract.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/15-validation-contract.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/16-language-adapter-contract.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rules/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rust/00-detection-and-scope.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rust/01-language-api-and-safety.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rust/02-crates-workspaces-and-layout.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rust/03-errors-ownership-and-concurrency.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rust/04-testing-tooling-quality-gates.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/rust/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/00-detection-and-scope.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/01-language-and-type-system.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/02-modules-packages-and-runtime-boundaries.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/03-functions-async-errors-resources.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/04-testing-tooling-quality-gates.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/app-types/cli.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/app-types/library.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/frameworks/react.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/frameworks/vue.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/runtimes/browser.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/runtimes/electron.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/references/typescript/runtimes/node.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/scripts/discover-project.mjs +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/scripts/self-test.mjs +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/scripts/sync-manifest.mjs +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/scripts/validate-generated-skill.mjs +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/README.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/agents-typescript--standards.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/agents-typescript-standards.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/claude-engineering-standards.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/claude-typescript-standards.md +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/domain-skill/SKILL.md.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/SKILL.md.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/generated-skill-set.json.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/00-project-profile.md.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/01-module-map.md.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/02-decisions-and-exceptions.md.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/03-skill-map.md.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/04-source-and-template-map.md.template +0 -0
- /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/review-checklist.md.template +0 -0
- /package/template/{skills → commands}/git-history-squash/agents/openai.yaml +0 -0
- /package/template/{skills → commands}/git-history-squash/assets/request-template.json +0 -0
- /package/template/{skills → commands}/git-history-squash/references/recovery-contract.md +0 -0
- /package/template/{skills → commands}/git-history-squash/references/submodule-contract.md +0 -0
- /package/template/commands/{references/git-repository-audit-procedure.md → git-repository-audit/references/procedure.md} +0 -0
- /package/template/{skills → commands}/source-code-zip/references/cli-reference.md +0 -0
- /package/template/{skills → commands}/source-code-zip/scripts/zip_source_code.js +0 -0
- /package/template/{skills → commands}/upstream-fork-sync/scripts/upstream-sync.mjs +0 -0
- /package/template/{skills → references}/retrospective/references/friction-taxonomy.md +0 -0
- /package/template/{skills → references}/writing-for-agents/references/authoring-principles.md +0 -0
- /package/template/workflows/learning/{A-assess-and-plan → learning-a-assess-and-plan/assets}/background-template.md +0 -0
- /package/template/workflows/learning/{A-assess-and-plan → learning-a-assess-and-plan/assets}/change-status-template.json +0 -0
- /package/template/workflows/learning/{A-assess-and-plan → learning-a-assess-and-plan/assets}/course-template.md +0 -0
- /package/template/workflows/learning/{G-goal → learning-g-goal/assets}/chain-template.md +0 -0
- /package/template/workflows/learning/{G-goal → learning-g-goal/assets}/coverage-matrix-template.md +0 -0
- /package/template/workflows/learning/{G-goal → learning-g-goal}/references/mine-unit.md +0 -0
- /package/template/workflows/learning/{G-goal → learning-g-goal}/references/split-rules.md +0 -0
- /package/template/workflows/learning/{G-goal → learning-g-goal}/references/stop-rules.md +0 -0
- /package/template/workflows/learning/{H-homework → learning-h-homework/assets}/homework-template.md +0 -0
- /package/template/workflows/learning/{I-init-setup → learning-i-init-setup/assets}/context-index-template.md +0 -0
- /package/template/workflows/learning/{I-init-setup → learning-i-init-setup/assets}/learner-profile-template.md +0 -0
- /package/template/workflows/learning/{I-init-setup → learning-i-init-setup/assets}/review-index-template.md +0 -0
- /package/template/workflows/learning/{Q-question → learning-q-question/assets}/lightweight-course-template.md +0 -0
- /package/template/workflows/learning/{Q-question/tools → learning-q-question/scripts}/validate-inquiry.mjs +0 -0
- /package/template/workflows/learning/{R-review → learning-r-review/assets}/review-template.md +0 -0
- /package/template/workflows/ops/{H-host-manage → ops-h-host-manage}/references/host-profiles.md +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os/_templates → person-m-mao-zedong-cognitive-os/assets/templates}/mao-consultation-output-template.md +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/000-/344/270/255/345/233/275/347/244/276/344/274/232/345/220/204/351/230/266/347/272/247/347/232/204/345/210/206/346/236/220.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/001-/346/271/226/345/215/227/345/206/234/346/260/221/350/277/220/345/212/250/350/200/203/345/257/237/346/212/245/345/221/212.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/002-/344/270/255/345/233/275/347/232/204/347/272/242/350/211/262/346/224/277/346/235/203/344/270/272/344/273/200/344/271/210/350/203/275/345/244/237/345/255/230/345/234/250/357/274/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/003-/344/272/225/345/206/210/345/261/261/347/232/204/346/226/227/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/004-/345/205/263/344/272/216/347/272/240/346/255/243/345/205/232/345/206/205/347/232/204/351/224/231/350/257/257/346/200/235/346/203/263.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/005-/346/230/237/346/230/237/344/271/213/347/201/253/357/274/214/345/217/257/344/273/245/347/207/216/345/216/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/006-/345/217/215/345/257/271/346/234/254/346/234/254/344/270/273/344/271/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/007-/345/277/205/351/241/273/346/263/250/346/204/217/347/273/217/346/265/216/345/267/245/344/275/234.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/008-/346/200/216/346/240/267/345/210/206/346/236/220/345/206/234/346/235/221/351/230/266/347/272/247.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/009-/346/210/221/344/273/254/347/232/204/347/273/217/346/265/216/346/224/277/347/255/226.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/010-/345/205/263/345/277/203/347/276/244/344/274/227/347/224/237/346/264/273/357/274/214/346/263/250/346/204/217/345/267/245/344/275/234/346/226/271/346/263/225.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/011-/350/256/272/345/217/215/345/257/271/346/227/245/346/234/254/345/270/235/345/233/275/344/270/273/344/271/211/347/232/204/347/255/226/347/225/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/012-/344/270/255/345/233/275/351/235/251/345/221/275/346/210/230/344/272/211/347/232/204/346/210/230/347/225/245/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/013-/345/205/263/344/272/216/350/222/213/344/273/213/347/237/263/345/243/260/346/230/216/347/232/204/345/243/260/346/230/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/014-/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/234/250/346/212/227/346/227/245/346/227/266/346/234/237/347/232/204/344/273/273/345/212/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/015-/344/270/272/344/272/211/345/217/226/345/215/203/347/231/276/344/270/207/347/276/244/344/274/227/350/277/233/345/205/245/346/212/227/346/227/245/346/260/221/346/227/217/347/273/237/344/270/200/346/210/230/347/272/277/350/200/214/346/226/227/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/016-/345/256/236/350/267/265/350/256/272.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/017-/347/237/233/347/233/276/350/256/272.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/018-/345/217/215/345/257/271/346/227/245/346/234/254/350/277/233/346/224/273/347/232/204/346/226/271/351/222/210/343/200/201/345/212/236/346/263/225/345/222/214/345/211/215/351/200/224.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/019-/344/270/272/345/212/250/345/221/230/344/270/200/345/210/207/345/212/233/351/207/217/344/272/211/345/217/226/346/212/227/346/210/230/350/203/234/345/210/251/350/200/214/346/226/227/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/020-/345/217/215/345/257/271/350/207/252/347/224/261/344/270/273/344/271/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/021-/345/233/275/345/205/261/345/220/210/344/275/234/346/210/220/347/253/213/345/220/216/347/232/204/350/277/253/345/210/207/344/273/273/345/212/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/022-/345/222/214/350/213/261/345/233/275/350/256/260/350/200/205/350/264/235/347/211/271/345/205/260/347/232/204/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/023-/344/270/212/346/265/267/345/244/252/345/216/237/345/244/261/351/231/267/344/273/245/345/220/216/346/212/227/346/227/245/346/210/230/344/272/211/347/232/204/345/275/242/345/212/277/345/222/214/344/273/273/345/212/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/024-/351/231/225/347/224/230/345/256/201/350/276/271/345/214/272/346/224/277/345/272/234/347/254/254/345/205/253/350/267/257/345/206/233/345/220/216/346/226/271/347/225/231/345/256/210/345/244/204/345/270/203/345/221/212.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/025-/346/212/227/346/227/245/346/270/270/345/207/273/346/210/230/344/272/211/347/232/204/346/210/230/347/225/245/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/026-/350/256/272/346/214/201/344/271/205/346/210/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/027-/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/234/250/346/260/221/346/227/217/346/210/230/344/272/211/344/270/255/347/232/204/345/234/260/344/275/215.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/028-/347/273/237/344/270/200/346/210/230/347/272/277/344/270/255/347/232/204/347/213/254/347/253/213/350/207/252/344/270/273/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/029-/346/210/230/344/272/211/345/222/214/346/210/230/347/225/245/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/030-/344/272/224/345/233/233/350/277/220/345/212/250.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/031-/351/235/222/345/271/264/350/277/220/345/212/250/347/232/204/346/226/271/345/220/221.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/032-/345/217/215/345/257/271/346/212/225/351/231/215/346/264/273/345/212/250.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/033-/345/277/205/351/241/273/345/210/266/350/243/201/345/217/215/345/212/250/346/264/276.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/034-/345/205/263/344/272/216/345/233/275/351/231/205/346/226/260/345/275/242/345/212/277/345/257/271/346/226/260/345/215/216/346/227/245/346/212/245/350/256/260/350/200/205/347/232/204/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/035-/345/222/214/344/270/255/345/244/256/347/244/276/343/200/201/346/211/253/350/215/241/346/212/245/343/200/201/346/226/260/346/260/221/346/212/245/344/270/211/350/256/260/350/200/205/347/232/204/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/036-/350/213/217/350/201/224/345/210/251/347/233/212/345/222/214/344/272/272/347/261/273/345/210/251/347/233/212/347/232/204/344/270/200/350/207/264.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/037-/343/200/212/345/205/261/344/272/247/345/205/232/344/272/272/343/200/213/345/217/221/345/210/212/350/257/215.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/038-/347/233/256/345/211/215/345/275/242/345/212/277/345/222/214/345/205/232/347/232/204/344/273/273/345/212/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/039-/345/244/247/351/207/217/345/220/270/346/224/266/347/237/245/350/257/206/345/210/206/345/255/220.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/040-/344/270/255/345/233/275/351/235/251/345/221/275/345/222/214/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/041-/346/226/257/345/244/247/346/236/227/346/230/257/344/270/255/345/233/275/344/272/272/346/260/221/347/232/204/346/234/213/345/217/213.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/042-/347/272/252/345/277/265/347/231/275/346/261/202/346/201/251.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/043-/346/226/260/346/260/221/344/270/273/344/270/273/344/271/211/350/256/272.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/044-/345/205/213/346/234/215/346/212/225/351/231/215/345/215/261/351/231/251/357/274/214/345/212/233/344/272/211/346/227/266/345/261/200/345/245/275/350/275/254.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/045-/345/233/242/347/273/223/344/270/200/345/210/207/346/212/227/346/227/245/345/212/233/351/207/217/357/274/214/345/217/215/345/257/271/345/217/215/345/205/261/351/241/275/345/233/272/346/264/276.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/046-/345/220/221/345/233/275/346/260/221/345/205/232/347/232/204/345/215/201/347/202/271/350/246/201/346/261/202.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/047-/343/200/212/344/270/255/345/233/275/345/267/245/344/272/272/343/200/213/345/217/221/345/210/212/350/257/215.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/048-/345/277/205/351/241/273/345/274/272/350/260/203/345/233/242/347/273/223/345/222/214/350/277/233/346/255/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/049-/346/226/260/346/260/221/344/270/273/344/270/273/344/271/211/347/232/204/345/256/252/346/224/277.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/050-/346/212/227/346/227/245/346/240/271/346/215/256/345/234/260/347/232/204/346/224/277/346/235/203/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/051-/347/233/256/345/211/215/346/212/227/346/227/245/347/273/237/344/270/200/346/210/230/347/272/277/344/270/255/347/232/204/347/255/226/347/225/245/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/052-/346/224/276/346/211/213/345/217/221/345/261/225/346/212/227/346/227/245/345/212/233/351/207/217/357/274/214/346/212/265/346/212/227/345/217/215/345/205/261/351/241/275/345/233/272/346/264/276/347/232/204/350/277/233/346/224/273.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/053-/345/233/242/347/273/223/345/210/260/345/272/225.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/054-/350/256/272/346/224/277/347/255/226.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/055-/344/270/272/347/232/226/345/215/227/344/272/213/345/217/230/345/217/221/350/241/250/347/232/204/345/221/275/344/273/244/345/222/214/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/056-/346/211/223/351/200/200/347/254/254/344/272/214/346/254/241/345/217/215/345/205/261/351/253/230/346/275/256/345/220/216/347/232/204/346/227/266/345/261/200.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/057-/345/205/263/344/272/216/346/211/223/351/200/200/347/254/254/344/272/214/346/254/241/345/217/215/345/205/261/351/253/230/346/275/256/347/232/204/346/200/273/347/273/223.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/058-/343/200/212/345/206/234/346/235/221/350/260/203/346/237/245/343/200/213/347/232/204/345/272/217/350/250/200/345/222/214/350/267/213.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/059-/346/224/271/351/200/240/346/210/221/344/273/254/347/232/204/345/255/246/344/271/240.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/060-/346/217/255/347/240/264/350/277/234/344/270/234/346/205/225/345/260/274/351/273/221/347/232/204/351/230/264/350/260/213.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/061-/345/205/263/344/272/216/345/217/215/346/263/225/350/245/277/346/226/257/347/232/204/345/233/275/351/231/205/347/273/237/344/270/200/346/210/230/347/272/277.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/062-/345/234/250/351/231/225/347/224/230/345/256/201/350/276/271/345/214/272/345/217/202/350/256/256/344/274/232/347/232/204/346/274/224/350/257/264.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/063-/346/225/264/351/241/277/345/205/232/347/232/204/344/275/234/351/243/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/064-/345/217/215/345/257/271/345/205/232/345/205/253/350/202/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/065-/345/234/250/345/273/266/345/256/211/346/226/207/350/211/272/345/272/247/350/260/210/344/274/232/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/066-/344/270/200/344/270/252/346/236/201/345/205/266/351/207/215/350/246/201/347/232/204/346/224/277/347/255/226.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/067-/347/254/254/344/272/214/346/254/241/344/270/226/347/225/214/345/244/247/346/210/230/347/232/204/350/275/254/346/212/230/347/202/271.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/068-/347/245/235/345/215/201/346/234/210/351/235/251/345/221/275/344/272/214/345/215/201/344/272/224/345/221/250/345/271/264.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/069-/346/212/227/346/227/245/346/227/266/346/234/237/347/232/204/347/273/217/346/265/216/351/227/256/351/242/230/345/222/214/350/264/242/346/224/277/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/070-/345/205/263/344/272/216/351/242/206/345/257/274/346/226/271/346/263/225/347/232/204/350/213/245/345/271/262/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/071-/350/264/250/351/227/256/345/233/275/346/260/221/345/205/232.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/072-/345/274/200/345/261/225/346/240/271/346/215/256/345/234/260/347/232/204/345/207/217/347/247/237/343/200/201/347/224/237/344/272/247/345/222/214/346/213/245/346/224/277/347/210/261/346/260/221/350/277/220/345/212/250.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/073-/350/257/204/345/233/275/346/260/221/345/205/232/345/215/201/344/270/200/344/270/255/345/205/250/344/274/232/345/222/214/344/270/211/345/261/212/344/272/214/346/254/241/345/233/275/346/260/221/345/217/202/346/224/277/344/274/232.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/074-/347/273/204/347/273/207/350/265/267/346/235/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/075-/345/255/246/344/271/240/345/222/214/346/227/266/345/261/200.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/076-/344/270/272/344/272/272/346/260/221/346/234/215/345/212/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/077-/350/257/204/350/222/213/344/273/213/347/237/263/345/234/250/345/217/214/345/215/201/350/212/202/347/232/204/346/274/224/350/257/264.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/078-/346/226/207/345/214/226/345/267/245/344/275/234/344/270/255/347/232/204/347/273/237/344/270/200/346/210/230/347/272/277.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/079-/345/277/205/351/241/273/345/255/246/344/274/232/345/201/232/347/273/217/346/265/216/345/267/245/344/275/234.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/080-/346/270/270/345/207/273/345/214/272/344/271/237/350/203/275/345/244/237/350/277/233/350/241/214/347/224/237/344/272/247.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/081-/344/270/244/344/270/252/344/270/255/345/233/275/344/271/213/345/221/275/350/277/220.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/082-/350/256/272/350/201/224/345/220/210/346/224/277/345/272/234.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/083-/346/204/232/345/205/254/347/247/273/345/261/261.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/084-/350/256/272/345/206/233/351/230/237/347/224/237/344/272/247/350/207/252/347/273/231/357/274/214/345/205/274/350/256/272/346/225/264/351/243/216/345/222/214/347/224/237/344/272/247/344/270/244/345/244/247/350/277/220/345/212/250/347/232/204/351/207/215/350/246/201/346/200/247.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/085-/350/265/253/345/260/224/345/210/251/345/222/214/350/222/213/344/273/213/347/237/263/347/232/204/345/217/214/347/260/247/345/267/262/347/273/217/347/240/264/344/272/247.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/086-/350/257/204/350/265/253/345/260/224/345/210/251/346/224/277/347/255/226/347/232/204/345/215/261/351/231/251.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/087-/347/273/231/347/246/217/346/226/257/347/211/271/345/220/214/345/277/227/347/232/204/347/224/265/346/212/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/088-/345/257/271/346/227/245/345/257/207/347/232/204/346/234/200/345/220/216/344/270/200/346/210/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/089-/346/212/227/346/227/245/346/210/230/344/272/211/350/203/234/345/210/251/345/220/216/347/232/204/346/227/266/345/261/200/345/222/214/346/210/221/344/273/254/347/232/204/346/226/271/351/222/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/090-/350/222/213/344/273/213/347/237/263/345/234/250/346/214/221/345/212/250/345/206/205/346/210/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/091-/347/254/254/345/215/201/345/205/253/351/233/206/345/233/242/345/206/233/346/200/273/345/217/270/344/273/244/347/273/231/350/222/213/344/273/213/347/237/263/347/232/204/344/270/244/344/270/252/347/224/265/346/212/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/092-/350/257/204/350/222/213/344/273/213/347/237/263/345/217/221/350/250/200/344/272/272/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/093-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/345/220/214/345/233/275/346/260/221/345/205/232/350/277/233/350/241/214/345/222/214/345/271/263/350/260/210/345/210/244/347/232/204/351/200/232/347/237/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/094-/345/205/263/344/272/216/351/207/215/345/272/206/350/260/210/345/210/244.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/095-/345/233/275/346/260/221/345/205/232/350/277/233/346/224/273/347/232/204/347/234/237/347/233/270.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/096-/345/207/217/347/247/237/345/222/214/347/224/237/344/272/247/346/230/257/344/277/235/345/215/253/350/247/243/346/224/276/345/214/272/347/232/204/344/270/244/344/273/266/345/244/247/344/272/213.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/097-/344/270/200/344/271/235/345/233/233/345/205/255/345/271/264/350/247/243/346/224/276/345/214/272/345/267/245/344/275/234/347/232/204/346/226/271/351/222/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/098-/345/273/272/347/253/213/345/267/251/345/233/272/347/232/204/344/270/234/345/214/227/346/240/271/346/215/256/345/234/260.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/099-/345/205/263/344/272/216/347/233/256/345/211/215/345/233/275/351/231/205/345/275/242/345/212/277/347/232/204/345/207/240/347/202/271/344/274/260/350/256/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/100-/344/273/245/350/207/252/345/215/253/346/210/230/344/272/211/347/262/211/347/242/216/350/222/213/344/273/213/347/237/263/347/232/204/350/277/233/346/224/273.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/101-/345/222/214/347/276/216/345/233/275/350/256/260/350/200/205/345/256/211/345/250/234/302/267/350/267/257/346/230/223/346/226/257/302/267/346/226/257/347/211/271/346/234/227/347/232/204/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/102-/351/233/206/344/270/255/344/274/230/345/212/277/345/205/265/345/212/233/357/274/214/345/220/204/344/270/252/346/255/274/347/201/255/346/225/214/344/272/272.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/103-/347/276/216/345/233/275/342/200/234/350/260/203/350/247/243/342/200/235/347/234/237/347/233/270/345/222/214/344/270/255/345/233/275/345/206/205/346/210/230/345/211/215/351/200/224.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/104-/344/270/211/344/270/252/346/234/210/346/200/273/347/273/223.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/105-/350/277/216/346/216/245/344/270/255/345/233/275/351/235/251/345/221/275/347/232/204/346/226/260/351/253/230/346/275/256.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/106-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/346/232/202/346/227/266/346/224/276/345/274/203/345/273/266/345/256/211/345/222/214/344/277/235/345/215/253/351/231/225/347/224/230/345/256/201/350/276/271/345/214/272/347/232/204/344/270/244/344/270/252/346/226/207/344/273/266.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/107-/345/205/263/344/272/216/350/245/277/345/214/227/346/210/230/345/234/272/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/108-/350/222/213/344/273/213/347/237/263/346/224/277/345/272/234/345/267/262/345/244/204/345/234/250/345/205/250/346/260/221/347/232/204/345/214/205/345/233/264/344/270/255.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/109-/350/247/243/346/224/276/346/210/230/344/272/211/347/254/254/344/272/214/345/271/264/347/232/204/346/210/230/347/225/245/346/226/271/351/222/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/110-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/345/256/243/350/250/200.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/111-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/346/200/273/351/203/250/345/205/263/344/272/216/351/207/215/350/241/214/351/242/201/345/270/203/344/270/211/345/244/247/347/272/252/345/276/213/345/205/253/351/241/271/346/263/250/346/204/217/347/232/204/350/256/255/344/273/244.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/112-/347/233/256/345/211/215/345/275/242/345/212/277/345/222/214/346/210/221/344/273/254/347/232/204/344/273/273/345/212/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/113-/345/205/263/344/272/216/345/273/272/347/253/213/346/212/245/345/221/212/345/210/266/345/272/246.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/114-/345/205/263/344/272/216/347/233/256/345/211/215/345/205/232/347/232/204/346/224/277/347/255/226/344/270/255/347/232/204/345/207/240/344/270/252/351/207/215/350/246/201/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/115-/345/206/233/351/230/237/345/206/205/351/203/250/347/232/204/346/260/221/344/270/273/350/277/220/345/212/250.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/116-/345/234/250/344/270/215/345/220/214/345/234/260/345/214/272/345/256/236/346/226/275/345/234/237/345/234/260/346/263/225/347/232/204/344/270/215/345/220/214/347/255/226/347/225/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/117-/347/272/240/346/255/243/345/234/237/345/234/260/346/224/271/351/235/251/345/256/243/344/274/240/344/270/255/347/232/204/342/200/234/345/267/246/342/200/235/345/200/276/351/224/231/350/257/257.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/118-/346/226/260/350/247/243/346/224/276/345/214/272/345/234/237/345/234/260/346/224/271/351/235/251/350/246/201/347/202/271.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/119-/345/205/263/344/272/216/345/267/245/345/225/206/344/270/232/346/224/277/347/255/226.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/120-/345/205/263/344/272/216/346/260/221/346/227/217/350/265/204/344/272/247/351/230/266/347/272/247/345/222/214/345/274/200/346/230/216/347/273/205/345/243/253/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/121-/350/257/204/350/245/277/345/214/227/345/244/247/346/215/267/345/205/274/350/256/272/350/247/243/346/224/276/345/206/233/347/232/204/346/226/260/345/274/217/346/225/264/345/206/233/350/277/220/345/212/250.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/122-/345/205/263/344/272/216/346/203/205/345/206/265/347/232/204/351/200/232/346/212/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/123-/345/234/250/346/231/213/347/273/245/345/271/262/351/203/250/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/124-/345/257/271/346/231/213/347/273/245/346/227/245/346/212/245/347/274/226/350/276/221/344/272/272/345/221/230/347/232/204/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/125-/345/206/215/345/205/213/346/264/233/351/230/263/345/220/216/347/273/231/346/264/233/351/230/263/345/211/215/347/272/277/346/214/207/346/214/245/351/203/250/347/232/204/347/224/265/346/212/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/126-/346/226/260/350/247/243/346/224/276/345/214/272/345/206/234/346/235/221/345/267/245/344/275/234/347/232/204/347/255/226/347/225/245/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/127-/344/270/200/344/271/235/345/233/233/345/205/253/345/271/264/347/232/204/345/234/237/345/234/260/346/224/271/351/235/251/345/267/245/344/275/234/345/222/214/346/225/264/345/205/232/345/267/245/344/275/234.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/128-/345/205/263/344/272/216/350/276/275/346/262/210/346/210/230/345/275/271/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/129-/345/205/263/344/272/216/345/201/245/345/205/250/345/205/232/345/247/224/345/210/266.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/130-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/344/271/235/346/234/210/344/274/232/350/256/256/347/232/204/351/200/232/347/237/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/131-/345/205/263/344/272/216/346/267/256/346/265/267/346/210/230/345/275/271/347/232/204/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/132-/345/205/250/344/270/226/347/225/214/351/235/251/345/221/275/345/212/233/351/207/217/345/233/242/347/273/223/350/265/267/346/235/245/357/274/214/345/217/215/345/257/271/345/270/235/345/233/275/344/270/273/344/271/211/347/232/204/344/276/265/347/225/245.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/133-/344/270/255/345/233/275/345/206/233/344/272/213/345/275/242/345/212/277/347/232/204/351/207/215/345/244/247/345/217/230/345/214/226.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/134-/345/205/263/344/272/216/345/271/263/346/264/245/346/210/230/345/275/271/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/135-/346/225/246/344/277/203/346/235/234/350/201/277/346/230/216/347/255/211/346/212/225/351/231/215/344/271/246.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/136-/345/260/206/351/235/251/345/221/275/350/277/233/350/241/214/345/210/260/345/272/225.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/137-/350/257/204/346/210/230/347/212/257/346/261/202/345/222/214.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/138-/344/270/255/345/205/261/344/270/255/345/244/256/346/257/233/346/263/275/344/270/234/344/270/273/345/270/255/345/205/263/344/272/216/346/227/266/345/261/200/347/232/204/345/243/260/346/230/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/139-/344/270/255/345/205/261/345/217/221/350/250/200/344/272/272/350/257/204/345/215/227/344/272/254/350/241/214/346/224/277/351/231/242/347/232/204/345/206/263/350/256/256.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/140-/344/270/255/345/205/261/345/217/221/350/250/200/344/272/272/345/205/263/344/272/216/345/221/275/344/273/244/345/233/275/346/260/221/345/205/232/345/217/215/345/212/250/346/224/277/345/272/234/351/207/215/346/226/260/351/200/256/346/215/225/345/211/215/346/227/245/346/234/254/344/276/265/345/215/216/345/206/233/346/200/273/345/217/270/344/273/244/345/206/210/346/235/221/345/256/201/346/254/241/345/222/214/351/200/256/346/215/225/345/233/275/346/260/221/345/205/232/345/206/205/346/210/230/347/275/252/347/212/257/347/232/204/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/141-/344/270/255/345/205/261/345/217/221/350/250/200/344/272/272/345/205/263/344/272/216/345/222/214/345/271/263/346/235/241/344/273/266/345/277/205/351/241/273/345/214/205/346/213/254/346/203/251/345/212/236/346/227/245/346/234/254/346/210/230/347/212/257/345/222/214/345/233/275/346/260/221/345/205/232/346/210/230/347/212/257/347/232/204/345/243/260/346/230/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/142-/346/212/212/345/206/233/351/230/237/345/217/230/344/270/272/345/267/245/344/275/234/351/230/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/143-/345/233/233/345/210/206/344/272/224/350/243/202/347/232/204/345/217/215/345/212/250/346/264/276/344/270/272/344/273/200/344/271/210/350/277/230/350/246/201/347/251/272/345/226/212/342/200/234/345/205/250/351/235/242/345/222/214/345/271/263/342/200/235/357/274/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/144-/345/233/275/346/260/221/345/205/232/345/217/215/345/212/250/346/264/276/347/224/261/342/200/234/345/221/274/345/220/201/345/222/214/345/271/263/342/200/235/345/217/230/344/270/272/345/221/274/345/220/201/346/210/230/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/145-/350/257/204/345/233/275/346/260/221/345/205/232/345/257/271/346/210/230/344/272/211/350/264/243/344/273/273/351/227/256/351/242/230/347/232/204/345/207/240/347/247/215/347/255/224/346/241/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/146-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/347/254/254/344/270/203/345/261/212/344/270/255/345/244/256/345/247/224/345/221/230/344/274/232/347/254/254/344/272/214/346/254/241/345/205/250/344/275/223/344/274/232/350/256/256/344/270/212/347/232/204/346/212/245/345/221/212.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/147-/345/205/232/345/247/224/344/274/232/347/232/204/345/267/245/344/275/234/346/226/271/346/263/225.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/148-/345/215/227/344/272/254/346/224/277/345/272/234/345/220/221/344/275/225/345/244/204/345/216/273/357/274/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/149-/345/220/221/345/205/250/345/233/275/350/277/233/345/206/233/347/232/204/345/221/275/344/273/244.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/150-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/345/270/203/345/221/212.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/151-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/346/200/273/351/203/250/345/217/221/350/250/200/344/272/272/344/270/272/350/213/261/345/233/275/345/206/233/350/210/260/346/232/264/350/241/214/345/217/221/350/241/250/347/232/204/345/243/260/346/230/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/152-/345/234/250/346/226/260/346/224/277/346/262/273/345/215/217/345/225/206/344/274/232/350/256/256/347/255/271/345/244/207/344/274/232/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/153-/350/256/272/344/272/272/346/260/221/346/260/221/344/270/273/344/270/223/346/224/277--/347/272/252/345/277/265/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/344/272/214/345/215/201/345/205/253/345/221/250/345/271/264.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/154-/344/270/242/346/216/211/345/271/273/346/203/263/357/274/214/345/207/206/345/244/207/346/226/227/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/155-/345/210/253/344/272/206/357/274/214/345/217/270/345/276/222/351/233/267/347/231/273.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/156-/342/200/234/345/217/213/350/260/212/342/200/235/357/274/214/350/277/230/346/230/257/344/276/265/347/225/245/357/274/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/157-/344/270/272/344/273/200/344/271/210/350/246/201/350/256/250/350/256/272/347/231/275/347/232/256/344/271/246/357/274/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/158-/345/224/257/345/277/203/345/216/206/345/217/262/350/247/202/347/232/204/347/240/264/344/272/247.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/159-/344/270/255/345/233/275/344/272/272/346/260/221/347/253/231/350/265/267/346/235/245/344/272/206.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/160-/344/270/255/345/233/275/344/272/272/346/260/221/345/244/247/345/233/242/347/273/223/344/270/207/345/262/201.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/161-/344/272/272/346/260/221/350/213/261/351/233/204/344/273/254/346/260/270/345/236/202/344/270/215/346/234/275.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/162-/346/260/270/350/277/234/344/277/235/346/214/201/350/211/260/350/213/246/345/245/213/346/226/227/347/232/204/344/275/234/351/243/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/163-/345/276/201/350/257/242/345/257/271/345/276/205/345/257/214/345/206/234/347/255/226/347/225/245/351/227/256/351/242/230/347/232/204/346/204/217/350/247/201.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/164-/344/270/272/344/272/211/345/217/226/345/233/275/345/256/266/350/264/242/346/224/277/347/273/217/346/265/216/347/212/266/345/206/265/347/232/204/345/237/272/346/234/254/345/245/275/350/275/254/350/200/214/346/226/227/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/165-/344/270/215/350/246/201/345/233/233/351/235/242/345/207/272/345/207/273.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/166-/345/201/232/344/270/200/344/270/252/345/256/214/345/205/250/347/232/204/351/235/251/345/221/275/346/264/276.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/167-/344/275/240/344/273/254/346/230/257/345/205/250/346/260/221/346/227/217/347/232/204/346/250/241/350/214/203/344/272/272/347/211/251.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/168-/347/273/231/344/270/255/345/233/275/344/272/272/346/260/221/345/277/227/346/204/277/345/206/233/347/232/204/345/221/275/344/273/244.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/169-/344/270/255/345/233/275/344/272/272/346/260/221/345/277/227/346/204/277/345/206/233/350/246/201/347/210/261/346/212/244/346/234/235/351/262/234/347/232/204/344/270/200/345/261/261/344/270/200/346/260/264/344/270/200/350/215/211/344/270/200/346/234/250.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/170-/344/270/255/345/205/261/344/270/255/345/244/256/346/224/277/346/262/273/345/261/200/346/211/251/345/244/247/344/274/232/350/256/256/345/206/263/350/256/256/350/246/201/347/202/271.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/171-/351/225/207/345/216/213/345/217/215/351/235/251/345/221/275/345/277/205/351/241/273/345/256/236/350/241/214/345/205/232/347/232/204/347/276/244/344/274/227/350/267/257/347/272/277.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/172-/351/225/207/345/216/213/345/217/215/351/235/251/345/221/275/345/277/205/351/241/273/346/211/223/345/276/227/347/250/263/357/274/214/346/211/223/345/276/227/345/207/206/357/274/214/346/211/223/345/276/227/347/213/240.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/173-/345/272/224/345/275/223/351/207/215/350/247/206/347/224/265/345/275/261/343/200/212/346/255/246/350/256/255/344/274/240/343/200/213/347/232/204/350/256/250/350/256/272.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/174-/344/270/211/345/244/247/350/277/220/345/212/250/347/232/204/344/274/237/345/244/247/350/203/234/345/210/251.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/175-/345/205/263/344/272/216/342/200/234/344/270/211/345/217/215/342/200/235/343/200/201/342/200/234/344/272/224/345/217/215/342/200/235/347/232/204/346/226/227/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/176-/346/212/212/345/206/234/344/270/232/344/272/222/345/212/251/345/220/210/344/275/234/345/275/223/344/275/234/344/270/200/344/273/266/345/244/247/344/272/213/345/216/273/345/201/232.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/177-/345/205/203/346/227/246/347/245/235/350/257/215.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/178-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/350/245/277/350/227/217/345/267/245/344/275/234/346/226/271/351/222/210/347/232/204/346/214/207/347/244/272.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/179-/345/267/245/344/272/272/351/230/266/347/272/247/344/270/216/350/265/204/344/272/247/351/230/266/347/272/247/347/232/204/347/237/233/347/233/276/346/230/257/345/233/275/345/206/205/347/232/204/344/270/273/350/246/201/347/237/233/347/233/276.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/180-/345/233/242/347/273/223/350/265/267/346/235/245/357/274/214/345/210/222/346/270/205/346/225/214/346/210/221/347/225/214/351/231/220.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/181-/347/245/235/350/264/272/344/270/255/345/233/275/344/272/272/346/260/221/345/277/227/346/204/277/345/206/233/347/232/204/351/207/215/345/244/247/350/203/234/345/210/251.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/182-/345/217/215/345/257/271/345/256/230/345/203/232/344/270/273/344/271/211/343/200/201/345/221/275/344/273/244/344/270/273/344/271/211/345/222/214/350/277/235/346/263/225/344/271/261/347/272/252.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/183-/346/211/271/345/210/244/345/244/247/346/261/211/346/227/217/344/270/273/344/271/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/184-/350/247/243/345/206/263/342/200/234/344/272/224/345/244/232/342/200/235/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/185-/345/257/271/345/210/230/345/260/221/345/245/207/343/200/201/346/235/250/345/260/232/346/230/206/347/240/264/345/235/217/347/272/252/345/276/213/346/223/205/350/207/252/344/273/245/344/270/255/345/244/256/345/220/215/344/271/211/345/217/221/345/207/272/346/226/207/344/273/266/347/232/204/346/211/271/350/257/204.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/186-/346/211/271/345/210/244/347/246/273/345/274/200/346/200/273/350/267/257/347/272/277/347/232/204/345/217/263/345/200/276/350/247/202/347/202/271.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/187-/351/235/222/345/271/264/345/233/242/347/232/204/345/267/245/344/275/234/350/246/201/347/205/247/351/241/276/351/235/222/345/271/264/347/232/204/347/211/271/347/202/271.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/188-/345/205/263/344/272/216/345/233/275/345/256/266/350/265/204/346/234/254/344/270/273/344/271/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/189-/345/205/232/345/234/250/350/277/207/346/270/241/346/227/266/346/234/237/347/232/204/346/200/273/350/267/257/347/272/277.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/190-/345/217/215/345/257/271/345/205/232/345/206/205/347/232/204/350/265/204/344/272/247/351/230/266/347/272/247/346/200/235/346/203/263.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/191-/346/224/271/351/200/240/350/265/204/346/234/254/344/270/273/344/271/211/345/267/245/345/225/206/344/270/232/347/232/204/345/277/205/347/273/217/344/271/213/350/267/257.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/192-/346/212/227/347/276/216/346/217/264/346/234/235/347/232/204/344/274/237/345/244/247/350/203/234/345/210/251/345/222/214/344/273/212/345/220/216/347/232/204/344/273/273/345/212/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/193-/346/211/271/345/210/244/346/242/201/346/274/261/346/272/237/347/232/204/345/217/215/345/212/250/346/200/235/346/203/263.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/194-/345/205/263/344/272/216/345/206/234/344/270/232/344/272/222/345/212/251/345/220/210/344/275/234/347/232/204/344/270/244/346/254/241/350/260/210/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/195-/345/205/263/344/272/216/344/270/255/345/215/216/344/272/272/346/260/221/345/205/261/345/222/214/345/233/275/345/256/252/346/263/225/350/215/211/346/241/210.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/196-/344/270/272/345/273/272/350/256/276/344/270/200/344/270/252/344/274/237/345/244/247/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/345/233/275/345/256/266/350/200/214/345/245/213/346/226/227.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/197-/345/205/263/344/272/216/343/200/212/347/272/242/346/245/274/346/242/246/343/200/213/347/240/224/347/251/266/351/227/256/351/242/230/347/232/204/344/277/241.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/198-/345/216/237/345/255/220/345/274/271/345/220/223/344/270/215/345/200/222/344/270/255/345/233/275/344/272/272/346/260/221.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/199-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/205/250/345/233/275/344/273/243/350/241/250/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/200-/351/251/263/342/200/234/350/210/206/350/256/272/344/270/200/345/276/213/342/200/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/201-/343/200/212/345/205/263/344/272/216/350/203/241/351/243/216/345/217/215/351/235/251/345/221/275/351/233/206/345/233/242/347/232/204/346/235/220/346/226/231/343/200/213/347/232/204/345/272/217/350/250/200/345/222/214/346/214/211/350/257/255.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/202-/345/205/263/344/272/216/345/206/234/344/270/232/345/220/210/344/275/234/345/214/226/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/203-/345/206/234/344/270/232/345/220/210/344/275/234/345/214/226/345/277/205/351/241/273/344/276/235/351/235/240/345/205/232/345/233/242/345/221/230/345/222/214/350/264/253/345/206/234/344/270/213/344/270/255/345/206/234.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/204-/345/206/234/344/270/232/345/220/210/344/275/234/345/214/226/347/232/204/344/270/200/345/234/272/350/276/251/350/256/272/345/222/214/345/275/223/345/211/215/347/232/204/351/230/266/347/272/247/346/226/227/344/272/211.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/205-/343/200/212/344/270/255/345/233/275/345/206/234/346/235/221/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/351/253/230/346/275/256/343/200/213/347/232/204/345/272/217/350/250/200.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/206-/343/200/212/344/270/255/345/233/275/345/206/234/346/235/221/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/351/253/230/346/275/256/343/200/213/347/232/204/346/214/211/350/257/255.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/207-/345/276/201/350/257/242/345/257/271/345/206/234/344/270/232/345/215/201/344/270/203/346/235/241/347/232/204/346/204/217/350/247/201.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/208-/345/212/240/345/277/253/346/211/213/345/267/245/344/270/232/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/346/224/271/351/200/240.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/209-/350/256/272/345/215/201/345/244/247/345/205/263/347/263/273.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/210-/347/276/216/345/270/235/345/233/275/344/270/273/344/271/211/346/230/257/347/272/270/350/200/201/350/231/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/211-/345/242/236/345/274/272/345/205/232/347/232/204/345/233/242/347/273/223/357/274/214/347/273/247/346/211/277/345/205/232/347/232/204/344/274/240/347/273/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/212-/346/210/221/344/273/254/345/205/232/347/232/204/342/200/224/344/272/233/345/216/206/345/217/262/347/273/217/351/252/214.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/213-/347/272/252/345/277/265/345/255/231/344/270/255/345/261/261/345/205/210/347/224/237.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/214-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/347/254/254/345/205/253/345/261/212/344/270/255/345/244/256/345/247/224/345/221/230/344/274/232/347/254/254/344/272/214/346/254/241/345/205/250/344/275/223/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/215-/345/234/250/347/234/201/345/270/202/350/207/252/346/262/273/345/214/272/345/205/232/345/247/224/344/271/246/350/256/260/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/216-/345/205/263/344/272/216/346/255/243/347/241/256/345/244/204/347/220/206/344/272/272/346/260/221/345/206/205/351/203/250/347/237/233/347/233/276/347/232/204/351/227/256/351/242/230.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/217-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/205/250/345/233/275/345/256/243/344/274/240/345/267/245/344/275/234/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/218-/345/235/232/346/214/201/350/211/260/350/213/246/345/245/213/346/226/227/357/274/214/345/257/206/345/210/207/350/201/224/347/263/273/347/276/244/344/274/227.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/219-/344/272/213/346/203/205/346/255/243/345/234/250/350/265/267/345/217/230/345/214/226.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/220-/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/346/230/257/345/205/250/344/270/255/345/233/275/344/272/272/346/260/221/347/232/204/351/242/206/345/257/274/346/240/270/345/277/203.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/221-/347/273/204/347/273/207/345/212/233/351/207/217/345/217/215/345/207/273/345/217/263/346/264/276/345/210/206/345/255/220/347/232/204/347/214/226/347/213/202/350/277/233/346/224/273.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/222-/346/226/207/346/261/207/346/212/245/347/232/204/350/265/204/344/272/247/351/230/266/347/272/247/346/226/271/345/220/221/345/272/224/345/275/223/346/211/271/345/210/244.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/223-/346/211/223/351/200/200/350/265/204/344/272/247/351/230/266/347/272/247/345/217/263/346/264/276/347/232/204/350/277/233/346/224/273.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/224-/344/270/200/344/271/235/344/272/224/344/270/203/345/271/264/345/244/217/345/255/243/347/232/204/345/275/242/345/212/277.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/225-/345/201/232/351/235/251/345/221/275/347/232/204/344/277/203/350/277/233/346/264/276.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/226-/345/235/232/345/256/232/345/234/260/347/233/270/344/277/241/347/276/244/344/274/227/347/232/204/345/244/247/345/244/232/346/225/260.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/227-/345/205/232/345/206/205/345/233/242/347/273/223/347/232/204/350/276/251/350/257/201/346/226/271/346/263/225.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/228-/344/270/200/345/210/207/345/217/215/345/212/250/346/264/276/351/203/275/346/230/257/347/272/270/350/200/201/350/231/216.md" +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/10-personality-profile.md +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/11-analysis-frameworks.md +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/12-strategy-frameworks.md +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/13-organization-action.md +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/14-voice-and-dialogue.md +0 -0
- /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/15-quote-bank.md +0 -0
- /package/template/workflows/person/{S-steelman-deliberation/_templates → person-s-steelman-deliberation/assets/templates}/decision-template.md +0 -0
- /package/template/workflows/person/{S-steelman-deliberation/_templates → person-s-steelman-deliberation/assets/templates}/steelman-dossier-template.md +0 -0
- /package/template/workflows/person/{S-steelman-deliberation → person-s-steelman-deliberation/references}/deliberate.md +0 -0
- /package/template/workflows/person/{S-steelman-deliberation → person-s-steelman-deliberation/references}/evidence-gate.md +0 -0
- /package/template/workflows/person/{S-steelman-deliberation → person-s-steelman-deliberation/references}/judge.md +0 -0
- /package/template/workflows/specdev/{D-diagnose-bugs → specdev-d-diagnose-bugs}/scripts/hitl-loop.template.sh +0 -0
- /package/template/workflows/specdev/{G-grill-with-docs → specdev-g-grill-with-docs/assets}/design-tree-template.json +0 -0
- /package/template/workflows/specdev/{G-grill-with-docs → specdev-g-grill-with-docs/references}/log-format.md +0 -0
- /package/template/workflows/specdev/{G-grill-with-docs → specdev-g-grill-with-docs/references}/stakeholder-questionnaire.md +0 -0
- /package/template/workflows/specdev/{P-goal-plan → specdev-p-goal-plan}/references/multi-conflict-and-drift.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype/assets}/logic-template.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/METHODOLOGY.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/README.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/data/extended-projects.json +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/data/projects.json +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/reference/USAGE.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/reference/design-tokens.css +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/report/OPEN_SOURCE_UI_RESEARCH_2026.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/PROJECT_TEMPLATE.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/README.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/claude-code-modern-clients.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/creative-ai-communication.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/data-dev-tools.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/personal-multiplatform-apps.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/productivity-collaboration.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/01-dense-ide.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/02-monochrome-console.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/03-soft-personal-ai.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/04-responsive-web.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/05-mobile-supervisor.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/06-cross-platform-workspace.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/07-local-first-content.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/08-media-first.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/README.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/ATTRIBUTION.md +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/landscape.jpg +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/lucide.js +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/mountain.jpg +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/workspace.jpg +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/index.html +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/package-lock.json +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/package.json +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/screenshots/index-desktop.png +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/scripts/gallery.js +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/styles/base.css +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/styles/pages.css +0 -0
- /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/tests/gallery.spec.js +0 -0
- /package/template/workflows/specdev/{P-prototype/tools → specdev-p-prototype/scripts}/materialize-prototype.mjs +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/pr-record-template.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/publish-template.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/source-template.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/triage-run-template.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/classification-map.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/public-projection.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/release-authentication.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/release-notes-injection.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/workflow-yaml-reference.md +0 -0
- /package/template/workflows/specdev/{T-triage → specdev-t-triage}/scripts/github-transport.mjs +0 -0
- /package/template/workflows/specdev/{W-wayfinder → specdev-w-wayfinder/assets}/solution-comment-template.md +0 -0
- /package/template/workflows/specdev/{W-wayfinder → specdev-w-wayfinder}/references/initiative-template.json +0 -0
|
@@ -19,44 +19,51 @@ import {
|
|
|
19
19
|
import { execFileSync } from "node:child_process";
|
|
20
20
|
import { dirname, basename, extname, join, relative, resolve, sep, isAbsolute } from "node:path";
|
|
21
21
|
import { fileURLToPath } from "node:url";
|
|
22
|
+
import { parseFrontmatter as parseYaml, validateSkill } from "../../../../lib/speculo-runtime.mjs";
|
|
23
|
+
|
|
24
|
+
import * as runtime from "../../../../lib/speculo-runtime.mjs";
|
|
22
25
|
|
|
23
26
|
import {
|
|
24
27
|
validateTicketPlan, validatePlanMap, validateInvocationCoverage,
|
|
25
|
-
validateGoalMap, validateInitiative, resolveProjectSource,
|
|
28
|
+
validateGoalMap, validateInitiative, resolveProjectSource, readChangeExecution, readSpecification, resolveToolContext, validateExecutionPolicy, canonicalToolPath, resolveSnapshotContext, readLightweightGoal, validateAcceptanceEvidence,
|
|
26
29
|
} from "./plan-contract.mjs";
|
|
27
30
|
|
|
31
|
+
import { validateChangeClosure } from "./change-artifacts.mjs";
|
|
28
32
|
import { validateRecord, validateRecords } from "./delivery-artifacts.mjs";
|
|
33
|
+
import { reviewScopeCLI } from "./review-scope.mjs";
|
|
34
|
+
import { ENGINEERING_KINDS, validateEngineeringArtifacts, validateEngineeringPackage } from "./engineering-evidence.mjs";
|
|
29
35
|
|
|
30
36
|
const DOMAIN_SCHEMA_VERSION = 3;
|
|
31
|
-
const CONFIG_SCHEMA_VERSION =
|
|
32
|
-
const GOAL_PLAN_SCHEMA_VERSION =
|
|
37
|
+
const CONFIG_SCHEMA_VERSION = 7;
|
|
38
|
+
const GOAL_PLAN_SCHEMA_VERSION = 7;
|
|
33
39
|
const IMPLEMENTATION_MAP_SCHEMA_VERSION = 1;
|
|
34
|
-
const IMPLEMENTATION_PLAN_SCHEMA_VERSION =
|
|
40
|
+
const IMPLEMENTATION_PLAN_SCHEMA_VERSION = 2;
|
|
35
41
|
const CHANGE_STATUS_SCHEMA_VERSION = 6;
|
|
36
42
|
const GLOBAL_STATUS_SCHEMA_VERSION = 5;
|
|
37
43
|
const WORKFLOW_PREFIX = "{roots.workflows}/specdev/";
|
|
38
44
|
const STATE_PREFIX = "{roots.state}/specdev/";
|
|
39
45
|
const STATE_ROOT_PREFIX = "{roots.state}/";
|
|
46
|
+
const REFERENCES_PREFIX = "{roots.references}/";
|
|
40
47
|
const SKILLS_PREFIX = "{roots.skills}/";
|
|
41
48
|
const COMMANDS_PREFIX = "{roots.commands}/";
|
|
42
49
|
const CHANGE_NAME = /^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
43
50
|
|
|
44
51
|
const EXPECTED_WORKS = new Set([
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
52
|
+
"specdev-a-archive-and-consolidate",
|
|
53
|
+
"specdev-c-code-review",
|
|
54
|
+
"specdev-d-diagnose-bugs",
|
|
55
|
+
"specdev-g-grill-with-docs",
|
|
56
|
+
"specdev-i-implement",
|
|
57
|
+
"specdev-i-init-setup",
|
|
58
|
+
"specdev-l-learn-change",
|
|
59
|
+
"specdev-p-goal-plan",
|
|
60
|
+
"specdev-p-prototype",
|
|
61
|
+
"specdev-r-review-architecture",
|
|
62
|
+
"specdev-r-retro",
|
|
63
|
+
"specdev-s-spec",
|
|
64
|
+
"specdev-t-tickets",
|
|
65
|
+
"specdev-t-triage",
|
|
66
|
+
"specdev-w-wayfinder",
|
|
60
67
|
]);
|
|
61
68
|
const EXPECTED_COMMON_DIRS = new Set(["rules", "schemas", "skills", "tools"]);
|
|
62
69
|
const VALID_TICKET_STATUS = new Set([
|
|
@@ -172,6 +179,8 @@ const VALID_STAGES = new Set([
|
|
|
172
179
|
"prototype",
|
|
173
180
|
"wayfinder",
|
|
174
181
|
"complete",
|
|
182
|
+
"archive-ready",
|
|
183
|
+
"archived",
|
|
175
184
|
]);
|
|
176
185
|
const REQUIRED_TICKET_KEYS = new Set([
|
|
177
186
|
"schema_version",
|
|
@@ -212,7 +221,7 @@ const REQUIRED_GOAL_PLAN_SECTIONS = new Set([
|
|
|
212
221
|
]);
|
|
213
222
|
const REQUIRED_LEAD_GOAL_PLAN_MARKERS = [
|
|
214
223
|
"### Lead Orchestration",
|
|
215
|
-
"
|
|
224
|
+
"Concurrent implementations",
|
|
216
225
|
"Read-only agents",
|
|
217
226
|
"execution-time dynamic",
|
|
218
227
|
"### Ticket Workspace and Integration",
|
|
@@ -267,7 +276,7 @@ function toPosix(value) {
|
|
|
267
276
|
}
|
|
268
277
|
|
|
269
278
|
function readText(path) {
|
|
270
|
-
return
|
|
279
|
+
return runtime.readUtf8ArtifactSync(path);
|
|
271
280
|
}
|
|
272
281
|
|
|
273
282
|
function isFile(path) {
|
|
@@ -289,196 +298,17 @@ function walk(root) {
|
|
|
289
298
|
return paths;
|
|
290
299
|
}
|
|
291
300
|
|
|
292
|
-
function
|
|
293
|
-
const value = raw.trim();
|
|
294
|
-
if (value === "true" || value === "True") return true;
|
|
295
|
-
if (value === "false" || value === "False") return false;
|
|
296
|
-
if (value === "null" || value === "Null" || value === "~") return null;
|
|
297
|
-
if (/^-?\d+$/.test(value)) return Number(value);
|
|
298
|
-
if (
|
|
299
|
-
(value.startsWith('"') && value.endsWith('"')) ||
|
|
300
|
-
(value.startsWith("'") && value.endsWith("'"))
|
|
301
|
-
) {
|
|
302
|
-
return value.slice(1, -1);
|
|
303
|
-
}
|
|
304
|
-
if (value.startsWith("[") && value.endsWith("]")) {
|
|
305
|
-
// JSON object arrays are used by the additive Skill invocation contract.
|
|
306
|
-
// Keep the existing plain YAML scalar-list form for old artifacts.
|
|
307
|
-
try { return JSON.parse(value); } catch { /* legacy scalar list below */ }
|
|
308
|
-
const inner = value.slice(1, -1).trim();
|
|
309
|
-
if (inner.startsWith("{")) throw new Error("invalid JSON object array in frontmatter");
|
|
310
|
-
if (!inner) return [];
|
|
311
|
-
return inner.split(",").map((item) => parseScalar(item));
|
|
312
|
-
}
|
|
313
|
-
if (value.startsWith("{") && value.endsWith("}")) {
|
|
314
|
-
try {
|
|
315
|
-
return JSON.parse(value);
|
|
316
|
-
} catch {
|
|
317
|
-
return value;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
return value;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
function findSpecdevConfigByAncestry(change) {
|
|
324
|
-
let current = resolve(change);
|
|
325
|
-
while (true) {
|
|
326
|
-
const candidate = join(current, ".speculo", "specdev", "config.json");
|
|
327
|
-
if (isFile(candidate)) {
|
|
328
|
-
try {
|
|
329
|
-
return JSON.parse(readText(candidate));
|
|
330
|
-
} catch {
|
|
331
|
-
return null;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
const parent = dirname(current);
|
|
335
|
-
if (parent === current) return null;
|
|
336
|
-
current = parent;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
function uniqueResolved(paths) {
|
|
341
|
-
const seen = new Set();
|
|
342
|
-
const result = [];
|
|
343
|
-
for (const path of paths) {
|
|
344
|
-
const resolved = resolve(path);
|
|
345
|
-
if (seen.has(resolved)) continue;
|
|
346
|
-
seen.add(resolved);
|
|
347
|
-
result.push(resolved);
|
|
348
|
-
}
|
|
349
|
-
return result;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
function ancestorsOf(start) {
|
|
353
|
-
const dirs = [];
|
|
354
|
-
let current = resolve(start);
|
|
355
|
-
while (true) {
|
|
356
|
-
dirs.push(current);
|
|
357
|
-
const parent = dirname(current);
|
|
358
|
-
if (parent === current) break;
|
|
359
|
-
current = parent;
|
|
360
|
-
}
|
|
361
|
-
return dirs;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
function parseWorkspaceCandidate(filePath, projectRoot) {
|
|
365
|
-
if (!isFile(filePath)) return null;
|
|
366
|
-
let data;
|
|
301
|
+
function resolveWorkspaceContract(repoRoot, change, options = {}) {
|
|
367
302
|
try {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
if (typeof state !== "string" || !state.trim()) return null;
|
|
376
|
-
const declared = toPosix(state).replace(/^\.?\//, "").replace(/\/$/, "");
|
|
377
|
-
if (
|
|
378
|
-
!declared ||
|
|
379
|
-
declared.split("/").includes("..") ||
|
|
380
|
-
isAbsolute(declared) ||
|
|
381
|
-
ABSOLUTE_MACHINE_PATH_RE.test(declared)
|
|
382
|
-
) {
|
|
383
|
-
return null;
|
|
384
|
-
}
|
|
385
|
-
const expected = resolve(projectRoot, declared, "workspace.json");
|
|
386
|
-
if (expected !== resolve(filePath)) return null;
|
|
387
|
-
return {
|
|
388
|
-
filePath: resolve(filePath),
|
|
389
|
-
projectRoot: resolve(projectRoot),
|
|
390
|
-
stateDeclared: declared,
|
|
391
|
-
stateRoot: resolve(projectRoot, declared),
|
|
392
|
-
data,
|
|
393
|
-
};
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
function workspaceProbes(projectRoot) {
|
|
397
|
-
const root = resolve(projectRoot);
|
|
398
|
-
return [
|
|
399
|
-
{ projectRoot: root, filePath: join(root, "speculo", ".speculo", "workspace.json") },
|
|
400
|
-
{ projectRoot: root, filePath: join(root, ".speculo", "workspace.json") },
|
|
401
|
-
];
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
function collectWorkspaceCandidates(repoRoot, change) {
|
|
405
|
-
const probes = [];
|
|
406
|
-
if (repoRoot) {
|
|
407
|
-
probes.push(...workspaceProbes(repoRoot));
|
|
408
|
-
} else {
|
|
409
|
-
for (const dir of uniqueResolved([...ancestorsOf(change), ...ancestorsOf(process.cwd())])) {
|
|
410
|
-
probes.push(...workspaceProbes(dir));
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
const found = new Map();
|
|
414
|
-
for (const probe of probes) {
|
|
415
|
-
const parsed = parseWorkspaceCandidate(probe.filePath, probe.projectRoot);
|
|
416
|
-
if (!parsed) continue;
|
|
417
|
-
if (!found.has(parsed.filePath)) found.set(parsed.filePath, parsed);
|
|
418
|
-
}
|
|
419
|
-
return [...found.values()];
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
function isLegalChangeLocation(changeAbs, stateRoot) {
|
|
423
|
-
const name = basename(changeAbs);
|
|
424
|
-
if (resolve(stateRoot, "specdev", "changes", name) === changeAbs) return true;
|
|
425
|
-
const monthDir = dirname(changeAbs);
|
|
426
|
-
const archiveRoot = dirname(monthDir);
|
|
427
|
-
return (
|
|
428
|
-
/^\d{4}-\d{2}$/.test(basename(monthDir)) &&
|
|
429
|
-
resolve(stateRoot, "specdev", "archive") === archiveRoot &&
|
|
430
|
-
basename(changeAbs) === name
|
|
431
|
-
);
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
function resolveWorkspaceContract(repoRoot, change) {
|
|
435
|
-
const changeAbs = resolve(change);
|
|
436
|
-
const candidates = collectWorkspaceCandidates(repoRoot, changeAbs);
|
|
437
|
-
if (!candidates.length) {
|
|
438
|
-
return { mode: "legacy", errors: [], config: null, specdevRoot: null, stateDeclared: null };
|
|
439
|
-
}
|
|
440
|
-
const uniqueRoots = uniqueResolved(candidates.map((candidate) => candidate.stateRoot));
|
|
441
|
-
if (uniqueRoots.length > 1) {
|
|
442
|
-
const declared = [...new Set(candidates.map((candidate) => candidate.stateDeclared))].sort();
|
|
443
|
-
return {
|
|
444
|
-
mode: "strict",
|
|
445
|
-
errors: [`conflicting workspace.json roots.state (${declared.join(" vs ")})`],
|
|
446
|
-
config: null,
|
|
447
|
-
specdevRoot: null,
|
|
448
|
-
stateDeclared: null,
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
const workspace = candidates[0];
|
|
452
|
-
const specdevRoot = join(workspace.stateRoot, "specdev");
|
|
453
|
-
const errors = [];
|
|
454
|
-
if (!isLegalChangeLocation(changeAbs, workspace.stateRoot)) {
|
|
455
|
-
errors.push(
|
|
456
|
-
`change is outside workspace roots.state (${workspace.stateDeclared}/specdev); project-root .speculo/specdev is illegal`,
|
|
457
|
-
);
|
|
458
|
-
}
|
|
459
|
-
let config = null;
|
|
460
|
-
const configPath = join(specdevRoot, "config.json");
|
|
461
|
-
if (isFile(configPath)) {
|
|
462
|
-
try {
|
|
463
|
-
config = JSON.parse(readText(configPath));
|
|
464
|
-
} catch {
|
|
465
|
-
config = null;
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
return {
|
|
469
|
-
mode: "strict",
|
|
470
|
-
errors,
|
|
471
|
-
config,
|
|
472
|
-
specdevRoot,
|
|
473
|
-
stateDeclared: workspace.stateDeclared,
|
|
474
|
-
};
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
function findSpecdevConfig(change, repoRoot = null) {
|
|
478
|
-
const contract = resolveWorkspaceContract(repoRoot, change);
|
|
479
|
-
if (contract.mode === "strict") return contract.config;
|
|
480
|
-
return findSpecdevConfigByAncestry(change);
|
|
303
|
+
const context = options.readOnlySnapshot ? resolveSnapshotContext(options.readOnlySnapshot) : resolveToolContext(change, { ...options, repoRoot });
|
|
304
|
+
const location = runtime.resolveChangeSync(context, basename(change), { includeArchived: true });
|
|
305
|
+
const errors = canonicalToolPath(context, change) === location.root ? [] : ["change is outside the declared state root"];
|
|
306
|
+
const configPath = join(context.specdevRoot, "config.json");
|
|
307
|
+
const config = existsSync(configPath) ? JSON.parse(readText(runtime.safeWorkPathSync(context.specdevRoot, 'config.json', {mustExist:true,type:'file'}))) : null;
|
|
308
|
+
return { context, errors, config, specdevRoot:context.specdevRoot, stateDeclared:relative(context.projectRoot,context.stateRoot) };
|
|
309
|
+
} catch(error) { return {errors:[String(error)],config:null,specdevRoot:null}; }
|
|
481
310
|
}
|
|
311
|
+
function findSpecdevConfig(change,repoRoot=null,options={}) {return resolveWorkspaceContract(repoRoot,change,options).config;}
|
|
482
312
|
|
|
483
313
|
function positiveConfigLimit(config, key, fallback) {
|
|
484
314
|
const value = config?.execution?.[key];
|
|
@@ -486,37 +316,10 @@ function positiveConfigLimit(config, key, fallback) {
|
|
|
486
316
|
}
|
|
487
317
|
|
|
488
318
|
function parseFrontmatter(path) {
|
|
489
|
-
const text
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
if (end < 0) return { meta: {}, body: text };
|
|
494
|
-
|
|
495
|
-
const meta = {};
|
|
496
|
-
let currentListKey = null;
|
|
497
|
-
for (const line of lines.slice(1, end)) {
|
|
498
|
-
const stripped = line.trim();
|
|
499
|
-
if (!stripped || stripped.startsWith("#")) continue;
|
|
500
|
-
if (currentListKey && /^\s+-\s+/.test(line)) {
|
|
501
|
-
meta[currentListKey].push(parseScalar(line.replace(/^\s+-\s+/, "")));
|
|
502
|
-
continue;
|
|
503
|
-
}
|
|
504
|
-
currentListKey = null;
|
|
505
|
-
const colon = line.indexOf(":");
|
|
506
|
-
if (colon < 0) continue;
|
|
507
|
-
const key = line.slice(0, colon).trim();
|
|
508
|
-
if (["__proto__", "constructor", "prototype"].includes(key) || Object.hasOwn(meta, key)) {
|
|
509
|
-
throw new Error(`${path}: duplicate or unsafe frontmatter key ${key}`);
|
|
510
|
-
}
|
|
511
|
-
const raw = line.slice(colon + 1).trim();
|
|
512
|
-
if (!raw) {
|
|
513
|
-
meta[key] = [];
|
|
514
|
-
currentListKey = key;
|
|
515
|
-
} else {
|
|
516
|
-
meta[key] = parseScalar(raw);
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
return { meta, body: lines.slice(end + 1).join("\n") };
|
|
319
|
+
const text=readText(path);
|
|
320
|
+
if(!text.startsWith("---"))return {meta:{},body:text};
|
|
321
|
+
const parsed=parseYaml(text);
|
|
322
|
+
return {meta:parsed.fields,body:parsed.body};
|
|
520
323
|
}
|
|
521
324
|
|
|
522
325
|
function escapeRegExp(value) {
|
|
@@ -659,7 +462,7 @@ function validatePathValue(value, { allowProject = true } = {}) {
|
|
|
659
462
|
}
|
|
660
463
|
return null;
|
|
661
464
|
}
|
|
662
|
-
for (const [prefix, name] of [[SKILLS_PREFIX, "skills"], [COMMANDS_PREFIX, "commands"]]) {
|
|
465
|
+
for (const [prefix, name] of [[SKILLS_PREFIX, "skills"], [REFERENCES_PREFIX,"references"], [COMMANDS_PREFIX, "commands"]]) {
|
|
663
466
|
if (value.startsWith(prefix)) {
|
|
664
467
|
const suffix = value.slice(prefix.length);
|
|
665
468
|
if (
|
|
@@ -696,12 +499,13 @@ function validateDocumentReferences(root) {
|
|
|
696
499
|
const entries = walk(root);
|
|
697
500
|
const frozenResearchRoot = join(
|
|
698
501
|
root,
|
|
699
|
-
"
|
|
502
|
+
"specdev-p-prototype",
|
|
700
503
|
"design-library",
|
|
701
504
|
"research-snapshot",
|
|
702
505
|
);
|
|
506
|
+
const upstreamRoot = join(root, "specdev-p-prototype", "design-library", "upstream");
|
|
703
507
|
const governedEntries = entries.filter(
|
|
704
|
-
(path) => path
|
|
508
|
+
(path) => ![frozenResearchRoot, upstreamRoot].some(frozen => path === frozen || path.startsWith(`${frozen}${sep}`)),
|
|
705
509
|
);
|
|
706
510
|
const knownFiles = new Set(governedEntries.filter(isFile).map((path) => basename(path)));
|
|
707
511
|
const knownDirectories = new Set(governedEntries.filter(isDirectory).map((path) => basename(path)));
|
|
@@ -748,13 +552,13 @@ function validateDocumentReferences(root) {
|
|
|
748
552
|
);
|
|
749
553
|
}
|
|
750
554
|
}
|
|
751
|
-
} else if (payload.startsWith(
|
|
752
|
-
const isSkill = payload.startsWith(
|
|
753
|
-
const prefix = isSkill ?
|
|
555
|
+
} else if (payload.startsWith(REFERENCES_PREFIX) || payload.startsWith(COMMANDS_PREFIX)) {
|
|
556
|
+
const isSkill = payload.startsWith(REFERENCES_PREFIX);
|
|
557
|
+
const prefix = isSkill ? REFERENCES_PREFIX : COMMANDS_PREFIX;
|
|
754
558
|
const referenced = payload.slice(prefix.length);
|
|
755
559
|
if (!PLACEHOLDER_RE.test(referenced)) {
|
|
756
560
|
const templateRoot = resolve(root, "..", "..");
|
|
757
|
-
const target = join(templateRoot, isSkill ? "
|
|
561
|
+
const target = join(templateRoot, isSkill ? "references" : "commands", referenced);
|
|
758
562
|
if (!existsSync(target)) {
|
|
759
563
|
errors.push(`${label}:${lineNumber(text, match.index)}: broken public Path ${payload}`);
|
|
760
564
|
}
|
|
@@ -769,15 +573,29 @@ function validateDocumentReferences(root) {
|
|
|
769
573
|
}
|
|
770
574
|
}
|
|
771
575
|
|
|
576
|
+
const workSegment = toPosix(relative(root, path)).split("/")[0];
|
|
577
|
+
const skillRoot = EXPECTED_WORKS.has(workSegment) ? join(root, workSegment) : null;
|
|
578
|
+
const acceptedLinks = [];
|
|
772
579
|
for (const match of text.matchAll(RELATIVE_MD_LINK_RE)) {
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
);
|
|
580
|
+
const target = resolve(dirname(path), match[1].split("#")[0]);
|
|
581
|
+
if (skillRoot && target.startsWith(`${skillRoot}${sep}`) && existsSync(target)) acceptedLinks.push(match[0]);
|
|
582
|
+
else errors.push(`${label}:${lineNumber(text, match.index)}: relative Markdown link crosses its Skill package or is missing: ${match[1]}`);
|
|
583
|
+
}
|
|
584
|
+
// Browser assets need executable relative href/src values, not agent Path
|
|
585
|
+
// tags. Accept only existing targets inside the same Work package.
|
|
586
|
+
if (extname(path).toLowerCase() === ".html" && skillRoot) {
|
|
587
|
+
for (const match of text.matchAll(/(?:href|src)=["']([^"'#]+)(?:#[^"']*)?["']/g)) {
|
|
588
|
+
if (/^[a-z]+:|^\/\//i.test(match[1])) continue;
|
|
589
|
+
const target = resolve(dirname(path), match[1]);
|
|
590
|
+
if (target.startsWith(`${skillRoot}${sep}`) && existsSync(target)) acceptedLinks.push(match[0]);
|
|
591
|
+
else errors.push(`${label}: browser asset link crosses its Skill package or is missing: ${match[1]}`);
|
|
592
|
+
}
|
|
776
593
|
}
|
|
777
594
|
|
|
778
595
|
let withoutTags = text
|
|
779
596
|
.replace(/`?\s*<Path>.*?<\/Path>\s*`?/gs, "")
|
|
780
597
|
.replace(/`?\s*<Url>.*?<\/Url>\s*`?/gs, "");
|
|
598
|
+
for (const link of acceptedLinks) withoutTags = withoutTags.replaceAll(link, "");
|
|
781
599
|
|
|
782
600
|
for (const match of withoutTags.matchAll(/\{roots\.(?:workflows|state)\}/g)) {
|
|
783
601
|
errors.push(
|
|
@@ -850,29 +668,8 @@ function validateJsonFiles(root) {
|
|
|
850
668
|
|
|
851
669
|
function validateGlobalStatusAssets(root) {
|
|
852
670
|
const errors = [];
|
|
853
|
-
const
|
|
854
|
-
|
|
855
|
-
paths.unshift(join(root, "_state", "status.json"));
|
|
856
|
-
}
|
|
857
|
-
for (const path of paths) {
|
|
858
|
-
if (!isFile(path)) {
|
|
859
|
-
errors.push(`missing global status seed ${toPosix(relative(root, path))}`);
|
|
860
|
-
continue;
|
|
861
|
-
}
|
|
862
|
-
const data = JSON.parse(readText(path));
|
|
863
|
-
const keys = Object.keys(data).sort();
|
|
864
|
-
const expected = ["active", "archived", "schema_version", "workflow"];
|
|
865
|
-
if (JSON.stringify(keys) !== JSON.stringify(expected)) {
|
|
866
|
-
errors.push(`${toPosix(relative(root, path))}: global status must contain only ${expected.join(", ")}`);
|
|
867
|
-
}
|
|
868
|
-
if (
|
|
869
|
-
data.schema_version !== GLOBAL_STATUS_SCHEMA_VERSION ||
|
|
870
|
-
data.workflow !== "specdev" ||
|
|
871
|
-
!Array.isArray(data.active) ||
|
|
872
|
-
!Array.isArray(data.archived)
|
|
873
|
-
) {
|
|
874
|
-
errors.push(`${toPosix(relative(root, path))}: invalid SpecDev global status v5 seed`);
|
|
875
|
-
}
|
|
671
|
+
for (const path of [join(root,"_state/status.json"),join(root,"specdev-i-init-setup/assets/status-template.json"),join(root,"specdev-i-init-setup/assets/change-status-template.json")]) {
|
|
672
|
+
if (existsSync(path)) errors.push(`retired business status must not be distributed as a new seed: ${toPosix(relative(root,path))}`);
|
|
876
673
|
}
|
|
877
674
|
|
|
878
675
|
const schemaPath = join(root, "common", "schemas", "status.schema.json");
|
|
@@ -898,8 +695,7 @@ function validateGlobalStatusAssets(root) {
|
|
|
898
695
|
|
|
899
696
|
function validateExecutionContractAssets(root) {
|
|
900
697
|
const errors = [];
|
|
901
|
-
const configTemplatePath = join(root, "
|
|
902
|
-
const changeTemplatePath = join(root, "I-init-setup", "change-status-template.json");
|
|
698
|
+
const configTemplatePath = join(root, "specdev-i-init-setup", "assets/config-template.json");
|
|
903
699
|
const configSchemaPath = join(root, "common", "schemas", "config.schema.json");
|
|
904
700
|
const goalPlanSchemaPath = join(root, "common", "schemas", "goal-plan.schema.json");
|
|
905
701
|
const changeSchemaPath = join(root, "common", "schemas", "change-status.schema.json");
|
|
@@ -908,7 +704,6 @@ function validateExecutionContractAssets(root) {
|
|
|
908
704
|
|
|
909
705
|
for (const path of [
|
|
910
706
|
configTemplatePath,
|
|
911
|
-
changeTemplatePath,
|
|
912
707
|
configSchemaPath,
|
|
913
708
|
goalPlanSchemaPath,
|
|
914
709
|
changeSchemaPath,
|
|
@@ -922,8 +717,8 @@ function validateExecutionContractAssets(root) {
|
|
|
922
717
|
const configTemplate = JSON.parse(readText(configTemplatePath));
|
|
923
718
|
if (
|
|
924
719
|
configTemplate.schema_version !== CONFIG_SCHEMA_VERSION ||
|
|
925
|
-
!Number.isInteger(configTemplate.execution?.
|
|
926
|
-
configTemplate.execution.
|
|
720
|
+
!Number.isInteger(configTemplate.execution?.max_concurrent_implementations) ||
|
|
721
|
+
configTemplate.execution.max_concurrent_implementations < 1 ||
|
|
927
722
|
!Number.isInteger(configTemplate.execution?.max_integration_attempts) ||
|
|
928
723
|
configTemplate.execution.max_integration_attempts < 1 ||
|
|
929
724
|
!Number.isInteger(configTemplate.planning?.ui_design_default_candidates) ||
|
|
@@ -932,7 +727,7 @@ function validateExecutionContractAssets(root) {
|
|
|
932
727
|
configTemplate.planning.ui_design_max_candidates > 4 ||
|
|
933
728
|
configTemplate.planning.ui_design_max_candidates < configTemplate.planning.ui_design_default_candidates
|
|
934
729
|
) {
|
|
935
|
-
errors.push("config-template.json must define SpecDev config
|
|
730
|
+
errors.push("config-template.json must define SpecDev config v7 with positive execution limits and valid UI design candidate bounds");
|
|
936
731
|
}
|
|
937
732
|
for (const obsolete of ["auto_commit", "worktree_for_parallel", "max_parallel"]) {
|
|
938
733
|
if (JSON.stringify(configTemplate).includes(`\"${obsolete}\"`)) {
|
|
@@ -941,38 +736,29 @@ function validateExecutionContractAssets(root) {
|
|
|
941
736
|
}
|
|
942
737
|
|
|
943
738
|
const configSchema = JSON.parse(readText(configSchemaPath));
|
|
944
|
-
const limit = configSchema.properties?.execution?.properties?.
|
|
739
|
+
const limit = configSchema.properties?.execution?.properties?.max_concurrent_implementations;
|
|
945
740
|
if (
|
|
946
|
-
configSchema.$id !== "urn:speculo:specdev:config:
|
|
741
|
+
configSchema.$id !== "urn:speculo:specdev:config:v7" ||
|
|
947
742
|
configSchema.properties?.schema_version?.const !== CONFIG_SCHEMA_VERSION ||
|
|
948
743
|
limit?.minimum !== 1 ||
|
|
949
744
|
configSchema.properties?.execution?.properties?.max_integration_attempts?.minimum !== 1 ||
|
|
950
745
|
configSchema.additionalProperties !== false
|
|
951
746
|
) {
|
|
952
|
-
errors.push("config.schema.json must define the strict SpecDev config
|
|
747
|
+
errors.push("config.schema.json must define the strict SpecDev config v7 execution contract");
|
|
953
748
|
}
|
|
954
749
|
|
|
955
750
|
const goalPlanSchema = JSON.parse(readText(goalPlanSchemaPath));
|
|
956
751
|
if (
|
|
957
|
-
goalPlanSchema.$id !== "urn:speculo:specdev:goal-plan:
|
|
752
|
+
goalPlanSchema.$id !== "urn:speculo:specdev:goal-plan:v7" ||
|
|
958
753
|
goalPlanSchema.properties?.schema_version?.const !== GOAL_PLAN_SCHEMA_VERSION ||
|
|
959
754
|
goalPlanSchema.properties?.orchestration?.const !== "lead-directed" ||
|
|
960
|
-
goalPlanSchema.properties?.
|
|
755
|
+
goalPlanSchema.properties?.concurrent_implementation_limit?.minimum !== 1 ||
|
|
961
756
|
goalPlanSchema.properties?.integration_attempt_limit?.minimum !== 1 ||
|
|
962
757
|
!["current", "required"].every((value) => goalPlanSchema.properties?.ticket_workspace_policy?.enum?.includes(value)) ||
|
|
963
758
|
!["direct-parent", "candidate-merge"].every((value) => goalPlanSchema.properties?.integration_gate?.enum?.includes(value)) ||
|
|
964
759
|
goalPlanSchema.additionalProperties !== false
|
|
965
760
|
) {
|
|
966
|
-
errors.push("goal-plan.schema.json must define the strict Lead-directed Goal Plan
|
|
967
|
-
}
|
|
968
|
-
|
|
969
|
-
const changeTemplate = JSON.parse(readText(changeTemplatePath));
|
|
970
|
-
if (
|
|
971
|
-
changeTemplate.schema_version !== CHANGE_STATUS_SCHEMA_VERSION ||
|
|
972
|
-
changeTemplate.artifact !== "change-status" ||
|
|
973
|
-
!Array.isArray(changeTemplate.worktrees)
|
|
974
|
-
) {
|
|
975
|
-
errors.push("change-status-template.json must define the SpecDev change-status v6 seed");
|
|
761
|
+
errors.push("goal-plan.schema.json must define the strict Lead-directed Goal Plan v7 workspace strategy contract");
|
|
976
762
|
}
|
|
977
763
|
|
|
978
764
|
const changeSchema = JSON.parse(readText(changeSchemaPath));
|
|
@@ -999,10 +785,10 @@ function validateExecutionContractAssets(root) {
|
|
|
999
785
|
}
|
|
1000
786
|
const implementationPlanSchema = JSON.parse(readText(implementationPlanSchemaPath));
|
|
1001
787
|
if (
|
|
1002
|
-
implementationPlanSchema.$id !== "urn:speculo:specdev:implementation-plan:
|
|
788
|
+
implementationPlanSchema.$id !== "urn:speculo:specdev:implementation-plan:v2" ||
|
|
1003
789
|
implementationPlanSchema.properties?.schema_version?.const !== IMPLEMENTATION_PLAN_SCHEMA_VERSION ||
|
|
1004
790
|
implementationPlanSchema.properties?.orchestration?.const !== "lead-directed" ||
|
|
1005
|
-
implementationPlanSchema.properties?.
|
|
791
|
+
implementationPlanSchema.properties?.concurrent_implementation_limit?.minimum !== 1 ||
|
|
1006
792
|
implementationPlanSchema.properties?.integration_attempt_limit?.minimum !== 1 ||
|
|
1007
793
|
!["current", "required"].every((value) => implementationPlanSchema.properties?.ticket_workspace_policy?.enum?.includes(value)) ||
|
|
1008
794
|
implementationPlanSchema.additionalProperties !== false
|
|
@@ -1017,12 +803,12 @@ function capabilityChecks(root) {
|
|
|
1017
803
|
[
|
|
1018
804
|
"init",
|
|
1019
805
|
[
|
|
1020
|
-
join(root, "
|
|
806
|
+
join(root, "specdev-i-init-setup", "SKILL.md"),
|
|
1021
807
|
[
|
|
1022
|
-
"
|
|
1023
|
-
"
|
|
1024
|
-
"
|
|
1025
|
-
"
|
|
808
|
+
"first-setup.md",
|
|
809
|
+
"current-facts-docs.md",
|
|
810
|
+
"必要偏好",
|
|
811
|
+
"README",
|
|
1026
812
|
"specdev-worktree/",
|
|
1027
813
|
],
|
|
1028
814
|
],
|
|
@@ -1030,28 +816,28 @@ function capabilityChecks(root) {
|
|
|
1030
816
|
[
|
|
1031
817
|
"triage",
|
|
1032
818
|
[
|
|
1033
|
-
join(root, "
|
|
819
|
+
join(root, "specdev-t-triage", "SKILL.md"),
|
|
1034
820
|
["intake", "reconcile", "publish", "capture", "capture.md", "pr-delivery", "ci-security", "release-preflight", "recover", "remote-operations.md"],
|
|
1035
821
|
],
|
|
1036
822
|
],
|
|
1037
823
|
[
|
|
1038
824
|
"spec",
|
|
1039
825
|
[
|
|
1040
|
-
join(root, "
|
|
1041
|
-
["
|
|
826
|
+
join(root, "specdev-s-spec", "SKILL.md"),
|
|
827
|
+
["用户端到端行为", "验收合同", "代码", "CONTEXT", "ADR", "验证接缝", "ready_for_tickets"],
|
|
1042
828
|
],
|
|
1043
829
|
],
|
|
1044
830
|
[
|
|
1045
831
|
"tickets",
|
|
1046
832
|
[
|
|
1047
|
-
join(root, "
|
|
833
|
+
join(root, "specdev-t-tickets", "SKILL.md"),
|
|
1048
834
|
["Prefactor", "垂直切片", "Expand", "与用户核对", "Definition of Ready"],
|
|
1049
835
|
],
|
|
1050
836
|
],
|
|
1051
837
|
[
|
|
1052
838
|
"goal-plan",
|
|
1053
839
|
[
|
|
1054
|
-
join(root, "
|
|
840
|
+
join(root, "specdev-p-goal-plan", "SKILL.md"),
|
|
1055
841
|
[
|
|
1056
842
|
"Outcome",
|
|
1057
843
|
"权威来源",
|
|
@@ -1059,7 +845,7 @@ function capabilityChecks(root) {
|
|
|
1059
845
|
"Gate",
|
|
1060
846
|
"Wave",
|
|
1061
847
|
"lead-directed",
|
|
1062
|
-
"
|
|
848
|
+
"concurrent_implementation_limit",
|
|
1063
849
|
"candidate-merge",
|
|
1064
850
|
"lead-orchestration.md",
|
|
1065
851
|
"Definition of Done",
|
|
@@ -1069,70 +855,70 @@ function capabilityChecks(root) {
|
|
|
1069
855
|
[
|
|
1070
856
|
"implement",
|
|
1071
857
|
[
|
|
1072
|
-
join(root, "
|
|
1073
|
-
["codebase-design", "design-it-twice", "TDD", "双轴审查", "Evidence", "parent-candidate", "
|
|
858
|
+
join(root, "specdev-i-implement", "SKILL.md"),
|
|
859
|
+
["codebase-design", "design-it-twice", "TDD", "双轴审查", "Evidence", "parent-candidate", "共享编排方法", "实现 commit"],
|
|
1074
860
|
],
|
|
1075
861
|
],
|
|
1076
862
|
[
|
|
1077
863
|
"code-review",
|
|
1078
864
|
[
|
|
1079
|
-
join(root, "
|
|
1080
|
-
["
|
|
865
|
+
join(root, "specdev-c-code-review", "SKILL.md"),
|
|
866
|
+
["--review-scope", "baseline", "range", "commit", "pr", "no-diff", "固定点", "标准轴", "规范轴", "未合并排名", "reviews/CR-###.md"],
|
|
1081
867
|
],
|
|
1082
868
|
],
|
|
1083
869
|
[
|
|
1084
870
|
"prototype",
|
|
1085
871
|
[
|
|
1086
|
-
join(root, "
|
|
872
|
+
join(root, "specdev-p-prototype", "SKILL.md"),
|
|
1087
873
|
["设计定向", "风格", "design-system.md", "comparison", "HTML/CSS/JS", "design-library/INDEX.md"],
|
|
1088
874
|
],
|
|
1089
875
|
],
|
|
1090
876
|
[
|
|
1091
877
|
"learn-change",
|
|
1092
878
|
[
|
|
1093
|
-
join(root, "
|
|
879
|
+
join(root, "specdev-l-learn-change", "SKILL.md"),
|
|
1094
880
|
["开发完成后", "零专业背景", "$ARGUMENTS", "ASCII", "learning/index.md", "{number}_{topic}.md", "{roots.state}/learning/"],
|
|
1095
881
|
],
|
|
1096
882
|
],
|
|
1097
883
|
[
|
|
1098
884
|
"wayfinder",
|
|
1099
885
|
[
|
|
1100
|
-
join(root, "
|
|
1101
|
-
["共享地图", "
|
|
886
|
+
join(root, "specdev-w-wayfinder", "SKILL.md"),
|
|
887
|
+
["共享地图", "调查认领", "wayfinder:prototype", "wayfinder:grilling", "solution comment", "每个会话"],
|
|
1102
888
|
],
|
|
1103
889
|
],
|
|
1104
890
|
[
|
|
1105
891
|
"architecture-review",
|
|
1106
892
|
[
|
|
1107
|
-
join(root, "
|
|
893
|
+
join(root, "specdev-r-review-architecture", "SKILL.md"),
|
|
1108
894
|
["结构性坏味道", "code-judo", "删除测试", "高置信候选", "最佳推荐"],
|
|
1109
895
|
],
|
|
1110
896
|
],
|
|
1111
897
|
[
|
|
1112
898
|
"architecture-review-rubric",
|
|
1113
899
|
[
|
|
1114
|
-
join(root, "
|
|
900
|
+
join(root, "specdev-r-review-architecture", "references/review-rubric.md"),
|
|
1115
901
|
["删除测试", "文件大小", "高置信候选", "spaghetti growth"],
|
|
1116
902
|
],
|
|
1117
903
|
],
|
|
1118
904
|
[
|
|
1119
905
|
"archive",
|
|
1120
906
|
[
|
|
1121
|
-
join(root, "
|
|
907
|
+
join(root, "specdev-a-archive-and-consolidate", "SKILL.md"),
|
|
1122
908
|
["archive-single", "dry-run", "external_action", "publish_action", "consolidate-from-code", "archive-and-consolidate"],
|
|
1123
909
|
],
|
|
1124
910
|
],
|
|
1125
911
|
[
|
|
1126
912
|
"grill",
|
|
1127
913
|
[
|
|
1128
|
-
join(root, "
|
|
914
|
+
join(root, "specdev-g-grill-with-docs", "SKILL.md"),
|
|
1129
915
|
["完整 frontier", "design-tree.json", "LOG.md", "CONTEXT.md", "ADR.md", "推荐答案", "永久 namespace 对 G 只读"],
|
|
1130
916
|
],
|
|
1131
917
|
],
|
|
1132
918
|
[
|
|
1133
919
|
"diagnosis",
|
|
1134
920
|
[
|
|
1135
|
-
join(root, "
|
|
921
|
+
join(root, "specdev-d-diagnose-bugs", "SKILL.md"),
|
|
1136
922
|
["红灯", "反馈回路", "最小化", "可证伪", "根因", "回归测试"],
|
|
1137
923
|
],
|
|
1138
924
|
],
|
|
@@ -1154,35 +940,35 @@ function capabilityChecks(root) {
|
|
|
1154
940
|
"common/rules/codebase-design.md",
|
|
1155
941
|
"common/schemas/design-tree.schema.json",
|
|
1156
942
|
"common/schemas/wayfinder-ticket.schema.json",
|
|
1157
|
-
"
|
|
1158
|
-
"
|
|
1159
|
-
"
|
|
943
|
+
"specdev-g-grill-with-docs/assets/design-tree-template.json",
|
|
944
|
+
"specdev-w-wayfinder/references/local-tracker-contract.md",
|
|
945
|
+
"specdev-w-wayfinder/assets/solution-comment-template.md",
|
|
1160
946
|
"common/rules/parent-implementation-orchestration.md",
|
|
1161
947
|
"common/schemas/implementation-map.schema.json",
|
|
1162
948
|
"common/schemas/implementation-plan.schema.json",
|
|
1163
949
|
"common/schemas/capture.schema.json",
|
|
1164
|
-
"
|
|
1165
|
-
"
|
|
1166
|
-
"
|
|
1167
|
-
"
|
|
950
|
+
"specdev-t-triage/references/capture-protocol.md",
|
|
951
|
+
"specdev-t-triage/assets/capture-template.md",
|
|
952
|
+
"specdev-t-triage/assets/issue-record-template.md",
|
|
953
|
+
"specdev-t-triage/scripts/capture-status.mjs",
|
|
1168
954
|
]) {
|
|
1169
955
|
if (!isFile(join(root, required))) errors.push(`missing architecture/wayfinding contract ${required}`);
|
|
1170
956
|
}
|
|
1171
957
|
|
|
1172
|
-
const mapTemplate = join(root, "
|
|
958
|
+
const mapTemplate = join(root, "specdev-w-wayfinder", "assets/wayfinder-map-template.md");
|
|
1173
959
|
if (isFile(mapTemplate) && /^## (?:开放 Tickets|调查清单)/m.test(readText(mapTemplate))) {
|
|
1174
960
|
errors.push("Wayfinder map template must query open Tickets instead of caching them");
|
|
1175
961
|
}
|
|
1176
962
|
|
|
1177
|
-
const goalPlanTemplate = join(root, "
|
|
963
|
+
const goalPlanTemplate = join(root, "specdev-p-goal-plan", "assets/goal-plan-template.md");
|
|
1178
964
|
if (!isFile(goalPlanTemplate)) {
|
|
1179
965
|
errors.push("missing Goal Plan template");
|
|
1180
966
|
} else {
|
|
1181
967
|
const text = readText(goalPlanTemplate);
|
|
1182
968
|
for (const required of [
|
|
1183
|
-
"schema_version:
|
|
969
|
+
"schema_version: 7",
|
|
1184
970
|
"orchestration: lead-directed",
|
|
1185
|
-
"
|
|
971
|
+
"concurrent_implementation_limit: 3",
|
|
1186
972
|
"integration_attempt_limit: 3",
|
|
1187
973
|
"ticket_workspace_policy: current",
|
|
1188
974
|
"integration_gate: direct-parent",
|
|
@@ -1207,11 +993,11 @@ function selfCheck(root) {
|
|
|
1207
993
|
const errors = [];
|
|
1208
994
|
const warnings = [];
|
|
1209
995
|
|
|
1210
|
-
if (!isFile(join(root, "
|
|
996
|
+
if (!isFile(join(root, "SKILL.md"))) errors.push("missing domain Skill");
|
|
1211
997
|
|
|
1212
998
|
const actualWorks = new Set(
|
|
1213
999
|
readdirSync(root, { withFileTypes: true })
|
|
1214
|
-
.filter((entry) => entry.isDirectory() && /^[
|
|
1000
|
+
.filter((entry) => entry.isDirectory() && /^specdev-[a-z]-/.test(entry.name))
|
|
1215
1001
|
.map((entry) => entry.name),
|
|
1216
1002
|
);
|
|
1217
1003
|
const missingWorks = [...EXPECTED_WORKS].filter((name) => !actualWorks.has(name));
|
|
@@ -1221,23 +1007,16 @@ function selfCheck(root) {
|
|
|
1221
1007
|
|
|
1222
1008
|
const ids = [];
|
|
1223
1009
|
for (const directoryName of [...actualWorks].sort()) {
|
|
1224
|
-
const entry = join(root, directoryName,
|
|
1010
|
+
const entry = join(root, directoryName, "SKILL.md");
|
|
1225
1011
|
if (!isFile(entry)) {
|
|
1226
1012
|
errors.push(`missing work entry ${toPosix(relative(root, entry))}`);
|
|
1227
1013
|
continue;
|
|
1228
1014
|
}
|
|
1229
1015
|
const { meta } = parseFrontmatter(entry);
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
if
|
|
1234
|
-
errors.push(`${toPosix(relative(root, entry))}: workflow must be specdev`);
|
|
1235
|
-
}
|
|
1236
|
-
if (typeof meta.id !== "string" || !meta.id.startsWith("specdev/")) {
|
|
1237
|
-
errors.push(`${toPosix(relative(root, entry))}: invalid work id`);
|
|
1238
|
-
} else {
|
|
1239
|
-
ids.push(meta.id);
|
|
1240
|
-
}
|
|
1016
|
+
errors.push(...validateSkill(readText(entry),directoryName).map(error=>entry+": "+error));
|
|
1017
|
+
if(meta.metadata?.["speculo-kind"]!=="work-skill" || meta.metadata?.["speculo-domain"]!=="specdev")errors.push(entry+": invalid Work metadata");
|
|
1018
|
+
const id=meta.metadata?.["speculo-id"];
|
|
1019
|
+
if(typeof id!=="string"||!id.startsWith("specdev/"))errors.push(entry+": invalid work id");else ids.push(id);
|
|
1241
1020
|
}
|
|
1242
1021
|
if (ids.length !== new Set(ids).size) errors.push("duplicate workflow entry id");
|
|
1243
1022
|
|
|
@@ -1274,6 +1053,16 @@ function selfCheck(root) {
|
|
|
1274
1053
|
errors.push(...references.errors);
|
|
1275
1054
|
warnings.push(...references.warnings);
|
|
1276
1055
|
errors.push(...capabilityChecks(root));
|
|
1056
|
+
errors.push(...validateEngineeringPackage(root));
|
|
1057
|
+
// Run real runner regressions; these tests never recursively request self-check.
|
|
1058
|
+
try {
|
|
1059
|
+
execFileSync(process.execPath, ["--test", join(root, "common", "tools", "tests", "engineering.test.mjs")], {
|
|
1060
|
+
encoding: "utf8", timeout: 120000, maxBuffer: 8 * 1024 * 1024,
|
|
1061
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
1062
|
+
});
|
|
1063
|
+
} catch (error) {
|
|
1064
|
+
errors.push(`engineering regressions failed: ${error.stdout ?? ""}${error.stderr ?? error.message}`);
|
|
1065
|
+
}
|
|
1277
1066
|
|
|
1278
1067
|
const obsolete = [
|
|
1279
1068
|
"P-goal-plan/input-validation.md",
|
|
@@ -1365,7 +1154,7 @@ function validateSource(path, expectedChange, errors) {
|
|
|
1365
1154
|
return { path, meta, body };
|
|
1366
1155
|
}
|
|
1367
1156
|
|
|
1368
|
-
function validateTriage(path, expectedChange, errors
|
|
1157
|
+
function validateTriage(path, expectedChange, errors) {
|
|
1369
1158
|
if (!isFile(path)) {
|
|
1370
1159
|
errors.push("missing triage artifact");
|
|
1371
1160
|
return null;
|
|
@@ -1386,8 +1175,8 @@ function validateTriage(path, expectedChange, errors, historical = false) {
|
|
|
1386
1175
|
];
|
|
1387
1176
|
const missing = required.filter((key) => !(key in meta));
|
|
1388
1177
|
if (missing.length) errors.push(`triage.md: missing keys ${JSON.stringify(missing)}`);
|
|
1389
|
-
if (
|
|
1390
|
-
errors.push("triage.md: artifact/schema_version must be triage/2
|
|
1178
|
+
if (meta.schema_version !== 2 || meta.artifact !== "triage") {
|
|
1179
|
+
errors.push("triage.md: artifact/schema_version must be triage/2");
|
|
1391
1180
|
}
|
|
1392
1181
|
if (meta.schema_version === 2) {
|
|
1393
1182
|
if (!["needs-triage", "needs-info", "ready-for-agent", "ready-for-human", "wontfix"].includes(meta.disposition)) errors.push("triage.md: invalid disposition");
|
|
@@ -1647,6 +1436,9 @@ function validateDiagnosis(path, expectedChange, errors) {
|
|
|
1647
1436
|
if (typeof meta.feedback_loop_ready !== "boolean") {
|
|
1648
1437
|
errors.push("diagnosis.md: feedback_loop_ready must be boolean");
|
|
1649
1438
|
}
|
|
1439
|
+
if (["minimizing", "testing-hypotheses", "root-cause-confirmed"].includes(meta.status) && meta.feedback_loop_ready !== true) {
|
|
1440
|
+
errors.push("diagnosis.md: advanced diagnosis requires ready feedback loop and real red evidence");
|
|
1441
|
+
}
|
|
1650
1442
|
if (meta.feedback_loop_ready) {
|
|
1651
1443
|
if (!String(meta.red_command ?? "").trim() || !String(meta.red_evidence ?? "").trim()) {
|
|
1652
1444
|
errors.push("diagnosis.md: ready feedback loop requires red_command and red_evidence");
|
|
@@ -1695,10 +1487,12 @@ function validateReviews(change, required, errors) {
|
|
|
1695
1487
|
return paths;
|
|
1696
1488
|
}
|
|
1697
1489
|
|
|
1698
|
-
function validatePrototypes(change, required, errors) {
|
|
1490
|
+
function validatePrototypes(change, required, errors, prototypeId = null, consumingDesign = false, context = null) {
|
|
1699
1491
|
const root = join(change, "prototypes");
|
|
1492
|
+
const changeDesign = isFile(join(change, "DESIGN.md")) ? parseFrontmatter(join(change, "DESIGN.md")).meta : null;
|
|
1493
|
+
const boundId = changeDesign?.prototype_ref?.id;
|
|
1700
1494
|
if (!isDirectory(root)) {
|
|
1701
|
-
if (required) errors.push("prototype stage requires a prototypes/UI-NNN/design-system.md artifact");
|
|
1495
|
+
if (required || boundId) errors.push("prototype stage requires a prototypes/UI-NNN/design-system.md artifact");
|
|
1702
1496
|
return [];
|
|
1703
1497
|
}
|
|
1704
1498
|
|
|
@@ -1706,16 +1500,21 @@ function validatePrototypes(change, required, errors) {
|
|
|
1706
1500
|
dirname(fileURLToPath(import.meta.url)),
|
|
1707
1501
|
"..",
|
|
1708
1502
|
"..",
|
|
1709
|
-
"
|
|
1710
|
-
"
|
|
1503
|
+
"specdev-p-prototype",
|
|
1504
|
+
"scripts",
|
|
1711
1505
|
"validate-design-package.mjs",
|
|
1712
1506
|
);
|
|
1713
1507
|
const paths = [];
|
|
1714
1508
|
let readyCount = 0;
|
|
1509
|
+
const candidates = readdirSync(root).filter(name => /^(?:UI|LOGIC)-\d{3,}$/.test(name));
|
|
1510
|
+
if (required && !prototypeId && candidates.length !== 1) errors.push("prototype stage requires --prototype-id when multiple packages exist");
|
|
1511
|
+
const selectedId = prototypeId ?? (required && candidates.length === 1 ? candidates[0] : !required ? boundId : null);
|
|
1512
|
+
if (selectedId && !candidates.includes(selectedId)) errors.push(`prototype not found: ${selectedId}`);
|
|
1715
1513
|
|
|
1716
1514
|
for (const entry of readdirSync(root, { withFileTypes: true })) {
|
|
1717
1515
|
const entryPath = join(root, entry.name);
|
|
1718
1516
|
const label = toPosix(relative(change, entryPath));
|
|
1517
|
+
if (selectedId && entry.name !== selectedId) continue;
|
|
1719
1518
|
if (entry.isSymbolicLink()) {
|
|
1720
1519
|
errors.push(`${label}: prototype design directories and files must not be symlinks`);
|
|
1721
1520
|
continue;
|
|
@@ -1743,9 +1542,10 @@ function validatePrototypes(change, required, errors) {
|
|
|
1743
1542
|
}
|
|
1744
1543
|
paths.push(designPath);
|
|
1745
1544
|
const { meta } = parseFrontmatter(designPath);
|
|
1545
|
+
if (consumingDesign && entry.name === boundId && meta.status !== "ready") errors.push(`${label}: bound UI prototype must be ready before downstream consumption`);
|
|
1746
1546
|
if (meta.status === "ready") readyCount += 1;
|
|
1747
1547
|
try {
|
|
1748
|
-
execFileSync(process.execPath, [validator, designPath], {
|
|
1548
|
+
execFileSync(process.execPath, [validator, ...contextArguments(context), ...(consumingDesign && entry.name === boundId ? ["--check-ready"] : []), designPath], {
|
|
1749
1549
|
encoding: "utf8",
|
|
1750
1550
|
stdio: ["ignore", "pipe", "pipe"],
|
|
1751
1551
|
});
|
|
@@ -1759,13 +1559,14 @@ function validatePrototypes(change, required, errors) {
|
|
|
1759
1559
|
}
|
|
1760
1560
|
}
|
|
1761
1561
|
|
|
1762
|
-
const
|
|
1562
|
+
const scanRoot = selectedId && isDirectory(join(root, selectedId)) ? join(root, selectedId) : root;
|
|
1563
|
+
const obsoleteRecords = walk(scanRoot).filter(
|
|
1763
1564
|
(path) => isFile(path) && basename(path) === "record.md",
|
|
1764
1565
|
);
|
|
1765
1566
|
for (const path of obsoleteRecords) {
|
|
1766
1567
|
errors.push(`${toPosix(relative(change, path))}: obsolete prototype record is forbidden; use UI-NNN/design-system.md`);
|
|
1767
1568
|
}
|
|
1768
|
-
const discoveredDesigns = walk(
|
|
1569
|
+
const discoveredDesigns = walk(scanRoot).filter(
|
|
1769
1570
|
(path) => isFile(path) && basename(path) === "design-system.md",
|
|
1770
1571
|
);
|
|
1771
1572
|
for (const path of discoveredDesigns) {
|
|
@@ -1774,7 +1575,7 @@ function validatePrototypes(change, required, errors) {
|
|
|
1774
1575
|
}
|
|
1775
1576
|
}
|
|
1776
1577
|
if (required && readyCount === 0) {
|
|
1777
|
-
errors.push("prototype stage requires
|
|
1578
|
+
errors.push("prototype stage requires the selected ready UI or logic design package");
|
|
1778
1579
|
}
|
|
1779
1580
|
return paths;
|
|
1780
1581
|
}
|
|
@@ -2061,7 +1862,7 @@ function validateGoalPlan(path, errors) {
|
|
|
2061
1862
|
"modes",
|
|
2062
1863
|
"orchestration",
|
|
2063
1864
|
"lead",
|
|
2064
|
-
"
|
|
1865
|
+
"concurrent_implementation_limit",
|
|
2065
1866
|
"integration_attempt_limit",
|
|
2066
1867
|
"ticket_workspace_policy",
|
|
2067
1868
|
"integration_gate",
|
|
@@ -2085,8 +1886,8 @@ function validateGoalPlan(path, errors) {
|
|
|
2085
1886
|
if (typeof meta.lead !== "string" || !meta.lead.trim()) {
|
|
2086
1887
|
errors.push(`${basename(path)}: lead must be a non-empty recoverable locator`);
|
|
2087
1888
|
}
|
|
2088
|
-
if (!Number.isInteger(meta.
|
|
2089
|
-
errors.push(`${basename(path)}:
|
|
1889
|
+
if (!Number.isInteger(meta.concurrent_implementation_limit) || meta.concurrent_implementation_limit < 1) {
|
|
1890
|
+
errors.push(`${basename(path)}: concurrent_implementation_limit must be a positive integer`);
|
|
2090
1891
|
}
|
|
2091
1892
|
if (!Number.isInteger(meta.integration_attempt_limit) || meta.integration_attempt_limit < 1) {
|
|
2092
1893
|
errors.push(`${basename(path)}: integration_attempt_limit must be a positive integer`);
|
|
@@ -2139,25 +1940,9 @@ function validateGoalPlan(path, errors) {
|
|
|
2139
1940
|
return { path, meta, body };
|
|
2140
1941
|
}
|
|
2141
1942
|
|
|
2142
|
-
function validateGoalPlanRuntimeLimits(path, change, goalPlan, errors, repoRoot = null) {
|
|
1943
|
+
function validateGoalPlanRuntimeLimits(path, change, goalPlan, errors, repoRoot = null, options = {}) {
|
|
2143
1944
|
if (!goalPlan) return;
|
|
2144
|
-
|
|
2145
|
-
if (!config) {
|
|
2146
|
-
errors.push(`${basename(path)}: SpecDev config.json is required to validate execution limits`);
|
|
2147
|
-
return;
|
|
2148
|
-
}
|
|
2149
|
-
const configuredAgents = positiveConfigLimit(config, "max_implementation_agents", 0);
|
|
2150
|
-
const configuredAttempts = positiveConfigLimit(config, "max_integration_attempts", 0);
|
|
2151
|
-
if (config.schema_version !== CONFIG_SCHEMA_VERSION || configuredAgents === 0 || configuredAttempts === 0) {
|
|
2152
|
-
errors.push(`${basename(path)}: SpecDev config.json must use schema v${CONFIG_SCHEMA_VERSION} with positive execution limits`);
|
|
2153
|
-
return;
|
|
2154
|
-
}
|
|
2155
|
-
if (goalPlan.meta.implementation_agent_limit > configuredAgents) {
|
|
2156
|
-
errors.push(`${basename(path)}: implementation_agent_limit ${goalPlan.meta.implementation_agent_limit} exceeds config max_implementation_agents ${configuredAgents}`);
|
|
2157
|
-
}
|
|
2158
|
-
if (goalPlan.meta.integration_attempt_limit > configuredAttempts) {
|
|
2159
|
-
errors.push(`${basename(path)}: integration_attempt_limit ${goalPlan.meta.integration_attempt_limit} exceeds config max_integration_attempts ${configuredAttempts}`);
|
|
2160
|
-
}
|
|
1945
|
+
errors.push(...validateExecutionPolicy(goalPlan, findSpecdevConfig(change, repoRoot, options)).map(error => `${basename(path)}: ${error}`));
|
|
2161
1946
|
}
|
|
2162
1947
|
|
|
2163
1948
|
function validateDesignTree(path, change, errors) {
|
|
@@ -2424,53 +2209,14 @@ function validateTicket(path, errors) {
|
|
|
2424
2209
|
return { path, meta, body };
|
|
2425
2210
|
}
|
|
2426
2211
|
|
|
2427
|
-
function
|
|
2428
|
-
|
|
2429
|
-
errors.push("missing change status artifact");
|
|
2430
|
-
return null;
|
|
2431
|
-
}
|
|
2212
|
+
function validateChangeExecution(change, errors, context) {
|
|
2213
|
+
const path = join(change, "evidence"), expectedChange = basename(change);
|
|
2432
2214
|
let data;
|
|
2433
2215
|
try {
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
}
|
|
2439
|
-
const required = [
|
|
2440
|
-
"schema_version",
|
|
2441
|
-
"artifact",
|
|
2442
|
-
"change",
|
|
2443
|
-
"change_status",
|
|
2444
|
-
"current_work",
|
|
2445
|
-
"works_run",
|
|
2446
|
-
"claimed_investigations",
|
|
2447
|
-
"execution_authorization",
|
|
2448
|
-
"leadership",
|
|
2449
|
-
"created_at",
|
|
2450
|
-
"updated_at",
|
|
2451
|
-
"completed_at",
|
|
2452
|
-
"archived",
|
|
2453
|
-
"archive_path",
|
|
2454
|
-
"blockers",
|
|
2455
|
-
"deviations",
|
|
2456
|
-
"worktrees",
|
|
2457
|
-
];
|
|
2458
|
-
const missing = required.filter((key) => !(key in data));
|
|
2459
|
-
if (missing.length) errors.push(`${basename(path)}: missing keys ${JSON.stringify(missing.sort())}`);
|
|
2460
|
-
const unexpected = Object.keys(data).filter((key) => !required.includes(key));
|
|
2461
|
-
if (unexpected.length) errors.push(`${basename(path)}: unexpected keys ${JSON.stringify(unexpected.sort())}`);
|
|
2462
|
-
if (data.schema_version !== CHANGE_STATUS_SCHEMA_VERSION || data.artifact !== "change-status") {
|
|
2463
|
-
errors.push(`${basename(path)}: artifact/schema_version must be change-status/${CHANGE_STATUS_SCHEMA_VERSION}`);
|
|
2464
|
-
}
|
|
2465
|
-
if (data.change !== expectedChange) {
|
|
2466
|
-
errors.push(`${basename(path)}: change must equal directory name ${expectedChange}`);
|
|
2467
|
-
}
|
|
2468
|
-
if (!new Set(["active", "blocked", "completed", "archived"]).has(data.change_status)) {
|
|
2469
|
-
errors.push(`${basename(path)}: invalid change_status ${data.change_status}`);
|
|
2470
|
-
}
|
|
2471
|
-
if (!Array.isArray(data.blockers) || !Array.isArray(data.deviations) || !Array.isArray(data.worktrees)) {
|
|
2472
|
-
errors.push(`${basename(path)}: blockers, deviations, and worktrees must be arrays`);
|
|
2473
|
-
}
|
|
2216
|
+
const facts = runtime.readChangeFactsSync(context, basename(change));
|
|
2217
|
+
if (facts.location.root !== resolve(change)) throw new Error('change identity does not match requested location');
|
|
2218
|
+
data = { ...facts, worktrees:readChangeExecution(change) };
|
|
2219
|
+
} catch (error) { errors.push(`${change}: ${error.message}`); return null; }
|
|
2474
2220
|
const seenWorktreeTickets = new Set();
|
|
2475
2221
|
for (const worktree of Array.isArray(data.worktrees) ? data.worktrees : []) {
|
|
2476
2222
|
if (!worktree || typeof worktree !== "object" || Array.isArray(worktree)) {
|
|
@@ -2741,15 +2487,6 @@ function validateChangeStatus(path, expectedChange, errors) {
|
|
|
2741
2487
|
}
|
|
2742
2488
|
}
|
|
2743
2489
|
}
|
|
2744
|
-
if (data.change_status === "archived") {
|
|
2745
|
-
if (data.archived !== true) errors.push(`${basename(path)}: archived status requires archived=true`);
|
|
2746
|
-
const inner = typeof data.archive_path === "string" ? stripPathTag(data.archive_path) : null;
|
|
2747
|
-
if (inner === null || !inner.startsWith(`${STATE_PREFIX}archive/`)) {
|
|
2748
|
-
errors.push(`${basename(path)}: archived status requires a rooted archive_path`);
|
|
2749
|
-
}
|
|
2750
|
-
} else if (data.archived === true) {
|
|
2751
|
-
errors.push(`${basename(path)}: archived=true conflicts with change_status=${data.change_status}`);
|
|
2752
|
-
}
|
|
2753
2490
|
return data;
|
|
2754
2491
|
}
|
|
2755
2492
|
|
|
@@ -2804,7 +2541,7 @@ function gitSucceeds(repoRoot, args) {
|
|
|
2804
2541
|
}
|
|
2805
2542
|
|
|
2806
2543
|
function validateGitEvidence(repoRoot, changeStatus, errors) {
|
|
2807
|
-
if (!repoRoot) return;
|
|
2544
|
+
if (!repoRoot || !changeStatus?.worktrees?.length) return;
|
|
2808
2545
|
const resolvedRoot = resolve(repoRoot);
|
|
2809
2546
|
if (gitOutput(resolvedRoot, ["rev-parse", "--is-inside-work-tree"]) !== "true") {
|
|
2810
2547
|
errors.push(`--repo is not a Git worktree: ${resolvedRoot}`);
|
|
@@ -2836,13 +2573,26 @@ function validateGitEvidence(repoRoot, changeStatus, errors) {
|
|
|
2836
2573
|
} else if (worktree.integration?.source_sha && worktree.base_sha && !gitSucceeds(resolvedRoot, ["merge-base", "--is-ancestor", worktree.base_sha, worktree.integration.source_sha])) {
|
|
2837
2574
|
errors.push(`${label}: source_sha must descend from base_sha`);
|
|
2838
2575
|
}
|
|
2576
|
+
if (worktree.workspace_ref !== "current" && new Set(["active","review","integrating","blocked"]).has(worktree.status)) {
|
|
2577
|
+
try {
|
|
2578
|
+
const source = runtime.safeWorkPathSync(resolvedRoot,worktree.workspace_ref,{mustExist:true,type:"directory"});
|
|
2579
|
+
const common = gitOutput(resolvedRoot,["rev-parse","--path-format=absolute","--git-common-dir"]);
|
|
2580
|
+
if (gitOutput(source,["rev-parse","--path-format=absolute","--git-common-dir"]) !== common || gitOutput(source,["branch","--show-current"]) !== worktree.branch) errors.push(`${label}: source workspace must be a real isolated worktree of the recorded repository and branch`);
|
|
2581
|
+
} catch(error) { errors.push(`${label}: actual source isolation is missing: ${error.message}`); }
|
|
2582
|
+
}
|
|
2583
|
+
if (worktree.status === "integrating" && worktree.workspace_ref !== "current") {
|
|
2584
|
+
try {
|
|
2585
|
+
const candidate = runtime.safeWorkPathSync(resolvedRoot,worktree.integration.candidate_workspace_ref,{mustExist:true,type:"directory"});
|
|
2586
|
+
if (gitOutput(candidate,["rev-parse","HEAD"]) !== worktree.integration.candidate_sha || gitOutput(candidate,["rev-parse","HEAD^{tree}"]) !== worktree.integration.candidate_tree_sha) errors.push(`${label}: actual candidate workspace differs from the recorded checkpoint/tree`);
|
|
2587
|
+
} catch(error) { errors.push(`${label}: actual candidate isolation is missing: ${error.message}`); }
|
|
2588
|
+
}
|
|
2839
2589
|
if (new Set(["integrated", "removed"]).has(worktree.status) && gitOutput(resolvedRoot, ["status", "--porcelain"])) {
|
|
2840
2590
|
errors.push(`${label}: repository is dirty while Ticket is recorded as ${worktree.status}`);
|
|
2841
2591
|
}
|
|
2842
2592
|
}
|
|
2843
2593
|
}
|
|
2844
2594
|
|
|
2845
|
-
function validateParentImplementation(change, parentStatus, stage, errors, warnings, repoRoot = null) {
|
|
2595
|
+
function validateParentImplementation(change, parentStatus, stage, errors, warnings, repoRoot = null, options = {}) {
|
|
2846
2596
|
const mapPath = join(change, "implementation-map.md");
|
|
2847
2597
|
const planPath = join(change, "implementation-plan.md");
|
|
2848
2598
|
if (!isFile(mapPath)) errors.push("parent implementation requires implementation-map.md");
|
|
@@ -2853,7 +2603,7 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
2853
2603
|
const map = parseFrontmatter(mapPath);
|
|
2854
2604
|
const plan = parseFrontmatter(planPath);
|
|
2855
2605
|
const mapKeys = ["schema_version", "artifact", "change", "status", "revision", "members", "tasks", "dependencies", "serializations"];
|
|
2856
|
-
const planKeys = ["schema_version", "artifact", "change", "status", "source_map_revision", "orchestration", "lead", "
|
|
2606
|
+
const planKeys = ["schema_version", "artifact", "change", "status", "source_map_revision", "orchestration", "lead", "concurrent_implementation_limit", "integration_attempt_limit", "ticket_workspace_policy", "integration_gate", "ready_for_execution"];
|
|
2857
2607
|
for (const [label, meta, expected] of [
|
|
2858
2608
|
["implementation-map.md", map.meta, mapKeys],
|
|
2859
2609
|
["implementation-plan.md", plan.meta, planKeys],
|
|
@@ -2884,7 +2634,7 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
2884
2634
|
if (plan.meta.orchestration !== "lead-directed" || typeof plan.meta.lead !== "string" || !plan.meta.lead.trim()) {
|
|
2885
2635
|
errors.push("implementation-plan.md: lead-directed orchestration requires a recoverable Lead");
|
|
2886
2636
|
}
|
|
2887
|
-
for (const key of ["
|
|
2637
|
+
for (const key of ["concurrent_implementation_limit", "integration_attempt_limit"]) {
|
|
2888
2638
|
if (!Number.isInteger(plan.meta[key]) || plan.meta[key] < 1) {
|
|
2889
2639
|
errors.push(`implementation-plan.md: ${key} must be a positive integer`);
|
|
2890
2640
|
}
|
|
@@ -2950,7 +2700,8 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
2950
2700
|
errors.push(`implementation-map.md: invalid member change name ${member}`);
|
|
2951
2701
|
continue;
|
|
2952
2702
|
}
|
|
2953
|
-
|
|
2703
|
+
let memberRoot;
|
|
2704
|
+
try { memberRoot = runtime.resolveChangeSync(options.context,member,{includeArchived:parentStatus?.location.kind === "archive"}).root; } catch(error) { errors.push(`member change does not exist or has invalid identity: ${member}: ${error.message}`); continue; }
|
|
2954
2705
|
if (!isDirectory(memberRoot)) {
|
|
2955
2706
|
errors.push(`implementation-map.md: member change does not exist: ${member}`);
|
|
2956
2707
|
continue;
|
|
@@ -2961,13 +2712,11 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
2961
2712
|
|
|
2962
2713
|
const memberErrors = [];
|
|
2963
2714
|
const memberWarnings = [];
|
|
2964
|
-
const status =
|
|
2715
|
+
const status = validateChangeExecution(memberRoot, memberErrors, options.context);
|
|
2965
2716
|
if (status) {
|
|
2966
2717
|
memberStatuses.set(member, status);
|
|
2967
|
-
if (
|
|
2968
|
-
if (
|
|
2969
|
-
memberErrors.push(`current_work=${status.current_work} conflicts with parent implementation ownership`);
|
|
2970
|
-
}
|
|
2718
|
+
if (parentStatus?.outcome === "completed") validateGitEvidence(options.context.projectRoot,status,memberErrors);
|
|
2719
|
+
if (parentStatus?.location.kind !== "archive" && status.location.kind !== "active") memberErrors.push("archived change cannot be an implementation member");
|
|
2971
2720
|
for (const worktree of Array.isArray(status.worktrees) ? status.worktrees : []) {
|
|
2972
2721
|
if (worktree?.status === "active") {
|
|
2973
2722
|
activeImplementations += 1;
|
|
@@ -3077,7 +2826,7 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
3077
2826
|
const uncovered = [...declared].filter((id) => !covered.has(id) && !(childMap && new RegExp(`${escapeRegExp(id)}.*\\bdeferred\\b`, "i").test(childMap.body)));
|
|
3078
2827
|
if (uncovered.length) memberErrors.push(`Spec acceptance contracts are not covered by Tickets: ${JSON.stringify(uncovered.sort())}`);
|
|
3079
2828
|
}
|
|
3080
|
-
if (status?.
|
|
2829
|
+
if (status?.outcome === "completed") {
|
|
3081
2830
|
const unfinished = [...childTickets].filter(([, artifact]) => !new Set(["done", "cancelled"]).has(artifact.meta.status)).map(([id]) => id);
|
|
3082
2831
|
if (unfinished.length) memberErrors.push(`completed member has unfinished Tickets: ${JSON.stringify(unfinished)}`);
|
|
3083
2832
|
}
|
|
@@ -3192,30 +2941,18 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
3192
2941
|
if (!Array.isArray(otherMap.members)) continue;
|
|
3193
2942
|
let otherStatus = null;
|
|
3194
2943
|
try {
|
|
3195
|
-
otherStatus =
|
|
2944
|
+
otherStatus = runtime.readChangeFactsSync(options.context, entry.name).outcome;
|
|
3196
2945
|
} catch {
|
|
3197
2946
|
// Invalid competing parents still own their members conservatively.
|
|
3198
2947
|
}
|
|
3199
|
-
if (new Set(["completed", "
|
|
2948
|
+
if (new Set(["completed", "cancelled"]).has(otherStatus)) continue;
|
|
3200
2949
|
const overlap = otherMap.members.map(String).filter((member) => memberSet.has(member));
|
|
3201
2950
|
if (overlap.length) errors.push(`member changes already belong to unfinished parent implementation ${entry.name}: ${JSON.stringify(overlap)}`);
|
|
3202
2951
|
}
|
|
3203
2952
|
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
if (!config || config.schema_version !== CONFIG_SCHEMA_VERSION || configuredAgents === 0 || configuredAttempts === 0) {
|
|
3208
|
-
errors.push("implementation-plan.md: SpecDev config v6 with positive execution limits is required");
|
|
3209
|
-
} else {
|
|
3210
|
-
if (plan.meta.implementation_agent_limit > configuredAgents) {
|
|
3211
|
-
errors.push(`implementation-plan.md: implementation_agent_limit ${plan.meta.implementation_agent_limit} exceeds config max_implementation_agents ${configuredAgents}`);
|
|
3212
|
-
}
|
|
3213
|
-
if (plan.meta.integration_attempt_limit > configuredAttempts) {
|
|
3214
|
-
errors.push(`implementation-plan.md: integration_attempt_limit ${plan.meta.integration_attempt_limit} exceeds config max_integration_attempts ${configuredAttempts}`);
|
|
3215
|
-
}
|
|
3216
|
-
}
|
|
3217
|
-
if (activeImplementations > plan.meta.implementation_agent_limit) {
|
|
3218
|
-
errors.push(`parent implementation agent limit exceeded: ${activeImplementations} active for limit ${plan.meta.implementation_agent_limit}`);
|
|
2953
|
+
errors.push(...validateExecutionPolicy(plan, findSpecdevConfig(change, repoRoot, options)).map(error => `implementation-plan.md: ${error}`));
|
|
2954
|
+
if (activeImplementations > plan.meta.concurrent_implementation_limit) {
|
|
2955
|
+
errors.push(`parent implementation agent limit exceeded: ${activeImplementations} active for limit ${plan.meta.concurrent_implementation_limit}`);
|
|
3219
2956
|
}
|
|
3220
2957
|
if (plan.meta.ticket_workspace_policy === "current" && activeCurrentWriters > 1) {
|
|
3221
2958
|
errors.push(`parent current policy permits only one active implementation writer; found ${activeCurrentWriters}`);
|
|
@@ -3224,24 +2961,14 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
3224
2961
|
if (count > 1) errors.push(`repository/ref integration must be serialized for ${ref}; found ${count}`);
|
|
3225
2962
|
}
|
|
3226
2963
|
|
|
3227
|
-
if (
|
|
3228
|
-
|
|
3229
|
-
}
|
|
3230
|
-
if (parentStatus?.change_status === "completed") {
|
|
3231
|
-
const incomplete = members.filter((member) => memberStatuses.get(member)?.change_status !== "completed");
|
|
2964
|
+
if (parentStatus?.outcome === "completed") {
|
|
2965
|
+
const incomplete = members.filter((member) => memberStatuses.get(member)?.outcome !== "completed");
|
|
3232
2966
|
if (incomplete.length) errors.push(`parent implementation is completed while members remain incomplete: ${JSON.stringify(incomplete)}`);
|
|
3233
2967
|
const unfinished = [...ticketByTask].filter(([, value]) => !new Set(["done", "cancelled"]).has(value.artifact.meta.status)).map(([task]) => task);
|
|
3234
2968
|
if (unfinished.length) errors.push(`completed parent implementation has unfinished composite tasks: ${JSON.stringify(unfinished)}`);
|
|
3235
2969
|
if (map.meta.status !== "completed" || plan.meta.status !== "completed") {
|
|
3236
2970
|
errors.push("completed parent requires completed Implementation Map and Implementation Plan");
|
|
3237
2971
|
}
|
|
3238
|
-
if (
|
|
3239
|
-
parentStatus.current_work !== null ||
|
|
3240
|
-
!Array.isArray(parentStatus.blockers) || parentStatus.blockers.length > 0 ||
|
|
3241
|
-
!Array.isArray(parentStatus.deviations) || parentStatus.deviations.length > 0
|
|
3242
|
-
) {
|
|
3243
|
-
errors.push("completed parent requires null current_work and no blockers or deviations");
|
|
3244
|
-
}
|
|
3245
2972
|
const activeMemberWork = [...memberStatuses]
|
|
3246
2973
|
.flatMap(([member, status]) => (status.worktrees ?? []).map((worktree) => ({ member, worktree })))
|
|
3247
2974
|
.filter(({ worktree }) => new Set(["planned", "active", "review", "integrating", "blocked"]).has(worktree?.status) || worktree?.integration?.status === "candidate")
|
|
@@ -3285,23 +3012,47 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
|
|
|
3285
3012
|
return { map, plan, members, tasks, memberStatuses, ticketByTask };
|
|
3286
3013
|
}
|
|
3287
3014
|
|
|
3288
|
-
function validateChange(change, stage = null, repoRoot = null) {
|
|
3015
|
+
function validateChange(change, stage = null, repoRoot = null, engineeringKind = null, prototypeId = null, options = {}) {
|
|
3289
3016
|
const errors = [];
|
|
3290
3017
|
const warnings = [];
|
|
3018
|
+
const archiveReady = stage === "archive-ready";
|
|
3019
|
+
if (archiveReady) stage = "complete";
|
|
3291
3020
|
if (!isDirectory(change)) {
|
|
3292
3021
|
return { errors: [`change directory does not exist: ${change}`], warnings };
|
|
3293
3022
|
}
|
|
3294
3023
|
|
|
3295
|
-
const workspace = resolveWorkspaceContract(repoRoot, change);
|
|
3024
|
+
const workspace = resolveWorkspaceContract(repoRoot, change, options);
|
|
3296
3025
|
errors.push(...workspace.errors);
|
|
3026
|
+
if (errors.length) return {errors,warnings};
|
|
3027
|
+
options = {...options, context:workspace.context};
|
|
3028
|
+
change = canonicalToolPath(workspace.context, change);
|
|
3029
|
+
|
|
3030
|
+
// Resolve every consumed artifact subtree before individual validators can read it.
|
|
3031
|
+
// Unrelated preserved links are not consumers and remain in the archive manifest.
|
|
3032
|
+
if(stage !== 'archived') try {
|
|
3033
|
+
for(const name of ['README.md','spec.md','goal-plan.md','implementation-map.md','implementation-plan.md','tickets-map.md','DESIGN.md','design-tree.json','source.md','triage.md','publish.md','diagnosis.md','wayfinder-map.md','LOG.md','ticket','evidence','investigation','learning','reviews','prototypes']) {
|
|
3034
|
+
const path=runtime.safeWorkPathSync(change,name);
|
|
3035
|
+
if(isDirectory(path)) for(const child of walk(path)) runtime.safeWorkPathSync(change,toPosix(relative(change,child)));
|
|
3036
|
+
}
|
|
3037
|
+
}catch(error){return {errors:[...errors,error.message],warnings};}
|
|
3297
3038
|
|
|
3298
3039
|
// A partial parent must never fall back to the single-change artifact contract.
|
|
3299
3040
|
const mapPath = join(change, "tickets-map.md");
|
|
3300
3041
|
const isParentImplementation = isFile(join(change, "implementation-map.md")) ||
|
|
3301
3042
|
isFile(join(change, "implementation-plan.md")) ||
|
|
3302
3043
|
(isFile(mapPath) && parseFrontmatter(mapPath).meta.artifact === "goal-tickets-map");
|
|
3303
|
-
const changeStatus =
|
|
3304
|
-
if (
|
|
3044
|
+
const changeStatus = stage === "archived" ? null : validateChangeExecution(change, errors, workspace.context);
|
|
3045
|
+
if (errors.length) return {errors,warnings};
|
|
3046
|
+
if (stage === "complete" || changeStatus?.outcome === "completed") errors.push(...validateChangeClosure({context:workspace.context,change:basename(change),forArchive:archiveReady}).errors);
|
|
3047
|
+
if (archiveReady && changeStatus?.outcome === "cancelled") return {errors,warnings};
|
|
3048
|
+
if (stage === "archived") {
|
|
3049
|
+
const output=runDesignCheck("--archived", change, errors, workspace.context,options.sealed ? ['--sealed'] : []);
|
|
3050
|
+
let archive;
|
|
3051
|
+
if(output) {try {archive=JSON.parse(output);}catch {errors.push('archived consumer returned no verified receipt result');}}
|
|
3052
|
+
if(archive?.archive_state === 'moved') warnings.push('archive moved and checked, but is not sealed; finish the original A8 receipt');
|
|
3053
|
+
return { errors, warnings, ...(archive ? {archive} : {}) };
|
|
3054
|
+
}
|
|
3055
|
+
if (isParentImplementation) validateParentImplementation(change, changeStatus, stage, errors, warnings, repoRoot, options);
|
|
3305
3056
|
errors.push(...validateInitiative(change));
|
|
3306
3057
|
if (isFile(join(change, "source-issue.md"))) {
|
|
3307
3058
|
errors.push("obsolete source-issue.md is forbidden; use source.md without compatibility fallback");
|
|
@@ -3316,7 +3067,7 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3316
3067
|
: null;
|
|
3317
3068
|
const triagePath = join(change, "triage.md");
|
|
3318
3069
|
const triage = isFile(triagePath) || sourceRequired
|
|
3319
|
-
? validateTriage(triagePath, basename(change), errors
|
|
3070
|
+
? validateTriage(triagePath, basename(change), errors)
|
|
3320
3071
|
: null;
|
|
3321
3072
|
const publishPath = join(change, "publish.md");
|
|
3322
3073
|
const publishRequired = Boolean(
|
|
@@ -3330,34 +3081,40 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3330
3081
|
validateDiagnosis(diagnosisPath, basename(change), errors);
|
|
3331
3082
|
}
|
|
3332
3083
|
validateReviews(change, stage === "review", errors);
|
|
3333
|
-
validatePrototypes(change, stage === "prototype", errors);
|
|
3084
|
+
validatePrototypes(change, stage === "prototype", errors, prototypeId, new Set(["spec", "tickets", "goal-plan", "implement", "review", "complete"]).has(stage), workspace.context);
|
|
3085
|
+
if (new Set(["tickets", "goal-plan", "implement", "review", "complete"]).has(stage)) runDesignCheck("--handoff", change, errors, workspace.context);
|
|
3334
3086
|
validateChangeLearning(change, stage === "learn-change", errors);
|
|
3335
3087
|
const retro = validateRecords(change, "retrospective", parseFrontmatter);
|
|
3336
3088
|
const prs = validateRecords(change, "pull-request", parseFrontmatter);
|
|
3337
3089
|
errors.push(...retro.errors, ...prs.errors);
|
|
3338
3090
|
if (stage === "retro" && !retro.records.some(r => r.meta.status === "completed")) errors.push("retro stage requires a completed retrospective");
|
|
3339
3091
|
if (stage === "pr-delivery" && !prs.records.length) errors.push("pr-delivery stage requires a PR record");
|
|
3340
|
-
if (
|
|
3092
|
+
if (archiveReady && prs.records.some(r => r.meta.requested === true && (["planned", "failed"].includes(r.meta.status) || (r.meta.delivery_target === "ready" && r.meta.status === "draft")))) errors.push("complete stage cannot archive pending PR delivery");
|
|
3341
3093
|
const retroOnly = retro.records.length > 0 && retro.errors.length === 0 && retro.records.every(r => r.meta.status === "completed") &&
|
|
3342
|
-
changeStatus?.works_run?.includes("specdev/retro") && changeStatus.works_run.every(w => ["specdev/retro", "specdev/triage"].includes(w)) &&
|
|
3343
3094
|
!["spec.md", "ticket", "tickets-map.md", "goal-plan.md", "implementation-map.md", "implementation-plan.md", "evidence"].some(p => existsSync(join(change,p))) && !changeStatus.worktrees?.length;
|
|
3344
3095
|
|
|
3096
|
+
let simpleGoal = null;
|
|
3097
|
+
try { simpleGoal = readLightweightGoal(change); } catch (error) { errors.push(error.message); }
|
|
3345
3098
|
const specRequired = new Set(["spec", "tickets", "goal-plan", "implement", "complete"]).has(stage) && !isParentImplementation && !retroOnly;
|
|
3346
3099
|
const specPath = join(change, "spec.md");
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
:
|
|
3100
|
+
let specification = null;
|
|
3101
|
+
if (!isParentImplementation && !retroOnly && (isFile(specPath) || specRequired)) {
|
|
3102
|
+
try { specification = readSpecification(change, {allowLightweight: stage !== "tickets" && (stage !== "goal-plan" || Boolean(simpleGoal)), requiredArtifact:options.requiredArtifact, depth:options.depth}); }
|
|
3103
|
+
catch(error) { errors.push(error.message); }
|
|
3104
|
+
}
|
|
3105
|
+
const lightweight = specification?.lightweight === true;
|
|
3106
|
+
const spec = isFile(specPath) ? validateSpec(specPath, errors, warnings) : null;
|
|
3350
3107
|
const ticketMode = isDirectory(join(change, "ticket"));
|
|
3351
|
-
const mapRequired = !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
|
|
3108
|
+
const mapRequired = !simpleGoal && !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
|
|
3352
3109
|
const ticketsMap = isFile(mapPath) || mapRequired ? validateMap(mapPath, errors, repoRoot) : null;
|
|
3353
3110
|
const goalPlanPath = join(change, "goal-plan.md");
|
|
3354
|
-
const goalPlan = isFile(goalPlanPath) || (stage === "goal-plan" && !isParentImplementation)
|
|
3111
|
+
const goalPlan = !simpleGoal && (isFile(goalPlanPath) || (stage === "goal-plan" && !isParentImplementation))
|
|
3355
3112
|
? validateGoalPlan(goalPlanPath, errors)
|
|
3356
3113
|
: null;
|
|
3357
3114
|
validateDesignTree(join(change, "design-tree.json"), change, errors);
|
|
3358
3115
|
validateWayfinder(change, errors);
|
|
3359
3116
|
if (stage === "grill") {
|
|
3360
|
-
for (const name of ["design-tree.json"
|
|
3117
|
+
for (const name of ["design-tree.json"]) {
|
|
3361
3118
|
if (!isFile(join(change, name))) errors.push(`grill stage requires ${name}`);
|
|
3362
3119
|
}
|
|
3363
3120
|
}
|
|
@@ -3371,7 +3128,7 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3371
3128
|
}
|
|
3372
3129
|
|
|
3373
3130
|
const ticketDir = join(change, "ticket");
|
|
3374
|
-
const ticketsRequired = !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
|
|
3131
|
+
const ticketsRequired = !simpleGoal && !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
|
|
3375
3132
|
const ticketFiles = isDirectory(ticketDir)
|
|
3376
3133
|
? readdirSync(ticketDir)
|
|
3377
3134
|
.filter((name) => name.endsWith(".md"))
|
|
@@ -3380,7 +3137,7 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3380
3137
|
: [];
|
|
3381
3138
|
if (ticketsRequired && !isDirectory(ticketDir)) errors.push("missing Ticket directory");
|
|
3382
3139
|
if (ticketsRequired && !ticketFiles.length) errors.push("Ticket directory contains no Markdown tickets");
|
|
3383
|
-
if (stage === "implement" && !ticketMode && !isFile(join(change, "evidence", "direct-spec.md"))) {
|
|
3140
|
+
if (stage === "implement" && !ticketMode && !lightweight && !isFile(join(change, "evidence", "direct-spec.md"))) {
|
|
3384
3141
|
errors.push("Direct Spec implement stage requires evidence/direct-spec.md");
|
|
3385
3142
|
}
|
|
3386
3143
|
|
|
@@ -3440,7 +3197,7 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3440
3197
|
}
|
|
3441
3198
|
}
|
|
3442
3199
|
if (changeStatus && goalPlan) {
|
|
3443
|
-
validateGoalPlanRuntimeLimits(goalPlan.path, change, goalPlan, errors, repoRoot);
|
|
3200
|
+
validateGoalPlanRuntimeLimits(goalPlan.path, change, goalPlan, errors, repoRoot, options);
|
|
3444
3201
|
const attemptLimit = Number.isInteger(goalPlan.meta.integration_attempt_limit) ? goalPlan.meta.integration_attempt_limit : null;
|
|
3445
3202
|
if (attemptLimit !== null) {
|
|
3446
3203
|
for (const worktree of changeStatus.worktrees ?? []) {
|
|
@@ -3451,9 +3208,11 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3451
3208
|
}
|
|
3452
3209
|
validateCurrentWorkspaceExecution(changeStatus, goalPlan, errors);
|
|
3453
3210
|
}
|
|
3454
|
-
validateGitEvidence(repoRoot, changeStatus, errors);
|
|
3211
|
+
validateGitEvidence(stage === "complete" ? workspace.context.projectRoot : repoRoot, changeStatus, errors);
|
|
3212
|
+
|
|
3213
|
+
if (stage === "complete" && spec && !ticketMode && !isParentImplementation && !retroOnly) errors.push(...validateAcceptanceEvidence(change,"evidence/direct-spec.md",[...new Set(spec.body.match(/\bAC-\d+\b/g) ?? [])]));
|
|
3455
3214
|
|
|
3456
|
-
if (spec) {
|
|
3215
|
+
if (spec && ticketMode) {
|
|
3457
3216
|
const declaredContracts = new Set(spec.body.match(/\bAC-\d+\b/g) ?? []);
|
|
3458
3217
|
const coveredContracts = new Set(
|
|
3459
3218
|
[...tickets.values()].flatMap((artifact) =>
|
|
@@ -3583,44 +3342,44 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3583
3342
|
|
|
3584
3343
|
if (changeStatus) {
|
|
3585
3344
|
if (
|
|
3586
|
-
changeStatus.
|
|
3345
|
+
changeStatus.outcome === "completed" &&
|
|
3587
3346
|
[...tickets.values()].some(
|
|
3588
3347
|
(artifact) => !new Set(["done", "cancelled"]).has(artifact.meta.status),
|
|
3589
3348
|
)
|
|
3590
3349
|
) {
|
|
3591
|
-
errors.push("
|
|
3350
|
+
errors.push("Outcome is completed while planned Tickets remain unfinished");
|
|
3592
3351
|
}
|
|
3593
|
-
if (changeStatus.
|
|
3352
|
+
if (changeStatus.location.kind === "archive") {
|
|
3594
3353
|
warnings.push("validating an archived change in place; normally it lives under the archive root");
|
|
3595
3354
|
}
|
|
3596
|
-
if (stage === "complete" && changeStatus.
|
|
3597
|
-
errors.push("complete stage requires
|
|
3355
|
+
if (stage === "complete" && changeStatus.outcome !== "completed") {
|
|
3356
|
+
errors.push("complete stage requires Outcome: completed");
|
|
3598
3357
|
}
|
|
3599
3358
|
}
|
|
3600
3359
|
if (
|
|
3601
3360
|
stage === "complete" &&
|
|
3602
|
-
!ticketFiles.length && !retroOnly &&
|
|
3361
|
+
!ticketFiles.length && !retroOnly && !lightweight &&
|
|
3603
3362
|
!isFile(join(change, "implementation-map.md")) &&
|
|
3604
3363
|
!isFile(join(change, "evidence", "direct-spec.md"))
|
|
3605
3364
|
) {
|
|
3606
3365
|
errors.push("complete stage without Tickets requires evidence/direct-spec.md");
|
|
3607
3366
|
}
|
|
3608
3367
|
if (
|
|
3609
|
-
|
|
3368
|
+
archiveReady &&
|
|
3610
3369
|
triage &&
|
|
3611
3370
|
new Set(["pending-close", "close-failed"]).has(triage.meta.external_action)
|
|
3612
3371
|
) {
|
|
3613
3372
|
errors.push(`complete stage cannot archive external_action=${triage.meta.external_action}`);
|
|
3614
3373
|
}
|
|
3615
3374
|
if (
|
|
3616
|
-
|
|
3375
|
+
archiveReady &&
|
|
3617
3376
|
triage &&
|
|
3618
3377
|
new Set(["pending", "publish-failed"]).has(triage.meta.publish_action)
|
|
3619
3378
|
) {
|
|
3620
3379
|
errors.push(`complete stage cannot archive publish_action=${triage.meta.publish_action}`);
|
|
3621
3380
|
}
|
|
3622
3381
|
|
|
3623
|
-
for (const path of walk(change).filter((item) =>
|
|
3382
|
+
for (const path of walk(change).filter((item) => lstatSync(item).isFile() && extname(item) === ".md")) {
|
|
3624
3383
|
const text = readText(path);
|
|
3625
3384
|
if ((text.match(/<Path>/g) ?? []).length !== (text.match(/<\/Path>/g) ?? []).length) {
|
|
3626
3385
|
errors.push(`${toPosix(relative(change, path))}: unbalanced <Path> tags`);
|
|
@@ -3635,7 +3394,19 @@ function validateChange(change, stage = null, repoRoot = null) {
|
|
|
3635
3394
|
}
|
|
3636
3395
|
}
|
|
3637
3396
|
|
|
3638
|
-
|
|
3397
|
+
errors.push(...validateEngineeringArtifacts(change, engineeringKind));
|
|
3398
|
+
if (simpleGoal && changeStatus?.outcome === "completed" && /^[-*] \[ \]/m.test(simpleGoal.body)) errors.push("completed Goal still has unfinished tasks");
|
|
3399
|
+
return { errors, warnings, ...(options.readOnlySnapshot ? {snapshot:true,preflight:true} : {}) };
|
|
3400
|
+
}
|
|
3401
|
+
|
|
3402
|
+
function contextArguments(context) {
|
|
3403
|
+
if (!context) return [];
|
|
3404
|
+
const source = context.readOnlySnapshot?.sourceContext ?? context;
|
|
3405
|
+
return ['--repo',source.projectRoot,'--method-root',source.methodRoot,'--state-root',source.specdevRoot,...(context.readOnlySnapshot ? ['--snapshot-specdev',context.specdevRoot] : [])];
|
|
3406
|
+
}
|
|
3407
|
+
function runDesignCheck(operation, path, errors, context = null, flags = []) {
|
|
3408
|
+
try { return execFileSync(process.execPath, [fileURLToPath(new URL("./design-artifacts.mjs", import.meta.url)), operation, path, ...contextArguments(context),...flags], { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }); }
|
|
3409
|
+
catch (error) { errors.push(String(error.stderr || error.stdout || error.message).trim()); }
|
|
3639
3410
|
}
|
|
3640
3411
|
|
|
3641
3412
|
function printResults(errors, warnings) {
|
|
@@ -3646,26 +3417,41 @@ function printResults(errors, warnings) {
|
|
|
3646
3417
|
}
|
|
3647
3418
|
|
|
3648
3419
|
function usage() {
|
|
3649
|
-
console.error("Usage: node validate-specdev.mjs [--stage <stage>] [--repo <project-root>] <change-directory> | --self-check | --capture <capture.md> | --triage-run <TRI-NNN.md>");
|
|
3420
|
+
console.error("Usage: node validate-specdev.mjs [--stage <stage>] [--sealed (archived only)] [--prototype-id UI-NNN|LOGIC-NNN] [--repo <project-root>] [--engineering <performance|documentation|incident>] <change-directory> | --review-scope --repo <project-root> --mode <baseline|range|commit|pr|source-files> [comparison options or repeated --file <relative-path>] | --self-check | --capture <capture.md> | --triage-run <TRI-NNN.md>");
|
|
3650
3421
|
return 2;
|
|
3651
3422
|
}
|
|
3652
3423
|
|
|
3653
3424
|
function main(argv) {
|
|
3425
|
+
if (argv[0] === "--review-scope") return reviewScopeCLI(argv.slice(1));
|
|
3426
|
+
let engineeringKind = null;
|
|
3427
|
+
let prototypeId = null;
|
|
3654
3428
|
let selfCheckRequested = false;
|
|
3655
3429
|
let stage = null;
|
|
3656
3430
|
let repoRoot = null;
|
|
3431
|
+
const contextOptions = {};
|
|
3657
3432
|
let capturePath = null;
|
|
3658
3433
|
let triageRunPath = null;
|
|
3659
3434
|
const positional = [];
|
|
3660
3435
|
for (let index = 0; index < argv.length; index += 1) {
|
|
3661
3436
|
const arg = argv[index];
|
|
3662
|
-
if (arg === "--
|
|
3437
|
+
if (arg === "--prototype-id") {
|
|
3438
|
+
if (prototypeId !== null || !/^(?:UI|LOGIC)-\d{3,}$/.test(argv[index + 1] ?? "")) return usage();
|
|
3439
|
+
prototypeId = argv[++index];
|
|
3440
|
+
} else if (arg === "--sealed") {
|
|
3441
|
+
if(contextOptions.sealed) return usage();
|
|
3442
|
+
contextOptions.sealed=true;
|
|
3443
|
+
} else if (arg === "--engineering") {
|
|
3444
|
+
if (engineeringKind !== null || !ENGINEERING_KINDS.has(argv[index + 1])) return usage();
|
|
3445
|
+
engineeringKind = argv[++index];
|
|
3446
|
+
} else if (arg === "--self-check") {
|
|
3663
3447
|
selfCheckRequested = true;
|
|
3664
3448
|
} else if (arg === "--stage") {
|
|
3665
3449
|
stage = argv[index + 1] ?? null;
|
|
3666
3450
|
index += 1;
|
|
3667
3451
|
} else if (arg.startsWith("--stage=")) {
|
|
3668
3452
|
stage = arg.slice("--stage=".length);
|
|
3453
|
+
} else if (arg === "--method-root" || arg === "--state-root") {
|
|
3454
|
+
contextOptions[arg === "--method-root" ? "methodRoot" : "stateRoot"] = argv[++index];
|
|
3669
3455
|
} else if (arg === "--repo") {
|
|
3670
3456
|
repoRoot = argv[index + 1] ?? null;
|
|
3671
3457
|
index += 1;
|
|
@@ -3685,6 +3471,9 @@ function main(argv) {
|
|
|
3685
3471
|
}
|
|
3686
3472
|
}
|
|
3687
3473
|
if (stage !== null && !VALID_STAGES.has(stage)) return usage();
|
|
3474
|
+
if(contextOptions.sealed && stage !== 'archived') return usage();
|
|
3475
|
+
if (prototypeId && stage !== "prototype") return usage();
|
|
3476
|
+
if (engineeringKind !== null && (selfCheckRequested || capturePath || triageRunPath || positional.length !== 1)) return usage();
|
|
3688
3477
|
if (triageRunPath) {
|
|
3689
3478
|
if (selfCheckRequested || positional.length || stage !== null || capturePath || repoRoot) return usage();
|
|
3690
3479
|
return printResults(validateRecord(resolve(triageRunPath), "triage-run", parseFrontmatter).errors, []);
|
|
@@ -3703,7 +3492,7 @@ function main(argv) {
|
|
|
3703
3492
|
return printResults(errors, []);
|
|
3704
3493
|
}
|
|
3705
3494
|
if (positional.length === 1) {
|
|
3706
|
-
const result = validateChange(resolve(positional[0]), stage, repoRoot);
|
|
3495
|
+
const result = validateChange(resolve(positional[0]), stage, repoRoot, engineeringKind, prototypeId, contextOptions);
|
|
3707
3496
|
return printResults(result.errors, result.warnings);
|
|
3708
3497
|
}
|
|
3709
3498
|
return usage();
|