@khoavu882/doflow 2.0.0-beta.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -11
- package/bin/doflow.js +21 -11
- package/core/.antigravity-plugin/plugin.json +1 -2
- package/core/.claude-plugin/plugin.json +1 -1
- package/core/.codex-plugin/plugin.json +1 -1
- package/core/.plugin/plugin.json +1 -1
- package/core/harnesses/claude/hooks/lib.sh +43 -24
- package/core/harnesses/claude/hooks/permission-audit.sh +3 -0
- package/core/harnesses/claude/hooks/post-compact.sh +35 -32
- package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
- package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
- package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
- package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
- package/core/harnesses/claude/hooks/session-end.sh +23 -10
- package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
- package/core/harnesses/claude/settings/settings.json +18 -0
- package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
- package/core/harnesses/codex/agents/core-implementer.toml +1 -0
- package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
- package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
- package/core/harnesses/codex/agents/research-writer.toml +1 -1
- package/core/harnesses/codex/agents/reviewer.toml +10 -0
- package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
- package/core/harnesses/codex/agents/system-architect.toml +1 -1
- package/core/harnesses/codex/hooks/lib.sh +44 -25
- package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
- package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
- package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
- package/core/harnesses/codex/hooks/subagent-audit.sh +1 -0
- package/core/harnesses/copilot/hooks/doflow-lib.sh +93 -0
- package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-pre-bash-guard.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow.json +57 -0
- package/core/harnesses/kiro/agents/doflow.json +1 -1
- package/core/harnesses/kiro/hooks/lib.sh +26 -6
- package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +1 -0
- package/core/harnesses/kiro/hooks/pre-bash-guard.sh +1 -0
- package/core/harnesses/kiro/hooks/pre-implement-gate.sh +1 -0
- package/core/harnesses/kiro/hooks/session-start.sh +1 -0
- package/core/harnesses/kiro/hooks/stop-check.sh +1 -0
- package/core/harnesses/pi/extensions/doflow-guard.js +8 -0
- package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +0 -1
- package/core/harnesses/shared/hooks/bridge/bridge.sh +102 -9
- package/core/harnesses/shared/hooks/bridge/envelope.jq +87 -18
- package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
- package/core/harnesses/shared/hooks/bridge/respond.sh +10 -2
- package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
- package/core/harnesses/shared/hooks/policies/capture-failure.sh +48 -15
- package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
- package/core/harnesses/shared/hooks/policies/contract.sh +3 -0
- package/core/harnesses/shared/hooks/policies/deny-json.sh +2 -11
- package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
- package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
- package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
- package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
- package/core/harnesses/shared/hooks/policies/lib.sh +63 -40
- package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +3 -2
- package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +213 -12
- package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +114 -38
- package/core/harnesses/shared/hooks/policies/session-context.sh +30 -1
- package/core/harnesses/shared/hooks/policies/stop-check.sh +20 -9
- package/core/harnesses/shared/hooks/policies/subagent-audit.sh +5 -2
- package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
- package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +60 -155
- package/core/harnesses/shared/hooks/stream-hook-runner.js +47 -8
- package/core/harnesses/shared/locator/doflow-run +2 -3
- package/core/registry/advice.json +3 -3
- package/core/registry/assets.json +55 -82
- package/core/registry/capabilities.json +12 -0
- package/core/registry/contracts.json +58 -31
- package/core/registry/contribution-points.json +32 -0
- package/core/registry/gates.json +32 -0
- package/core/registry/guidance-caps.json +40 -0
- package/core/registry/harnesses.json +1442 -363
- package/core/registry/lifecycle.json +485 -304
- package/core/registry/mcp.json +5 -1
- package/core/registry/models.json +7 -1
- package/core/registry/package-templates/README.md +19 -0
- package/core/registry/package-templates/agent/files/agent.md +9 -0
- package/core/registry/package-templates/agent/template.json +4 -0
- package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
- package/core/registry/package-templates/capability-provider/template.json +11 -0
- package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
- package/core/registry/package-templates/debate-preset/template.json +4 -0
- package/core/registry/package-templates/review-preset/files/preset.json +30 -0
- package/core/registry/package-templates/review-preset/template.json +4 -0
- package/core/registry/package-templates/skill/files/SKILL.md +8 -0
- package/core/registry/package-templates/skill/template.json +4 -0
- package/core/registry/package-templates/worker/files/worker.json +92 -0
- package/core/registry/package-templates/worker/template.json +11 -0
- package/core/registry/packages/doflow/doflow-package.json +15 -0
- package/core/registry/packages/doflow/presets/debate-3.json +26 -0
- package/core/registry/protocols.json +61 -0
- package/core/registry/routes.json +17 -0
- package/core/registry/rules.json +431 -0
- package/core/registry/settings.json +276 -0
- package/core/registry/storage.json +679 -31
- package/core/registry/telemetry.json +236 -0
- package/core/registry/transcripts.json +142 -0
- package/core/registry/verification.json +76 -1
- package/core/registry/workflows.json +55 -0
- package/core/shared/agent-specs/core-implementer.md +3 -0
- package/core/shared/agent-specs/delivery-lead.md +68 -0
- package/core/shared/agent-specs/quality-guardian.md +5 -1
- package/core/shared/agent-specs/research-writer.md +10 -3
- package/core/shared/agent-specs/reviewer.md +53 -0
- package/core/shared/agent-specs/spec-analyst.md +5 -6
- package/core/shared/agent-specs/system-architect.md +5 -1
- package/core/shared/guidance/DOFLOW_CORE.md +1 -5
- package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
- package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
- package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
- package/core/shared/guidance/pointers/codex.md +1 -4
- package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
- package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
- package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
- package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
- package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
- package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
- package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
- package/core/shared/guidance/references/ORCHESTRATION.md +1 -2
- package/core/shared/guidance/rules/RULES.md +45 -0
- package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
- package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
- package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
- package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
- package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
- package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
- package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
- package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
- package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
- package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
- package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
- package/core/shared/scripts/doflow/bash/validate-artifacts.sh +48 -4
- package/core/shared/scripts/doflow/bin/doflow-run +149 -34
- package/core/shared/skills/do/SKILL.md +12 -10
- package/core/shared/skills/do/references/advice_calls.md +26 -0
- package/core/shared/skills/do/references/pm_routing.md +1 -2
- package/core/shared/skills/do/references/program_mode.md +31 -0
- package/core/shared/skills/do-brainstorm/SKILL.md +20 -74
- package/core/shared/skills/do-brainstorm/references/handoff_branches.md +35 -0
- package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
- package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
- package/core/shared/skills/do-code-review/SKILL.md +41 -144
- package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
- package/core/shared/skills/do-code-review/references/tools.md +90 -0
- package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
- package/core/shared/skills/do-design/SKILL.md +18 -17
- package/core/shared/skills/do-diagnose/SKILL.md +14 -4
- package/core/shared/skills/do-document/SKILL.md +11 -1
- package/core/shared/skills/do-document/references/deep_research.md +1 -2
- package/core/shared/skills/do-document/references/embedded-research.md +18 -6
- package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
- package/core/shared/skills/do-execute-plan/SKILL.md +15 -58
- package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
- package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
- package/core/shared/skills/do-execute-plan/references/readiness_gate.md +26 -1
- package/core/shared/skills/do-execute-plan/references/run_position.md +13 -1
- package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
- package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
- package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
- package/core/shared/skills/do-flow/SKILL.md +8 -9
- package/core/shared/skills/do-flow/references/task_classes.md +2 -2
- package/core/shared/skills/do-git/SKILL.md +4 -0
- package/core/shared/skills/do-implement/SKILL.md +4 -7
- package/core/shared/skills/do-plan/SKILL.md +26 -15
- package/core/shared/skills/do-test/SKILL.md +7 -4
- package/core/shared/templates/doflow/constitution-template.md +9 -3
- package/core/shared/templates/doflow/data-model-template.md +1 -1
- package/core/shared/templates/doflow/design-template.md +113 -16
- package/core/shared/templates/doflow/plan-template.md +11 -10
- package/core/shared/templates/doflow/question-log-template.md +14 -2
- package/core/shared/templates/doflow/requirement-template.md +1 -1
- package/core/worker-evidence/antigravity/checks.json +14 -0
- package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
- package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
- package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
- package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
- package/core/worker-evidence/codex/checks.json +38 -0
- package/package.json +10 -6
- package/src/adapters/antigravity/index.js +143 -66
- package/src/adapters/claude/index.js +24 -4
- package/src/adapters/codex/agents.js +25 -15
- package/src/adapters/codex/index.js +48 -13
- package/src/adapters/codex/native-projection.js +6 -2
- package/src/adapters/copilot/index.js +58 -23
- package/src/adapters/copy-tree.js +290 -44
- package/src/adapters/guidance-manifest.js +71 -0
- package/src/adapters/guidance-pointer.js +19 -0
- package/src/adapters/hook-commands.js +6 -10
- package/src/adapters/index.js +1 -0
- package/src/adapters/kiro/index.js +23 -12
- package/src/adapters/opencode/index.js +8 -8
- package/src/adapters/pi/hooks.js +2 -1
- package/src/adapters/pi/index.js +14 -7
- package/src/adapters/resolve-source.js +26 -2
- package/src/cli/commands/install.js +2 -1
- package/src/cli/commands/reconcile.js +53 -9
- package/src/cli/commands/remove.js +2 -2
- package/src/cli/commands/rollback.js +6 -3
- package/src/cli/commands/self-update.js +18 -9
- package/src/cli/commands/status.js +21 -2
- package/src/cli/commands/ui.js +99 -0
- package/src/cli/commands/update.js +2 -1
- package/src/cli/index.js +322 -29
- package/src/cli/runtime-commands.js +209 -57
- package/src/cli/shared.js +0 -2
- package/src/helper/git.js +1 -1
- package/src/helper/guardrails.js +1 -1
- package/src/helper/marker-merge.js +31 -13
- package/src/helper/package-ids.js +37 -0
- package/src/helper/semver.js +94 -0
- package/src/install/backup.js +105 -15
- package/src/install/context.js +1 -1
- package/src/install/targets.js +31 -16
- package/src/lifecycle/coverage.js +20 -3
- package/src/lifecycle/hook-tier.js +160 -0
- package/src/lifecycle/index.js +412 -78
- package/src/lifecycle/retired-harnesses.js +318 -0
- package/src/lifecycle/view.js +35 -15
- package/src/registry/index.js +551 -26
- package/src/registry/worker-ids.js +45 -0
- package/src/release/build-package.js +0 -3
- package/src/release/docs-blocks.js +492 -0
- package/src/release/preflight.js +425 -0
- package/src/release/rehearse.js +401 -0
- package/src/release/release-workflow.js +733 -0
- package/src/release/sync-plugin-versions.js +43 -7
- package/src/runtime/advice/bench-gate.js +25 -0
- package/src/runtime/advice/cli.js +59 -16
- package/src/runtime/advice/client.js +32 -9
- package/src/runtime/advice/config.js +98 -133
- package/src/runtime/advice/doctor.js +1 -1
- package/src/runtime/advice/elevation.js +97 -0
- package/src/runtime/advice/endpoint-guard.js +9 -3
- package/src/runtime/advice/mode.js +37 -0
- package/src/runtime/advice/record.js +18 -5
- package/src/runtime/advice/registry.js +4 -1
- package/src/runtime/advice/shadow-config.js +229 -0
- package/src/runtime/advice/shadow-dispatcher.js +276 -0
- package/src/runtime/brief-rules.js +81 -0
- package/src/runtime/brief-tools.js +111 -34
- package/src/runtime/candidate.js +20 -11
- package/src/runtime/capabilities/executor.js +450 -0
- package/src/runtime/capabilities/loopback.js +41 -0
- package/src/runtime/capabilities/sanitizer.js +88 -0
- package/src/runtime/capability-router.js +135 -3
- package/src/runtime/checkouts.js +73 -11
- package/src/runtime/claims.js +13 -7
- package/src/runtime/cli.js +196 -19
- package/src/runtime/config-home.js +42 -0
- package/src/runtime/context/arbitrate.js +767 -0
- package/src/runtime/context/delivery-store.js +4 -6
- package/src/runtime/context/emission-rules.js +118 -0
- package/src/runtime/context/identity.js +227 -0
- package/src/runtime/context/primary-command.js +117 -0
- package/src/runtime/context/primary.js +344 -0
- package/src/runtime/context/summary-store.js +655 -0
- package/src/runtime/context-pack.js +154 -78
- package/src/runtime/decision-register.js +13 -4
- package/src/runtime/dispatch/admission.js +392 -0
- package/src/runtime/dispatch/attempt-end.js +274 -0
- package/src/runtime/dispatch/command.js +628 -0
- package/src/runtime/dispatch/controls.js +904 -0
- package/src/runtime/dispatch/envelope.js +276 -0
- package/src/runtime/dispatch/grants.js +310 -0
- package/src/runtime/dispatch/integrate.js +617 -0
- package/src/runtime/dispatch/loop.js +1835 -0
- package/src/runtime/dispatch/store.js +352 -0
- package/src/runtime/dispatch/verify-run.js +201 -0
- package/src/runtime/evidence-ledger.js +34 -7
- package/src/runtime/failure/capture.js +3 -1
- package/src/runtime/failure/cli.js +25 -9
- package/src/runtime/failure/home.js +57 -30
- package/src/runtime/failure/store.js +7 -2
- package/src/runtime/feature-pointer.js +174 -0
- package/src/runtime/feature-resolve.js +13 -2
- package/src/runtime/fleet/command.js +77 -0
- package/src/runtime/fleet/projects.js +178 -0
- package/src/runtime/fleet/tree.js +383 -0
- package/src/runtime/freshness.js +33 -3
- package/src/runtime/git-memo.js +46 -0
- package/src/runtime/guidance/ablation.js +427 -0
- package/src/runtime/health.js +565 -17
- package/src/runtime/history-compactor.js +13 -3
- package/src/runtime/implementation-gate.js +277 -22
- package/src/runtime/inventory/coverage.js +1 -1
- package/src/runtime/inventory/index.js +1 -1
- package/src/runtime/inventory/precedence.js +2 -2
- package/src/runtime/inventory/siblings.js +6 -4
- package/src/runtime/knowledge/code-corpus.js +277 -0
- package/src/runtime/knowledge/code-lexical.js +130 -0
- package/src/runtime/knowledge/code-retrieval.js +307 -0
- package/src/runtime/knowledge/code-validation.js +106 -0
- package/src/runtime/knowledge/gp3-gate.js +74 -0
- package/src/runtime/knowledge/graph-adapter.js +288 -0
- package/src/runtime/knowledge/graph-fallback.js +394 -0
- package/src/runtime/knowledge/hybrid.js +136 -8
- package/src/runtime/knowledge/retrieval.js +34 -1
- package/src/runtime/knowledge/rtk-compress.js +77 -0
- package/src/runtime/knowledge/semble-bridge.py +106 -0
- package/src/runtime/knowledge/semble-lifecycle.js +114 -0
- package/src/runtime/knowledge/semble-provider.js +365 -0
- package/src/runtime/lifecycle/cli.js +16 -6
- package/src/runtime/lifecycle/event-store.js +8 -6
- package/src/runtime/lifecycle/followup.js +6 -1
- package/src/runtime/lifecycle/overview.js +24 -1
- package/src/runtime/lifecycle/report-store.js +8 -10
- package/src/runtime/lifecycle/retention.js +95 -31
- package/src/runtime/lifecycle/root.js +9 -1
- package/src/runtime/lifecycle/status.js +34 -17
- package/src/runtime/lifecycle/store-upkeep.js +56 -7
- package/src/runtime/mask.js +134 -7
- package/src/runtime/mcp-consultations.js +40 -6
- package/src/runtime/model-router.js +79 -7
- package/src/runtime/models/catalogue.js +191 -0
- package/src/runtime/models/command.js +153 -0
- package/src/runtime/off-words.js +12 -0
- package/src/runtime/outcome.js +2 -2
- package/src/runtime/packages/command.js +1009 -0
- package/src/runtime/packages/contributions.js +116 -0
- package/src/runtime/packages/digest.js +132 -0
- package/src/runtime/packages/fetch.js +182 -0
- package/src/runtime/packages/grants.js +192 -0
- package/src/runtime/packages/index-file.js +134 -0
- package/src/runtime/packages/instruction.js +90 -0
- package/src/runtime/packages/manifest.js +331 -0
- package/src/runtime/packages/points.js +477 -0
- package/src/runtime/packages/programs.js +216 -0
- package/src/runtime/packages/scaffold.js +277 -0
- package/src/runtime/packages/source.js +90 -0
- package/src/runtime/packages/state.js +164 -0
- package/src/runtime/packages/store.js +449 -0
- package/src/runtime/packages/tar.js +106 -0
- package/src/runtime/packages/view.js +406 -0
- package/src/runtime/plan-check.js +59 -0
- package/src/runtime/plan-content.js +324 -0
- package/src/runtime/policy-init.js +118 -0
- package/src/runtime/profiles/doctor.js +96 -0
- package/src/runtime/profiles/resolve.js +244 -0
- package/src/runtime/profiles/rollback.js +254 -0
- package/src/runtime/profiles/sampler.js +41 -0
- package/src/runtime/readiness-record.js +16 -11
- package/src/runtime/readiness.js +46 -5
- package/src/runtime/research-request.js +50 -25
- package/src/runtime/retrieval-plan.js +10 -30
- package/src/runtime/retrieval-record.js +75 -5
- package/src/runtime/review/command.js +246 -0
- package/src/runtime/review/dominance.js +68 -0
- package/src/runtime/review/findings.js +434 -0
- package/src/runtime/review/identity.js +255 -0
- package/src/runtime/review/protocol-command.js +109 -0
- package/src/runtime/review/protocols.js +405 -0
- package/src/runtime/review/resolve-protocol.js +302 -0
- package/src/runtime/review/start.js +530 -0
- package/src/runtime/roadmap/facts.js +479 -0
- package/src/runtime/roadmap/gates.js +270 -0
- package/src/runtime/roadmap/loop.js +1636 -0
- package/src/runtime/roadmap/merge.js +381 -0
- package/src/runtime/roadmap/rows.js +1113 -0
- package/src/runtime/roadmap/seed.js +951 -0
- package/src/runtime/rules-report.js +336 -0
- package/src/runtime/scaffold/artifacts.js +60 -9
- package/src/runtime/scaffold/generate.js +21 -9
- package/src/runtime/settings/autopilot.js +106 -0
- package/src/runtime/settings/cli.js +280 -0
- package/src/runtime/settings/config-write.js +314 -0
- package/src/runtime/settings/files.js +271 -0
- package/src/runtime/settings/legacy.js +154 -0
- package/src/runtime/settings/lexical.js +56 -0
- package/src/runtime/settings/prepared-run.js +269 -0
- package/src/runtime/settings/project-layers.js +118 -0
- package/src/runtime/settings/refs.js +288 -0
- package/src/runtime/settings/registry.js +553 -0
- package/src/runtime/settings/resolve.js +713 -0
- package/src/runtime/settings/shared.js +37 -0
- package/src/runtime/settings/worker-billing.js +107 -0
- package/src/runtime/settings/write.js +269 -0
- package/src/runtime/slot-command.js +78 -0
- package/src/runtime/slots.js +671 -0
- package/src/runtime/source-version.js +1 -0
- package/src/runtime/state-root.js +217 -0
- package/src/runtime/storage/cli.js +12 -5
- package/src/runtime/storage/engine.js +9 -2
- package/src/runtime/storage/registry.js +14 -1
- package/src/runtime/storage/roots.js +66 -16
- package/src/runtime/storage/rules.js +82 -10
- package/src/runtime/storage/upkeep.js +10 -2
- package/src/runtime/storage/work-status.js +245 -26
- package/src/runtime/task-attempts.js +589 -69
- package/src/runtime/task-classifier.js +47 -11
- package/src/runtime/task-graph.js +373 -0
- package/src/runtime/task-run.js +778 -0
- package/src/runtime/task-scope.js +176 -55
- package/src/runtime/task-sources.js +147 -0
- package/src/runtime/task-state.js +374 -64
- package/src/runtime/team/admission.js +301 -0
- package/src/runtime/team/envelope.js +324 -0
- package/src/runtime/team/review-guard.js +156 -0
- package/src/runtime/trace/analyze.js +427 -0
- package/src/runtime/trace/baseline.js +770 -0
- package/src/runtime/trace/ledger.js +63 -140
- package/src/runtime/trace/otlp-export.js +568 -0
- package/src/runtime/trace/otlp-map.js +481 -0
- package/src/runtime/trace/spans.js +745 -0
- package/src/runtime/trace/telemetry.js +225 -0
- package/src/runtime/trace/views.js +1 -0
- package/src/runtime/transcripts/command.js +98 -0
- package/src/runtime/transcripts/cursor.js +326 -0
- package/src/runtime/transcripts/read.js +126 -0
- package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
- package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
- package/src/runtime/transcripts/readers/copilot-events.js +90 -0
- package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
- package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
- package/src/runtime/transcripts/registry.js +161 -0
- package/src/runtime/transcripts/stats.js +161 -0
- package/src/runtime/verification/check-key.js +628 -0
- package/src/runtime/verification/contract-runner.js +546 -11
- package/src/runtime/verification/engine.js +499 -9
- package/src/runtime/verification/impact.js +617 -0
- package/src/runtime/verification/inflight.js +205 -0
- package/src/runtime/verification/registry.js +176 -0
- package/src/runtime/verification/reuse.js +184 -0
- package/src/runtime/verification/telemetry-emit.js +254 -0
- package/src/runtime/verification/test-selection.js +67 -7
- package/src/runtime/worker/active.js +90 -0
- package/src/runtime/worker/cancel.js +222 -0
- package/src/runtime/worker/catalogue.js +122 -0
- package/src/runtime/worker/command.js +677 -0
- package/src/runtime/worker/evidence.js +288 -0
- package/src/runtime/worker/launch.js +288 -0
- package/src/runtime/worker/models.js +137 -0
- package/src/runtime/worker/parsers.js +218 -0
- package/src/runtime/worker/probes/index.js +706 -0
- package/src/runtime/worker/process-tree.js +415 -0
- package/src/runtime/worker/quota.js +43 -0
- package/src/runtime/worker/readiness.js +713 -0
- package/src/runtime/worker/run-store.js +166 -0
- package/src/runtime/worker/supervisor.js +541 -0
- package/src/runtime/worker/worktree-check.js +252 -0
- package/src/runtime/workflow-engine.js +5 -1
- package/src/runtime/workflow-orchestrator.js +578 -63
- package/src/runtime/worktree.js +149 -22
- package/src/state/index.js +1 -1
- package/src/state/lockfile.js +64 -10
- package/src/state/run-lock.js +1 -1
- package/types/node-commonjs.d.ts +106 -7
- package/core/harnesses/gemini/hooks/hooks.json +0 -77
- package/core/harnesses/gemini/hooks/lib.sh +0 -302
- package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -10
- package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
- package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -10
- package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
- package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -10
- package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
- package/core/harnesses/gemini/hooks/session-end.sh +0 -5
- package/core/harnesses/gemini/hooks/session-start.sh +0 -7
- package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
- package/core/shared/guidance/FLAGS.md +0 -25
- package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
- package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
- package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
- package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
- package/src/adapters/gemini/hooks.js +0 -251
- package/src/adapters/gemini/index.js +0 -429
|
@@ -3,39 +3,93 @@
|
|
|
3
3
|
A task is done when the ledger says so, never from a `[x]` box or a `state.md` row. Every call takes
|
|
4
4
|
`--slug "<slug>"` (step 1's `feature_slug`) and `--json`; `<task id>` is the plan id (`A.1`).
|
|
5
5
|
|
|
6
|
-
**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
**Read the JSON, not the exit code.** Exit 0: `claimed`, `applied`, `released`, `started`, `paused`,
|
|
7
|
+
`cancelled`, `resumed`, `reopened`, `usage-recorded`, or a `status`/`inspect` read. Exit 1:
|
|
8
|
+
`disposition` `refused`, `stale` or `ack-required`, with a `reason`. Exit 2: `{ ok: false, error }`.
|
|
9
|
+
No parseable JSON means the runtime is too old: treat it as `unsupported`, do not dispatch or record
|
|
10
|
+
a refusal, report the runtime version.
|
|
10
11
|
|
|
11
|
-
**
|
|
12
|
+
**Which flow.** A plan headed `**Task graph:** v1` follows every section below. Any other plan keeps
|
|
13
|
+
the legacy flow: skip resume and claim without `--epoch`.
|
|
14
|
+
|
|
15
|
+
**Resume first, every session (graph plan).** Before any other call:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
"$DOFLOW" task-attempt --action resume --slug "<slug>" --json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
It answers `ack-required` (exit 1) with `report` and `digest`. Read `report` (`control`, `epoch`,
|
|
22
|
+
`activeAttempts` with owner, age, `execWorktree`; `changedSources` and `doneChanged`, files edited
|
|
23
|
+
since a claim or COMPLETED; `unverifiable`, `staleContext`, `graph.changed`), act on it, then ack:
|
|
12
24
|
|
|
13
25
|
```bash
|
|
14
|
-
"$DOFLOW" task-attempt --action
|
|
26
|
+
"$DOFLOW" task-attempt --action resume --slug "<slug>" --ack <digest> --by "<who>" --json
|
|
15
27
|
```
|
|
16
28
|
|
|
17
|
-
`
|
|
18
|
-
|
|
19
|
-
or `unknown-task`.
|
|
29
|
+
`resumed` returns the new `epoch`; `report-changed` means state moved, so read the new report and
|
|
30
|
+
ack its digest. Keep the epoch in session memory, never in `state.md` or any file.
|
|
20
31
|
|
|
21
|
-
**
|
|
22
|
-
|
|
23
|
-
tree's `references/EVIDENCE_LEDGER.md`), then finish with the evidence id it returned:
|
|
32
|
+
**Autonomous runs** with no run (`control: 'none'`) start one with an explicit budget instead of
|
|
33
|
+
acking; `started` returns `epoch: 1`:
|
|
24
34
|
|
|
25
35
|
```bash
|
|
26
|
-
"$DOFLOW" task-attempt --action
|
|
36
|
+
"$DOFLOW" task-attempt --action start --slug "<slug>" --by "<who>" --budget-attempts <n> [--budget-tokens <n>] --json
|
|
27
37
|
```
|
|
28
38
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
39
|
+
**Read state** with `--action status` (or `inspect` for graph, budgets and run totals) and branch on
|
|
40
|
+
each task's `derived`: `done` skip; `ready` claim (`reason` `reopened` or `plan-changed-after-done`:
|
|
41
|
+
the done attempt no longer counts, redo it); `running` inspect `active` (owner, start), release if
|
|
42
|
+
that worker is gone; `failed` claim again while `budget.used < budget.limit`, else replan;
|
|
43
|
+
`cancelled` clears only on resume; `blocked` report it; `pending` a dependency or earlier phase is
|
|
44
|
+
open (`unmet`, `held`). A task in `unclaimedChecked` is ticked with no COMPLETED attempt: claim and
|
|
45
|
+
verify it, or untick it.
|
|
46
|
+
|
|
47
|
+
**Claim before dispatch**, from the main session; a worker never claims. `--owner` is the task's
|
|
48
|
+
declared role; `--mode` (`subagent`, `sequential`, `manual`) must be the executor that will run. A
|
|
49
|
+
graph plan passes `--epoch`, a worker run `--exec-worktree <path>` (never the main session's), and a
|
|
50
|
+
run with a token limit `--reserve-tokens <n>` on every claim:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
"$DOFLOW" task-attempt --action claim --slug "<slug>" --task "<task id>" --owner "<declared role>" --mode subagent --epoch <n> [--exec-worktree <path>] [--reserve-tokens <n>] --json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`claimed` returns the `token`; the worker finishes with it. A refusal means do not dispatch:
|
|
57
|
+
`active-attempt`, `already-done`, `unmet-phase`, `unmet-dependency`, `dependency-held` (`unmet`,
|
|
58
|
+
`held` list them), `unknown-task`, `resume-required` (resume first), `run-paused`, `run-cancelled`,
|
|
59
|
+
`owner-mismatch` (`declared` names the role; `--owner-override "<reason>"` only when deliberate),
|
|
60
|
+
`worker-session`, `budget-exhausted`, `cancelled` (resume clears it), `reservation-required`,
|
|
61
|
+
`aggregate-unaccounted` (on each ended attempt left unreported, `--action report-usage --task <id>
|
|
62
|
+
--token <n> --tokens <n> --tokens-basis …`) or `aggregate-exhausted`.
|
|
63
|
+
|
|
64
|
+
**After the agent returns**, verify in the parent run, record evidence after the claim (`--kind
|
|
65
|
+
test-result --observed-command "<cmd>" --observed-exit <n>`; item schema: SKILL.md step 6),
|
|
66
|
+
and finish with the returned evidence id:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
"$DOFLOW" task-attempt --action finish --slug "<slug>" --task "<task id>" --token <token> --result COMPLETED --evidence-id "<id>" [--tokens <n> --tokens-basis measured|estimated] --json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
COMPLETED needs an active, non-stale `test-result` that exited 0, bound to the slug or task id,
|
|
73
|
+
observed no earlier than the claim; on refusal fix the named reason and finish again.
|
|
74
|
+
`plan-changed`: the plan line was edited after the claim, so release, reread, claim again.
|
|
75
|
+
`--tokens` and `--tokens-basis` go together, on finish or release; report them under a token limit.
|
|
76
|
+
|
|
77
|
+
**Otherwise** finish `BLOCKED`, `ABANDONED` or `INCONCLUSIVE` (no evidence), or `FAILED` with
|
|
78
|
+
`--reason "<why>"`; or abandon a dispatch with `--action release --token <token> --reason "<why>"`.
|
|
79
|
+
`stale` (exit 1): the token is no longer active, so a late result from an abandoned or cancelled
|
|
80
|
+
(`attempt-cancelled`) dispatch changed nothing; read `status`. There is no lease: only an explicit
|
|
81
|
+
release or cancel clears a crashed claimer.
|
|
82
|
+
|
|
83
|
+
**Run controls** (main session only, each with `--by "<who>"`):
|
|
32
84
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
85
|
+
- `--action pause --reason "<why>"`: claims refuse `run-paused`; active attempts may still finish.
|
|
86
|
+
- `--action cancel --reason "<why>"`: marks every active attempt of the run cancelled (`--adopt-unowned` adds attempts with no run; `--task <id> --token <n>` limits it to one). It stops no process.
|
|
87
|
+
- An acknowledged resume sets a paused or cancelled run running and clears its cancels.
|
|
88
|
+
- `--action reopen --task <id> --token <done token> --reason "<why>"`: the done attempt stops counting, the task is `ready` with `reason: reopened`; `dependentsActive` lists running dependents.
|
|
89
|
+
- Refusals: `run-exists` resume it; `identity-solo` or `worker-session` act from the main session; `control-unchanged` already so; `foreign-run` cancel from that run; `no-active-attempt`/`token-mismatch` (attempt cancel) or `not-done`/`token-mismatch` (reopen) read `status` for the token; `run-cancelled` resume first.
|
|
37
90
|
|
|
38
|
-
**Before step 10**, read `status
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
leaves the file unchanged: report it,
|
|
91
|
+
**Before step 10**, read `status`: `complete: true` means every task has a COMPLETED attempt (in a
|
|
92
|
+
graph plan, with its plan line unchanged; else `plan-changed-after-done`). `orchestrate` refuses to
|
|
93
|
+
complete this stage while a ledger exists and is incomplete, and records `unverified` with no
|
|
94
|
+
ledger. Exit 2 (malformed input, torn or newer-version store) leaves the file unchanged: report it,
|
|
95
|
+
do not repair it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: do-flow
|
|
3
|
-
description: "
|
|
3
|
+
description: "Run the doflow feature chain end to end, from idea to reviewed code. Use when the user wants the whole lifecycle run, says 'build this feature end-to-end', 'run the doflow chain' or 'take this from idea to implementation', or /do classified the request as a feature. A plain change request that names no /do-* skill goes to /do first, which decides whether it needs this flow. Skip it for one phase on its own (that phase's /do-* skill), single-file fixes, questions and reviews."
|
|
4
4
|
argument-hint: "[feature description] [--from brainstorm|design|plan|implement|test|review]"
|
|
5
5
|
effort: high
|
|
6
6
|
---
|
|
@@ -46,7 +46,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
46
46
|
signal it rests on in one line. If two classes fit equally, do **not** take the longer one: show
|
|
47
47
|
what each would run —
|
|
48
48
|
`"$DOFLOW" workflow --task-class "<candidate>" --json`, quote its `stageIds` — and ask via
|
|
49
|
-
|
|
49
|
+
the question tool, one option per candidate.
|
|
50
50
|
|
|
51
51
|
3. **Validate the class through the runtime** — a proposal is not a selection until this returns:
|
|
52
52
|
|
|
@@ -98,7 +98,7 @@ not declare is not run here, however familiar it is from the `feature` chain.
|
|
|
98
98
|
7. **Stop at the gates the resolved workflow declares** — read them from `workflow.gates`, each
|
|
99
99
|
attached to a stage by `afterStage`. `trigger: always` stops every time; any other trigger stops
|
|
100
100
|
only when that named condition actually holds. Ask with the gate's own `prompt` via
|
|
101
|
-
|
|
101
|
+
the question tool. For the `feature` workflow's three, which behave as they always have:
|
|
102
102
|
- **`gate-0`** (after discovery, trigger `unresolved-clarifications`) — a safety net, not the
|
|
103
103
|
normal path: `do-brainstorm` resolves ambiguities to zero via its own loop, so this fires only
|
|
104
104
|
if a `[NEEDS CLARIFICATION]` marker survived an aborted session. Ask one question per marker
|
|
@@ -107,9 +107,8 @@ not declare is not run here, however familiar it is from the `feature` chain.
|
|
|
107
107
|
tree's `references/WORKFLOW_HANDOFF.md` (stage `discovery`, channel `question`) so the answers
|
|
108
108
|
are registered and cited; do-brainstorm already recorded discovery's handoff, so record none.
|
|
109
109
|
- **`gate-a`** (after planning) — the conversational checkpoint on top of the already-existing
|
|
110
|
-
hard hook (`pre-implement-gate.sh
|
|
111
|
-
|
|
112
|
-
here). Options: `Proceed` / `Let me review the artifacts first` / `Stop here`.
|
|
110
|
+
hard hook (`pre-implement-gate.sh`; its scope is in `references/DOFLOW_CHAIN.md`), which remains
|
|
111
|
+
the real enforcement regardless of what happens here. Options: `Proceed` / `Let me review the artifacts first` / `Stop here`.
|
|
113
112
|
- **`gate-b`** (after review) — no enforcement hook exists for this today; `/do-git` is a
|
|
114
113
|
separate, always-manually-invoked skill. Frame the question by the review's own approval
|
|
115
114
|
status: on `CHANGES REQUESTED`, foreground addressing the findings rather than offering a bare
|
|
@@ -147,14 +146,14 @@ not declare is not run here, however familiar it is from the `feature` chain.
|
|
|
147
146
|
"$DOFLOW" decision --action add --topic "<key>" --statement "<text>" --channel gate --stage "<stage the gate follows>" --rationale "<text>" --json
|
|
148
147
|
```
|
|
149
148
|
|
|
150
|
-
8. **Never skip a gate on an ambiguous answer** — an unanswered or unclear response to
|
|
151
|
-
|
|
149
|
+
8. **Never skip a gate on an ambiguous answer** — an unanswered or unclear response to the
|
|
150
|
+
question tool means stop and ask again, per RULE_04 in `rules/RULES.md`. When the
|
|
152
151
|
terminal stage completes, state `workflow.handoff` as the next step rather than continuing into
|
|
153
152
|
it.
|
|
154
153
|
|
|
155
154
|
## Conditional research within a feature
|
|
156
155
|
|
|
157
|
-
Before a feature stage relies on an external fact that local or user evidence cannot establish, or when the developer explicitly asks a research question, let that stage follow `../do-document/references/embedded-research.md`. The stage opens a same-task `research-request`, records a source-linked finding or gap, then resumes itself without adding a seventh workflow stage. On resume, read request status and context pack. A blocking unanswered question prevents stage completion; neither research nor a retrieved page approves any existing gate.
|
|
156
|
+
Before a feature stage relies on an external fact that local or user evidence cannot establish, or when the developer explicitly asks a research question, let that stage follow `../do-document/references/embedded-research.md`. The stage opens a same-task `research-request`, records a source-linked finding or gap, then resumes itself without adding a seventh workflow stage. On resume, read request status and context pack. A blocking unanswered question prevents stage completion; neither research nor a retrieved page approves any existing gate. Feature discovery and design run the ideation pass; otherwise search only for a gap or an explicit request.
|
|
158
157
|
|
|
159
158
|
## Boundaries
|
|
160
159
|
**Will:**
|
|
@@ -127,8 +127,8 @@ meant. Re-proposing the same class will be rejected the same way.
|
|
|
127
127
|
|
|
128
128
|
## The hard hook does not know about classes
|
|
129
129
|
|
|
130
|
-
`pre-implement-gate.sh` keys on branch and artifact state
|
|
131
|
-
feature directory
|
|
130
|
+
`pre-implement-gate.sh` keys on branch and artifact state (what it denies: SKILL.md step 7): if the
|
|
131
|
+
current branch already carries a feature directory the gate rejects, it denies source edits
|
|
132
132
|
regardless of the class in play — so a `bug` or `trivial-edit` workflow started on that branch will
|
|
133
133
|
be blocked at its implementation stage. Surface the hook's message as written. Do not route around
|
|
134
134
|
it, and do not create placeholder artifacts to satisfy it.
|
|
@@ -72,6 +72,10 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
72
72
|
|
|
73
73
|
## Safety Gates
|
|
74
74
|
|
|
75
|
+
### Git Operations & Safety Invariants
|
|
76
|
+
- Run `git status && git branch` first; use feature branches for ALL work; never force-push main/master.
|
|
77
|
+
- Commit incrementally with descriptive messages; review `git diff` before staging; create a restore-point commit before high-risk changes.
|
|
78
|
+
|
|
75
79
|
The following behaviors from today's skill are carried over unchanged:
|
|
76
80
|
|
|
77
81
|
- **State checks** → `git status` before anything that could discard uncommitted work
|
|
@@ -46,13 +46,10 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
46
46
|
`--from-review`: treat that review's findings as the work list, most-severe first, in the
|
|
47
47
|
order the review itself ranked them.
|
|
48
48
|
- Invoked with a description: treat that as the work list directly.
|
|
49
|
-
- If
|
|
50
|
-
`feature_dir`) and its `plan.md` already has a task matching the request, say so and offer
|
|
51
|
-
`/do-execute-plan` instead — that machinery exists for exactly this case, and duplicating it
|
|
52
|
-
here would just be a second, worse orchestrator. Proceed directly only if the user confirms
|
|
53
|
-
the lighter path, or if no such plan or matching task exists.
|
|
49
|
+
- If an active DoFlow feature's `plan.md` has a task matching the request (`"$DOFLOW" paths --json`), offer `/do-execute-plan` instead. Proceed directly only if the user confirms or no matching plan task exists.
|
|
54
50
|
- Never block on a missing `requirement.md` / `design.md` / `plan.md`. Those artifacts are the
|
|
55
51
|
chain's business, not a precondition of this skill.
|
|
52
|
+
- MCP `context7`: when implementing against external libraries or upgrading dependencies, verify APIs per `MCP_Context7.md`.
|
|
56
53
|
|
|
57
54
|
**Stop when** every work-list finding the contract names has an answer or a stated gap, **and** the last round produced no new work-list finding. A round that only restates what you already have is the last round. Report the remaining gaps rather than continuing.
|
|
58
55
|
|
|
@@ -97,7 +94,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
97
94
|
computes, so a zero exit is not a green light.
|
|
98
95
|
- **`STOP`** — refuse to modify source. Report which claim is conflicted and what evidence
|
|
99
96
|
disagrees, then stop. Do not edit anyway.
|
|
100
|
-
- **`ASK_USER`** — a decision is owed by the user. Ask it through
|
|
97
|
+
- **`ASK_USER`** — a decision is owed by the user. Ask it through RULE_04 (`rules/RULES.md`)
|
|
101
98
|
mechanism and wait; editing first would decide it silently on their behalf.
|
|
102
99
|
- **`ENTER`** — proceed to the context-pack call below. In standalone mode this includes
|
|
103
100
|
`NEEDS_EVIDENCE`: the unmet contract is reported, not enforced — relay the missing
|
|
@@ -141,7 +138,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
141
138
|
duplicates the host's own edit-approval mechanisms.
|
|
142
139
|
- Stop after the change set only when one of two things is true: the user asked for the plan
|
|
143
140
|
rather than the change ("show me what you'd change first"), or naming the change set surfaced
|
|
144
|
-
a genuine user-owned decision — then ask it per `
|
|
141
|
+
a genuine user-owned decision — then ask it per RULE_04 (`rules/RULES.md`) and wait, because
|
|
145
142
|
editing first would decide it silently.
|
|
146
143
|
|
|
147
144
|
5. **Implement**:
|
|
@@ -70,17 +70,17 @@ not have.
|
|
|
70
70
|
**Exit 1 means the pack came back empty; exit 3 means overflow: the pack is complete, act on
|
|
71
71
|
`overflowAction.message` and report the gap.** By this point `do-design` should have batched
|
|
72
72
|
evidence and claims (step 8), so an empty pack carries weight: either the batch never ran or the
|
|
73
|
-
task id mismatched.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
task id mismatched. Empty packs are advisory; prerequisites check artifact existence only. Report
|
|
74
|
+
them in this stage's report and `plan.md` §3 "Research & Decisions"; prose without a compiled
|
|
75
|
+
pack cannot claim prior evidence. When non-empty, read it alongside `requirement.md`,
|
|
76
|
+
`design.md`, and the constitution.
|
|
77
77
|
**Also read `specs.md` when step 1's `has_specs` is true** — use that flag, never a filesystem
|
|
78
78
|
check of your own, and read the `specs` path the resolver returned. `/do-design` moves the
|
|
79
79
|
interface and data-model contracts out of `design.md` into `specs.md` §1 as numbered `IC-###`
|
|
80
|
-
entries, so on a feature that has one, `design.md`'s
|
|
80
|
+
entries, so on a feature that has one, `design.md`'s API / Interface Contracts and Data Model sections are a pointer and the contracts this
|
|
81
81
|
plan must decompose toward live only in `specs.md`. Planning from `design.md` alone on such a
|
|
82
82
|
feature plans against a pointer. When `has_specs` is false (an old-layout feature dir, which never
|
|
83
|
-
had a `specs.md`), the contracts are still in `design.md`
|
|
83
|
+
had a `specs.md`), the contracts are still in `design.md` (API / Interface Contracts, Data Model) and there is nothing extra to
|
|
84
84
|
read. Read
|
|
85
85
|
`constitution_base`,
|
|
86
86
|
then read `constitution_local` **only when `has_constitution_local` is true** — use that flag,
|
|
@@ -115,15 +115,17 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
|
|
|
115
115
|
Read `references/ARTIFACT_VOICE.md` at the same point: it carries the prose rules the artifact's sentences follow, and the carve-outs where one of those rules meets a construct the checker parses.
|
|
116
116
|
This stage fills the plan from requirement + design + constitution rather than by eliciting, so
|
|
117
117
|
it writes no dialogue log — its sibling stages' `intention/`/`design/` question files have no
|
|
118
|
-
counterpart here. Should a future revision of this skill add
|
|
118
|
+
counterpart here. Should a future revision of this skill add a question-tool clarification
|
|
119
119
|
loop, each of its rounds logs to `plan-<NN>-question.md` at the feature root exactly as
|
|
120
120
|
`/do-brainstorm` and `/do-design` log theirs to their own subdirectories, numbered from step 1's
|
|
121
121
|
`plan_next_round`.
|
|
122
|
-
6. **Constitution Check (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
122
|
+
6. **Constitution Check (exit gate)** — evaluate the plan against both tiers as reconciled in step
|
|
123
|
+
4. Record one row per principle in `plan.md` §2: its id, its tier (MUST unless it says `**Tier:**
|
|
124
|
+
SHOULD`) and PASS/FAIL; a base MUST that tier-2 makes SHOULD names that overlay version in its
|
|
125
|
+
row. On a violation, revise the approach first. A MUST marked FAIL or left
|
|
126
|
+
without a row refuses step 11's handoff; a SHOULD FAIL is a note. That refusal is the runtime's,
|
|
127
|
+
beside the hard hook that covers artifact existence (`references/DOFLOW_CHAIN.md` scopes both).
|
|
128
|
+
There is no waiver: revise the plan, or a person amends the constitution with `/do-constitution`.
|
|
127
129
|
7. **Decompose into Tasks (section 8)** — dependency-ordered, `[US#]`-traced to the requirement's
|
|
128
130
|
user stories, owner+files named per task, with checkpoints and completion criteria.
|
|
129
131
|
Read the guidance tree's `references/ORCHESTRATION.md` and
|
|
@@ -131,7 +133,7 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
|
|
|
131
133
|
`--depth shallow|normal|deep` is the single granularity knob: it sets how finely a phase is
|
|
132
134
|
split into tasks and how much detail each task carries. Default `normal`.
|
|
133
135
|
**Why explicit task scoping and `[P]` markers**: Specifying concrete file paths (`files: [...]`)
|
|
134
|
-
and
|
|
136
|
+
and agent-spec owners (review tasks name `reviewer`) per task
|
|
135
137
|
enables `/do-execute-plan` to compute write-set isolation (`parallel-check`). Tasks with disjoint
|
|
136
138
|
file sets run concurrently without merge conflicts, while overlapping tasks are safely serialized.
|
|
137
139
|
**Mark `[P]` by default:** parallel execution is the framework default, so apply `[P]` to every
|
|
@@ -159,8 +161,13 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
|
|
|
159
161
|
table: `primary` if it owns a task via `files:`, `dependency-only` if it's only ever reached via
|
|
160
162
|
`depends-on:`. A single-repo result → `N/A: single-repo feature`. Derivation only — no branch is
|
|
161
163
|
created here (`/do-execute-plan`'s job, lazily, per repo).
|
|
162
|
-
9. **
|
|
164
|
+
9. **Self-review, then validate** — reread the plan against itself and fix it inline: every
|
|
165
|
+
requirement id and `[US#]` story is traced to a task or a §7 row, no TBD/TODO/"later" placeholder
|
|
166
|
+
is left, and no task is coarser than `--depth` sets (split one that is). `plan-check` scans the
|
|
167
|
+
first two and prints each one as a `findings` entry with its `path:line`. Fix every entry, then run
|
|
168
|
+
the advisory consistency check and surface its findings verbatim:
|
|
163
169
|
```bash
|
|
170
|
+
"$DOFLOW" plan-check "<plan path>" --json
|
|
164
171
|
"$DOFLOW" validate "<plan path>"
|
|
165
172
|
```
|
|
166
173
|
This also verifies each `### Task Summary` rollup row against the `- [ ]` lines under its
|
|
@@ -195,9 +202,13 @@ Item schema, provenance rules, and the refused-field list: the guidance tree's `
|
|
|
195
202
|
12. **Stop** — report the plan path, Constitution Check result, the task count (`[P]`/sequential),
|
|
196
203
|
and the derived branch name/repo count when the Repo Branch Plan is populated.
|
|
197
204
|
|
|
205
|
+
### Planning Efficiency Invariants
|
|
206
|
+
- Identify concurrent versus sequential operations across disjoint write sets.
|
|
207
|
+
- Map explicit dependencies between tasks; batch tool calls; maximize parallel execution gains.
|
|
208
|
+
|
|
198
209
|
## Embedded feature research
|
|
199
210
|
|
|
200
|
-
For an external fact gap or
|
|
211
|
+
For an external fact gap or request, follow the Gap or request protocol in `../do-document/references/embedded-research.md` before stage completion.
|
|
201
212
|
|
|
202
213
|
## Boundaries
|
|
203
214
|
**Will:** propose a task class and have the runtime validate it, read requirement + design + specs
|
|
@@ -43,14 +43,17 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
When `status` is `answered` and `agrees` is `false`, say so in one line and keep or change the level
|
|
46
|
-
by your own judgement. Record the level used
|
|
47
|
-
|
|
46
|
+
by your own judgement. Record the level used, and skip both calls when `status` is not `answered`:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
"$DOFLOW" advise --action outcome --pick-id "<pickId>" --actual "<level>"
|
|
50
|
+
```
|
|
48
51
|
|
|
49
52
|
```bash
|
|
50
53
|
"$DOFLOW" verify --task-id "<task id>" --risk "<LOW|MEDIUM|HIGH|CRITICAL>" --action contract --json
|
|
51
54
|
```
|
|
52
55
|
|
|
53
|
-
Report, before
|
|
56
|
+
Report, before any tier runs:
|
|
54
57
|
- the compiled `tiers[]` in the order returned — that list, and nothing else, is what will run;
|
|
55
58
|
- the `riskLevel` it compiled at and the `maxRecoveryIterations` it carries;
|
|
56
59
|
- `detection.absent` — the command roles the runtime could not find in this repo's manifests
|
|
@@ -106,7 +109,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
106
109
|
|
|
107
110
|
## Embedded feature research
|
|
108
111
|
|
|
109
|
-
For an external fact gap or
|
|
112
|
+
For an external fact gap or request, follow the Gap or request protocol in `../do-document/references/embedded-research.md` before stage completion.
|
|
110
113
|
|
|
111
114
|
## Boundaries
|
|
112
115
|
**Will:** Run the compiled tiers, report every status (including unreached), coverage, and failure traces; hand off the current stage in a chain.
|
|
@@ -13,10 +13,15 @@
|
|
|
13
13
|
|
|
14
14
|
## Principles
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
<!-- One `### <ID> — <name>` heading per principle. A principle is MUST unless its body has
|
|
17
|
+
`**Tier:** SHOULD`. An ID equal to a base one (P1–P6) replaces that base principle. -->
|
|
18
|
+
|
|
19
|
+
### R1 — [PRINCIPLE_1_NAME]
|
|
20
|
+
**Tier:** MUST
|
|
17
21
|
[PRINCIPLE_1_STATEMENT — testable and non-negotiable.]
|
|
18
22
|
|
|
19
|
-
### [PRINCIPLE_2_NAME]
|
|
23
|
+
### R2 — [PRINCIPLE_2_NAME]
|
|
24
|
+
**Tier:** SHOULD
|
|
20
25
|
[PRINCIPLE_2_STATEMENT.]
|
|
21
26
|
|
|
22
27
|
## Constraints
|
|
@@ -25,4 +30,5 @@
|
|
|
25
30
|
## Governance
|
|
26
31
|
- Amendments: bump semver, fill the Sync Impact Report, re-run dependent gates.
|
|
27
32
|
- `/do-plan`'s Constitution Check MUST evaluate against both tiers together (these rules taking
|
|
28
|
-
precedence).
|
|
33
|
+
precedence). A MUST principle marked FAIL or left without a row refuses the planning stage's exit;
|
|
34
|
+
a SHOULD FAIL is advisory.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
**Feature:** [NNN-slug] · **Design:** ./design.md · **Maturity:** Draft · **Created:** [DATE]
|
|
4
4
|
|
|
5
5
|
> Entity/data model and data-flow diagrams a design decided, split out of design.md's own narrative
|
|
6
|
-
> (
|
|
6
|
+
> (Data Model and Sequence / Data Flow) and specs.md's interface-contract detail (§1). Reads ./design.md; distinct from ./specs.md
|
|
7
7
|
> the way a persisted shape and the flows that move through it are distinct from the contracts that
|
|
8
8
|
> expose them.
|
|
9
9
|
>
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
**Feature:** [NNN-slug] · **Requirement:** [REQUIREMENT_PATH] · **Maturity:** Draft · **Created:** [DATE]
|
|
4
4
|
|
|
5
|
-
> System shape — architecture, APIs, data/interface contracts. Reads [REQUIREMENT_PATH].
|
|
5
|
+
> System shape — architecture, journeys, APIs, data/interface contracts. Reads [REQUIREMENT_PATH].
|
|
6
6
|
> Distinct from plan.md's HOW-to-implement; this is HOW-it's-shaped.
|
|
7
7
|
>
|
|
8
|
+
> Journey-first: business and engineering read the front half (Architecture Approach through
|
|
9
|
+
> Journeys) on one page, in plain nouns. The component-level sections follow it.
|
|
10
|
+
>
|
|
8
11
|
> Structure follows `references/ARTIFACT_FORMAT.md`: indexed sections carry a table above full
|
|
9
12
|
> `**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
|
|
13
|
+
> `Status` is only `Live` or `Superseded → <ref>`, and superseded prose moves to the History section.
|
|
11
14
|
|
|
12
15
|
## 1. Architecture Approach
|
|
13
16
|
|
|
@@ -27,19 +30,26 @@
|
|
|
27
30
|
| [what is being settled] | [the shape this design gives it] | [person or role accountable] | no |
|
|
28
31
|
| [what is being settled] | [the shape this design gives it] | [person or role accountable] | yes: [what must happen first] |
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
<!-- Acts as the summary. In 2–4 sentences or bullets, in plain nouns with no component IDs or code
|
|
34
|
+
names: who gains what and why, the goal of this phase, and where it plugs into the existing
|
|
35
|
+
system. Leave out implementation detail: that belongs in Components & Boundaries. -->
|
|
36
|
+
|
|
37
|
+
[Who this is for and why, the goal of this phase, and where it fits in the existing system.]
|
|
31
38
|
|
|
32
39
|
## 2. System Overview (C4)
|
|
33
40
|
|
|
34
|
-
<!-- The visual complement to
|
|
35
|
-
reading prose. C4 is kept as the conceptual zoom model (Context → Container →
|
|
36
|
-
rendered with Mermaid `flowchart` + `subgraph`. Each level heading is written
|
|
37
|
-
"C4 Level N: ...", so no level label collides with a
|
|
41
|
+
<!-- The visual complement to Architecture Approach — lets a reader unfamiliar with this feature see
|
|
42
|
+
the shape before reading prose. C4 is kept as the conceptual zoom model (Context → Container →
|
|
43
|
+
Component) and rendered with Mermaid `flowchart` + `subgraph`. Each level heading is written
|
|
44
|
+
"C4 Level N: ...", so no level label collides with a component ID such as C3.
|
|
38
45
|
|
|
39
46
|
Do NOT use the C4Context / C4Container diagram types. They are experimental in Mermaid: no
|
|
40
47
|
direction control, relationship labels collide with arrowheads, and rendering varies across
|
|
41
48
|
viewers. `flowchart` is the most widely supported type and puts labels legibly on the arrow.
|
|
42
49
|
|
|
50
|
+
EVERY edge carries a label saying what flows over it (a request, a record, money, a file),
|
|
51
|
+
never a bare arrow.
|
|
52
|
+
|
|
43
53
|
Skip a level with "N/A: [why]". For a trivial single-file change with no new external
|
|
44
54
|
interaction, write "N/A: [why]" for the whole section. -->
|
|
45
55
|
|
|
@@ -100,8 +110,8 @@ flowchart LR
|
|
|
100
110
|
### C4 Level 3: Component
|
|
101
111
|
|
|
102
112
|
<!-- Required when this feature touches 3+ components within a single container; otherwise write
|
|
103
|
-
"N/A: covered by
|
|
104
|
-
table verbatim, and a diagram that adds nothing trains authors to tick boxes. -->
|
|
113
|
+
"N/A: covered by Components & Boundaries". On a small change this diagram restates the
|
|
114
|
+
Components & Boundaries table verbatim, and a diagram that adds nothing trains authors to tick boxes. -->
|
|
105
115
|
|
|
106
116
|
[Internals of the container this feature changes — handlers, services, ports, adapters.]
|
|
107
117
|
|
|
@@ -117,7 +127,85 @@ flowchart TB
|
|
|
117
127
|
C_B -->|"[persists]"| STORE
|
|
118
128
|
```
|
|
119
129
|
|
|
120
|
-
|
|
130
|
+
[One closing sentence: what this feature decides versus where the data or money moves.]
|
|
131
|
+
|
|
132
|
+
## 3. Concepts
|
|
133
|
+
|
|
134
|
+
<!-- Write the handful of nouns a reader must hold to follow the Journeys, in plain words: no
|
|
135
|
+
component IDs, no code names. One `flowchart` of how they relate (every edge labelled with the
|
|
136
|
+
relationship), then a glossary table. Leave out anything a journey does not use. Write
|
|
137
|
+
"N/A: [why]" for a design with no domain vocabulary worth defining. -->
|
|
138
|
+
|
|
139
|
+
```mermaid
|
|
140
|
+
flowchart LR
|
|
141
|
+
TERM_A["[Concept A]"]
|
|
142
|
+
TERM_B["[Concept B]"]
|
|
143
|
+
TERM_C["[Concept C]"]
|
|
144
|
+
|
|
145
|
+
TERM_A -->|"[relationship, e.g. has many]"| TERM_B
|
|
146
|
+
TERM_B -->|"[relationship, e.g. is checked against]"| TERM_C
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
| Term | Meaning |
|
|
150
|
+
|---|---|
|
|
151
|
+
| [Concept A] | [one plain sentence] |
|
|
152
|
+
| [Concept B] | [one plain sentence] |
|
|
153
|
+
|
|
154
|
+
## 4. Journeys
|
|
155
|
+
|
|
156
|
+
<!-- One `### Journey N — <name>` per user or system journey, in the order a reader meets them. Each
|
|
157
|
+
carries one picture (a `flowchart` or a `sequenceDiagram`), a `stateDiagram-v2` for EVERY
|
|
158
|
+
stateful thing the journey creates, and a small rules table. Write in plain nouns: no component
|
|
159
|
+
IDs, no code names. Leave out internal calls that no actor sees. Write "N/A: [why]" for the
|
|
160
|
+
whole section when the design has no user or system journey (a pure library or refactor). -->
|
|
161
|
+
|
|
162
|
+
### Journey 1 — [journey name]
|
|
163
|
+
|
|
164
|
+
[One sentence: who starts this journey and what it ends with.]
|
|
165
|
+
|
|
166
|
+
```mermaid
|
|
167
|
+
flowchart LR
|
|
168
|
+
START["[trigger]"] -->|"[what flows]"| CHECK{"[decision]"}
|
|
169
|
+
CHECK -->|"[pass: what flows]"| DONE["[outcome]"]
|
|
170
|
+
CHECK -->|"[fail: what flows]"| STOP["[alternate outcome]"]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
```mermaid
|
|
174
|
+
stateDiagram-v2
|
|
175
|
+
[*] --> Created
|
|
176
|
+
Created --> Active: [guarded transition]
|
|
177
|
+
Active --> Ended: [guarded transition]
|
|
178
|
+
Ended --> [*]
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
| Rule | Why it holds |
|
|
182
|
+
|---|---|
|
|
183
|
+
| [a rule this journey enforces] | [the reason, or what breaks without it] |
|
|
184
|
+
|
|
185
|
+
### Worked example
|
|
186
|
+
|
|
187
|
+
<!-- Real numbers that make the rules checkable: one case that passes and one that does not, then the
|
|
188
|
+
result. Close with one caveat sentence saying what is not guaranteed. Leave out hypothetical
|
|
189
|
+
values you cannot compute. -->
|
|
190
|
+
|
|
191
|
+
| Candidate | Eligible? | Why | Result |
|
|
192
|
+
|---|---|---|---|
|
|
193
|
+
| [case that passes, with a real figure] | yes | [which rule it meets] | [computed outcome] |
|
|
194
|
+
| [case that fails, with a real figure] | no | [which rule it breaks] | [computed outcome] |
|
|
195
|
+
|
|
196
|
+
[Caveat: what is shown but not guaranteed, and where it is re-checked.]
|
|
197
|
+
|
|
198
|
+
### Eligibility / decision inputs
|
|
199
|
+
|
|
200
|
+
<!-- A TABLE, never a mindmap: DIAGRAM_GUIDE.md excludes `mindmap`. One row per group of inputs the
|
|
201
|
+
decision reads; say what the first version reads and what comes later. -->
|
|
202
|
+
|
|
203
|
+
| Input group | What is read | Read in this version? |
|
|
204
|
+
|---|---|---|
|
|
205
|
+
| [group, e.g. the user] | [the facts checked] | yes |
|
|
206
|
+
| [group, e.g. the limits] | [the facts checked] | later: [why] |
|
|
207
|
+
|
|
208
|
+
## 5. Components & Boundaries
|
|
121
209
|
|
|
122
210
|
| ID | Component | Kind | Serves | Status |
|
|
123
211
|
|---|---|---|---|---|
|
|
@@ -134,7 +222,7 @@ flowchart TB
|
|
|
134
222
|
- **Does not own:** [what a reader could expect it to hold but another component does].
|
|
135
223
|
- **Contracts:** [the FR-### and IC-### identifiers it serves].
|
|
136
224
|
|
|
137
|
-
##
|
|
225
|
+
## 6. API / Interface Contracts
|
|
138
226
|
|
|
139
227
|
<!-- Endpoints, CLI verb signatures, and repository/service interfaces that anchor implementation
|
|
140
228
|
live in ./specs.md §1 Interface Contracts, not here — each as one ID-bearing IC-### entry so
|
|
@@ -142,7 +230,7 @@ flowchart TB
|
|
|
142
230
|
this feature genuinely introduces no interface contracts; otherwise leave a one-line pointer,
|
|
143
231
|
e.g. "See ./specs.md §1." -->
|
|
144
232
|
|
|
145
|
-
##
|
|
233
|
+
## 7. Data Model
|
|
146
234
|
|
|
147
235
|
The data-model shape is governed by `./data-model.md` §1.
|
|
148
236
|
|
|
@@ -150,7 +238,7 @@ The data-model shape is governed by `./data-model.md` §1.
|
|
|
150
238
|
./data-model.md §1 Data Model, not here. Write `N/A: [why]` if this feature introduces no data
|
|
151
239
|
model or UX changes; otherwise leave a one-line pointer, e.g. "See ./data-model.md §1." -->
|
|
152
240
|
|
|
153
|
-
##
|
|
241
|
+
## 8. Sequence / Data Flow
|
|
154
242
|
|
|
155
243
|
The data-flow shape is governed by `./data-model.md` §2.
|
|
156
244
|
|
|
@@ -159,7 +247,7 @@ The data-flow shape is governed by `./data-model.md` §2.
|
|
|
159
247
|
no non-trivial interaction sequence; otherwise leave a one-line pointer, e.g.
|
|
160
248
|
"See ./data-model.md §2." -->
|
|
161
249
|
|
|
162
|
-
##
|
|
250
|
+
## 9. Design Risks & Alternatives Considered
|
|
163
251
|
|
|
164
252
|
| ID | Risk / Alternative | Disposition | Status |
|
|
165
253
|
|---|---|---|---|
|
|
@@ -169,7 +257,16 @@ The data-flow shape is governed by `./data-model.md` §2.
|
|
|
169
257
|
|
|
170
258
|
- **R1** → [why this shape was chosen, or why the risk is accepted and what it costs if it lands].
|
|
171
259
|
|
|
172
|
-
##
|
|
260
|
+
## 10. Open Points for Review
|
|
261
|
+
|
|
262
|
+
<!-- The questions this design could not answer, ending the design instead of a bare risk list. One
|
|
263
|
+
bold-led question per bullet, followed by the reasoning already known (a figure, a trade-off, the
|
|
264
|
+
option you lean to). Lead each with the question in bold; do not number them with an ID. Write
|
|
265
|
+
"None — no open points." when every question was settled. -->
|
|
266
|
+
|
|
267
|
+
- **[A question a reviewer must answer?]** [The reasoning already known and the option leaned to.]
|
|
268
|
+
|
|
269
|
+
## 11. Assumptions
|
|
173
270
|
|
|
174
271
|
<!-- With a decision register, a row from a "Decide for me" pick cites its DEC-### in Basis: see ARTIFACT_FORMAT.md §12. -->
|
|
175
272
|
|
|
@@ -185,7 +282,7 @@ The data-flow shape is governed by `./data-model.md` §2.
|
|
|
185
282
|
and detail if every design-level ambiguity was resolved by a direct answer rather than the
|
|
186
283
|
defer escape hatch during /do-design's clarification loop. -->
|
|
187
284
|
|
|
188
|
-
##
|
|
285
|
+
## 12. History
|
|
189
286
|
|
|
190
287
|
<!-- Superseded design decisions move here; the index row above stays as a tombstone with
|
|
191
288
|
`Superseded → <ref>`. -->
|