intent-planner 0.13.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/LICENSE +21 -0
- package/README.en.md +225 -0
- package/README.md +225 -0
- package/bin/cli.mjs +289 -0
- package/package.json +46 -0
- package/src/install.mjs +527 -0
- package/templates/en/agents/claude/CLAUDE.md +62 -0
- package/templates/en/agents/codex/AGENTS.md +62 -0
- package/templates/en/agents/gemini/GEMINI.md +62 -0
- package/templates/en/claude/skills/CONTRACT.md +86 -0
- package/templates/en/claude/skills/intent-compass/SKILL.md +55 -0
- package/templates/en/claude/skills/intent-compass/rules/algo-qoc.md +62 -0
- package/templates/en/claude/skills/intent-compass/rules/constraint-surfacing.md +41 -0
- package/templates/en/claude/skills/intent-discover/SKILL.md +63 -0
- package/templates/en/claude/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
- package/templates/en/claude/skills/intent-discover/rules/algo-gore-lite.md +35 -0
- package/templates/en/claude/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
- package/templates/en/claude/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
- package/templates/en/claude/skills/intent-discover/rules/designer-questions.md +78 -0
- package/templates/en/claude/skills/intent-discover/rules/drift-terrain.md +105 -0
- package/templates/en/claude/skills/intent-discover/rules/mode-selection.md +31 -0
- package/templates/en/claude/skills/intent-export-cc-sdd/SKILL.md +88 -0
- package/templates/en/claude/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
- package/templates/en/claude/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
- package/templates/en/claude/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
- package/templates/en/claude/skills/intent-export-openspec/SKILL.md +90 -0
- package/templates/en/claude/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
- package/templates/en/claude/skills/intent-export-openspec/rules/export-questions.md +23 -0
- package/templates/en/claude/skills/intent-export-openspec/rules/map-openspec.md +75 -0
- package/templates/en/claude/skills/intent-from-spec/SKILL.md +60 -0
- package/templates/en/claude/skills/intent-from-spec/rules/extract-intent.md +56 -0
- package/templates/en/claude/skills/intent-from-spec/rules/gap-readout.md +54 -0
- package/templates/en/claude/skills/intent-from-spec/rules/load-bearing.md +48 -0
- package/templates/en/claude/skills/intent-from-spec/rules/omission-recap.md +42 -0
- package/templates/en/claude/skills/intent-improve/SKILL.md +70 -0
- package/templates/en/claude/skills/intent-improve/rules/improve-axes.md +121 -0
- package/templates/en/claude/skills/intent-overview/SKILL.md +63 -0
- package/templates/en/claude/skills/intent-overview/rules/aggregate-sources.md +61 -0
- package/templates/en/claude/skills/intent-overview/rules/gap-readout.md +54 -0
- package/templates/en/claude/skills/intent-overview/rules/mermaid-tree.md +78 -0
- package/templates/en/claude/skills/intent-overview/rules/progress-readout.md +119 -0
- package/templates/en/claude/skills/intent-packets/SKILL.md +97 -0
- package/templates/en/claude/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
- package/templates/en/claude/skills/intent-packets/rules/algo-characterization-test.md +40 -0
- package/templates/en/claude/skills/intent-packets/rules/algo-example-mapping.md +47 -0
- package/templates/en/claude/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
- package/templates/en/claude/skills/intent-packets/rules/decision-slots.md +88 -0
- package/templates/en/claude/skills/intent-packets/rules/export-route.md +54 -0
- package/templates/en/claude/skills/intent-packets/rules/first-packet.md +35 -0
- package/templates/en/claude/skills/intent-packets/rules/packet-format.md +207 -0
- package/templates/en/claude/skills/intent-packets/rules/walking-skeleton.md +35 -0
- package/templates/en/claude/skills/intent-release-note/SKILL.md +58 -0
- package/templates/en/claude/skills/intent-release-note/rules/format-changelog.md +40 -0
- package/templates/en/claude/skills/intent-release-note/rules/format-github-releases.md +41 -0
- package/templates/en/claude/skills/intent-release-note/rules/format-select.md +32 -0
- package/templates/en/claude/skills/intent-release-note/rules/source-scope.md +42 -0
- package/templates/en/claude/skills/intent-status/SKILL.md +171 -0
- package/templates/en/claude/skills/intent-status/rules/decision-table.md +47 -0
- package/templates/en/claude/skills/intent-to-spec/SKILL.md +68 -0
- package/templates/en/claude/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
- package/templates/en/claude/skills/intent-to-spec/rules/format-integrated.md +42 -0
- package/templates/en/claude/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
- package/templates/en/claude/skills/intent-to-spec/rules/format-upstream.md +41 -0
- package/templates/en/claude/skills/intent-to-spec/rules/source-scope.md +50 -0
- package/templates/en/claude/skills/intent-validate/SKILL.md +80 -0
- package/templates/en/claude/skills/intent-validate/rules/validate-checks.md +121 -0
- package/templates/en/claude/skills/intent-writeback/SKILL.md +71 -0
- package/templates/en/claude/skills/intent-writeback/rules/writeback-protocol.md +139 -0
- package/templates/en/codex/skills/CONTRACT.md +77 -0
- package/templates/en/codex/skills/intent-compass/SKILL.md +52 -0
- package/templates/en/codex/skills/intent-compass/rules/algo-qoc.md +62 -0
- package/templates/en/codex/skills/intent-compass/rules/constraint-surfacing.md +41 -0
- package/templates/en/codex/skills/intent-discover/SKILL.md +60 -0
- package/templates/en/codex/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
- package/templates/en/codex/skills/intent-discover/rules/algo-gore-lite.md +35 -0
- package/templates/en/codex/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
- package/templates/en/codex/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
- package/templates/en/codex/skills/intent-discover/rules/designer-questions.md +78 -0
- package/templates/en/codex/skills/intent-discover/rules/drift-terrain.md +105 -0
- package/templates/en/codex/skills/intent-discover/rules/mode-selection.md +31 -0
- package/templates/en/codex/skills/intent-export-cc-sdd/SKILL.md +85 -0
- package/templates/en/codex/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
- package/templates/en/codex/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
- package/templates/en/codex/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
- package/templates/en/codex/skills/intent-export-openspec/SKILL.md +87 -0
- package/templates/en/codex/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
- package/templates/en/codex/skills/intent-export-openspec/rules/export-questions.md +23 -0
- package/templates/en/codex/skills/intent-export-openspec/rules/map-openspec.md +75 -0
- package/templates/en/codex/skills/intent-from-spec/SKILL.md +58 -0
- package/templates/en/codex/skills/intent-from-spec/rules/extract-intent.md +56 -0
- package/templates/en/codex/skills/intent-from-spec/rules/gap-readout.md +54 -0
- package/templates/en/codex/skills/intent-from-spec/rules/load-bearing.md +48 -0
- package/templates/en/codex/skills/intent-from-spec/rules/omission-recap.md +42 -0
- package/templates/en/codex/skills/intent-improve/SKILL.md +67 -0
- package/templates/en/codex/skills/intent-improve/rules/improve-axes.md +121 -0
- package/templates/en/codex/skills/intent-overview/SKILL.md +61 -0
- package/templates/en/codex/skills/intent-overview/rules/aggregate-sources.md +61 -0
- package/templates/en/codex/skills/intent-overview/rules/gap-readout.md +54 -0
- package/templates/en/codex/skills/intent-overview/rules/mermaid-tree.md +78 -0
- package/templates/en/codex/skills/intent-overview/rules/progress-readout.md +119 -0
- package/templates/en/codex/skills/intent-packets/SKILL.md +94 -0
- package/templates/en/codex/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
- package/templates/en/codex/skills/intent-packets/rules/algo-characterization-test.md +40 -0
- package/templates/en/codex/skills/intent-packets/rules/algo-example-mapping.md +47 -0
- package/templates/en/codex/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
- package/templates/en/codex/skills/intent-packets/rules/decision-slots.md +88 -0
- package/templates/en/codex/skills/intent-packets/rules/export-route.md +54 -0
- package/templates/en/codex/skills/intent-packets/rules/first-packet.md +35 -0
- package/templates/en/codex/skills/intent-packets/rules/packet-format.md +207 -0
- package/templates/en/codex/skills/intent-packets/rules/walking-skeleton.md +35 -0
- package/templates/en/codex/skills/intent-release-note/SKILL.md +56 -0
- package/templates/en/codex/skills/intent-release-note/rules/format-changelog.md +40 -0
- package/templates/en/codex/skills/intent-release-note/rules/format-github-releases.md +41 -0
- package/templates/en/codex/skills/intent-release-note/rules/format-select.md +32 -0
- package/templates/en/codex/skills/intent-release-note/rules/source-scope.md +42 -0
- package/templates/en/codex/skills/intent-status/SKILL.md +169 -0
- package/templates/en/codex/skills/intent-status/rules/decision-table.md +47 -0
- package/templates/en/codex/skills/intent-to-spec/SKILL.md +66 -0
- package/templates/en/codex/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
- package/templates/en/codex/skills/intent-to-spec/rules/format-integrated.md +42 -0
- package/templates/en/codex/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
- package/templates/en/codex/skills/intent-to-spec/rules/format-upstream.md +41 -0
- package/templates/en/codex/skills/intent-to-spec/rules/source-scope.md +50 -0
- package/templates/en/codex/skills/intent-validate/SKILL.md +78 -0
- package/templates/en/codex/skills/intent-validate/rules/validate-checks.md +121 -0
- package/templates/en/codex/skills/intent-writeback/SKILL.md +68 -0
- package/templates/en/codex/skills/intent-writeback/rules/writeback-protocol.md +139 -0
- package/templates/en/intent/README.md +118 -0
- package/templates/en/intent/cc-sdd/README.md +28 -0
- package/templates/en/intent/compass-archive/README.md +9 -0
- package/templates/en/intent/compass-archive/archive/.gitkeep +0 -0
- package/templates/en/intent/compass-archive.md +7 -0
- package/templates/en/intent/constraint-library.md +32 -0
- package/templates/en/intent/constraint-starters.md +58 -0
- package/templates/en/intent/context-cost-cues.md +55 -0
- package/templates/en/intent/deltas/README.md +11 -0
- package/templates/en/intent/deltas/archive/.gitkeep +0 -0
- package/templates/en/intent/deltas.md +34 -0
- package/templates/en/intent/drift-log/README.md +11 -0
- package/templates/en/intent/drift-log/archive/.gitkeep +0 -0
- package/templates/en/intent/drift-log.md +41 -0
- package/templates/en/intent/drift-patterns.md +68 -0
- package/templates/en/intent/export-log/README.md +12 -0
- package/templates/en/intent/export-log/archive/.gitkeep +0 -0
- package/templates/en/intent/export-log.md +6 -0
- package/templates/en/intent/glossary.md +23 -0
- package/templates/en/intent/intent-compass.md +55 -0
- package/templates/en/intent/intent-tree.md +59 -0
- package/templates/en/intent/milestones/README.md +10 -0
- package/templates/en/intent/milestones/archive/.gitkeep +0 -0
- package/templates/en/intent/milestones.md +22 -0
- package/templates/en/intent/mode.local.md +23 -0
- package/templates/en/intent/mode.md +32 -0
- package/templates/en/intent/modes/README.md +28 -0
- package/templates/en/intent/modes/behavior-unknown.md +57 -0
- package/templates/en/intent/modes/feature-growth.md +57 -0
- package/templates/en/intent/modes/non-code.md +46 -0
- package/templates/en/intent/modes/refactor.md +56 -0
- package/templates/en/intent/modes/standard.md +50 -0
- package/templates/en/intent/nl-spec/README.md +18 -0
- package/templates/en/intent/openspec/proposal.md +15 -0
- package/templates/en/intent/openspec/spec-delta.md +25 -0
- package/templates/en/intent/overview/README.md +18 -0
- package/templates/en/intent/packets/README.md +29 -0
- package/templates/en/intent/packets/index.md +6 -0
- package/templates/en/intent/packets/plan.md +23 -0
- package/templates/en/intent/release-note/README.md +18 -0
- package/templates/en/intent/scripts/intent-check.mjs +786 -0
- package/templates/en/intent/scripts/pre-push +27 -0
- package/templates/en/intent/spec-ingest/README.md +18 -0
- package/templates/ja/agents/claude/CLAUDE.md +62 -0
- package/templates/ja/agents/codex/AGENTS.md +62 -0
- package/templates/ja/agents/gemini/GEMINI.md +62 -0
- package/templates/ja/claude/skills/CONTRACT.md +90 -0
- package/templates/ja/claude/skills/intent-compass/SKILL.md +55 -0
- package/templates/ja/claude/skills/intent-compass/rules/algo-qoc.md +62 -0
- package/templates/ja/claude/skills/intent-compass/rules/constraint-surfacing.md +41 -0
- package/templates/ja/claude/skills/intent-discover/SKILL.md +63 -0
- package/templates/ja/claude/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
- package/templates/ja/claude/skills/intent-discover/rules/algo-gore-lite.md +35 -0
- package/templates/ja/claude/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
- package/templates/ja/claude/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
- package/templates/ja/claude/skills/intent-discover/rules/designer-questions.md +78 -0
- package/templates/ja/claude/skills/intent-discover/rules/drift-terrain.md +105 -0
- package/templates/ja/claude/skills/intent-discover/rules/mode-selection.md +31 -0
- package/templates/ja/claude/skills/intent-export-cc-sdd/SKILL.md +88 -0
- package/templates/ja/claude/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
- package/templates/ja/claude/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
- package/templates/ja/claude/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
- package/templates/ja/claude/skills/intent-export-openspec/SKILL.md +90 -0
- package/templates/ja/claude/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
- package/templates/ja/claude/skills/intent-export-openspec/rules/export-questions.md +23 -0
- package/templates/ja/claude/skills/intent-export-openspec/rules/map-openspec.md +75 -0
- package/templates/ja/claude/skills/intent-from-spec/SKILL.md +60 -0
- package/templates/ja/claude/skills/intent-from-spec/rules/extract-intent.md +56 -0
- package/templates/ja/claude/skills/intent-from-spec/rules/gap-readout.md +54 -0
- package/templates/ja/claude/skills/intent-from-spec/rules/load-bearing.md +48 -0
- package/templates/ja/claude/skills/intent-from-spec/rules/omission-recap.md +42 -0
- package/templates/ja/claude/skills/intent-improve/SKILL.md +70 -0
- package/templates/ja/claude/skills/intent-improve/rules/improve-axes.md +121 -0
- package/templates/ja/claude/skills/intent-overview/SKILL.md +63 -0
- package/templates/ja/claude/skills/intent-overview/rules/aggregate-sources.md +61 -0
- package/templates/ja/claude/skills/intent-overview/rules/gap-readout.md +54 -0
- package/templates/ja/claude/skills/intent-overview/rules/mermaid-tree.md +78 -0
- package/templates/ja/claude/skills/intent-overview/rules/progress-readout.md +119 -0
- package/templates/ja/claude/skills/intent-packets/SKILL.md +97 -0
- package/templates/ja/claude/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
- package/templates/ja/claude/skills/intent-packets/rules/algo-characterization-test.md +40 -0
- package/templates/ja/claude/skills/intent-packets/rules/algo-example-mapping.md +47 -0
- package/templates/ja/claude/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
- package/templates/ja/claude/skills/intent-packets/rules/decision-slots.md +88 -0
- package/templates/ja/claude/skills/intent-packets/rules/export-route.md +54 -0
- package/templates/ja/claude/skills/intent-packets/rules/first-packet.md +35 -0
- package/templates/ja/claude/skills/intent-packets/rules/packet-format.md +207 -0
- package/templates/ja/claude/skills/intent-packets/rules/walking-skeleton.md +35 -0
- package/templates/ja/claude/skills/intent-release-note/SKILL.md +58 -0
- package/templates/ja/claude/skills/intent-release-note/rules/format-changelog.md +40 -0
- package/templates/ja/claude/skills/intent-release-note/rules/format-github-releases.md +41 -0
- package/templates/ja/claude/skills/intent-release-note/rules/format-select.md +32 -0
- package/templates/ja/claude/skills/intent-release-note/rules/source-scope.md +42 -0
- package/templates/ja/claude/skills/intent-status/SKILL.md +171 -0
- package/templates/ja/claude/skills/intent-status/rules/decision-table.md +47 -0
- package/templates/ja/claude/skills/intent-to-spec/SKILL.md +68 -0
- package/templates/ja/claude/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
- package/templates/ja/claude/skills/intent-to-spec/rules/format-integrated.md +42 -0
- package/templates/ja/claude/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
- package/templates/ja/claude/skills/intent-to-spec/rules/format-upstream.md +41 -0
- package/templates/ja/claude/skills/intent-to-spec/rules/source-scope.md +50 -0
- package/templates/ja/claude/skills/intent-validate/SKILL.md +80 -0
- package/templates/ja/claude/skills/intent-validate/rules/validate-checks.md +121 -0
- package/templates/ja/claude/skills/intent-writeback/SKILL.md +71 -0
- package/templates/ja/claude/skills/intent-writeback/rules/writeback-protocol.md +139 -0
- package/templates/ja/codex/skills/CONTRACT.md +81 -0
- package/templates/ja/codex/skills/intent-compass/SKILL.md +52 -0
- package/templates/ja/codex/skills/intent-compass/rules/algo-qoc.md +62 -0
- package/templates/ja/codex/skills/intent-compass/rules/constraint-surfacing.md +41 -0
- package/templates/ja/codex/skills/intent-discover/SKILL.md +60 -0
- package/templates/ja/codex/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
- package/templates/ja/codex/skills/intent-discover/rules/algo-gore-lite.md +35 -0
- package/templates/ja/codex/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
- package/templates/ja/codex/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
- package/templates/ja/codex/skills/intent-discover/rules/designer-questions.md +78 -0
- package/templates/ja/codex/skills/intent-discover/rules/drift-terrain.md +105 -0
- package/templates/ja/codex/skills/intent-discover/rules/mode-selection.md +31 -0
- package/templates/ja/codex/skills/intent-export-cc-sdd/SKILL.md +85 -0
- package/templates/ja/codex/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
- package/templates/ja/codex/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
- package/templates/ja/codex/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
- package/templates/ja/codex/skills/intent-export-openspec/SKILL.md +87 -0
- package/templates/ja/codex/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
- package/templates/ja/codex/skills/intent-export-openspec/rules/export-questions.md +23 -0
- package/templates/ja/codex/skills/intent-export-openspec/rules/map-openspec.md +75 -0
- package/templates/ja/codex/skills/intent-from-spec/SKILL.md +58 -0
- package/templates/ja/codex/skills/intent-from-spec/rules/extract-intent.md +56 -0
- package/templates/ja/codex/skills/intent-from-spec/rules/gap-readout.md +54 -0
- package/templates/ja/codex/skills/intent-from-spec/rules/load-bearing.md +48 -0
- package/templates/ja/codex/skills/intent-from-spec/rules/omission-recap.md +42 -0
- package/templates/ja/codex/skills/intent-improve/SKILL.md +67 -0
- package/templates/ja/codex/skills/intent-improve/rules/improve-axes.md +121 -0
- package/templates/ja/codex/skills/intent-overview/SKILL.md +61 -0
- package/templates/ja/codex/skills/intent-overview/rules/aggregate-sources.md +61 -0
- package/templates/ja/codex/skills/intent-overview/rules/gap-readout.md +54 -0
- package/templates/ja/codex/skills/intent-overview/rules/mermaid-tree.md +78 -0
- package/templates/ja/codex/skills/intent-overview/rules/progress-readout.md +119 -0
- package/templates/ja/codex/skills/intent-packets/SKILL.md +94 -0
- package/templates/ja/codex/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
- package/templates/ja/codex/skills/intent-packets/rules/algo-characterization-test.md +40 -0
- package/templates/ja/codex/skills/intent-packets/rules/algo-example-mapping.md +47 -0
- package/templates/ja/codex/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
- package/templates/ja/codex/skills/intent-packets/rules/decision-slots.md +88 -0
- package/templates/ja/codex/skills/intent-packets/rules/export-route.md +54 -0
- package/templates/ja/codex/skills/intent-packets/rules/first-packet.md +35 -0
- package/templates/ja/codex/skills/intent-packets/rules/packet-format.md +207 -0
- package/templates/ja/codex/skills/intent-packets/rules/walking-skeleton.md +35 -0
- package/templates/ja/codex/skills/intent-release-note/SKILL.md +56 -0
- package/templates/ja/codex/skills/intent-release-note/rules/format-changelog.md +40 -0
- package/templates/ja/codex/skills/intent-release-note/rules/format-github-releases.md +41 -0
- package/templates/ja/codex/skills/intent-release-note/rules/format-select.md +32 -0
- package/templates/ja/codex/skills/intent-release-note/rules/source-scope.md +42 -0
- package/templates/ja/codex/skills/intent-status/SKILL.md +169 -0
- package/templates/ja/codex/skills/intent-status/rules/decision-table.md +47 -0
- package/templates/ja/codex/skills/intent-to-spec/SKILL.md +66 -0
- package/templates/ja/codex/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
- package/templates/ja/codex/skills/intent-to-spec/rules/format-integrated.md +42 -0
- package/templates/ja/codex/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
- package/templates/ja/codex/skills/intent-to-spec/rules/format-upstream.md +41 -0
- package/templates/ja/codex/skills/intent-to-spec/rules/source-scope.md +50 -0
- package/templates/ja/codex/skills/intent-validate/SKILL.md +78 -0
- package/templates/ja/codex/skills/intent-validate/rules/validate-checks.md +121 -0
- package/templates/ja/codex/skills/intent-writeback/SKILL.md +68 -0
- package/templates/ja/codex/skills/intent-writeback/rules/writeback-protocol.md +139 -0
- package/templates/ja/intent/README.md +118 -0
- package/templates/ja/intent/cc-sdd/README.md +28 -0
- package/templates/ja/intent/compass-archive/README.md +9 -0
- package/templates/ja/intent/compass-archive/archive/.gitkeep +0 -0
- package/templates/ja/intent/compass-archive.md +7 -0
- package/templates/ja/intent/constraint-library.md +32 -0
- package/templates/ja/intent/constraint-starters.md +58 -0
- package/templates/ja/intent/context-cost-cues.md +55 -0
- package/templates/ja/intent/deltas/README.md +11 -0
- package/templates/ja/intent/deltas/archive/.gitkeep +0 -0
- package/templates/ja/intent/deltas.md +34 -0
- package/templates/ja/intent/drift-log/README.md +11 -0
- package/templates/ja/intent/drift-log/archive/.gitkeep +0 -0
- package/templates/ja/intent/drift-log.md +41 -0
- package/templates/ja/intent/drift-patterns.md +68 -0
- package/templates/ja/intent/export-log/README.md +12 -0
- package/templates/ja/intent/export-log/archive/.gitkeep +0 -0
- package/templates/ja/intent/export-log.md +6 -0
- package/templates/ja/intent/glossary.md +23 -0
- package/templates/ja/intent/intent-compass.md +55 -0
- package/templates/ja/intent/intent-tree.md +59 -0
- package/templates/ja/intent/milestones/README.md +10 -0
- package/templates/ja/intent/milestones/archive/.gitkeep +0 -0
- package/templates/ja/intent/milestones.md +22 -0
- package/templates/ja/intent/mode.local.md +23 -0
- package/templates/ja/intent/mode.md +32 -0
- package/templates/ja/intent/modes/README.md +28 -0
- package/templates/ja/intent/modes/behavior-unknown.md +57 -0
- package/templates/ja/intent/modes/feature-growth.md +57 -0
- package/templates/ja/intent/modes/non-code.md +46 -0
- package/templates/ja/intent/modes/refactor.md +56 -0
- package/templates/ja/intent/modes/standard.md +50 -0
- package/templates/ja/intent/nl-spec/README.md +18 -0
- package/templates/ja/intent/openspec/proposal.md +15 -0
- package/templates/ja/intent/openspec/spec-delta.md +25 -0
- package/templates/ja/intent/overview/README.md +18 -0
- package/templates/ja/intent/packets/README.md +29 -0
- package/templates/ja/intent/packets/index.md +6 -0
- package/templates/ja/intent/packets/plan.md +23 -0
- package/templates/ja/intent/release-note/README.md +18 -0
- package/templates/ja/intent/scripts/intent-check.mjs +786 -0
- package/templates/ja/intent/scripts/pre-push +27 -0
- package/templates/ja/intent/spec-ingest/README.md +18 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Intent Document Aggregation Procedure (read-only, derived re-generation)
|
|
2
|
+
|
|
3
|
+
The canonical source for how the `intent-overview` skill aggregates and formats scattered `.intent/` intent artifacts into a single read-through view. SKILL.md holds only the procedure and reporting format; "what to read from which heading/column, and how to order it" refers to this document. This rule is **read-only** and never modifies the canonical `.intent/*.md` (writes go only under `.intent/overview/`). It does not re-implement the recovery / validation / drift decision logic — it only reads the outputs those layers leave behind.
|
|
4
|
+
|
|
5
|
+
## Aggregation targets and exact references (fixed)
|
|
6
|
+
|
|
7
|
+
The headings and column names of each artifact are fixed in the table below (if they change, this rule must follow — i.e. a Revalidation Trigger). Canonical descriptions and inferred (guessed) descriptions are presented separately and never mixed.
|
|
8
|
+
|
|
9
|
+
| Source | File to read | Exact heading/column (fixed) | Handling in the view |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| Intent tree | `.intent/intent-tree.md` | `## L0`–`## L4` (hierarchy body) + `## Assumptions` (+ `## Open Questions` if present) | Format L0–L4 as canonical. Assumptions / Open Questions go in a separate frame as inferred |
|
|
12
|
+
| Compass | `.intent/intent-compass.md` | `## North Star` / `## Anti-direction` / `## Invariants` / `## Decision Rules` | Format the 4 sections as-is into a read-through |
|
|
13
|
+
| Packet index | `.intent/packets/index.md` | columns `packet_id \| name \| state \| summary` | Aggregate the index table. Show each packet's state alongside |
|
|
14
|
+
| Packet body | `.intent/packets/active/*.md` | frontmatter 10 keys (including `depends_on`) + body `## Evidence` section | Read frontmatter and Evidence, tie them to the progress / dependency / evidence context |
|
|
15
|
+
| Plan | `.intent/packets/plan.md` | `## Walking Skeleton` / `## Recommended First Packet` / `## Deferred` | Present as the "next-step context" of the packet aggregation |
|
|
16
|
+
| Export history | split form `.intent/export-log/*.md` (source of truth if present; `exported_at` ascending) / else old `.intent/export-log.md` (generated mirror) | columns `packet \| exported_at \| commit` | Present as an export history timeline (readable even when split) |
|
|
17
|
+
| Learnings (deltas) | split form `.intent/deltas/*.md` (if present) + old `.intent/deltas.md` (when coexisting) | `Status` + learning tags | Tie to the packet aggregation as pending learnings (readable even when split) |
|
|
18
|
+
|
|
19
|
+
## Showing active side / archive split (two layers of the reading view; derived, machine-generated)
|
|
20
|
+
|
|
21
|
+
The append-only records (deltas / export-log / drift-log / milestones / compass-archive) are divided by the split into an **active side (the thin current projection) and archive (history)**. The overview reading view presents these two layers **shown split** (the derived machine generation of INV25-(1) / DR33; it creates no new canonical file and modifies no source of truth, read-only).
|
|
22
|
+
|
|
23
|
+
| Layer | What to read | Treatment in the reading view |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| **Active side** | directly under each record's split dir `.intent/<rec>/*.md` (source of truth if present; natural-key ascending) / else old `.intent/<rec>.md` (generated mirror) | Present thinly as the "current" section (the current projection). When the split form and the old mirror coexist, treat the split form as the source of truth and do not double-count the mirror |
|
|
26
|
+
| **Archive (history)** | files under each record's `.intent/<rec>/archive/` (e.g. `deltas/archive/<year>/`; compass-archive is per-rule) | Present as a "history" section in a **separate frame** from the active side. Do not mix it into the active tally (pending learnings, latest export, etc.) |
|
|
27
|
+
|
|
28
|
+
- The split view is a **derived machine generation**; it does not add a new canonical file (writes go only under `.intent/overview/`; the source of truth is read-only). In environments where `archive/` is absent, omit the "history" section (do not error).
|
|
29
|
+
- In environments with only the old single-file format (split / archive not yet deployed), read the active side from the old mirror and omit the "history" section with a note that history is delegated to git history (backward compatible; do not fill in by guessing).
|
|
30
|
+
|
|
31
|
+
## Packet frontmatter and state value domain (fixed)
|
|
32
|
+
|
|
33
|
+
- Frontmatter has **10 keys** (including `depends_on`). `depends_on` is a set of packet_ids (dependencies).
|
|
34
|
+
- `state` is one of **5 values**: `draft | ready | implementing | verifying | done`.
|
|
35
|
+
- The packet body's `## Evidence` section contains verification results and check-axis IDs (kebab-case).
|
|
36
|
+
|
|
37
|
+
## Backward compatibility (reading the legacy schema)
|
|
38
|
+
|
|
39
|
+
Read backward-compatibly even in environments where the new schema (10 keys, 5 values) is not yet deployed. Do not fill in missing parts by guessing.
|
|
40
|
+
|
|
41
|
+
| Observed state | How to read it |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `depends_on` is absent | Read as "no dependencies (empty set)" |
|
|
44
|
+
| `## Evidence` section is absent | Read as "not filled in" |
|
|
45
|
+
| Legacy 3-value state (`draft \| active \| done`) remains | Read `active` as "in progress (≈implementing)". `draft` / `done` stay as-is |
|
|
46
|
+
|
|
47
|
+
## Handling of inferred (reverse-inference) — delegated, read-only
|
|
48
|
+
|
|
49
|
+
- This rule does **not** independently perform intent reverse-inference from code. No AST traversal, no static analysis, no external scanner (INV2 / R4.4).
|
|
50
|
+
- It **reads** the inferred intent that refactor-mode `algo-intent-recovery` left in the intent-tree (originating from `## Assumptions` / `## Open Questions`), marks it explicitly as inferred, and presents it separated from the canonical L0–L4 body (R4.1 / R4.3 / R2.4).
|
|
51
|
+
- **When reverse-inference has not been obtained** (refactor-mode discover not run, and no inferred in `## Assumptions`): state that absence explicitly and guide the user to run refactor-mode discover including `algo-intent-recovery`. Do not fill in by guessing (R4.2).
|
|
52
|
+
|
|
53
|
+
## Handling of missing / blank artifacts
|
|
54
|
+
|
|
55
|
+
- When an aggregation-target artifact is blank or partial, mark the relevant part explicitly as **"not filled in"**. Do not fill in by guessing (R2.5).
|
|
56
|
+
- When a source file itself is absent, state that absence explicitly and guide the user to the skill that should be run first (do not write).
|
|
57
|
+
|
|
58
|
+
## Output discipline
|
|
59
|
+
|
|
60
|
+
- Place canonical intent (tree L0–L4 / compass 4 sections / packets / plan / export-log / deltas) and inferred intent (from recovery) side by side, **kept distinct**.
|
|
61
|
+
- State that the generated view is **derived / re-generatable** and not the canonical source. Never write back to the canonical.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Gap Aggregation: Design Intent vs Implementation Reality
|
|
2
|
+
|
|
3
|
+
The source of truth by which the `intent-overview` skill assembles the "design intent vs implementation reality" gap section. SKILL.md holds only the procedure and report format; what to read, under which conditions, and how is governed by this file. This layer only **reads, never re-implements** the check axes of drift-watch / intent-validate, and holds no judgment logic of its own. All observation is limited to Read / Glob / Grep, and never modifies the canonical artifacts (mode.md / drift-log.md / validate-checks.md).
|
|
4
|
+
|
|
5
|
+
## Invariant discipline (read-only cross-cutting layer)
|
|
6
|
+
|
|
7
|
+
- This layer only **reads** the outputs and definitions of drift-watch / intent-validate; it does not run detection or checks itself (Out of Boundary).
|
|
8
|
+
- The `## Enforcement(ユーザー管理)` / `## Drift-watch(ユーザー管理)` sections of `mode.md` are **read-only** and never modified (same discipline as intent-status).
|
|
9
|
+
- Absent or not-observed blocks are not filled in by guessing; their state (not observed / not obtained) is stated explicitly and the block is omitted.
|
|
10
|
+
|
|
11
|
+
## Conditional read of drift-log (R5.1 / R5.4)
|
|
12
|
+
|
|
13
|
+
drift-log is read only when **both conditions hold simultaneously**.
|
|
14
|
+
|
|
15
|
+
1. The `## Drift-watch(ユーザー管理)` section of `mode.md` is `on`.
|
|
16
|
+
2. `.intent/drift-log.md` exists.
|
|
17
|
+
|
|
18
|
+
Only when both conditions hold, read drift-log with Read / Grep, aggregate the detection entries, and present them in the gap section. If any of the cases applies — `off` / unset / drift-log absent — **omit** the gap-aggregation block and state its status explicitly as "not observed (drift-watch is off, or no drift-log)". The default for drift-watch is `off`; not-observed is treated not as a defect but as the initial state.
|
|
19
|
+
|
|
20
|
+
### Fixed schema of drift-log (9 keys, fixed order)
|
|
21
|
+
|
|
22
|
+
Each entry holds the following 9 keys as a fixed-order Markdown list (matching the drift-log.md source of truth). This layer only reads on the premise of this key set and order, and does not alter the format.
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
pattern → stage → packet → mechanism → outcome → user-verdict → recorded_at → commit → note
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `packet` is the **3rd** canonical key (after `stage`, before `mechanism`).
|
|
29
|
+
- Aggregation is performed from the two columns `outcome` and `user-verdict`.
|
|
30
|
+
- `outcome`: one of the 5 values `prevented` / `caught` / `missed` / `false-positive` / `not-applicable`.
|
|
31
|
+
- `user-verdict`: one of the 3 values `valid` / `false-alarm` / `unjudged`.
|
|
32
|
+
- The presentation is at minimum a `pattern × outcome` cross-tabulation (matching the operating notes of drift-log.md), with `user-verdict` (the user's confirmation) shown alongside. `outcome` is the draft made by drift-watch and `user-verdict` is the user's confirmation; the two are not conflated in presentation.
|
|
33
|
+
|
|
34
|
+
### How to read missed=0 (avoiding confirmation bias)
|
|
35
|
+
|
|
36
|
+
Do not assert `missed=0` (zero records of "got through without being prevented") as "evidence it worked". Present it as a **"suspected recording gap"** (following the precedent of intent-status and the opening note of drift-log.md). Having only the moments it worked (`prevented` / `caught`) remain is confirmation bias; read on the premise that the moments it did not work (`missed` / `false-positive` / `not-applicable`) are recorded just as evenly.
|
|
37
|
+
|
|
38
|
+
## Mapping of intent-validate check axes (R5.2 / R5.3)
|
|
39
|
+
|
|
40
|
+
intent-validate is a read-only skill with `allowed-tools: Read, Glob, Grep` and **writes no check results to a persistent file**. Therefore this layer does not read a "validate result file"; instead it reads the **check-axis ID catalog** in `intent-validate/rules/validate-checks.md`, and organizes the overview's gap observations within that ID system.
|
|
41
|
+
|
|
42
|
+
- Reference: the check catalog table of `intent-validate/rules/validate-checks.md` (the `ID` column = stable kebab-case IDs, the `深刻度の目安` (severity) column = severity classification). Additions and changes to checks are governed by that table; this layer cites the ID column as-is (does not re-derive).
|
|
43
|
+
- Severity classification uses the 3 classes of `validate-checks.md` (`要修正` / `推奨` / `情報`) as-is.
|
|
44
|
+
- The dependency-soundness check axes `dependency-cycle` (a cycle A→…→A in `depends_on`) and `dependency-broken-ref` (a reference to a non-existent packet_id) actually exist in this catalog, and both are `要修正`-grade. When a cycle or unresolved dependency is observed in the dependency/block view (progress-readout), present it tied to the corresponding stable ID.
|
|
45
|
+
- The check logic itself is **not re-implemented** (R5.2). This layer borrows the vessel that is the ID system and merely distributes the gap observations seen in the overview into that vessel.
|
|
46
|
+
- Where check results are referenceable, present them tied to a stable kebab-case ID. Where not referenceable (validate not run, or results not left in an artifact), **omit** the tie to an ID and state the absence explicitly (absorbing R5.3's "where referenceable"-conditional requirement by omission when not referenceable).
|
|
47
|
+
|
|
48
|
+
## Composition of the output block
|
|
49
|
+
|
|
50
|
+
The gap section is composed of the following elements (omit elements that have no material and state the reason).
|
|
51
|
+
|
|
52
|
+
1. **drift aggregation** (only when both conditions hold): a `pattern × outcome` cross-tabulation with `user-verdict` alongside. `missed=0` is annotated as a "suspected recording gap".
|
|
53
|
+
2. **Check-axis mapping**: organize the gap observations seen in the overview within the stable kebab-case ID system of `validate-checks.md`. Tie referenceable ones to an ID; omit and state absence for those that are not.
|
|
54
|
+
3. **mode status**: show the current values of `## Enforcement` / `## Drift-watch` read-only alongside (never modified).
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Mermaid visualization rule for the intent-tree
|
|
2
|
+
|
|
3
|
+
Canonical reference for how the `intent-overview` skill renders the L0→L4 hierarchy of `intent-tree.md` as a diagram. SKILL.md holds only the procedure and report format; the Mermaid generation method, escaping conventions, and the text-alongside discipline defer to this rule. The output of this rule is confined to the derived views under `.intent/overview/`; it never writes to canonical sources (`.intent/*.md`, including `intent-tree.md`) — read-only. Judgment is limited to natural-language heuristics and reading existing artifacts; it does not depend on an AST, external scanners, or external renderers (INV2).
|
|
4
|
+
|
|
5
|
+
## Render target and pure-Mermaid principle (R3.1)
|
|
6
|
+
|
|
7
|
+
- The render target is the items under each of the `## L0:`–`## L4:` headings in `intent-tree.md`. Output a tree — L0 at the top (apex), L4 (packet candidates = P) at the bottom (leaves) — as pure, self-authored Mermaid `graph` text.
|
|
8
|
+
- The default direction is `graph TD` (Top-Down), because a top-to-bottom hierarchy reads most clearly.
|
|
9
|
+
- The output is only Mermaid syntax wrapped in a ` ```mermaid ` … ` ``` ` code fence. Do not use external plugins, custom notations, image generation, theme extensions, or external renderers (INV2 = zero dependencies; diagram correctness is not made to depend on a renderer implementation — it is guaranteed by the text written alongside).
|
|
10
|
+
- Edges must **always** point "from the higher L level to the lower L level" (`L<n> --> L<n+1>`), connected with `-->`. Do not draw reverse (lower→higher) edges. In `graph TD`, rank (vertical position) is determined by edge direction, so a wrong direction makes L4 (P) float upward or L1/L2 sink downward — the layout breaks. **Always guarantee, via edge direction, that L0 is the top rank and L4 is the bottom rank.**
|
|
11
|
+
|
|
12
|
+
## Preventing rank breakage (do not create orphan nodes) (R3.1)
|
|
13
|
+
|
|
14
|
+
In `graph TD`, a node with zero incoming edges (an orphan) becomes a ranking root and **floats to the top rank**. The result is breakage like "L1/L2 mixed below while P (L4) ends up on top." To prevent this, **every node except L0 must carry at least one parent edge and must not be left orphaned**.
|
|
15
|
+
|
|
16
|
+
- **Item whose parent is unambiguous**: connect from the matching parent node at the immediately higher level with `parent --> child`.
|
|
17
|
+
- **Item whose parent is not unambiguous (do not connect to a specific parent by guessing)**: do not orphan it — connect it to an **anchor for the entire immediately-higher level**. Specifically, for each level `L<n>` (n≥1), when the items at the higher level `L<n-1>` are multiple and the parent cannot be uniquely determined, define one **level-anchor node** `L<n-1>_anchor` (e.g. label `["L<n-1> (multiple parent candidates)"]`) that gathers the `L<n-1>` items, connect each real `L<n-1>` node to `L<n-1>_anchor`, and then `L<n-1>_anchor --> child`. This places a child with an ambiguous parent correctly below `L<n-1>` in vertical rank so it does not float up. Note in the text hierarchy that an anchor was used (i.e., the parent was not unique), while preserving the rule of not asserting a specific parent by guessing.
|
|
18
|
+
- **Item that cannot have a parent because the higher level is empty** (e.g. L2 exists but L1 is blank): do not orphan it — connect it directly to the **nearest existing higher level** (L0 in this example) and note in the text hierarchy that an intervening level is blank. Even with an empty intermediate level, the lower level must not float up.
|
|
19
|
+
- In every case, **edge direction is always higher→lower**, preserving the vertical order with L0 at the top rank and L4 (P) at the bottom rank.
|
|
20
|
+
|
|
21
|
+
## Node-ID convention (collision avoidance)
|
|
22
|
+
|
|
23
|
+
A node ID is the identifier the renderer interprets, kept separate from the label (the displayed string). IDs are derived mechanically and stably and are not generated from the label text.
|
|
24
|
+
|
|
25
|
+
- **Allowed characters**: ASCII alphanumerics and the underscore `_` only. The first character must be a letter. Do not include non-ASCII text, symbols, or spaces in an ID.
|
|
26
|
+
- **Derivation rule**: derive the ID mechanically as `L<level number>_<0-based occurrence index within the same level>`. Examples: the sole L0 item is `L0_0`; the first L2 item is `L2_0`; the second L2 item is `L2_1`.
|
|
27
|
+
- **Collision avoidance**: because (level, within-level index) is unique, the ID is also unique. Since it does not depend on the label string, IDs never collide even when items share the same name, are empty, or contain special characters. When the same item has multiple parents (is shared), define the node only once under its first-occurrence ID, and thereafter reuse that ID to add edges only (do not redefine the node).
|
|
28
|
+
|
|
29
|
+
## Label convention (escaping / stripping special characters)
|
|
30
|
+
|
|
31
|
+
Labels are wrapped in the square-bracket-plus-double-quote form `ID["..."]`. The label body must not contain characters that break Mermaid syntax.
|
|
32
|
+
|
|
33
|
+
- **Forbidden characters**: the label body must not contain `(` `)` `[` `]` `"` `/`. Strip these mechanically from the item text (delete the character and close up the surrounding text). Because stripping can change meaning, when a node has been stripped, note that in the text hierarchy described below (the text hierarchy preserves the original text and is never stripped).
|
|
34
|
+
- **Newlines and pipes**: collapse newlines into a single space within the label. Strip `|` (pipe) from the label.
|
|
35
|
+
- **Length**: for diagram readability, when a label exceeds roughly 40 characters, truncate to the first 40 characters and append `…` (even when truncated, the text hierarchy preserves the full text).
|
|
36
|
+
- For an item whose label body is empty (the item is blank), use `["(blank)"]`-free form, i.e. `["blank"]` (containing no forbidden characters), and state it as "blank" in the text hierarchy (do not fill in by guessing).
|
|
37
|
+
|
|
38
|
+
## Always write the text hierarchy alongside as canonical (R3.2)
|
|
39
|
+
|
|
40
|
+
- **Always** write the corresponding text hierarchy (an indented bullet list) immediately after the Mermaid diagram. This keeps read-through unblocked even in environments where the diagram fails to render; the text hierarchy is the basis for reading in the overview view (the source of truth within this view).
|
|
41
|
+
- The text hierarchy preserves the original text of `intent-tree.md`. Escaping, stripping, and truncation performed for labels are not applied to the text hierarchy; record it verbatim (when stripping or truncation was performed for a label, the corresponding text line may be annotated).
|
|
42
|
+
- State in the view that this block is derived and is regenerable from `intent-tree.md` as the source of truth (it updates on re-run, not by hand-editing).
|
|
43
|
+
|
|
44
|
+
## When the intent-tree is empty / not yet generated (R3.3)
|
|
45
|
+
|
|
46
|
+
- When `intent-tree.md` does not exist, or none of `## L0:`–`## L4:` contains any item (all levels blank), **do not output the Mermaid diagram**.
|
|
47
|
+
- State the reason for omitting the diagram explicitly ("nothing to visualize because the intent-tree is empty / not yet generated") and direct the user to the skill to run first (`/intent-discover`). Do not generate nodes by guessing.
|
|
48
|
+
- When only some levels are blank, do not omit the diagram; represent blank levels with a "blank" label plus an explicit note in the text hierarchy.
|
|
49
|
+
|
|
50
|
+
## Example (a small L0→L2 tree)
|
|
51
|
+
|
|
52
|
+
Suppose `intent-tree.md` reads as follows (one L0 item, one L1 item, two L2 items, where the second L2 item contains the forbidden characters `(` `)`):
|
|
53
|
+
|
|
54
|
+
- L0: Make scattered intent readable in one pass
|
|
55
|
+
- L1: Keep the conversation going while holding the whole picture
|
|
56
|
+
- L2: Aggregate intent documents / L2: Mermaid visualization (diagram and table)
|
|
57
|
+
|
|
58
|
+
The Mermaid block produced is (L0 is the apex; every edge points higher→lower; both L2 items connect under L1 so nothing is orphaned):
|
|
59
|
+
|
|
60
|
+
```mermaid
|
|
61
|
+
graph TD
|
|
62
|
+
L0_0["Make scattered intent readable in one pass"]
|
|
63
|
+
L1_0["Keep the conversation going while holding the whole picture"]
|
|
64
|
+
L2_0["Aggregate intent documents"]
|
|
65
|
+
L2_1["Mermaid visualization diagram and table"]
|
|
66
|
+
L0_0 --> L1_0
|
|
67
|
+
L1_0 --> L2_0
|
|
68
|
+
L1_0 --> L2_1
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The text hierarchy written alongside (canonical; preserves the original text, label stripping not applied):
|
|
72
|
+
|
|
73
|
+
- L0: Make scattered intent readable in one pass
|
|
74
|
+
- L1: Keep the conversation going while holding the whole picture
|
|
75
|
+
- L2: Aggregate intent documents
|
|
76
|
+
- L2: Mermaid visualization (diagram and table) ← `()` stripped in the diagram label
|
|
77
|
+
|
|
78
|
+
> This block is derived. The source of truth is `intent-tree.md`, and it is regenerated by re-running `/intent-overview`. Do not edit it by hand.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Multi-axis progress readout and concern-separated views
|
|
2
|
+
|
|
3
|
+
The canonical source the `intent-overview` skill uses to mirror packet progress on three axes instead of a single %, to derive block state read-only from `depends_on`, and to organize concern-separated derived views. This rule is **read-only**: it does **not compute, score, or infer** progress axes or dependencies. The canonical source of progress, dependency, and evidence is the packet (frontmatter + `## Evidence` section) that `intent-planner-packet-progress` maintains, and overview only **mirrors** it. Checks that require computation (dependency health, validate axes) are the responsibility of intent-validate / drift-watch / algo-intent-recovery; this rule only **reads their results**.
|
|
4
|
+
|
|
5
|
+
## Core principle (read-only mirror)
|
|
6
|
+
|
|
7
|
+
- The packet canonical source (the 10-key frontmatter of `active/*.md` + the body `## Evidence` section) is the **single source of truth** for progress, dependency, and evidence. Overview only regenerates derived views from it; it does not modify the canonical source and does not duplicate it.
|
|
8
|
+
- Do **not compress progress into a single overall %**. Present it split across three axes of differing natures.
|
|
9
|
+
- For each axis and each view, state the source explicitly ("which part of which existing artifact was read"). Show that it is based on reading files, not on AI self-report.
|
|
10
|
+
- For any axis or view with no corresponding artifact, state "not observed / not filled in / no dependencies" explicitly and **never fill the gap by guessing**.
|
|
11
|
+
|
|
12
|
+
## Progress rail (read-only mirror)
|
|
13
|
+
|
|
14
|
+
**Before** the three progress axes (the qualitative breakdown), lay out all packets as a single vertical rail so the reader can see at a glance "which stage each packet is in." The rail is not an overall indicator that compresses the three axes; it is the **bird's-eye view that sits in front of** the three axes (grasp the overall position from the rail, then read each packet's breakdown via the three axes — a complementary relationship). The rail is also a read-only mirror: it does **not compute, infer, or score** state. It reads existing artifacts (packet frontmatter `state` / `superseded_by`, `export-log.md`, `deltas.md`) and only **mechanically determines and mirrors** which of the five signals below applies.
|
|
15
|
+
|
|
16
|
+
### The five signals and their determination (all mechanically observable from `.intent/`)
|
|
17
|
+
|
|
18
|
+
Cross-check each packet by `state` × whether export-log has a row × whether deltas has a corresponding entry, and assign exactly one signal — **evaluating top-down and taking the first that matches** (first-match).
|
|
19
|
+
|
|
20
|
+
| Signal | Meaning | Determination | Source |
|
|
21
|
+
|--------|---------|---------------|--------|
|
|
22
|
+
| ◻ merged | merged into a successor packet and done with its role | `superseded_by` is non-empty | packet frontmatter |
|
|
23
|
+
| ✅ reflected | implementation complete and written back into intent | `state: done` **and** deltas has a promoted/closed entry for this packet | packet + deltas.md |
|
|
24
|
+
| 🔵 you are here | the one stage currently being worked on (exported, not yet reflected) | of the rows with an export-log row and no corresponding deltas entry, the one that **matches the current Source Packet (the latest export-log row)** | latest export-log row + deltas.md |
|
|
25
|
+
| 🔴 unreflected | evidence of implementation exists but not yet reflected into intent (a leftover) | of the rows with an export-log row and no corresponding deltas entry, those other than the current Source Packet | export-log + deltas.md |
|
|
26
|
+
| ⚪ not started | not yet exported to cc-sdd | export-log has no row for this packet (active but not exported) | export-log + packets/active |
|
|
27
|
+
|
|
28
|
+
- **Both 🔵 and 🔴 are "exported, not yet reflected."** The only difference is whether it is "the one currently being worked on (latest row = 🔵)" or "a leftover from the past (anything else = 🔴)". This visually separates the one stage in progress from the N items buried by writeback omission. 🔴 does not add a new separate warning block; it **surfaces as a mismatch on the rail (implementation advanced but reflection lags)**. This is a concretization of "Present axis mismatches as-is" below, not the addition of a new check.
|
|
29
|
+
|
|
30
|
+
### Annotate each row with `[current stage → next stage(s) to pass through]` (pipeline projection)
|
|
31
|
+
|
|
32
|
+
The five signals mirror the **reflection progress** (whether it has been exported / whether it has been written back), but that alone does not let the reader see "**which stage of intent-building → implementation → writeback this packet is currently in, and which stages remain after this**". So, following the signal, **annotate each packet row with `[current stage → next stage(s) to pass through]`**. This is not a new observation or computation; it merely **re-reads** the packet frontmatter `state` (the declared value already read on axis 2 of "the three progress axes") **as a position on the fixed pipeline below, and mirrors it** (preserving the read-only mirror discipline of no inference / no scoring).
|
|
33
|
+
|
|
34
|
+
- **Fixed pipeline (the forward order of stages)**: `discover → compass → packets → export → implement (cc-sdd) → verify → writeback`. This is the same ordering as intent-planner's standard flow (the command order in footnote 5 of status's decision table `decision-table.md`), and is taken as the reference for stage ordering. Read the correspondence between each command stage and packet `state` as follows.
|
|
35
|
+
- `state: draft` = being drafted → **next stages: compass → packets** (the stage that works out the intent and decision criteria)
|
|
36
|
+
- `state: ready` = ready to start (dependencies resolved, awaiting implementation) → **next stages: export → implement**
|
|
37
|
+
- `state: implementing` = under implementation → **next stages: verify → writeback**
|
|
38
|
+
- `state: verifying` = implemented, awaiting verification (Evidence not yet confirmed) → **next stage: writeback** (after Evidence is confirmed)
|
|
39
|
+
- `state: done` = complete → **next stage: none (this lane is complete)**
|
|
40
|
+
- **Write the "current stage" as a composite of the five signals and `state`.** Examples: when the signal is 🔵 you are here with `state: implementing`, write `🔵 you are here [implementing → next: verify→writeback]`; ⚪ not started with `state: ready`, write `⚪ not started [ready → next: export→implement]`; ⚪ not started with `state: draft`, write `⚪ not started [draft → next: compass→packets]`. This makes "which P is being worked on, and which stages remain after this" readable on one line.
|
|
41
|
+
- **The next stage is a projection from the pipeline definition, not an inference.** It merely **maps `state` onto the next fixed stage and mirrors it**; it does not predict duration, difficulty, or success/failure. For a packet blocked because `depends_on` has an undone dependency, annotate `(blocked, waiting on <packet_id>)` before the next-stage note (block determination follows the read-only derivation of the "Dependency-block view"; do not infer or compute).
|
|
42
|
+
- **Backward compatibility**: read the legacy 3-value `state: active` as equivalent to `implementing`, i.e. `[active(=implementing) → next: verify→writeback]`. For a packet whose `state` itself cannot be observed, do not assert the stage annotation; state `[stage: not observed]` explicitly (do not fill by guessing).
|
|
43
|
+
- **Do not invent a new matching rule for the deltas correspondence.** Reuse the existing canonical discipline ("current Source Packet = latest export-log row," "text matching by packet name," "the mechanical determination of whether a corresponding delta exists is valid only for the first cycle") from aggregate-sources / the deltas.md operating notes as-is. For the second cycle onward (after re-export / re-implementation), do not determine reflection need mechanically; state "user judgment" explicitly.
|
|
44
|
+
- **Bird's-eye view of remaining work**: the ⚪ rows directly represent "the remaining work to start next," and each row's `[current stage → next stage(s) to pass through]` annotation makes "which stages that packet will pass through next" visible at a glance as well. The rail's purpose is to show remaining work and unreflected items at a glance on a single sheet; a packet blocked by a dependency may be annotated on its rail row following the "Dependency-block view" derivation below (do not infer or compute dependencies).
|
|
45
|
+
- **Backward compatibility**: treat legacy 3-value `state: active` as "in progress" and determine 🔵/🔴/⚪ by whether export-log has a row. Absent `superseded_by` = "not merged." Absent deltas = "not reflected." For a packet where `state` itself cannot be observed, do not assert a signal; state "not observed" (do not fill by guessing).
|
|
46
|
+
- **Declare derived**: the rail is also derived / regenerable and is not the source of truth. The source of truth is the packet frontmatter, export-log, and deltas; the rail is a snapshot at read time.
|
|
47
|
+
|
|
48
|
+
## The three progress axes (not a single %)
|
|
49
|
+
|
|
50
|
+
Present progress split across the following three axes. Each axis is **derived** from reading existing artifacts (not computed, not scored). Always annotate each axis with its source (where in which artifact it was derived from).
|
|
51
|
+
|
|
52
|
+
### Axis 1: Intent stability
|
|
53
|
+
|
|
54
|
+
An axis that qualitatively mirrors "how settled the upstream intent is".
|
|
55
|
+
|
|
56
|
+
- **Source**: `intent-tree.md` (unfilled spots in L0–L4, `## Open Questions`, `## Assumptions`), `intent-compass.md` (unfilled North Star / Anti-direction / Invariants / Decision Rules).
|
|
57
|
+
- **How to read**: Show, **qualitatively**, the unfilled L levels and empty headings, the count of remaining items under `## Open Questions`, and the ratio of `## Assumptions` (inferred = derived by inference) to the canonical settled descriptions. Do not turn the ratio into a strict numeric score (read-only mirror discipline; no quantitative scoring).
|
|
58
|
+
- Keep inferred (originating from `## Assumptions` / `## Open Questions`) and canonical (the settled descriptions in L0–L4) **unmixed**, preserving the distinction even in the stability assessment.
|
|
59
|
+
- If the source material (tree/compass) is absent, state "not observed" explicitly.
|
|
60
|
+
|
|
61
|
+
### Axis 2: Realization completeness
|
|
62
|
+
|
|
63
|
+
An axis that mirrors "how far it has been built (the current position of development)".
|
|
64
|
+
|
|
65
|
+
- **Source**: the `state` in packet frontmatter.
|
|
66
|
+
- **Value set (5 values)**: `draft | ready | implementing | verifying | done`. The values are mutually exclusive; a packet takes exactly one stage.
|
|
67
|
+
- `draft` = being drafted / unsettled; `ready` = ready to start (dependencies resolved, awaiting implementation); `implementing` = under implementation; `verifying` = implemented, awaiting verification (Evidence not yet confirmed); `done` = evidence obtained, complete.
|
|
68
|
+
- **Backward compatibility**: For packets that still carry the legacy 3 values (`draft | active | done`), read `active` as "in progress (equivalent to `implementing`)". For an existing packet where the `state` key itself cannot be observed, set "realization completeness: not observed" and do not fill by guessing.
|
|
69
|
+
- `state` is a **declarative record**; overview does not judge or advance transitions (it holds no state machine). Mirror the read value as-is.
|
|
70
|
+
|
|
71
|
+
### Axis 3: Evidence certainty
|
|
72
|
+
|
|
73
|
+
An axis that mirrors "how strongly the implementation result is backed by verification".
|
|
74
|
+
|
|
75
|
+
- **Source**: the presence and certainty of the body `## Evidence` section, the `intent-validate` check axes (the stable kebab-case IDs in `validate-checks.md`), and the cross-check against `drift-log.md` (when drift-watch is `on` and it exists).
|
|
76
|
+
- **How to read**: Read whether `## Evidence` holds confirmed verification results (date performed, the corresponding check axis ID, the source = intent-validate / drift-watch / human confirmation). Organize the check axis IDs that each Evidence entry references against the ID system of `validate-checks.md`.
|
|
77
|
+
- **Reading the check axes**: Because intent-validate does not write its results to a persistent file, read the **check axis ID catalog** in `validate-checks.md` (the stable kebab-case IDs and their severity classification) and organize the evidence perspective using that ID system. Do **not reimplement** the check logic.
|
|
78
|
+
- **Backward compatibility**: For an existing packet with no `## Evidence` section, draw "evidence certainty: not filled in", and do not fill the gap by guessing.
|
|
79
|
+
- When evidence cannot be read because validate has not run, Evidence is absent, or drift-log is absent, state "not observed" explicitly.
|
|
80
|
+
|
|
81
|
+
## Present axis mismatches as-is, without flattening
|
|
82
|
+
|
|
83
|
+
Because the three axes differ in nature, their per-axis values can diverge. **Do not flatten that divergence into a single indicator; surface it as a mismatch.** Annotate the sources so it can be traced to the difference between which artifacts gave rise to the mismatch.
|
|
84
|
+
|
|
85
|
+
- Example: "`verifying` but Evidence not yet confirmed" — realization completeness (axis 2) has advanced but evidence certainty (axis 3) is not yet confirmed.
|
|
86
|
+
- Example: "`done` but a trace hole vs an upper invariant" — evidence certainty (axis 3) is in place but there is a gap vs intent stability (axis 1).
|
|
87
|
+
|
|
88
|
+
By specification, the `verifying` stage represents the state "realization advanced but evidence not yet confirmed". Therefore, for a `verifying` packet, overview **mirrors the gap as-is** between realization completeness (axis 2) and evidence certainty (axis 3) (it does not round one to match the other).
|
|
89
|
+
|
|
90
|
+
## Dependency-block view (read-only derivation)
|
|
91
|
+
|
|
92
|
+
Present inter-packet dependency and block state **by reading the declaration only**.
|
|
93
|
+
|
|
94
|
+
- **Source**: the `depends_on` in packet frontmatter (a set of the `packet_id`s of dependency packets; default `[]`).
|
|
95
|
+
- **Block derivation (read-only)**: Display a packet as **BLOCKED** when "there is a packet in `depends_on` whose `state` is not `done`". Do **not infer or compute** dependencies. Derive it solely by reading the declared `depends_on`, and do not write it back to the packet (consistent with packet-progress R3.3 / R3.5).
|
|
96
|
+
- **Stating cycles / unresolved dependencies**: If there is a cycle (A→…→A) or a broken dependency referencing a nonexistent `packet_id`, state it explicitly.
|
|
97
|
+
- If the intent-validate `dependency-cycle` / `dependency-broken-ref` check results are available, present it tied to them (do not reimplement the check logic).
|
|
98
|
+
- Only when the check results are unavailable, a naive read-time detection (a simple traversal of the declared `depends_on` set) may be noted at **caveat level**. State clearly that this is a read-time aid, not a substitute for the check.
|
|
99
|
+
- **Backward compatibility**: For an existing packet with no `depends_on` key, draw "no dependencies (equivalent to the empty set)", and do not fill dependencies by guessing.
|
|
100
|
+
|
|
101
|
+
## Concern-separated derived views (view-based presentation)
|
|
102
|
+
|
|
103
|
+
Do not mix the whole picture into a single long document; organize it into concern-separated derived views. At minimum, compose the following three views.
|
|
104
|
+
|
|
105
|
+
- **Intent view**: derived from aggregate-sources (the aggregation of tree / compass / packets / plan / export-log / deltas). Present canonical and inferred kept distinct.
|
|
106
|
+
- **Dependency-block view**: the "Dependency-block view" above. `depends_on` and the block state based on it, plus cycles / unresolved dependencies.
|
|
107
|
+
- **Progress view**: the "three progress axes" above. The three axes and the mismatches among them.
|
|
108
|
+
|
|
109
|
+
For each view, observe the following.
|
|
110
|
+
|
|
111
|
+
- **Regenerate from the single source of truth**: Regenerate each view from the canonical `.intent/*.md`, and do not duplicate the source of truth across views. Do not hold the same information redundantly in multiple views (each view is a projection of the canonical source).
|
|
112
|
+
- **Omit views with no source material**: If the source material for a derived view is absent, **omit that view and state the reason (not observed / not generated / no dependencies)**. Do not fill an empty view by guessing.
|
|
113
|
+
- **Declare derived**: For each view, declare that "this is derived / regenerable and is not the source of truth". The source of truth is the original `.intent/*.md`, and the view is a snapshot at read time.
|
|
114
|
+
|
|
115
|
+
## Backward-compatibility summary
|
|
116
|
+
|
|
117
|
+
- `depends_on` absent → draw the dependency-block view as "no dependencies" (do not fill the gap by guessing).
|
|
118
|
+
- `## Evidence` absent → draw evidence certainty (axis 3) as "not filled in" (do not fill the gap by guessing).
|
|
119
|
+
- Legacy 3-value `state` (`active`) → read it as "in progress", equivalent to `implementing`. For a packet where `state` itself cannot be observed, set realization completeness to "not observed".
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: intent-packets
|
|
3
|
+
description: From the Intent Tree and Intent Compass, build the Packet Plan before handing off to cc-sdd. Each packet has a parent intent and is behavior-preserving / testable / rollbackable. Does not implement.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# intent-packets Skill
|
|
7
|
+
|
|
8
|
+
## Core Mission
|
|
9
|
+
- **Success Criteria**:
|
|
10
|
+
- There are as many packet candidates as the expected change size warrants (do not pad the count; one packet is fine for very small changes; treat 1–7 as a loose guide), and each packet references a parent intent
|
|
11
|
+
- Each packet is drafted as an individual file under `.intent/packets/active/` (1 packet = 1 file)
|
|
12
|
+
- Each packet has Scope / Non-scope / Expected Behavior / Decisions / Safety(Invariants) / Validation / Evidence / Rollback / cc-sdd Mapping (keep `Evidence` as an empty section when there is no result)
|
|
13
|
+
- In each packet's `## Decisions` section, the common-core slots from `decision-slots.md` (plus the mode-specific diffs) are each closed with one of the 4 statuses (answered / undetermined / not-applicable / ADR candidate) (do not fill in defaults; do not silently skip)
|
|
14
|
+
- Each packet is at a behavior-preserving / testable / rollbackable granularity
|
|
15
|
+
- No existing packet file has been destroyed (changes are presented as differential update proposals)
|
|
16
|
+
- No application code has been changed at all
|
|
17
|
+
|
|
18
|
+
## Execution Steps
|
|
19
|
+
|
|
20
|
+
### Step 1: Read the prerequisites
|
|
21
|
+
- Read `.intent/intent-tree.md` and `.intent/intent-compass.md`. If either is missing, guide the user to "run the corresponding command first" and stop.
|
|
22
|
+
- While reading, when you see an unsettled verb slipped into the settled phrasing of the compass / intent-tree (assume / reuse / planned / TBD / tentative, etc.), do not fix it by guessing; present it as a conversion proposal into Open Questions or an undetermined slot (with the reason and the revisit condition (Revisit when)). Promotion to a fixed value is left to the user's confirmation. Do not re-convert spots already recorded in Open Questions / Deferred / an undetermined slot.
|
|
23
|
+
- Read `.intent/mode.local.md` (falling back to `.intent/mode.md` if absent) for the mode state. If both are absent, default to standard and announce it in Open Questions (do not stop).
|
|
24
|
+
- Read `.intent/packets/index.md` and the existing packet files under `.intent/packets/active/` (the basis for differential updates).
|
|
25
|
+
- Legacy-install handling: if `.intent/packets/`, `plan.md`, `index.md`, or `README.md` is missing, the skill creates them itself before proceeding (do not wait for a scaffold reinstall).
|
|
26
|
+
- After-the-fact drafting (when implementation ran ahead): when the invocation context or the user's report makes clear that **implementation proceeded / completed without a corresponding Packet**, treat it with the same procedure as normal drafting (raise the Packet even after the fact; being already implemented is not a reason to skip drafting). In this case:
|
|
27
|
+
- Record the established facts (the wiring / behavior already implemented) as `what + constraints + oracle` in the packet file.
|
|
28
|
+
- For the **spec that cannot yet be fixed** (the trigger, threshold, judgment means, etc. — decisions not yet committed to, or placed provisionally), do not fill them by guessing; put them explicitly into the container as Open Questions and Deferred (`undecided (deferred, with a revisit condition)`, always with the revisit condition). "Not drafting a Packet because the spec cannot be fixed" is wrong — holding the unfixed as-is is exactly the Packet's role.
|
|
29
|
+
- Guide the order: **first raise the Packet with this skill (the drafting phase), then return the learnings gained from the implementation reality to canonical via a delta with `/intent-writeback` (the post-implementation phase)**. These two run in opposite directions; do not perform only writeback while skipping the Packet drafting (the phase boundary follows writeback-protocol.md §3).
|
|
30
|
+
|
|
31
|
+
### Step 2: Apply the mode definition's algorithm
|
|
32
|
+
- Open the mode definition that `.intent/mode.local.md` (falling back to `.intent/mode.md`) `definition` points to, and read and apply the algo rule (`rules/algo-*.md`) assigned to the Packet decomposition phase (standard → `rules/algo-example-mapping.md`; refactor → `rules/algo-migration-slicing.md`; behavior-unknown → `rules/algo-example-mapping.md` + `rules/algo-characterization-test.md`). The examples are not exhaustive; the mode definition's table is always authoritative.
|
|
33
|
+
|
|
34
|
+
### Step 3: Decompose into Packets
|
|
35
|
+
- Following Example Mapping, expand each L2/L3 capability into "rules, examples, questions, deferred".
|
|
36
|
+
- Derive Expected Behavior, Validation, and Rollback from the examples.
|
|
37
|
+
- Consolidate into as many packets as the expected change size warrants (do not target a count or pad it; one packet is fine for very small changes; treat 1–7 as a loose guide). Measure size qualitatively by "the number of concerns touched × the breadth of impact on existing boundaries"; do not bring in effort estimates or other numeric metrics. Always give each packet a parent intent (a reference to L0/L1/L2/L3).
|
|
38
|
+
- Draft each packet as an individual file at `.intent/packets/active/<packet_id>.md`. Read `rules/packet-format.md` and follow it for ID assignment, filling in the frontmatter keys, and the body section structure (including the `## Decisions` and `## Evidence` sections) — the canonical source is the single source of truth for the key set and value domains.
|
|
39
|
+
- Stamp `updated_at` (the writer's responsibility): after writing a packet file, record its update timestamp in the frontmatter `updated_at` (ISO 8601). On a new packet, set `updated_at` to the same timestamp as `created_at`; when you change the content of an existing packet, update `updated_at` to that moment. On a re-run that involves no content change, do not change `updated_at` (idempotent; do not stamp when nothing changed). Obtain the timestamp with the shell `date`, the same way as `created_at`. If you cannot obtain the date/time, do not write a guessed date — report that instead. Stamping is the writer's (this skill's) responsibility and is not given to the read-only verification layer (intent-validate).
|
|
40
|
+
- Read `rules/decision-slots.md` and seed the completeness-schema slots into each packet's `## Decisions` section (the canonical source for the slot definitions, value domains, and IDs is decision-slots.md; this section is its projection).
|
|
41
|
+
- Seed the common-core slots (the 8 IDs seeded in every mode) into every packet, and add the mode-specific diff slots according to `.intent/mode.local.md` (falling back to `.intent/mode.md`) mode (standard / refactor / behavior-unknown / feature-growth). The slot definitions are authoritative in the decision-slots.md table; do not hardcode them into the SKILL body.
|
|
42
|
+
- Close each slot with **exactly one** of the 4 statuses (answered / undetermined / not-applicable / send to ADR candidate) (structurally preventing "silently skipping"). Do not fill in a "reasonable default" or "recommended value" (anchoring avoidance). Do not infer or auto-fill a slot's applicability or value from the artifacts (a human declares them).
|
|
43
|
+
- Reflect the posture that discover recorded directly under tree L3 as "points that need a decision (④)" (even when no concrete value exists, treat the slot's existence as something to close).
|
|
44
|
+
- For slots already covered by existing artifacts, do not recreate them; reference their close target (e.g. `decision-fit-criterion` → `## Validation`, `decision-exception-flow` → `## Expected Behavior`, `decision-characterization` → `algo-characterization-test.md`). Do not write the value twice in `## Decisions`; declare that it "is closed in the existing section" (no duplicate definition).
|
|
45
|
+
- For an `undetermined` slot, also note the reason, the caveat for downstream, and the revisit condition (Revisit when). For a `not-applicable` slot, also note the rationale for non-applicability and do not silently drop it.
|
|
46
|
+
- Dosage triage (front-load / defer): sort each decision into "a human fixes it up front (visible rule)" or "delegate it to the agent and defer it (hidden / discretion)".
|
|
47
|
+
- A decision that meets any of the 5 front-loading criteria (irreversible / costly to change later; ripples across multiple modules or external users (external impact); makes acceptance tests or observation weak when left ambiguous (acceptance oracle); a security / regulatory floor; binds multiple packets) is **fixed up front**. An architecture-significant decision meeting two or more is sent to the compass's Decision Rules as an ADR candidate.
|
|
48
|
+
- A decision that can be localized inside the design rules and is reversible (cheap-to-reverse) and explorable is kept as `undetermined (deferred, with revisit condition)` and may be delegated to the agent's discretion zone (do not leave it neglected; always note the revisit condition).
|
|
49
|
+
- Front-loading is not limited to "finalizing the decision itself early"; prioritize **front-loading learning, risk discovery, and test-oracle formation** (do not force an early lock-in of the conclusion).
|
|
50
|
+
- Fill in `state` declaratively from the 5-value domain in `packet-format.md`. Do not finalize a progression stage (especially `verifying`/`done`) on the AI's self-report alone; base it on a human or a check gate (results from intent-validate / drift-watch). `state=done` presupposes finalized verification results in the `## Evidence` section.
|
|
51
|
+
- In `depends_on`, declaratively list the `packet_id`s of the packets this one depends on (default `[]`; never omit the key even when empty). Tools do not infer or compute dependencies.
|
|
52
|
+
- In the `## Evidence` section, record the verification result, the date, the check-axis ID (kebab-case ID from `validate-checks.md`), and the source (intent-validate / drift-watch / human confirmation). Evidence is based on check results or human confirmation, not the AI's self-report, and is recorded so the source is traceable. Keep it as an empty section when there is no result; never fill it in by guessing.
|
|
53
|
+
- Present an existing packet's `state: active` as a migration proposal to `implementing`, and a missing `depends_on`/`## Evidence` as a lazy-completion proposal (a differential addition of `depends_on: []`), riding on the existing differential-update-proposal discipline (no forced bulk migration; move only; never delete).
|
|
54
|
+
- If existing packet files exist, read them and present additions as differential update proposals rather than overwriting or destroying them.
|
|
55
|
+
- Reflect the Compass's **project-universal** invariants into each packet's Safety, and draft packet-specific invariants directly in the packet file's Safety / Invariants (do not write them into the compass).
|
|
56
|
+
- Read the constraints held in `.intent/intent-compass.md`'s `## Open Questions` as "packet-specific constraints (candidates)". For each candidate that matches this packet's work scope (Scope/Non-scope), ask the user in natural language to confirm it and wait for their answer, then transcribe it into that packet file's Safety / Invariants and remove the transcribed entry from the compass's `## Open Questions` (do not leave the hold duplicated). Candidates that match no packet remain held in the compass's `## Open Questions`.
|
|
57
|
+
|
|
58
|
+
### Step 4: Judge termination, then present priorities and splits
|
|
59
|
+
- Decomposition termination (composite stop condition): stop splitting once a packet satisfies all six conditions. (1) one packet maps to one primary concern; (2) the acceptance criteria reduce to observable inputs, conditions, and expected results; (3) the boundaries of the solution space (fixed / discretionary / forbidden) are explicit; (4) cheap-to-reverse (backing out is cheap); (5) the trace target is clear (you can follow the parent intent / spec_refs); (6) standalone completeness: a packet's own done is a coherent behavioral boundary that is not half-baked as seen by the user / caller (do not create a done for half-done behavior). (6) is an independent condition distinct from (4) — (4) is "the builder-side rollback safety (intermediate states can be backed out)", while (6) is "the caller-side semantic consistency of the completed form"; the observer differs (do not fold (6) into (4)). Before these hold it is too coarse; splitting further after they hold is over-decomposition.
|
|
60
|
+
- The verifiability floor is discriminative testability: "a test can be written (testability)" is not enough; there must be "an oracle that can reject a wrong implementation". A packet for which no such rejecting oracle can be found has immature acceptance criteria — rework its Validation / Expected Behavior into observable form.
|
|
61
|
+
- A packet whose acceptance criteria span multiple concerns or multiple quality-attribute trade-offs is judged "still too coarse"; propose splitting it along concern lines (move toward one packet = one concern).
|
|
62
|
+
- Do not decompose a work unit down to implementation steps (a full specification of the how). Keep it at `what + constraints + oracle` (what / boundary constraints / an oracle that rejects wrong implementations), and leave the inside of the rules to the agent's discretion.
|
|
63
|
+
- Maintain the existing granularity discipline (behavior-preserving / testable / rollbackable; the count is variable with the change size, with 1–7 as a loose guide, and do not pad the count), and use "one packet = one concern" and (6) standalone completeness explicitly in the termination judgment.
|
|
64
|
+
- Indicate the packets' priority.
|
|
65
|
+
- Read `rules/walking-skeleton.md` and apply it according to the rule's applicability conditions.
|
|
66
|
+
- Read `rules/first-packet.md` and apply it.
|
|
67
|
+
- Present split proposals for packets that are too large.
|
|
68
|
+
- For packets confirmed by the user, declaratively update `state` from draft to `ready` (ready to start; dependencies resolved) and regenerate `index.md` (see `rules/packet-format.md` for the value domain and the regeneration procedure). Progression to in-progress/awaiting-verification/done (`implementing`/`verifying`/`done`) is done by subsequent declarations based on a human or a check gate.
|
|
69
|
+
- Supersede: when a plan revision replaces an existing packet with a successor, fill in `superseded_by` on the old packet at the same time the successor packet is drafted, move it to `archive/<year>/`, and regenerate the index.
|
|
70
|
+
- **In-flight guard**: if the packet being replaced has been exported (has a row in `.intent/export-log.md`) and has no terminal-state (promoted / closed) delta, warn that implementation may be in progress and do not move it without user confirmation.
|
|
71
|
+
- Treat a rename request for an exported packet as a supersede, not a rename (the name-mutability rule in `rules/packet-format.md`).
|
|
72
|
+
- Do not make implementation changes.
|
|
73
|
+
|
|
74
|
+
## Output Description
|
|
75
|
+
|
|
76
|
+
**Reader**: the human developer carving out work units and handing them to the implementation flow.
|
|
77
|
+
**What this output makes them grasp first**: "**The packet to start with first is this (= the packet to export next). The next move is the exit that matches the case type.**" The packet list, priorities, and split proposals are the supporting detail.
|
|
78
|
+
|
|
79
|
+
Lead with the conclusion (the packet to start and the next command).
|
|
80
|
+
|
|
81
|
+
- **The packet to start with first (first, with reasons)**: the recommended packet = the packet to export next (the same one). Add why it is placed first.
|
|
82
|
+
- **Next move (one line, branched by case type)**: apply `rules/export-route.md` (the exit decision lane) read-only and present the exit chosen from the case type. Do not recommend cc-sdd unconditionally (no hardcoding):
|
|
83
|
+
- If the target format (the `format` line in `.intent/mode.local.md`) is set to a valid value, recommend that exit: `cc-sdd` → `/intent-export-cc-sdd` / `openspec` → `/intent-export-openspec` / `to-spec` → `/intent-to-spec`.
|
|
84
|
+
- If `format` is unspecified (absent / placeholder / out of range), infer the top candidate from mode (non-code / standard-family) and the prerequisite (presence of `.kiro/`) (non-code + no `.kiro/` → `/intent-to-spec` / standard + `.kiro/` present → `/intent-export-cc-sdd`).
|
|
85
|
+
- When it cannot be uniquely determined, do not collapse to a single exit — list candidates (the exit depends on the user's intent; the decision detail is owned by `rules/export-route.md`).
|
|
86
|
+
- **Details**: the packet files under `.intent/packets/active/` (new drafts and differential update proposals for existing ones; as many packets as the change size warrants, with 1–7 as a loose guide, each with a parent intent), updates to `.intent/packets/plan.md` and `.intent/packets/index.md`, packet priorities, and split proposals for packets that are too large.
|
|
87
|
+
|
|
88
|
+
## Safety & Fallback
|
|
89
|
+
- If there is no Intent Tree / Compass, stop and guide the user to the corresponding command.
|
|
90
|
+
- The absence of mode.md does not stop; continue with the standard default and announce it.
|
|
91
|
+
- Do not drop packets too far down into implementation tasks (above an Issue, before a spec).
|
|
92
|
+
- Do not delete packet files (move only).
|
|
93
|
+
- Shell command usage is limited to getting the date/time, directory creation (mkdir) and moves under `.intent/packets/` (the invariant of not changing application code stays).
|
|
94
|
+
- Do not change application code.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Algorithm: Additive Slicing
|
|
2
|
+
|
|
3
|
+
A technique for decomposing a new feature into "additive slices" that are added in an order that does not affect existing behavior. Used together with Example Mapping in the Packet decomposition phase of `feature-growth` mode. It composes the slices in three stages — establish the seam → additively stack the new feature → wire it into the existing system — deriving a path where each slice can be delivered independently while preserving the existing behavior. Where Migration Slicing takes a drift list (gaps to fix) as input, Additive Slicing takes the impact list and the new feature's intent — the inputs differ, so the two are not interchangeable.
|
|
4
|
+
|
|
5
|
+
## Procedure
|
|
6
|
+
|
|
7
|
+
Input = the new feature's intent (structured via GORE-lite and concretized via Example Mapping) and the impact list produced by Impact Analysis in discover (each item = boundary touched / existing contract depended on / kind of impact). A thin impact list turns the slices into guesswork — if it lacks the depth to design the seams, go back to discover.
|
|
8
|
+
|
|
9
|
+
1. **Cut the slice that establishes the seam**
|
|
10
|
+
- From the impact list's "extend / requires change" items, identify the junction points where the new feature meets the existing system, and put first a **behavior-preserving slice that creates the junction with the minimal change to the existing code**.
|
|
11
|
+
- Reference the established tactics: the interface insertion of **Branch by Abstraction** (Fowler / Hammant), the expand stage of **Parallel Change (expand-contract)** (Danilo Sato), and the **seam concept** (Feathers, Working Effectively with Legacy Code). All are moves for "creating a point where a new implementation can be plugged in without changing existing behavior".
|
|
12
|
+
- When the seam-establishing slice completes, the existing observable behavior must be unchanged.
|
|
13
|
+
|
|
14
|
+
2. **Stack the new feature additively**
|
|
15
|
+
- Beyond the seam, stack the new feature as a **set of slices consisting only of new code that does not touch existing code**. The slices in this stage are unreachable from the existing system before wiring, so they can be stacked while keeping the impact on existing behavior at zero.
|
|
16
|
+
- The examples concretized by Example Mapping flow into each slice's Expected Behavior.
|
|
17
|
+
|
|
18
|
+
3. **Wire it in and activate**
|
|
19
|
+
- Finally, place the **wiring slice that activates the new feature via the seam**. The wiring must be revertible to disabled on its own (each packet's Toggle Plan makes this concrete).
|
|
20
|
+
|
|
21
|
+
4. **Explore and split candidates with SPIDR**
|
|
22
|
+
- For exploring slice candidates and splitting slices that are too large, use **SPIDR** (Mike Cohn: the five cuts of Spike / Paths / Interfaces / Data / Rules) as an auxiliary heuristic.
|
|
23
|
+
- Rough affinity with the stages: seam stage = Interfaces, additive stage = Paths / Rules, wiring stage = Data / Rules.
|
|
24
|
+
|
|
25
|
+
5. **Attach a verification point, rollback, and toggle plan to each slice**
|
|
26
|
+
- Attach a regression verification point for existing behavior, so that behavior preservation is observable → **Validation**.
|
|
27
|
+
- How to revert on failure (each slice must be reversible on its own) → **Rollback**.
|
|
28
|
+
- Which scope is off-by-default / under what condition the toggle gets removed → **Toggle Plan**.
|
|
29
|
+
|
|
30
|
+
6. **Confirm the termination of the impact list**
|
|
31
|
+
- Confirm that every item in the impact list terminates as one of — "protected by the Safety / Invariants of some slice" or "sent to Open Questions". Leave no item that is neither.
|
|
32
|
+
|
|
33
|
+
## Assembling the packet
|
|
34
|
+
|
|
35
|
+
Consolidate the three-stage ordered additive slices into packets. Each packet satisfies the following.
|
|
36
|
+
|
|
37
|
+
- **Parent Intent**: a reference to the corresponding L1/L2/L3 (required). If it protects an impact-list item, also indicate the original item.
|
|
38
|
+
- **Scope / Non-scope**: the addition this slice includes / does not include.
|
|
39
|
+
- **Expected Behavior**: derived from the "examples" of Example Mapping. For the seam and wiring slices, also note "the existing behavior preserved".
|
|
40
|
+
- **Safety / Invariants**: invariants that must not be broken during the transition. State explicitly which impact-list items it protects (derived from the Compass invariants).
|
|
41
|
+
- **Validation / Rollback**: derived from the above.
|
|
42
|
+
- **Toggle Plan**: which scope is off-by-default / under what condition the toggle gets removed (Hodgson's Release Toggles). Estimating the toggle's implementation difficulty is outside the planning scope — write up to the plan for its existence and lifetime.
|
|
43
|
+
- **cc-sdd Mapping**: the policy for how to hand off to cc-sdd.
|
|
44
|
+
|
|
45
|
+
## Discipline
|
|
46
|
+
|
|
47
|
+
- Each slice must be **behavior-preserving / testable / rollbackable**.
|
|
48
|
+
- **Impact-list traceability**: every item in the input impact list must terminate as one of — protected by the Safety / Invariants of some slice, or sent to Open Questions. Never silently drop an item.
|
|
49
|
+
- **Keep the stage order**: establish the seam → add → wire. Do not embed directly into existing modules without creating a seam.
|
|
50
|
+
- Keep the count variable with the expected change size; do not pad it (one is fine for very small changes; treat 1–7 as a loose guide). For slices that are too large, present split proposals along the SPIDR cuts.
|
|
51
|
+
- This is the structuring of intent (a packet-decomposition technique), not addition execution code. Do not change code.
|
|
52
|
+
|
|
53
|
+
## Output
|
|
54
|
+
|
|
55
|
+
An ordered set of additive slices (establish the seam → add → wire). Each slice has the structure above, and its Scope / Validation / Rollback / Toggle Plan flow into each packet. Update (present as a proposal) the packet files (under `active/`).
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Algorithm: Characterization Test
|
|
2
|
+
|
|
3
|
+
A technique for capturing the "observable behavior" of unknown legacy as test points that pin it down exactly as it is now. Used together with Example Mapping in the Packet decomposition phase of `behavior-unknown` mode. **For a target with unknown behavior, run this technique first** and hand the observed facts to Example Mapping (you cannot write "examples" for behavior you do not know, so observation comes first). Before structuring intent, it fixes "how it behaves now" as a safety net and derives the packet's Expected Behavior and Validation from observed facts.
|
|
4
|
+
|
|
5
|
+
## Procedure
|
|
6
|
+
|
|
7
|
+
Input = the target whose behavior is unknown (legacy code / existing behavior). It does not depend on Example Mapping's output (rather, this technique's observation becomes Example Mapping's input).
|
|
8
|
+
|
|
9
|
+
1. **Observe the current behavior and pin it down without judging**
|
|
10
|
+
- Observe the target's current inputs/outputs and side effects, and write them down as characterization test points (tests that pin the current behavior exactly as it is) without judging "whether it is correct".
|
|
11
|
+
- This is the planning of test points, not actual test code implementation.
|
|
12
|
+
|
|
13
|
+
2. **Sort the pinned behavior into intentional / accidental and hand it to Example Mapping**
|
|
14
|
+
- For each pinned behavior, sort which are intentional and which are accidental. The intentional observed facts become the material that the subsequent Example Mapping organizes into "rules / examples".
|
|
15
|
+
- Send the accidental ones (side effects / dependencies that cannot be separated from intent) to **Open Questions**; do not promote them to intent by guessing.
|
|
16
|
+
|
|
17
|
+
3. **Make the characterization tests the starting point of Validation**
|
|
18
|
+
- Use the sorted behavior points as the starting point of each packet's **Validation**, so they can be used for regression detection during refactoring.
|
|
19
|
+
- How to revert on failure → **Rollback**.
|
|
20
|
+
|
|
21
|
+
## Assembling the packet
|
|
22
|
+
|
|
23
|
+
Consolidate the pinned behavior points into packets. Each packet satisfies the following.
|
|
24
|
+
|
|
25
|
+
- **Parent Intent**: a reference to the corresponding L1/L2/L3 (required). If it stems from an observation, also indicate the original behavior.
|
|
26
|
+
- **Scope / Non-scope**: the behavior included / not included.
|
|
27
|
+
- **Expected Behavior**: derived from the current observed behavior pinned above.
|
|
28
|
+
- **Safety / Invariants**: among the pinned behaviors, the invariants that must not be broken.
|
|
29
|
+
- **Validation / Rollback**: derived from the above.
|
|
30
|
+
- **cc-sdd Mapping**: the policy for how to hand off to cc-sdd.
|
|
31
|
+
|
|
32
|
+
## Discipline
|
|
33
|
+
|
|
34
|
+
- **Observation, not judgment**: pin the current behavior as fact exactly as it is, and do not delve into judging correctness or into causes.
|
|
35
|
+
- For anything where you cannot judge whether it is intentional or accidental, do not fill it with guesses; send it to **Open Questions**.
|
|
36
|
+
- This is the structuring of intent (a technique that pins down intent by observing behavior), not actual test code implementation. Do not change code.
|
|
37
|
+
|
|
38
|
+
## Output
|
|
39
|
+
|
|
40
|
+
A set of test points that pin the current behavior (with the intentional / accidental sorting). The Expected Behavior / Validation of each point flows into each packet. Update (present as a proposal) the packet files (under `active/`).
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Algorithm: Example Mapping
|
|
2
|
+
|
|
3
|
+
A technique for grounding abstract capabilities into observable concrete examples. Used in the Packet decomposition phase of the `standard` and `behavior-unknown` modes. It expands a capability into "rules, examples, questions, deferred" and derives the packet's Expected Behavior and Validation. In behavior-unknown mode, the observed facts pinned by the preceding Characterization Test become the input for the "examples" (observe first, organize after).
|
|
4
|
+
|
|
5
|
+
## Procedure
|
|
6
|
+
|
|
7
|
+
For each L2/L3 capability, expand it as if writing four-color cards.
|
|
8
|
+
|
|
9
|
+
1. **Rules (the rules the capability follows)**
|
|
10
|
+
- Bullet the rules/constraints the capability must satisfy.
|
|
11
|
+
|
|
12
|
+
2. **Examples (observable concrete scenarios)**
|
|
13
|
+
- For each rule, give concrete examples of "when this happens, behave like this".
|
|
14
|
+
- These become the packet's **Expected Behavior** (the behavior observable after completion).
|
|
15
|
+
|
|
16
|
+
3. **Questions (undetermined)**
|
|
17
|
+
- Anything that cannot be filled in when trying to write an example, or that requires a decision, leave it as a "question".
|
|
18
|
+
- This becomes the packet's **Open Questions**, or is sent back to the Compass.
|
|
19
|
+
|
|
20
|
+
4. **Deferred (what you decided not to do this time)**
|
|
21
|
+
- Anything judged mid-expansion as "this rule/example is excluded from this packet" must not be silently dropped — record it explicitly as **deferred**. It becomes the seed of a follow-up packet, or an Open Question.
|
|
22
|
+
|
|
23
|
+
5. **Derive Validation and Rollback from the examples**
|
|
24
|
+
- How to verify each example (tests / manual check / type checking / log check) → **Validation**.
|
|
25
|
+
- How to revert on failure → **Rollback**.
|
|
26
|
+
|
|
27
|
+
## Assembling the packet
|
|
28
|
+
|
|
29
|
+
Consolidate the expansion results into packets. Each packet satisfies the following.
|
|
30
|
+
|
|
31
|
+
- **Parent Intent**: a reference to the corresponding L0/L1/L2/L3 (required).
|
|
32
|
+
- **Scope / Non-scope**: what is included / what is not.
|
|
33
|
+
- **Expected Behavior**: derived from the "examples" above.
|
|
34
|
+
- **Safety / Invariants**: derived from the Compass invariants.
|
|
35
|
+
- **Validation / Rollback**: derived from the above.
|
|
36
|
+
- **cc-sdd Mapping**: the policy for how to hand off to cc-sdd.
|
|
37
|
+
|
|
38
|
+
## Discipline
|
|
39
|
+
|
|
40
|
+
- Packets must be **behavior-preserving / testable / rollbackable**. In greenfield work with no existing behavior to preserve, read behavior-preserving as "can be introduced and removed standalone without affecting anything else".
|
|
41
|
+
- Keep the count variable with the expected change size; do not pad it (one is fine for very small changes; treat 1–7 as a loose guide). For packets that are too large, present split proposals.
|
|
42
|
+
- Do not drop them too far down into implementation tasks (above an Issue, before a spec).
|
|
43
|
+
- Do not change code.
|
|
44
|
+
|
|
45
|
+
## Output
|
|
46
|
+
|
|
47
|
+
Update (present as a proposal) the packet files (under `active/`). Each packet has the structure above. Of the four expansion columns (Rules / Examples / Questions / Deferred), the rules and examples flow into each packet's Expected Behavior, the questions go to Open Questions, and the deferred items are kept in the `Deferred` section of `plan.md`.
|