@khoavu882/doflow 0.0.0-stage → 2.0.0-beta.3
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.md +132 -2
- package/bin/doflow.js +44 -0
- package/core/.antigravity-plugin/hooks.json +39 -0
- package/core/.antigravity-plugin/mcp_config.json +18 -0
- package/core/.antigravity-plugin/plugin.json +31 -0
- package/core/.claude-plugin/marketplace.json +20 -0
- package/core/.claude-plugin/plugin.json +21 -0
- package/core/.codex-plugin/marketplace.json +20 -0
- package/core/.codex-plugin/plugin.json +35 -0
- package/core/.plugin/plugin.json +19 -0
- package/core/harnesses/antigravity/hooks/pre-implementation-gate.sh +9 -0
- package/core/harnesses/antigravity/hooks/stop-check.sh +10 -0
- package/core/harnesses/claude/hooks/lib.sh +304 -0
- package/core/harnesses/claude/hooks/mcp-tool-guard.sh +20 -0
- package/core/harnesses/claude/hooks/permission-audit.sh +47 -0
- package/core/harnesses/claude/hooks/post-compact.sh +74 -0
- package/core/harnesses/claude/hooks/post-edit-lint.sh +36 -0
- package/core/harnesses/claude/hooks/post-tool-failure.sh +47 -0
- package/core/harnesses/claude/hooks/pre-bash-guard.sh +20 -0
- package/core/harnesses/claude/hooks/pre-compact.sh +43 -0
- package/core/harnesses/claude/hooks/pre-implement-gate.sh +21 -0
- package/core/harnesses/claude/hooks/session-end.sh +89 -0
- package/core/harnesses/claude/hooks/session-start.sh +5 -0
- package/core/harnesses/claude/hooks/skill-config-audit.sh +39 -0
- package/core/harnesses/claude/hooks/stop-check.sh +5 -0
- package/core/harnesses/claude/hooks/subagent-audit.sh +7 -0
- package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -0
- package/core/harnesses/claude/settings/keybindings.json +20 -0
- package/core/harnesses/claude/settings/settings.json +201 -0
- package/core/harnesses/claude/statusline/doflow-statusline.sh +49 -0
- package/core/harnesses/codex/agents/core-implementer.toml +7 -0
- package/core/harnesses/codex/agents/quality-guardian.toml +8 -0
- package/core/harnesses/codex/agents/research-writer.toml +8 -0
- package/core/harnesses/codex/agents/spec-analyst.toml +8 -0
- package/core/harnesses/codex/agents/system-architect.toml +9 -0
- package/core/harnesses/codex/config/config.toml +10 -0
- package/core/harnesses/codex/hooks/hooks.json +122 -0
- package/core/harnesses/codex/hooks/lib.sh +335 -0
- package/core/harnesses/codex/hooks/mcp-tool-guard.sh +18 -0
- package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +52 -0
- package/core/harnesses/codex/hooks/post-edit-lint.sh +6 -0
- package/core/harnesses/codex/hooks/pre-bash-guard.sh +18 -0
- package/core/harnesses/codex/hooks/pre-compact.impl.sh +46 -0
- package/core/harnesses/codex/hooks/pre-compact.sh +9 -0
- package/core/harnesses/codex/hooks/pre-implement-gate.sh +19 -0
- package/core/harnesses/codex/hooks/session-end.impl.sh +92 -0
- package/core/harnesses/codex/hooks/session-end.sh +5 -0
- package/core/harnesses/codex/hooks/session-start.sh +5 -0
- package/core/harnesses/codex/hooks/stop-check.sh +8 -0
- package/core/harnesses/codex/hooks/subagent-audit.sh +8 -0
- package/core/harnesses/codex/hooks/user-prompt-submit.sh +6 -0
- package/core/harnesses/gemini/hooks/hooks.json +77 -0
- package/core/harnesses/gemini/hooks/lib.sh +302 -0
- package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +21 -0
- package/core/harnesses/gemini/hooks/post-edit-lint.sh +39 -0
- package/core/harnesses/gemini/hooks/pre-bash-guard.sh +21 -0
- package/core/harnesses/gemini/hooks/pre-compact.sh +38 -0
- package/core/harnesses/gemini/hooks/pre-implement-gate.sh +22 -0
- package/core/harnesses/gemini/hooks/session-end.impl.sh +89 -0
- package/core/harnesses/gemini/hooks/session-end.sh +5 -0
- package/core/harnesses/gemini/hooks/session-start.sh +5 -0
- package/core/harnesses/gemini/settings/adapter-defaults.json +4 -0
- package/core/harnesses/kiro/agents/doflow.json +58 -0
- package/core/harnesses/kiro/hooks/doflow.json +53 -0
- package/core/harnesses/kiro/hooks/lib.sh +324 -0
- package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +9 -0
- package/core/harnesses/kiro/hooks/pre-bash-guard.sh +9 -0
- package/core/harnesses/kiro/hooks/pre-implement-gate.sh +9 -0
- package/core/harnesses/kiro/hooks/session-start.sh +9 -0
- package/core/harnesses/kiro/hooks/stop-check.sh +43 -0
- package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +39 -0
- package/core/harnesses/shared/hooks/adapters/antigravity.js +111 -0
- package/core/harnesses/shared/hooks/adapters/arg-fields.js +19 -0
- package/core/harnesses/shared/hooks/adapters/gemini.js +114 -0
- package/core/harnesses/shared/hooks/hooks.json +47 -0
- package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +91 -0
- package/core/harnesses/shared/hooks/policies/capture-failure.sh +97 -0
- package/core/harnesses/shared/hooks/policies/deny-json.sh +29 -0
- package/core/harnesses/shared/hooks/policies/lib.sh +501 -0
- package/core/harnesses/shared/hooks/policies/mcp-policy.conf +21 -0
- package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +91 -0
- package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +328 -0
- package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +496 -0
- package/core/harnesses/shared/hooks/policies/prompt-nudge.jq +131 -0
- package/core/harnesses/shared/hooks/policies/session-context.sh +141 -0
- package/core/harnesses/shared/hooks/policies/stop-check.sh +264 -0
- package/core/harnesses/shared/hooks/policies/subagent-audit.sh +46 -0
- package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +235 -0
- package/core/harnesses/shared/hooks/stream-hook-runner.js +590 -0
- package/core/harnesses/shared/locator/doflow-run +87 -0
- package/core/registry/advice.json +101 -0
- package/core/registry/assets.json +792 -0
- package/core/registry/capabilities.json +120 -0
- package/core/registry/contracts.json +189 -0
- package/core/registry/external-tools.json +191 -0
- package/core/registry/harnesses.json +2062 -0
- package/core/registry/lifecycle.json +231 -0
- package/core/registry/mcp.json +18 -0
- package/core/registry/models.json +79 -0
- package/core/registry/readiness-templates.json +118 -0
- package/core/registry/routes.json +47 -0
- package/core/registry/storage.json +1057 -0
- package/core/registry/verification.json +258 -0
- package/core/registry/workflows.json +790 -0
- package/core/shared/agent-specs/core-implementer.md +73 -0
- package/core/shared/agent-specs/quality-guardian.md +28 -0
- package/core/shared/agent-specs/research-writer.md +31 -0
- package/core/shared/agent-specs/spec-analyst.md +33 -0
- package/core/shared/agent-specs/system-architect.md +29 -0
- package/core/shared/guidance/DOFLOW_CORE.md +8 -0
- package/core/shared/guidance/FLAGS.md +25 -0
- package/core/shared/guidance/PRINCIPLES.md +61 -0
- package/core/shared/guidance/VERSION +1 -0
- package/core/shared/guidance/mcp/MCP_Context7.md +18 -0
- package/core/shared/guidance/mcp/MCP_Sequential.md +17 -0
- package/core/shared/guidance/modes/MODE_Brainstorming.md +46 -0
- package/core/shared/guidance/modes/MODE_DeepResearch.md +69 -0
- package/core/shared/guidance/modes/MODE_Introspection.md +33 -0
- package/core/shared/guidance/modes/MODE_Orchestration.md +57 -0
- package/core/shared/guidance/modes/MODE_Task_Management.md +74 -0
- package/core/shared/guidance/pointers/claude-gemini.md +2 -0
- package/core/shared/guidance/pointers/codex.md +6 -0
- package/core/shared/guidance/references/ARTIFACT_FORMAT.md +373 -0
- package/core/shared/guidance/references/ARTIFACT_VOICE.md +104 -0
- package/core/shared/guidance/references/CONSTITUTION_BASE.md +47 -0
- package/core/shared/guidance/references/DIAGRAM_GUIDE.md +161 -0
- package/core/shared/guidance/references/DOFLOW_CHAIN.md +87 -0
- package/core/shared/guidance/references/EVIDENCE_LEDGER.md +93 -0
- package/core/shared/guidance/references/MODEL_SELECTION.md +74 -0
- package/core/shared/guidance/references/ORCHESTRATION.md +36 -0
- package/core/shared/guidance/references/RESEARCH_CONFIG.md +21 -0
- package/core/shared/guidance/references/WORKFLOW_HANDOFF.md +81 -0
- package/core/shared/guidance/rules/RULE_01_SAFETY.md +25 -0
- package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +23 -0
- package/core/shared/guidance/rules/RULE_03_QUALITY.md +14 -0
- package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +46 -0
- package/core/shared/scripts/doflow/assets/mermaid-theme.json +46 -0
- package/core/shared/scripts/doflow/bash/do-exec-paths.sh +167 -0
- package/core/shared/scripts/doflow/bash/do-git-state.sh +546 -0
- package/core/shared/scripts/doflow/bash/do-parallel-check.sh +208 -0
- package/core/shared/scripts/doflow/bash/do-paths.sh +347 -0
- package/core/shared/scripts/doflow/bash/do-prereqs.sh +66 -0
- package/core/shared/scripts/doflow/bash/do-review-package.sh +127 -0
- package/core/shared/scripts/doflow/bash/do-task-brief.sh +698 -0
- package/core/shared/scripts/doflow/bash/render-audit.sh +224 -0
- package/core/shared/scripts/doflow/bash/render-diagrams.sh +177 -0
- package/core/shared/scripts/doflow/bash/render-puml.sh +223 -0
- package/core/shared/scripts/doflow/bash/sync-context.sh +66 -0
- package/core/shared/scripts/doflow/bash/validate-artifacts.sh +526 -0
- package/core/shared/scripts/doflow/bin/doflow-run +592 -0
- package/core/shared/skills/do/SKILL.md +128 -0
- package/core/shared/skills/do/references/estimation.md +13 -0
- package/core/shared/skills/do/references/pm_routing.md +25 -0
- package/core/shared/skills/do/references/tool_matrix.md +52 -0
- package/core/shared/skills/do-brainstorm/SKILL.md +252 -0
- package/core/shared/skills/do-code-review/README.md +49 -0
- package/core/shared/skills/do-code-review/SKILL.md +333 -0
- package/core/shared/skills/do-code-review/assets/sample_c_clean.c +71 -0
- package/core/shared/skills/do-code-review/assets/sample_c_smells.c +66 -0
- package/core/shared/skills/do-code-review/assets/sample_cpp_shift.cpp +19 -0
- package/core/shared/skills/do-code-review/assets/sample_csharp_clean.cs +100 -0
- package/core/shared/skills/do-code-review/assets/sample_csharp_smells.cs +78 -0
- package/core/shared/skills/do-code-review/assets/sample_java_clean.java +55 -0
- package/core/shared/skills/do-code-review/assets/sample_java_smells.java +56 -0
- package/core/shared/skills/do-code-review/assets/sample_json_clean.json +7 -0
- package/core/shared/skills/do-code-review/assets/sample_markdown_clean.md +30 -0
- package/core/shared/skills/do-code-review/assets/sample_markdown_smells.md +29 -0
- package/core/shared/skills/do-code-review/assets/sample_shell_heredoc.sh +38 -0
- package/core/shared/skills/do-code-review/assets/sample_shell_smells.sh +15 -0
- package/core/shared/skills/do-code-review/assets/sample_typescript_strings.ts +36 -0
- package/core/shared/skills/do-code-review/assets/sample_yaml_smells.yaml +6 -0
- package/core/shared/skills/do-code-review/content-types/config.md +83 -0
- package/core/shared/skills/do-code-review/content-types/markdown.md +132 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_c_clean_quality.json +79 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_c_smells_quality.json +169 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_cpp_shift_quality.json +49 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_csharp_clean_quality.json +149 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_csharp_smells_quality.json +157 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_java_clean_quality.json +67 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_java_smells_quality.json +97 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_json_clean_quality.json +33 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_markdown_clean_quality.json +1 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_markdown_smells_quality.json +16 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_shell_heredoc_quality.json +54 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_shell_smells_quality.json +91 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_typescript_strings_quality.json +60 -0
- package/core/shared/skills/do-code-review/expected_outputs/sample_yaml_smells_quality.json +46 -0
- package/core/shared/skills/do-code-review/languages/c.md +103 -0
- package/core/shared/skills/do-code-review/languages/cpp.md +103 -0
- package/core/shared/skills/do-code-review/languages/csharp.md +97 -0
- package/core/shared/skills/do-code-review/languages/dart.md +108 -0
- package/core/shared/skills/do-code-review/languages/go.md +92 -0
- package/core/shared/skills/do-code-review/languages/java.md +103 -0
- package/core/shared/skills/do-code-review/languages/kotlin.md +88 -0
- package/core/shared/skills/do-code-review/languages/php.md +109 -0
- package/core/shared/skills/do-code-review/languages/python.md +94 -0
- package/core/shared/skills/do-code-review/languages/ruby.md +105 -0
- package/core/shared/skills/do-code-review/languages/rust.md +99 -0
- package/core/shared/skills/do-code-review/languages/shell.md +90 -0
- package/core/shared/skills/do-code-review/languages/swift.md +88 -0
- package/core/shared/skills/do-code-review/languages/typescript.md +97 -0
- package/core/shared/skills/do-code-review/review-policy.json +47 -0
- package/core/shared/skills/do-code-review/rules/universal.md +49 -0
- package/core/shared/skills/do-code-review/scripts/code_quality_checker.py +1696 -0
- package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +532 -0
- package/core/shared/skills/do-code-review/scripts/pr_analyzer.py +620 -0
- package/core/shared/skills/do-code-review/scripts/review_report_generator.py +505 -0
- package/core/shared/skills/do-constitution/SKILL.md +72 -0
- package/core/shared/skills/do-design/SKILL.md +212 -0
- package/core/shared/skills/do-diagnose/SKILL.md +156 -0
- package/core/shared/skills/do-diagnose/references/code_audit.md +15 -0
- package/core/shared/skills/do-diagnose/references/refactoring.md +12 -0
- package/core/shared/skills/do-diagnose/references/root_cause.md +17 -0
- package/core/shared/skills/do-document/SKILL.md +81 -0
- package/core/shared/skills/do-document/references/api-reference.md +42 -0
- package/core/shared/skills/do-document/references/deep_research.md +18 -0
- package/core/shared/skills/do-document/references/embedded-research.md +11 -0
- package/core/shared/skills/do-document/references/implementation-flow.md +105 -0
- package/core/shared/skills/do-document/references/index_generator.md +9 -0
- package/core/shared/skills/do-document/references/user-guide.md +22 -0
- package/core/shared/skills/do-execute-plan/SKILL.md +261 -0
- package/core/shared/skills/do-execute-plan/references/handoff_record.md +57 -0
- package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +92 -0
- package/core/shared/skills/do-execute-plan/references/readiness_gate.md +155 -0
- package/core/shared/skills/do-execute-plan/references/run_position.md +63 -0
- package/core/shared/skills/do-execute-plan/references/scaffold.md +441 -0
- package/core/shared/skills/do-execute-plan/references/task_attempts.md +41 -0
- package/core/shared/skills/do-flow/SKILL.md +186 -0
- package/core/shared/skills/do-flow/references/task_classes.md +134 -0
- package/core/shared/skills/do-git/SKILL.md +115 -0
- package/core/shared/skills/do-git/references/hotfix-ritual.md +44 -0
- package/core/shared/skills/do-git/references/lifecycle-policy.md +54 -0
- package/core/shared/skills/do-git/references/release-ritual.md +64 -0
- package/core/shared/skills/do-implement/SKILL.md +222 -0
- package/core/shared/skills/do-plan/SKILL.md +219 -0
- package/core/shared/skills/do-test/SKILL.md +113 -0
- package/core/shared/templates/doflow/constitution-template.md +28 -0
- package/core/shared/templates/doflow/data-model-template.md +169 -0
- package/core/shared/templates/doflow/design-template.md +193 -0
- package/core/shared/templates/doflow/external-contract-template.md +35 -0
- package/core/shared/templates/doflow/intent-template.md +45 -0
- package/core/shared/templates/doflow/plan-template.md +151 -0
- package/core/shared/templates/doflow/question-log-template.md +51 -0
- package/core/shared/templates/doflow/requirement-template.md +126 -0
- package/core/shared/templates/doflow/specs-template.md +55 -0
- package/core/shared/templates/doflow/state-template.md +59 -0
- package/core/shared/workflows/do-flow-chain.md +17 -0
- package/package.json +46 -4
- package/src/adapters/antigravity/index.ts +631 -0
- package/src/adapters/claude/index.ts +548 -0
- package/src/adapters/claude/mcp.ts +94 -0
- package/src/adapters/codex/agents.ts +208 -0
- package/src/adapters/codex/config.ts +272 -0
- package/src/adapters/codex/hooks.ts +203 -0
- package/src/adapters/codex/index.ts +707 -0
- package/src/adapters/codex/mcp.ts +271 -0
- package/src/adapters/codex/native-projection.ts +34 -0
- package/src/adapters/copilot/index.ts +413 -0
- package/src/adapters/copy-tree.ts +620 -0
- package/src/adapters/gemini/hooks.ts +210 -0
- package/src/adapters/gemini/index.ts +390 -0
- package/src/adapters/hook-commands.ts +60 -0
- package/src/adapters/index.ts +106 -0
- package/src/adapters/kiro/index.ts +310 -0
- package/src/adapters/mcp-entries.ts +331 -0
- package/src/adapters/opencode/index.ts +466 -0
- package/src/adapters/pi/index.ts +279 -0
- package/src/adapters/pi/json-members.ts +185 -0
- package/src/adapters/pi/mcp.ts +373 -0
- package/src/adapters/resolve-source.ts +19 -0
- package/src/cli/commands/install.ts +218 -0
- package/src/cli/commands/list-backups.ts +21 -0
- package/src/cli/commands/reconcile.ts +120 -0
- package/src/cli/commands/remove.ts +82 -0
- package/src/cli/commands/rollback.ts +172 -0
- package/src/cli/commands/self-update.ts +33 -0
- package/src/cli/commands/status.ts +138 -0
- package/src/cli/commands/tools.ts +92 -0
- package/src/cli/commands/update.ts +162 -0
- package/src/cli/index.ts +568 -0
- package/src/cli/runtime-commands.ts +281 -0
- package/src/cli/shared.ts +218 -0
- package/src/helper/bash-helper.ts +34 -0
- package/src/helper/git.ts +24 -0
- package/src/helper/guardrails.ts +49 -0
- package/src/helper/harness-paths.ts +140 -0
- package/src/helper/marker-merge.ts +116 -0
- package/src/helper/prompt.ts +61 -0
- package/src/helper/repo-root.ts +29 -0
- package/src/helper/settings-merge.ts +151 -0
- package/src/helper/settings-scope.ts +33 -0
- package/src/helper/toml.ts +244 -0
- package/src/install/backup-set.ts +149 -0
- package/src/install/backup.ts +724 -0
- package/src/install/context.ts +58 -0
- package/src/install/manifest.ts +145 -0
- package/src/install/mcp.ts +254 -0
- package/src/install/paths.ts +84 -0
- package/src/install/targets.ts +90 -0
- package/src/install/tool-lifecycle.ts +151 -0
- package/src/lifecycle/bash-availability.ts +25 -0
- package/src/lifecycle/index.ts +812 -0
- package/src/lifecycle/mcp-index.ts +28 -0
- package/src/lifecycle/policies.ts +73 -0
- package/src/lifecycle/view.ts +175 -0
- package/src/registry/index.ts +611 -0
- package/src/release/sync-plugin-versions.ts +66 -0
- package/src/runtime/advice/cli.ts +283 -0
- package/src/runtime/advice/client.ts +324 -0
- package/src/runtime/advice/config.ts +189 -0
- package/src/runtime/advice/doctor.ts +169 -0
- package/src/runtime/advice/endpoint-guard.ts +134 -0
- package/src/runtime/advice/kinds.ts +154 -0
- package/src/runtime/advice/providers/ollama-systemone.ts +209 -0
- package/src/runtime/advice/record.ts +166 -0
- package/src/runtime/advice/registry.ts +170 -0
- package/src/runtime/advice/strength.ts +66 -0
- package/src/runtime/brief-tools.ts +342 -0
- package/src/runtime/c4-project.ts +371 -0
- package/src/runtime/capability-router.ts +484 -0
- package/src/runtime/checkouts.ts +170 -0
- package/src/runtime/claims.ts +468 -0
- package/src/runtime/cli-result.ts +55 -0
- package/src/runtime/cli.ts +678 -0
- package/src/runtime/command-detect.ts +516 -0
- package/src/runtime/context-pack.ts +492 -0
- package/src/runtime/decision-register.ts +493 -0
- package/src/runtime/evidence-ledger.ts +338 -0
- package/src/runtime/failure/capture.ts +272 -0
- package/src/runtime/failure/classifier.ts +68 -0
- package/src/runtime/failure/cli.ts +178 -0
- package/src/runtime/failure/home.ts +64 -0
- package/src/runtime/failure/store.ts +226 -0
- package/src/runtime/feature-resolve.ts +79 -0
- package/src/runtime/freshness.ts +177 -0
- package/src/runtime/health.ts +863 -0
- package/src/runtime/history-compactor.ts +237 -0
- package/src/runtime/implementation-gate.ts +321 -0
- package/src/runtime/inventory/coverage.ts +218 -0
- package/src/runtime/inventory/identity.ts +65 -0
- package/src/runtime/inventory/index.ts +705 -0
- package/src/runtime/inventory/precedence.ts +134 -0
- package/src/runtime/inventory/read-scopes.ts +131 -0
- package/src/runtime/inventory/siblings.ts +192 -0
- package/src/runtime/knowledge/chunker.ts +124 -0
- package/src/runtime/knowledge/hybrid.ts +149 -0
- package/src/runtime/knowledge/index-store.ts +145 -0
- package/src/runtime/knowledge/retrieval.ts +194 -0
- package/src/runtime/leak-scan.ts +185 -0
- package/src/runtime/lifecycle/cli.ts +276 -0
- package/src/runtime/lifecycle/event-store.ts +340 -0
- package/src/runtime/lifecycle/fold.ts +353 -0
- package/src/runtime/lifecycle/followup.ts +432 -0
- package/src/runtime/lifecycle/goal.ts +249 -0
- package/src/runtime/lifecycle/intent-writer.ts +86 -0
- package/src/runtime/lifecycle/overview.ts +292 -0
- package/src/runtime/lifecycle/release.ts +241 -0
- package/src/runtime/lifecycle/report-store.ts +221 -0
- package/src/runtime/lifecycle/retention.ts +212 -0
- package/src/runtime/lifecycle/root.ts +71 -0
- package/src/runtime/lifecycle/status.ts +353 -0
- package/src/runtime/lifecycle/store-upkeep.ts +393 -0
- package/src/runtime/locator-resolve.ts +158 -0
- package/src/runtime/mask.ts +210 -0
- package/src/runtime/mcp-consultations.ts +412 -0
- package/src/runtime/mcp-reach.ts +157 -0
- package/src/runtime/model-router.ts +153 -0
- package/src/runtime/outcome.ts +467 -0
- package/src/runtime/reach.ts +148 -0
- package/src/runtime/readiness-record.ts +150 -0
- package/src/runtime/readiness.ts +435 -0
- package/src/runtime/recovery.ts +282 -0
- package/src/runtime/research-request.ts +231 -0
- package/src/runtime/retrieval-plan.ts +578 -0
- package/src/runtime/scaffold/artifacts.ts +217 -0
- package/src/runtime/scaffold/fingerprint.ts +56 -0
- package/src/runtime/scaffold/generate.ts +911 -0
- package/src/runtime/scaffold/languages.ts +245 -0
- package/src/runtime/storage/cli.ts +64 -0
- package/src/runtime/storage/engine.ts +249 -0
- package/src/runtime/storage/registry.ts +130 -0
- package/src/runtime/storage/roots.ts +63 -0
- package/src/runtime/storage/rules.ts +282 -0
- package/src/runtime/storage/upkeep.ts +243 -0
- package/src/runtime/storage/work-status.ts +326 -0
- package/src/runtime/task-attempts.ts +415 -0
- package/src/runtime/task-classifier.ts +550 -0
- package/src/runtime/task-scope.ts +130 -0
- package/src/runtime/task-state.ts +176 -0
- package/src/runtime/trace/indicators.ts +235 -0
- package/src/runtime/trace/ledger.ts +626 -0
- package/src/runtime/trace/render.ts +76 -0
- package/src/runtime/trace/views.ts +459 -0
- package/src/runtime/verification/contract-runner.ts +341 -0
- package/src/runtime/verification/engine.ts +1461 -0
- package/src/runtime/verification/registry.ts +130 -0
- package/src/runtime/verification/scope-bound.ts +418 -0
- package/src/runtime/verification/test-selection.ts +172 -0
- package/src/runtime/workflow-engine.ts +588 -0
- package/src/runtime/workflow-orchestrator.ts +953 -0
- package/src/runtime/worktree.ts +340 -0
- package/src/state/index.ts +193 -0
- package/src/state/lockfile.ts +136 -0
- package/src/state/run-lock.ts +408 -0
- package/types/node-commonjs.d.ts +68 -0
- package/types/runtime.d.ts +91 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Data Model: [FEATURE NAME]
|
|
2
|
+
|
|
3
|
+
**Feature:** [NNN-slug] · **Design:** ./design.md · **Maturity:** Draft · **Created:** [DATE]
|
|
4
|
+
|
|
5
|
+
> Entity/data model and data-flow diagrams a design decided, split out of design.md's own narrative
|
|
6
|
+
> (§5/§6) and specs.md's interface-contract detail (§1). Reads ./design.md; distinct from ./specs.md
|
|
7
|
+
> the way a persisted shape and the flows that move through it are distinct from the contracts that
|
|
8
|
+
> expose them.
|
|
9
|
+
>
|
|
10
|
+
> Structure follows `references/ARTIFACT_FORMAT.md`: the document-level `Maturity` is `Draft`,
|
|
11
|
+
> `In review` or `Approved`. Neither §1 nor §2 below carries an `ID`-bearing index — a diagram is not
|
|
12
|
+
> a normative, citable statement — so both stay free-form; §3 History is index-then-detail like
|
|
13
|
+
> every other chain artifact's final section, and its item-level `Status` is only `Live` or
|
|
14
|
+
> `Superseded → <ref>`.
|
|
15
|
+
|
|
16
|
+
## 1. Data Model
|
|
17
|
+
|
|
18
|
+
<!-- Free-form, NOT part of the indexed convention above — diagrams and schema tables are not
|
|
19
|
+
ID-bearing normative statements, so this section stays exactly as specs-template.md's former
|
|
20
|
+
§2 already was.
|
|
21
|
+
|
|
22
|
+
The model is presented in two tiers. The conceptual domain map comes first and carries no
|
|
23
|
+
attributes, so the shape of the domain is legible before any field name. One ER view per
|
|
24
|
+
bounded subdomain follows, each carrying the attributes, keys and cardinalities of that
|
|
25
|
+
subdomain alone. Splitting one diagram into views must not drop an entity, a key or a
|
|
26
|
+
constraint the single diagram carried. -->
|
|
27
|
+
|
|
28
|
+
### Conceptual domain map
|
|
29
|
+
|
|
30
|
+
<!-- The entities and the relationships between them, with no attributes. Skip with "N/A: [why]" if
|
|
31
|
+
the feature persists no entity. -->
|
|
32
|
+
|
|
33
|
+
```mermaid
|
|
34
|
+
flowchart LR
|
|
35
|
+
USER["User"]
|
|
36
|
+
POST["Post"]
|
|
37
|
+
COMMENT["Comment"]
|
|
38
|
+
|
|
39
|
+
USER -->|"creates"| POST
|
|
40
|
+
POST -->|"contains"| COMMENT
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
#### ER view: [subdomain]
|
|
44
|
+
|
|
45
|
+
<!-- One heading of this form per bounded subdomain, each an erDiagram carrying the attributes,
|
|
46
|
+
keys and cardinalities of that subdomain alone. Skip with "N/A: [why]" if the feature persists
|
|
47
|
+
no entity. -->
|
|
48
|
+
|
|
49
|
+
```mermaid
|
|
50
|
+
erDiagram
|
|
51
|
+
USER ||--o{ POST : "creates"
|
|
52
|
+
USER {
|
|
53
|
+
uuid id PK
|
|
54
|
+
string email UK
|
|
55
|
+
string name
|
|
56
|
+
timestamp created_at
|
|
57
|
+
}
|
|
58
|
+
POST ||--o{ COMMENT : "contains"
|
|
59
|
+
POST {
|
|
60
|
+
uuid id PK
|
|
61
|
+
uuid user_id FK
|
|
62
|
+
string title
|
|
63
|
+
text content
|
|
64
|
+
timestamp created_at
|
|
65
|
+
}
|
|
66
|
+
COMMENT {
|
|
67
|
+
uuid id PK
|
|
68
|
+
uuid post_id FK
|
|
69
|
+
uuid author_id FK
|
|
70
|
+
text body
|
|
71
|
+
timestamp created_at
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Database Schemas (ORM / DDL)
|
|
76
|
+
|
|
77
|
+
<!-- The catalog of every table the views above draw, with its keys, indexes and ORM file. -->
|
|
78
|
+
|
|
79
|
+
| Table | Purpose | Primary Key | Foreign Keys & Relations | Key Indexes | Schema / ORM File |
|
|
80
|
+
|---|---|---|---|---|---|
|
|
81
|
+
| `[table_name]` | [one-line table responsibility] | `id` (UUID) | `[user_id]` → `users(id)` | `idx_[table]_[col]` | `src/db/schema/[table].ts` |
|
|
82
|
+
|
|
83
|
+
### UX / UI Specifications
|
|
84
|
+
- **Design Tokens & Cues:** [color tokens (e.g. Indigo for Work, Emerald for Personal), badge variants, typography]
|
|
85
|
+
- **Component States:** [loading, empty, populated, error states]
|
|
86
|
+
|
|
87
|
+
## 2. Sequence / Data Flow
|
|
88
|
+
|
|
89
|
+
<!-- Free-form, NOT part of the indexed convention — a diagram is not an ID-bearing normative
|
|
90
|
+
statement, so this section stays free-form exactly as §1 does.
|
|
91
|
+
|
|
92
|
+
One `sequenceDiagram` per non-trivial interaction the feature introduces. Scaffolding matches
|
|
93
|
+
§1's depth deliberately: this is the chain's most-used diagram type, not an afterthought.
|
|
94
|
+
|
|
95
|
+
`references/DIAGRAM_GUIDE.md` governs the lifeline ceiling. There is no message ceiling,
|
|
96
|
+
because a sequence diagram lays out columnwise and cannot tangle however many messages it
|
|
97
|
+
carries — so show the whole interaction rather than trimming it to look tidy.
|
|
98
|
+
|
|
99
|
+
Conventions:
|
|
100
|
+
- Declare every participant up front, in the order they first act, so the columns read
|
|
101
|
+
left-to-right in causal order.
|
|
102
|
+
- Use `actor` for a human or an external caller and `participant` for a component.
|
|
103
|
+
- `->>` is a call, `-->>` is a return. Keep returns only where the returned value matters.
|
|
104
|
+
- Put the failure path in an `alt` block. An interaction drawn only on its happy path hides
|
|
105
|
+
the branch a reader most needs.
|
|
106
|
+
- `Note over X,Y:` carries a constraint or an invariant, never narration of the line above.
|
|
107
|
+
- Prefer `rect` over `par` to mark a region: `par` claims the steps happen simultaneously,
|
|
108
|
+
which most groupings cannot support. Reserve `par` for genuine parallelism, `alt` for a
|
|
109
|
+
branch.
|
|
110
|
+
|
|
111
|
+
Skip with "N/A: [why]" if the feature introduces no non-trivial interaction. -->
|
|
112
|
+
|
|
113
|
+
### [Interaction name]
|
|
114
|
+
|
|
115
|
+
[One sentence: what triggers this flow and what it ends with.]
|
|
116
|
+
|
|
117
|
+
```mermaid
|
|
118
|
+
sequenceDiagram
|
|
119
|
+
actor User
|
|
120
|
+
participant API as [entry point]
|
|
121
|
+
participant SVC as [service]
|
|
122
|
+
participant DB as [data store]
|
|
123
|
+
|
|
124
|
+
User->>API: [request]
|
|
125
|
+
API->>SVC: [call]
|
|
126
|
+
|
|
127
|
+
alt [failure condition]
|
|
128
|
+
SVC-->>API: [error shape]
|
|
129
|
+
API-->>User: [status code and message]
|
|
130
|
+
else [success]
|
|
131
|
+
SVC->>DB: [read or write]
|
|
132
|
+
DB-->>SVC: [result]
|
|
133
|
+
SVC-->>API: [payload]
|
|
134
|
+
API-->>User: [status code]
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
Note over SVC,DB: [invariant that must hold across this step]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
[If the failure branch has consequences the diagram cannot carry — a retry policy, a compensating
|
|
141
|
+
action, an idempotency requirement — state them in a sentence beneath the diagram rather than
|
|
142
|
+
crowding the fence.]
|
|
143
|
+
|
|
144
|
+
### Flow: [name]
|
|
145
|
+
|
|
146
|
+
<!-- One "#### Flow: <name>" heading per end-to-end flow, each embedding its committed render from
|
|
147
|
+
design/c4/flow-<name>.png. The heading name matches its source file's stem, which is the only
|
|
148
|
+
index -- nothing maintains a manifest, because a manifest could disagree with the directory.
|
|
149
|
+
|
|
150
|
+
This slot carries NO inline text diagram, and that asymmetry is forced by grammar rather than
|
|
151
|
+
chosen: Mermaid has no lane primitive, and approximating lanes with subgraph grouping would
|
|
152
|
+
carry no lane semantics and so would misrepresent the diagram it stood in for. The authored
|
|
153
|
+
.puml remains readable text under review, so the flow's logic is still diffable.
|
|
154
|
+
|
|
155
|
+
`references/DIAGRAM_GUIDE.md` §6 governs the lane conventions. Skip with "N/A: [why]" when the
|
|
156
|
+
feature's flow involves a single actor. -->
|
|
157
|
+
|
|
158
|
+
![End-to-end flow: [name]](design/c4/flow-[name].png)
|
|
159
|
+
|
|
160
|
+
[One sentence: what triggers this flow and what it ends with. Any consequence the lanes cannot
|
|
161
|
+
carry — a retry policy, a compensating action, an idempotency requirement — belongs here rather
|
|
162
|
+
than crowded into the diagram.]
|
|
163
|
+
|
|
164
|
+
## 3. History
|
|
165
|
+
|
|
166
|
+
<!-- Superseded data-model entries move here; the index row above stays as a tombstone with
|
|
167
|
+
`Superseded → <ref>`. -->
|
|
168
|
+
|
|
169
|
+
None — initial version.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Design: [FEATURE NAME]
|
|
2
|
+
|
|
3
|
+
**Feature:** [NNN-slug] · **Requirement:** [REQUIREMENT_PATH] · **Maturity:** Draft · **Created:** [DATE]
|
|
4
|
+
|
|
5
|
+
> System shape — architecture, APIs, data/interface contracts. Reads [REQUIREMENT_PATH].
|
|
6
|
+
> Distinct from plan.md's HOW-to-implement; this is HOW-it's-shaped.
|
|
7
|
+
>
|
|
8
|
+
> Structure follows `references/ARTIFACT_FORMAT.md`: indexed sections carry a table above full
|
|
9
|
+
> `**Detail**`, the document-level `Maturity` is `Draft`, `In review` or `Approved`, the item-level
|
|
10
|
+
> `Status` is only `Live` or `Superseded → <ref>`, and superseded prose moves to §9.
|
|
11
|
+
|
|
12
|
+
## 1. Architecture Approach
|
|
13
|
+
|
|
14
|
+
**Decisions and blockers:**
|
|
15
|
+
|
|
16
|
+
<!-- One row per decision this design makes, placed above the architectural prose. "Decision" names
|
|
17
|
+
what is being settled. "Shape chosen" is the answer this design gives it. "Owner" is the person
|
|
18
|
+
or role accountable for that answer. "Blocks approval?" says whether a reviewer can approve the
|
|
19
|
+
design while this decision stands as written, and names what has to happen first when it cannot.
|
|
20
|
+
A reviewer who reads only this table knows what is being decided, who decided it, and what
|
|
21
|
+
stands between the design and approval. Replace the table with "N/A: [why]" when the feature is
|
|
22
|
+
too small to carry decisions worth tabling. With a decision register, end Shape chosen with its
|
|
23
|
+
DEC-###: see ARTIFACT_FORMAT.md §12. -->
|
|
24
|
+
|
|
25
|
+
| Decision | Shape chosen | Owner | Blocks approval? |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| [what is being settled] | [the shape this design gives it] | [person or role accountable] | no |
|
|
28
|
+
| [what is being settled] | [the shape this design gives it] | [person or role accountable] | yes: [what must happen first] |
|
|
29
|
+
|
|
30
|
+
[Component boundaries, where this fits in the existing system, 2–4 sentences.]
|
|
31
|
+
|
|
32
|
+
## 2. System Overview (C4)
|
|
33
|
+
|
|
34
|
+
<!-- The visual complement to §1 — lets a reader unfamiliar with this feature see the shape before
|
|
35
|
+
reading prose. C4 is kept as the conceptual zoom model (Context → Container → Component) and
|
|
36
|
+
rendered with Mermaid `flowchart` + `subgraph`. Each level heading is written
|
|
37
|
+
"C4 Level N: ...", so no level label collides with a §3 component ID such as C3.
|
|
38
|
+
|
|
39
|
+
Do NOT use the C4Context / C4Container diagram types. They are experimental in Mermaid: no
|
|
40
|
+
direction control, relationship labels collide with arrowheads, and rendering varies across
|
|
41
|
+
viewers. `flowchart` is the most widely supported type and puts labels legibly on the arrow.
|
|
42
|
+
|
|
43
|
+
Skip a level with "N/A: [why]". For a trivial single-file change with no new external
|
|
44
|
+
interaction, write "N/A: [why]" for the whole section. -->
|
|
45
|
+
|
|
46
|
+
<!-- C4 Level 2 below sits inside the generated-block markers `doflow-run render-puml` replaces.
|
|
47
|
+
When this feature authors its C4 in PlantUML under design/c4/, edit container.puml and re-run
|
|
48
|
+
the verb; editing between the markers by hand is a change the next render discards.
|
|
49
|
+
|
|
50
|
+
A feature that authors no PlantUML writes the Mermaid here by hand, as it always did. The
|
|
51
|
+
markers are inert in that case — with no design/c4/ directory the verb reports and exits
|
|
52
|
+
before it opens this file — so leave them or delete them, whichever reads better.
|
|
53
|
+
|
|
54
|
+
The markers delimit LEVEL 2 ONLY. The projector emits one block per run, from container.puml
|
|
55
|
+
when it exists and context.puml otherwise, so a second marker pair would have nothing to fill.
|
|
56
|
+
Levels 1 and 3 are hand-written at every level of PlantUML adoption. -->
|
|
57
|
+
|
|
58
|
+
### C4 Level 1: System Context
|
|
59
|
+
|
|
60
|
+
[Who/what uses this system, and which external systems it talks to. One box per actor or external
|
|
61
|
+
system — internal components belong at C4 Level 2 or C4 Level 3, not here.]
|
|
62
|
+
|
|
63
|
+
```mermaid
|
|
64
|
+
flowchart TB
|
|
65
|
+
subgraph actors["Actors"]
|
|
66
|
+
USER["[actor/user]<br/>(who initiates this)"]
|
|
67
|
+
end
|
|
68
|
+
subgraph system["[this system]"]
|
|
69
|
+
SVC["[one-line responsibility]"]
|
|
70
|
+
end
|
|
71
|
+
EXT["[external system]<br/>(what it provides or consumes)"]
|
|
72
|
+
|
|
73
|
+
USER -->|"[interaction, e.g. Uses]"| SVC
|
|
74
|
+
SVC -->|"[interaction, e.g. Calls]"| EXT
|
|
75
|
+
SVC -.->|"[secondary/async relation]"| EXT
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### C4 Level 2: Container
|
|
79
|
+
|
|
80
|
+
[Which deployable services/apps/data stores this feature spans, and how they talk. One box per
|
|
81
|
+
independently deployable unit — internals of a single container belong at C4 Level 3.]
|
|
82
|
+
|
|
83
|
+
<!-- generated from design/c4/container.puml by `doflow-run render-puml` -- do not edit by hand
|
|
84
|
+
source-hash: not-yet-rendered -->
|
|
85
|
+
```mermaid
|
|
86
|
+
flowchart LR
|
|
87
|
+
USER["[actor/user]"]
|
|
88
|
+
subgraph boundary["[system name]"]
|
|
89
|
+
APP["[container name]<br/>[tech stack]"]
|
|
90
|
+
DB[("[data store]<br/>[what it holds]")]
|
|
91
|
+
end
|
|
92
|
+
EXT["[external system]"]
|
|
93
|
+
|
|
94
|
+
USER -->|"[protocol, e.g. HTTPS/JSON]"| APP
|
|
95
|
+
APP -->|"[reads/writes]"| DB
|
|
96
|
+
APP -->|"[interaction]"| EXT
|
|
97
|
+
```
|
|
98
|
+
<!-- end generated -->
|
|
99
|
+
|
|
100
|
+
### C4 Level 3: Component
|
|
101
|
+
|
|
102
|
+
<!-- Required when this feature touches 3+ components within a single container; otherwise write
|
|
103
|
+
"N/A: covered by §3 Components & Boundaries". On a small change this diagram restates the §3
|
|
104
|
+
table verbatim, and a diagram that adds nothing trains authors to tick boxes. -->
|
|
105
|
+
|
|
106
|
+
[Internals of the container this feature changes — handlers, services, ports, adapters.]
|
|
107
|
+
|
|
108
|
+
```mermaid
|
|
109
|
+
flowchart TB
|
|
110
|
+
subgraph container["[container name]"]
|
|
111
|
+
C_A["[component]<br/>[responsibility]"]
|
|
112
|
+
C_B["[component]<br/>[responsibility]"]
|
|
113
|
+
end
|
|
114
|
+
STORE[("[data store]")]
|
|
115
|
+
|
|
116
|
+
C_A -->|"[call]"| C_B
|
|
117
|
+
C_B -->|"[persists]"| STORE
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 3. Components & Boundaries
|
|
121
|
+
|
|
122
|
+
| ID | Component | Kind | Serves | Status |
|
|
123
|
+
|---|---|---|---|---|
|
|
124
|
+
| C1 | [component name] | service / script / template / reference | FR-001 | Live |
|
|
125
|
+
|
|
126
|
+
**Detail**
|
|
127
|
+
|
|
128
|
+
<!-- A component entry names the component after its ID, then answers the four labels below in
|
|
129
|
+
order. The labels are structural, not emphasis, and none may be dropped or reordered. -->
|
|
130
|
+
|
|
131
|
+
- **C1:** [component name]
|
|
132
|
+
- **Responsibility:** [what this component is answerable for, in full].
|
|
133
|
+
- **Owns:** [the state, files or decisions it holds].
|
|
134
|
+
- **Does not own:** [what a reader could expect it to hold but another component does].
|
|
135
|
+
- **Contracts:** [the FR-### and IC-### identifiers it serves].
|
|
136
|
+
|
|
137
|
+
## 4. API / Interface Contracts
|
|
138
|
+
|
|
139
|
+
<!-- Endpoints, CLI verb signatures, and repository/service interfaces that anchor implementation
|
|
140
|
+
live in ./specs.md §1 Interface Contracts, not here — each as one ID-bearing IC-### entry so
|
|
141
|
+
plan.md and implementation can cite a contract by id instead of a paragraph. Write `N/A: [why]` if
|
|
142
|
+
this feature genuinely introduces no interface contracts; otherwise leave a one-line pointer,
|
|
143
|
+
e.g. "See ./specs.md §1." -->
|
|
144
|
+
|
|
145
|
+
## 5. Data Model
|
|
146
|
+
|
|
147
|
+
The data-model shape is governed by `./data-model.md` §1.
|
|
148
|
+
|
|
149
|
+
<!-- Data model diagrams (ER diagrams, table schema catalogs) and UX design tokens live in
|
|
150
|
+
./data-model.md §1 Data Model, not here. Write `N/A: [why]` if this feature introduces no data
|
|
151
|
+
model or UX changes; otherwise leave a one-line pointer, e.g. "See ./data-model.md §1." -->
|
|
152
|
+
|
|
153
|
+
## 6. Sequence / Data Flow
|
|
154
|
+
|
|
155
|
+
The data-flow shape is governed by `./data-model.md` §2.
|
|
156
|
+
|
|
157
|
+
<!-- Sequence diagrams showing key interaction flows (a `sequenceDiagram` works well here) live in
|
|
158
|
+
./data-model.md §2 Sequence / Data Flow, not here. Write `N/A: [why]` if this feature introduces
|
|
159
|
+
no non-trivial interaction sequence; otherwise leave a one-line pointer, e.g.
|
|
160
|
+
"See ./data-model.md §2." -->
|
|
161
|
+
|
|
162
|
+
## 7. Design Risks & Alternatives Considered
|
|
163
|
+
|
|
164
|
+
| ID | Risk / Alternative | Disposition | Status |
|
|
165
|
+
|---|---|---|---|
|
|
166
|
+
| R1 | [risk, or an alternative shape considered] | mitigated / accepted / rejected | Live |
|
|
167
|
+
|
|
168
|
+
**Detail**
|
|
169
|
+
|
|
170
|
+
- **R1** → [why this shape was chosen, or why the risk is accepted and what it costs if it lands].
|
|
171
|
+
|
|
172
|
+
## 8. Assumptions
|
|
173
|
+
|
|
174
|
+
<!-- With a decision register, a row from a "Decide for me" pick cites its DEC-### in Basis: see ARTIFACT_FORMAT.md §12. -->
|
|
175
|
+
|
|
176
|
+
| ID | Assumption | Affects | Basis |
|
|
177
|
+
|---|---|---|---|
|
|
178
|
+
| A1 | [assumption stated] | C1 | [why this default, or "user deferred"] |
|
|
179
|
+
|
|
180
|
+
**Detail**
|
|
181
|
+
|
|
182
|
+
- **A1** — [the reasoning, and what would change if it turns out wrong].
|
|
183
|
+
|
|
184
|
+
<!-- Write "None — no design-level clarification questions were deferred." in place of the table
|
|
185
|
+
and detail if every design-level ambiguity was resolved by a direct answer rather than the
|
|
186
|
+
defer escape hatch during /do-design's clarification loop. -->
|
|
187
|
+
|
|
188
|
+
## 9. History
|
|
189
|
+
|
|
190
|
+
<!-- Superseded design decisions move here; the index row above stays as a tombstone with
|
|
191
|
+
`Superseded → <ref>`. -->
|
|
192
|
+
|
|
193
|
+
None — initial version.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# [Vendor/Service Name] Contract
|
|
2
|
+
|
|
3
|
+
> An `external-contract:` target for `/do-execute-plan --scaffold`. Points a `plan.md` task's
|
|
4
|
+
> `depends-on:` value (a genuine external dependency with no local repo — a vendor API, a SaaS
|
|
5
|
+
> integration) at this doc instead of leaving it silently skipped. `## Methods` and `## Types` are required — a doc missing either fails
|
|
6
|
+
> the compliance check with an explicit warning, not a silent skip. `## Webhook` is optional; omit
|
|
7
|
+
> the whole section if this dependency never pushes data back. Grammar inside every section is
|
|
8
|
+
> identical to the generic-pseudocode fallback notation in
|
|
9
|
+
> `skills/do-execute-plan/scaffold.md` — one notation for both, nothing new to learn.
|
|
10
|
+
>
|
|
11
|
+
> The generated frame lands in `agent-docs/doflow/<slug>/scaffold/contracts/<service>/`, alongside
|
|
12
|
+
> the rest of that run's scaffold rather than in a `contracts/` directory of its own.
|
|
13
|
+
|
|
14
|
+
## Methods
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
interface [Vendor]Client {
|
|
18
|
+
[method1]([param1]: [Param1Type], [param2]: [Param2Type]): [Return1Type]
|
|
19
|
+
[method2]([param1]: [Param1Type]): [Return2Type]
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Types
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
type [Name] = { [field1]: [type1], [field2]: [type2] }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Webhook
|
|
30
|
+
|
|
31
|
+
[Optional — delete this section entirely if this dependency never calls back into your system.]
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
type [Name] = { [field1]: [type1], [field2]: [type2] }
|
|
35
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Intent: [SHORT TITLE]
|
|
2
|
+
|
|
3
|
+
**Raised by:** [NAME OR ROLE] · **Date:** [DATE]
|
|
4
|
+
|
|
5
|
+
> An intent is written **before** any branch, feature directory or slug exists, and needs no command
|
|
6
|
+
> to create: copy this file to `agent-docs/intent/<kebab-description>.md` and fill it in. It is not a
|
|
7
|
+
> chain artifact — it carries no `Maturity` and no `Status`, because nothing has been decided yet.
|
|
8
|
+
>
|
|
9
|
+
> Write it in your own terms. Architecture, interfaces, file paths and task breakdowns are all
|
|
10
|
+
> deliberately absent: an intent records a problem worth someone's attention, not a plan for solving
|
|
11
|
+
> it. If it is picked up, `/do-brainstorm --intent <path>` reads it and turns it into a
|
|
12
|
+
> `requirement.md`, which is where decisions start being made.
|
|
13
|
+
>
|
|
14
|
+
> An intent that is never built is a success of this format, not a failure of it. That is why intents
|
|
15
|
+
> are not numbered: a number would claim a place in a queue that nobody has promised.
|
|
16
|
+
|
|
17
|
+
## 1. Problem
|
|
18
|
+
|
|
19
|
+
[What is wrong, missing or painful today, in your own words. Describe the situation, not a solution —
|
|
20
|
+
if a sentence here contains the word "add" or names a mechanism, it probably belongs in §2 or nowhere
|
|
21
|
+
yet.]
|
|
22
|
+
|
|
23
|
+
## 2. Proposed outcome
|
|
24
|
+
|
|
25
|
+
[What would be observably different if this were addressed? State it as something a person could
|
|
26
|
+
notice or check, rather than as the thing to build. "Reviewers stop missing X" rather than "add a
|
|
27
|
+
check for X".]
|
|
28
|
+
|
|
29
|
+
## 3. Affected
|
|
30
|
+
|
|
31
|
+
[Who and what this touches: the people who feel the problem, the systems involved, the existing
|
|
32
|
+
behaviour that would change. Name them even where you are unsure — a guess marked as one is more
|
|
33
|
+
useful than an omission.]
|
|
34
|
+
|
|
35
|
+
## 4. Constraints
|
|
36
|
+
|
|
37
|
+
[What already bounds this: deadlines, policies, contracts, systems that cannot change, decisions
|
|
38
|
+
already taken elsewhere. Write "none known" rather than leaving it blank, so a reader can tell the
|
|
39
|
+
difference between no constraints and no thought about them.]
|
|
40
|
+
|
|
41
|
+
## 5. Open questions
|
|
42
|
+
|
|
43
|
+
[What you do not know. List them rather than guessing — discovery treats these as the ambiguities it
|
|
44
|
+
must resolve, so an honest question here is more valuable than a confident answer that turns out to be
|
|
45
|
+
wrong.]
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Implementation Plan: [FEATURE NAME]
|
|
2
|
+
|
|
3
|
+
**Feature:** [NNN-slug] · **Requirement:** [REQUIREMENT_PATH] · **Design:** [DESIGN_PATH] · **Maturity:** Draft · **Created:** [DATE]
|
|
4
|
+
|
|
5
|
+
> HOW. Reads [REQUIREMENT_PATH] and [DESIGN_PATH]. Resolve every `[NEEDS CLARIFICATION]` from the
|
|
6
|
+
> requirement here.
|
|
7
|
+
>
|
|
8
|
+
> Structure follows `references/ARTIFACT_FORMAT.md`: indexed sections carry a table above full
|
|
9
|
+
> `**Detail**`, the document-level `Maturity` is `Draft`, `In review` or `Approved`, the item-level
|
|
10
|
+
> `Status` is only `Live` or `Superseded → <ref>`, and superseded prose moves to §9.
|
|
11
|
+
|
|
12
|
+
## 1. Approach
|
|
13
|
+
|
|
14
|
+
[Chosen approach in 2–4 sentences; the key technical decisions.]
|
|
15
|
+
|
|
16
|
+
## 2. Constitution Check (GATE)
|
|
17
|
+
|
|
18
|
+
> Verify against both constitution tiers, tier-2 taking precedence — you reconcile them yourself;
|
|
19
|
+
> nothing merges them for you. Any violation = STOP and revise the approach before continuing.
|
|
20
|
+
> (Advisory by default; not the hard hook gate.)
|
|
21
|
+
|
|
22
|
+
- [ ] Complies with [PRINCIPLE]: [how]
|
|
23
|
+
- [ ] No violation of [PRINCIPLE]: [how]
|
|
24
|
+
|
|
25
|
+
**Result:** PASS / FAIL — [note]
|
|
26
|
+
|
|
27
|
+
## 3. Research & Decisions
|
|
28
|
+
|
|
29
|
+
<!-- D# only without a decision register; with one, list DEC-### instead (ARTIFACT_FORMAT.md §12). -->
|
|
30
|
+
- **D1:** [decision] — resolves [NEEDS CLARIFICATION: …]; rationale: [evidence].
|
|
31
|
+
|
|
32
|
+
## 4. Components & Changes
|
|
33
|
+
|
|
34
|
+
| ID | Change | Files | Phase | Status |
|
|
35
|
+
|---|---|---|---|---|
|
|
36
|
+
| CH1 | [one-line summary] | [path] | A | Live |
|
|
37
|
+
|
|
38
|
+
**Detail**
|
|
39
|
+
|
|
40
|
+
- **CH1** → [what changes and why, in full].
|
|
41
|
+
|
|
42
|
+
## 5. Data / Contracts
|
|
43
|
+
|
|
44
|
+
[schema, API, or interface pointers — or `N/A: [why]`.]
|
|
45
|
+
|
|
46
|
+
## 6. Risks & Mitigations
|
|
47
|
+
|
|
48
|
+
| ID | Risk | Mitigation | Status |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| RK1 | [risk] | [mitigation] | Live |
|
|
51
|
+
|
|
52
|
+
**Detail**
|
|
53
|
+
|
|
54
|
+
- **RK1** → [how it would actually manifest, and what the mitigation does or does not cover].
|
|
55
|
+
|
|
56
|
+
## 7. Validation Strategy
|
|
57
|
+
|
|
58
|
+
| Requirement | Verified by |
|
|
59
|
+
|---|---|
|
|
60
|
+
| FR-001 | [test, manual check, or gate] |
|
|
61
|
+
|
|
62
|
+
## 8. Tasks
|
|
63
|
+
|
|
64
|
+
> Dependency-ordered. `[P]` = parallel-safe with its phase siblings — siblings marked `[P]` must
|
|
65
|
+
> write disjoint `files:`, or they are not parallel-safe. `[US#]` = traces to a
|
|
66
|
+
> user story in requirement.md. The `- [ ]` checkboxes are the execution contract parsed by
|
|
67
|
+
> `/do-execute-plan` — keep the markers intact. `depends-on:` is optional — set it when a task
|
|
68
|
+
> depends on an external service that has no owning task in this same plan (not a service also
|
|
69
|
+
> touched by another task here); `/do-execute-plan --scaffold` reads it to know which services
|
|
70
|
+
> need a code frame generated. `external-contract:` is also optional — set it alongside `depends-on:`
|
|
71
|
+
> only when that dependency has no local repo (a vendor API, a SaaS integration) but *does* have a
|
|
72
|
+
> documented contract; points to a doc built from `templates/doflow/external-contract-template.md`, and
|
|
73
|
+
> tells `--scaffold` to generate a real frame from it instead of silently skipping a non-local
|
|
74
|
+
> dependency (the default when no `external-contract:` is set — not every dependency needs one).
|
|
75
|
+
|
|
76
|
+
### Repo Branch Plan
|
|
77
|
+
|
|
78
|
+
> Populate when this plan spans 2+ repos (a container workspace, not a monorepo) — derive `Repo`
|
|
79
|
+
> from each task's `files:` path *and* each task's `depends-on:` value the same way, by walking up
|
|
80
|
+
> to the nearest enclosing `.git` (a `depends-on:` value that resolves to no `.git` is skipped, not
|
|
81
|
+
> guessed); derive `Planned Branch` from `requirement.md`'s `**Ticket:**`
|
|
82
|
+
> field + this feature's slug (`feat/<TICKET>-<slug-description>`, or `feat/<slug>` if no ticket is
|
|
83
|
+
> recorded); `Role` is `primary` (owns a task here) or `dependency-only` (referenced only via
|
|
84
|
+
> `depends-on:`). For a single-repo plan, write "N/A: single-repo feature" instead of the table.
|
|
85
|
+
|
|
86
|
+
| Repo | Planned Branch | Role |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| [repo path] | `feat/[branch]` | primary |
|
|
89
|
+
|
|
90
|
+
### Task Summary
|
|
91
|
+
|
|
92
|
+
<!-- Phase-level orientation only. The per-task checklist below stays the single source of truth
|
|
93
|
+
for tasks and is never mirrored into a per-task index table — duplicating every task line is
|
|
94
|
+
the drift this structure exists to prevent, in the file where drift costs most.
|
|
95
|
+
|
|
96
|
+
The heading is "Task Summary", not "Phase Summary": the latter collides with the
|
|
97
|
+
"### Phase <X>" pattern used to find phase sections. Each row's task count must match the
|
|
98
|
+
`- [ ]` lines under its phase heading. -->
|
|
99
|
+
|
|
100
|
+
| Phase | Tasks | Delivers | [P] |
|
|
101
|
+
|---|---|---|---|
|
|
102
|
+
| A | 2 | [what this phase produces] | yes |
|
|
103
|
+
| B | 1 | [what this phase produces] | no |
|
|
104
|
+
|
|
105
|
+
### Dependency Graph
|
|
106
|
+
|
|
107
|
+
<!-- Phases, the dependency order between tasks, and which tasks carry `[P]`. Orientation only:
|
|
108
|
+
the per-task `- [ ]` checklist below stays the single source of truth and this diagram is
|
|
109
|
+
never a second inventory of it. `references/DIAGRAM_GUIDE.md` governs the node and edge
|
|
110
|
+
ceilings and the direction convention; write "N/A: [why]" for a plan too small to have
|
|
111
|
+
meaningful ordering. -->
|
|
112
|
+
|
|
113
|
+
```mermaid
|
|
114
|
+
flowchart LR
|
|
115
|
+
subgraph PA["Phase A — [name]"]
|
|
116
|
+
A1["A.1 [P]<br/>[task]"]
|
|
117
|
+
A2["A.2<br/>[task]"]
|
|
118
|
+
end
|
|
119
|
+
subgraph PB["Phase B — [name]"]
|
|
120
|
+
B1["B.1 [P]<br/>[task]"]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
A1 -->|"blocks"| A2
|
|
124
|
+
A2 --> PB
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Phase A — [name]
|
|
128
|
+
|
|
129
|
+
- [ ] A.1 [P] [US1] [task] — owner: [agent]; files: [paths]; depends-on: [service, optional]; external-contract: [doc path, optional]
|
|
130
|
+
- [ ] A.2 [US1] [task, depends A.1] — owner: [agent]; files: [paths]; depends-on: [service, optional]; external-contract: [doc path, optional]
|
|
131
|
+
|
|
132
|
+
### Phase B — [name]
|
|
133
|
+
|
|
134
|
+
- [ ] B.1 [P] [US2] [task] — owner: [agent]; files: [paths]; depends-on: [service, optional]; external-contract: [doc path, optional]
|
|
135
|
+
|
|
136
|
+
### Checkpoints
|
|
137
|
+
|
|
138
|
+
- After Phase A: [validation step]; commit `[message]`
|
|
139
|
+
|
|
140
|
+
### Completion criteria
|
|
141
|
+
|
|
142
|
+
- [ ] All tasks checked
|
|
143
|
+
- [ ] Validation gates pass
|
|
144
|
+
- [ ] state.md updated
|
|
145
|
+
|
|
146
|
+
## 9. History
|
|
147
|
+
|
|
148
|
+
<!-- Superseded decisions or tasks move here; the index row above stays as a tombstone with
|
|
149
|
+
`Superseded → <ref>`. -->
|
|
150
|
+
|
|
151
|
+
None — initial version.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# [Stage] Dialogue — Round [N]
|
|
2
|
+
|
|
3
|
+
**Feature:** [NNN-slug] · **Stage:** [intention|design|plan] · **Round:** [N]
|
|
4
|
+
|
|
5
|
+
> The one recurring shape every `intention/*-question.md`, `design/*-question.md` and
|
|
6
|
+
> `plan/*-question.md` file uses: the Socratic dialogue transcript for a single round of a chain
|
|
7
|
+
> stage's `AskUserQuestion` loop. This is a dialogue transcript, not an ID-bearing normative
|
|
8
|
+
> artifact — out of `references/ARTIFACT_FORMAT.md`'s index/detail scope, the same way that
|
|
9
|
+
> reference's own intro already carves out `state.md`.
|
|
10
|
+
>
|
|
11
|
+
> Not to be confused with the differently-named `{stage}-questions.md` convention in
|
|
12
|
+
> `rules/RULE_04_QUESTIONS.md`: that file is a *request for input*, written for a
|
|
13
|
+
> non-interactive harness and awaiting a `[Answer]:` tag before the run can continue. This one is
|
|
14
|
+
> the opposite direction — a completed *record* of a round that already happened, filed after the
|
|
15
|
+
> user answered, never awaiting anything.
|
|
16
|
+
|
|
17
|
+
## Question 1 — [question text as asked]
|
|
18
|
+
|
|
19
|
+
**Options offered:**
|
|
20
|
+
- [option A]
|
|
21
|
+
- [option B]
|
|
22
|
+
- [option C]
|
|
23
|
+
- Other (free text)
|
|
24
|
+
|
|
25
|
+
**Answer:** [the option the user picked, or their free-text answer, verbatim]
|
|
26
|
+
|
|
27
|
+
<!-- If the user picked "Decide for me" (or the harness's equivalent defer choice) instead of a
|
|
28
|
+
normal option, do NOT record it under "Answer" as if it were one. Record it as:
|
|
29
|
+
|
|
30
|
+
**Resolved via:** recorded assumption — [one-line rationale for the default taken]
|
|
31
|
+
|
|
32
|
+
matching how requirement-template.md §8 Assumptions already documents a deferred answer: the
|
|
33
|
+
rationale that was written down, not the fact that the user declined to choose. -->
|
|
34
|
+
|
|
35
|
+
## Question 2 — [question text as asked]
|
|
36
|
+
|
|
37
|
+
**Options offered:**
|
|
38
|
+
- [option A]
|
|
39
|
+
- [option B]
|
|
40
|
+
|
|
41
|
+
**Answer:** [verbatim]
|
|
42
|
+
|
|
43
|
+
<!-- Repeat one "## Question N" block per question actually asked this round — omit blocks for
|
|
44
|
+
questions that were not asked rather than leaving placeholders behind.
|
|
45
|
+
|
|
46
|
+
Naming: one file per Socratic round, numbered `<stage-prefix>-NN-question.md`, zero-padded to
|
|
47
|
+
two digits:
|
|
48
|
+
- intention/brainstorm-01-question.md, intention/brainstorm-02-question.md, ...
|
|
49
|
+
- design/design-01-question.md, design/design-02-question.md, ...
|
|
50
|
+
- plan/plan-01-question.md, plan/plan-02-question.md, ...
|
|
51
|
+
A new round is always a new file — never appended to a prior round's file. -->
|