@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,155 @@
|
|
|
1
|
+
# Task Readiness Gate
|
|
2
|
+
|
|
3
|
+
Pre-implementation contract gate. The contract is versioned and lives inside the runtime, not on
|
|
4
|
+
this page and not in your repository: **query it through the verb, don't recall it.** The class
|
|
5
|
+
names and requirement ids below are reproduced for orientation only — when this page and the
|
|
6
|
+
command disagree, the command is right.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
"$DOFLOW" readiness --task-class <class> --task-id <id> # human-readable report
|
|
10
|
+
"$DOFLOW" readiness --task-class <class> --task-id <id> --json
|
|
11
|
+
"$DOFLOW" evidence --task-id <id> # what has been recorded so far
|
|
12
|
+
"$DOFLOW" evidence --task-id <id> --action add --batch <file> # record this stage's batch
|
|
13
|
+
"$DOFLOW" claim --task-id <id> --action list # and what has been concluded
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`$DOFLOW` is the handle `SKILL.md` step 1 resolves; run these from the project the task belongs to,
|
|
17
|
+
because evidence and claims are per-project state under that repo's `.doflow/state/evidence/`, not
|
|
18
|
+
global.
|
|
19
|
+
|
|
20
|
+
Every `readiness` call records its evaluation under `.doflow/state/readiness/`, replacing the
|
|
21
|
+
task's earlier one. The implementation handoff and `complete-stage` read that record and refuse
|
|
22
|
+
without a `READY` one made before the call; they evaluate nothing themselves, and the refusal names
|
|
23
|
+
the `readiness` command to run. A `verify` report that would be `PASS` on a task whose implementation
|
|
24
|
+
stage is still pending is `INCONCLUSIVE` while that record is missing or not `READY`.
|
|
25
|
+
|
|
26
|
+
**Both `--task-class` and `--task-id` are required on `readiness`.** Omitting either exits 2 with
|
|
27
|
+
the valid set named — the verb refuses rather than grading the wrong class or the wrong task.
|
|
28
|
+
`readiness` then exits **0 for every state it can compute**, so branch on the `state` field; a zero
|
|
29
|
+
exit says the contract was evaluated, not that it was met.
|
|
30
|
+
|
|
31
|
+
## Task classes
|
|
32
|
+
|
|
33
|
+
Pass the **key**, not the display name — `--task-class feature`, not `"New Feature"`.
|
|
34
|
+
|
|
35
|
+
| Key | Contract | Requirements |
|
|
36
|
+
| :--- | :--- | :--- |
|
|
37
|
+
| `bug` | Bug Fix Readiness | `reproduction`, `affected_code`, `root_cause`, `blast_radius`, `regression_verification` |
|
|
38
|
+
| `feature` | Feature Implementation Readiness | `scope_clear`, `affected_components`, `verification_plan` |
|
|
39
|
+
| `refactor` | Refactoring Readiness | `architecture_mapped`, `invariants_captured`, `baseline_tests`, `blast_radius` |
|
|
40
|
+
| `trivial-edit` | Trivial Edit Readiness | `target_identified`, `scope_verified` |
|
|
41
|
+
| `dependency-change` | Dependency Change Readiness | `compatibility_checked`, `usage_impact`, `verification_command` |
|
|
42
|
+
|
|
43
|
+
These five are the only templates that exist. Every other declared task class has **no** readiness
|
|
44
|
+
template, by design: those workflows author no source, so there is nothing for an implementation
|
|
45
|
+
contract to gate. Which classes those are is a property of the resolved workflow —
|
|
46
|
+
`requiresImplementationReadiness: false` — not a list to carry here. The verb exits 1 on them and lists the valid
|
|
47
|
+
keys — that is the right answer, not a gap. Any other unknown class fails the same way, so a typo
|
|
48
|
+
is loud rather than silently evaluating the wrong contract.
|
|
49
|
+
|
|
50
|
+
## Reading the report
|
|
51
|
+
|
|
52
|
+
Each unmet requirement carries a `recommendedAction` naming the **intent** and **capability** that
|
|
53
|
+
would satisfy it — `blast_radius`, for example, recommends `estimate-blast-radius` /
|
|
54
|
+
`code.impact-analysis`. Resolve it against this machine with
|
|
55
|
+
`"$DOFLOW" route --intent <intent> --json`, which reports the provider that actually answers here
|
|
56
|
+
and its fallback chain, then go gather that evidence. The gate tells you what is missing *and* how
|
|
57
|
+
to go get it.
|
|
58
|
+
|
|
59
|
+
| State | Meaning |
|
|
60
|
+
| :--- | :--- |
|
|
61
|
+
| `READY` | Every mandatory prerequisite is verified by fresh evidence |
|
|
62
|
+
| `NEEDS_EVIDENCE` | Contract understood, prerequisites not yet established |
|
|
63
|
+
| `NEEDS_USER_DECISION` | A design or architectural decision is owed by the user |
|
|
64
|
+
| `BLOCKED` | A claim on this task is `conflicted` — evidence disagrees with itself |
|
|
65
|
+
|
|
66
|
+
These four are the whole vocabulary. There is no fifth state, no partial state, and no numeric or
|
|
67
|
+
percentage rendering of any of them — a gate that emits a number invites the reader to round it up.
|
|
68
|
+
All four are reachable through the seam; the next section says exactly which input produces each.
|
|
69
|
+
|
|
70
|
+
**What to do about a state is not this page's call, and not yours** — the runtime owns the one
|
|
71
|
+
stage-entry policy and every report carries its answer as `stageEntry: {decision, reason}`
|
|
72
|
+
(`Stage Entry:` in the human report), computed from the state and the execution mode you declare
|
|
73
|
+
with `--mode`:
|
|
74
|
+
|
|
75
|
+
| | `--mode workflow` (default) | `--mode standalone` |
|
|
76
|
+
| :--- | :--- | :--- |
|
|
77
|
+
| `READY` | `ENTER` | `ENTER` |
|
|
78
|
+
| `NEEDS_EVIDENCE` | `GATHER_FIRST` — gather the named requirements before entering the stage | `ENTER` — the unmet contract is reported, not enforced; relay it in the result |
|
|
79
|
+
| `NEEDS_USER_DECISION` | `ASK_USER` — ask through `RULE_04_QUESTIONS.md` and wait | `ASK_USER` — same; a small edit does not cure an owed decision |
|
|
80
|
+
| `BLOCKED` | `STOP` — never modify source; surface which claim and which evidence | `STOP` — same |
|
|
81
|
+
|
|
82
|
+
`workflow` is an orchestrated run (`do-flow`, `do-execute-plan`); `standalone` is a declared
|
|
83
|
+
one-off edit (`do-implement`, `do-diagnose --fix`). The mode is a flag, never an inference — an
|
|
84
|
+
absent evidence record is not a statement of intent, so the default fails closed to `workflow`.
|
|
85
|
+
Act on `decision`; do not re-derive the answer from `state`, because a policy re-derived in prose
|
|
86
|
+
is exactly how three skills came to disagree about the same state.
|
|
87
|
+
|
|
88
|
+
The engine fails closed: a requirement it cannot evaluate reads as unmet, not satisfied. A gate that
|
|
89
|
+
guesses in its own favour is worse than no gate, because it reports a verdict it never earned.
|
|
90
|
+
|
|
91
|
+
## What produces each state
|
|
92
|
+
|
|
93
|
+
`readiness` grades three inputs. Knowing which one moved a verdict is the difference between a
|
|
94
|
+
contract that was met and one that was described as met.
|
|
95
|
+
|
|
96
|
+
| Input | Written by | What it can satisfy |
|
|
97
|
+
| :--- | :--- | :--- |
|
|
98
|
+
| Evidence | `evidence --task-id <id> --action add` — one item from `--kind/--provenance/--provider/--capability/--locator/--content`, plus `--establishes <req-id[,req-id]>` and (for executions) `--observed-command`/`--observed-exit`; or a whole stage from `--batch <file>` | every requirement declaring evidence kinds: `reproduction`, `affected_code`, `blast_radius`, `affected_components`, `architecture_mapped`, `baseline_tests`, `target_identified`, `compatibility_checked`, `usage_impact` |
|
|
99
|
+
| Claims | `claim --action add` (with `--role root-cause` where the contract names a role), promoted by `claim --action link` | `root_cause`, the one requirement that demands a `supported` claim **in the `root-cause` role**. A `conflicted` claim additionally forces `BLOCKED` for the whole task |
|
|
100
|
+
| Caller-stated profile | stated on `readiness`, not on `handoff`: `readiness --verification-plan <text>` · `--scope <text>` · `--invariants <text>` · `--user-decision-pending` | `verification_plan`, `verification_command`, `regression_verification` (from `--verification-plan`); `scope_clear`, `scope_verified`, `invariants_captured` (from `--scope` or `--invariants`) |
|
|
101
|
+
|
|
102
|
+
So each state arrives as follows.
|
|
103
|
+
|
|
104
|
+
- **`NEEDS_EVIDENCE`** — the default answer for a task with nothing recorded. Every required
|
|
105
|
+
entry the batch has not covered and no stated input satisfies is listed with its
|
|
106
|
+
`recommendedAction`. This is the checklist, not a malfunction.
|
|
107
|
+
|
|
108
|
+
An item counts toward a requirement only when it is `extracted` **and** names that requirement
|
|
109
|
+
in `establishes` — kind alone is a category, and an inferred item is analysis, not measurement.
|
|
110
|
+
Where the contract expects an execution (`reproduction`, `baseline_tests`), the item must carry
|
|
111
|
+
the observation `{command, exitCode}` it records, and `baseline_tests` additionally requires
|
|
112
|
+
exit 0: a run that failed is reported as the failure it was. A bug reproduction succeeds by
|
|
113
|
+
observing the expected failure, so a non-zero exit there is the evidence, not a defect in it.
|
|
114
|
+
- **`READY`** — recorded evidence plus stated inputs cover every required entry. Each satisfied
|
|
115
|
+
requirement names the evidence ids that satisfied it in `evidenceIds`; a requirement satisfied
|
|
116
|
+
by a *stated* input carries an empty `evidenceIds`, because nothing backs it but the statement.
|
|
117
|
+
- **`BLOCKED`** — a claim on the task is `conflicted`: it carries both fresh supporting and fresh
|
|
118
|
+
contradicting evidence. Blocking is checked before requirements, so `BLOCKED` outranks
|
|
119
|
+
`NEEDS_EVIDENCE` — a blocked task is not "also missing things", it is stopped.
|
|
120
|
+
- **`NEEDS_USER_DECISION`** — you passed `--user-decision-pending`. It returns before any
|
|
121
|
+
requirement is examined, so that report carries no requirements breakdown. It records that a
|
|
122
|
+
decision is owed; it is not a way to skip the gate.
|
|
123
|
+
|
|
124
|
+
**Measured and stated are reported apart, and must stay apart when you repeat the verdict.** The
|
|
125
|
+
JSON report lists every stated input under `callerAsserted`; the human report prints
|
|
126
|
+
`Caller-stated: … (asserted on the command line, not established by evidence)`. Pass those flags
|
|
127
|
+
when they are true — that is what they are for — but a `READY` that rests partly on them is only as
|
|
128
|
+
good as the statement, and saying so is the difference between reporting a verdict and laundering
|
|
129
|
+
one.
|
|
130
|
+
|
|
131
|
+
Three limits still hold, and none of them is a reason to work around the gate:
|
|
132
|
+
|
|
133
|
+
- Only evidence whose `freshness.status` is `FRESH` counts. The write measures freshness itself —
|
|
134
|
+
HEAD commit, sha256 of the located file, `observedAt` — and records `null` for anything it cannot
|
|
135
|
+
establish, rather than a value that happens to parse. Every `readiness` read and every gated
|
|
136
|
+
stage completion re-checks those stamps against the tree as it stands — the same evaluation at
|
|
137
|
+
both boundaries — so an item whose file has changed since it was read reports `STALE` and stops
|
|
138
|
+
counting toward the requirement it named, and the report names it. Recording fresh replacement
|
|
139
|
+
evidence alone does not clear this: a stale item stays in the ledger and keeps forcing
|
|
140
|
+
`NEEDS_EVIDENCE` at the task level until it is explicitly retired. Once the fresh replacement is
|
|
141
|
+
recorded, supersede the stale item: `evidence --action supersede --evidence-id <stale-id>
|
|
142
|
+
--replaced-by <fresh-id>`. Do not argue with the verdict by any other route — not by re-adding the
|
|
143
|
+
same fact under a new id and hoping the old one stops mattering, and never by editing the local
|
|
144
|
+
ledger file directly.
|
|
145
|
+
- `claim --action link` refuses an evidence id the ledger does not hold (exit 2). Record the batch
|
|
146
|
+
first, then link; a link is not a way to reference evidence you have not written.
|
|
147
|
+
- The gate grades this task's ledger only. A different `--task-id` reads a different record, and
|
|
148
|
+
the verdict will look confident either way.
|
|
149
|
+
|
|
150
|
+
What the gate delivers is worth running for its own sake: the exact per-class contract, which
|
|
151
|
+
requirements are unmet, and the intent and capability that would satisfy each one. Act on it as the
|
|
152
|
+
checklist it is. Do not halt indefinitely on a persistent `NEEDS_EVIDENCE` — record what you
|
|
153
|
+
actually established, state which requirements it covers, and say what remains. And do not write
|
|
154
|
+
`READY` yourself. The gate did not say it, and saying it on the gate's behalf is precisely the
|
|
155
|
+
failure this page exists to prevent.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Step 3 — positioning the run and dispatching on gate state
|
|
2
|
+
|
|
3
|
+
The gate-state dispatch behind `/do-execute-plan`'s step 3. The step's own purpose — which gate
|
|
4
|
+
stands before this stage, and why this skill is where it gets answered — stays in `SKILL.md`; what
|
|
5
|
+
follows is the call that positions the run and every branch off its response.
|
|
6
|
+
|
|
7
|
+
- `<slug>` is step 1's `feature_slug`; `<class>` is the class step 2's `classify` call accepted;
|
|
8
|
+
`<stage id>` is the id of the entry in that call's `workflow.stages[]` whose `skill` is
|
|
9
|
+
`do-execute-plan` (`implementation` in the `feature` workflow) — read it off that response,
|
|
10
|
+
never hardcode a guess. One call positions the run: it starts one when none exists yet (an
|
|
11
|
+
old-layout feature, or a chain that skipped straight here), backfills any earlier non-mutating
|
|
12
|
+
stage as a routine handoff (marked `backfilled` in the trail, distinct from a stage its own
|
|
13
|
+
skill actually completed), and stops on the node this skill must act on — or on any gate in the
|
|
14
|
+
way, `clarification`-kind included, since only a human or that gate's own owning skill may
|
|
15
|
+
decide it.
|
|
16
|
+
```bash
|
|
17
|
+
"$DOFLOW" orchestrate --action catch-up --task-id "<slug>" --task-class "<class>" --stage "<stage id>" --note "entering implementation" --json
|
|
18
|
+
```
|
|
19
|
+
- Branch on the response's `caughtUpTo` / `reason`, not on the exit code:
|
|
20
|
+
- **`reason` is `awaiting-gate:<gate id>`** — **first check `<gate id>` against step 2's
|
|
21
|
+
`<expected gate id>`.** They match in the ordinary case (`gate-a`, standing immediately before
|
|
22
|
+
this stage) — present `awaitingGate.prompt` to the user through `AskUserQuestion` as a plain
|
|
23
|
+
go/no-go, the same way step 1's prerequisite gate stops and asks rather than assuming. On yes:
|
|
24
|
+
```bash
|
|
25
|
+
"$DOFLOW" orchestrate --action decide-gate --task-id "<slug>" --gate "<awaitingGate.gateId>" --decision approve --note "<the user's own answer, one line>" --json
|
|
26
|
+
```
|
|
27
|
+
Then re-run the same `catch-up` call to land on this stage. If that re-run itself stops on
|
|
28
|
+
*another* `awaiting-gate:`, re-apply this same check from the top — do not assume one approval
|
|
29
|
+
clears the path; walk it exactly as far as it goes. On no: **stop the whole run here.** The gate
|
|
30
|
+
is terminal in the same sense step 1's prerequisite gate is — report that the gate was not
|
|
31
|
+
approved and dispatch nothing.
|
|
32
|
+
**They do not match** — this is a gate belonging to an earlier stage, not this one. `gate-0`,
|
|
33
|
+
left open by an aborted `/do-brainstorm` session, is exactly this case: it now surfaces here
|
|
34
|
+
(catch-up stops on every gate, `clarification`-kind included) instead of being silently
|
|
35
|
+
resolved on the way past. Report the gate id plainly and stop, the same way `do-design`,
|
|
36
|
+
`do-plan`, `do-test` and `do-brainstorm` already handle a gate that isn't theirs. Never approve
|
|
37
|
+
a gate this stage did not expect regardless of what the user answers — a "yes" given in an
|
|
38
|
+
implementation context is not an answer to a different stage's clarification prompt, and
|
|
39
|
+
`reject`'s "terminate the run outright" semantics are the wrong shape for a gate this stage has
|
|
40
|
+
no standing to decide either way.
|
|
41
|
+
- **`caughtUpTo` is this stage id** (`reason: reached-candidate`) — the run is positioned exactly
|
|
42
|
+
here and there is no gate to ask. That covers three cases at once and needs no special-casing
|
|
43
|
+
between them: `/do-flow` already recorded the user's answer to that gate while driving the
|
|
44
|
+
chain, this skill just recorded it in the branch above, or the accepted class declares no gate
|
|
45
|
+
at all — `feature` is the only shipped class that declares any. Never ask a gate the run does
|
|
46
|
+
not report as open; that is exactly the double-prompt this branch exists to prevent. Carry this
|
|
47
|
+
`caughtUpTo` value to step 10; it is the stage id that call completes.
|
|
48
|
+
- **`reason` is `blocked-on-mutating-stage:<id>`** — a *different* source-mutating stage sits
|
|
49
|
+
ahead of this one and its own skill has not executed it. Name `<id>`, report the block plainly,
|
|
50
|
+
and dispatch nothing.
|
|
51
|
+
- **`reason` starts with `already-completed:`** — this stage was already recorded on an earlier
|
|
52
|
+
run of this skill (a `--scope resume` after an interrupted run, say). Use `annotate` instead of
|
|
53
|
+
`complete-stage`:
|
|
54
|
+
```bash
|
|
55
|
+
"$DOFLOW" orchestrate --action annotate --task-id "<slug>" --node "<stage id>" --note "<what changed on this re-run>" --json
|
|
56
|
+
```
|
|
57
|
+
- **`reason` is `run-completed` or `run-rejected`** — the run is finished and takes no further
|
|
58
|
+
stage. Report it and stop.
|
|
59
|
+
- Positioning the run is advisory to the trail, not to the work: if the `catch-up` call itself
|
|
60
|
+
fails for a reason outside this flow's control (an unwritable local state directory, say),
|
|
61
|
+
report the failure plainly and continue — the hard prerequisite gate step 1 already enforced is
|
|
62
|
+
what governs whether this run may proceed. A user's explicit "no" above is not that case; it
|
|
63
|
+
stops the run.
|