@khoavu882/doflow 2.0.0-beta.5 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -16
- package/bin/doflow.js +22 -12
- 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/mcp-tool-guard.sh +4 -1
- 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/pre-implement-gate.sh +4 -1
- 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 +26 -9
- 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/hooks.json +0 -10
- package/core/harnesses/codex/hooks/lib.sh +44 -25
- package/core/harnesses/codex/hooks/mcp-tool-guard.sh +4 -1
- 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/pre-implement-gate.sh +4 -1
- 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 +94 -0
- package/core/harnesses/copilot/hooks/doflow-mcp-tool-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 +51 -0
- package/core/harnesses/kiro/agents/doflow.json +1 -11
- package/core/harnesses/kiro/hooks/doflow.json +0 -10
- package/core/harnesses/kiro/hooks/lib.sh +26 -6
- package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +8 -3
- package/core/harnesses/kiro/hooks/pre-implement-gate.sh +8 -3
- 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 +11 -2
- package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +1 -2
- package/core/harnesses/shared/hooks/adapters/antigravity.js +1 -1
- package/core/harnesses/shared/hooks/bridge/bridge.sh +126 -23
- 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 +16 -2
- package/core/harnesses/shared/hooks/policies/capture-failure.sh +49 -16
- 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 +20 -7
- 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-policy.conf +1 -1
- package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +7 -8
- package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +132 -57
- package/core/harnesses/shared/hooks/policies/session-context.sh +30 -1
- package/core/harnesses/shared/hooks/policies/stop-check.sh +27 -15
- package/core/harnesses/shared/hooks/policies/subagent-audit.sh +6 -3
- 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 +58 -20
- 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 +35 -0
- package/core/registry/gates.json +32 -0
- package/core/registry/guidance-caps.json +40 -0
- package/core/registry/harnesses.json +1445 -366
- package/core/registry/intake.json +53 -0
- package/core/registry/lifecycle.json +599 -996
- 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/intake-category/files/category.json +8 -0
- package/core/registry/package-templates/intake-category/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 +272 -0
- package/core/registry/storage.json +687 -31
- package/core/registry/telemetry.json +236 -0
- package/core/registry/transcripts.json +142 -0
- package/core/registry/verification.json +76 -6
- 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 +3 -2
- package/core/shared/guidance/references/WORKFLOW_HANDOFF.md +19 -1
- 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 +49 -5
- package/core/shared/scripts/doflow/bin/doflow-run +152 -34
- package/core/shared/skills/do/SKILL.md +14 -12
- 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 +45 -97
- package/core/shared/skills/do-brainstorm/references/handoff_branches.md +36 -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 +48 -148
- 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 +23 -20
- package/core/shared/skills/do-diagnose/SKILL.md +18 -6
- package/core/shared/skills/do-document/SKILL.md +12 -1
- package/core/shared/skills/do-document/references/deep_research.md +1 -2
- package/core/shared/skills/do-document/references/embedded-research.md +19 -7
- package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
- package/core/shared/skills/do-execute-plan/SKILL.md +19 -60
- 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 +16 -2
- 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 +10 -11
- package/core/shared/skills/do-flow/references/task_classes.md +5 -5
- package/core/shared/skills/do-git/SKILL.md +4 -0
- package/core/shared/skills/do-implement/SKILL.md +13 -14
- package/core/shared/skills/do-plan/SKILL.md +34 -20
- 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/shared/workflows/do-flow-chain.md +2 -0
- 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 +46 -5
- package/src/adapters/codex/agents.js +25 -15
- package/src/adapters/codex/hooks.js +39 -3
- package/src/adapters/codex/index.js +61 -13
- package/src/adapters/codex/native-projection.js +6 -2
- package/src/adapters/copilot/index.js +58 -23
- package/src/adapters/copy-tree.js +291 -46
- 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 +22 -3
- package/src/cli/commands/ui.js +99 -0
- package/src/cli/commands/update.js +2 -1
- package/src/cli/index.js +337 -32
- package/src/cli/runtime-commands.js +220 -60
- 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 +4 -16
- 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 +472 -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/pointer.js +67 -12
- 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 +158 -79
- 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 +52 -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 +624 -18
- package/src/runtime/history-compactor.js +13 -3
- package/src/runtime/implementation-gate.js +281 -26
- package/src/runtime/intake/engine.js +677 -0
- package/src/runtime/intake/index.js +136 -0
- package/src/runtime/intake/manifest.js +140 -0
- package/src/runtime/intake/taxonomy.js +206 -0
- 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 +88 -10
- package/src/runtime/lifecycle/event-store.js +8 -6
- package/src/runtime/lifecycle/followup.js +38 -7
- package/src/runtime/lifecycle/overview.js +26 -2
- 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 +487 -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/attendance.js +137 -0
- package/src/runtime/roadmap/facts.js +479 -0
- package/src/runtime/roadmap/gates.js +273 -0
- package/src/runtime/roadmap/loop.js +1719 -0
- package/src/runtime/roadmap/merge.js +390 -0
- package/src/runtime/roadmap/rows.js +1122 -0
- package/src/runtime/roadmap/seed.js +1063 -0
- package/src/runtime/roadmap/worktree-cleanup.js +147 -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 +85 -14
- 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 +373 -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/verb-view.js +267 -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 -54
- 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 +256 -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 +610 -67
- 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/claude/hooks/pre-bash-guard.sh +0 -10
- package/core/harnesses/codex/hooks/pre-bash-guard.sh +0 -10
- 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/harnesses/kiro/hooks/pre-bash-guard.sh +0 -24
- package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +0 -91
- package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +0 -378
- 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
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# `--scaffold` — turning the plan into a reviewable code scaffold
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- What it produces
|
|
6
|
+
- Two cases, one output tree
|
|
7
|
+
- Part 1 — in-scope scaffold from the three artifacts
|
|
8
|
+
- Part 2 — external dependencies (cross-service contract frames)
|
|
9
|
+
- Constraints (carried from the design — do not relax these)
|
|
10
|
+
|
|
11
|
+
Read this file only when `/do-execute-plan --scaffold` is the active invocation. It is step 5 of
|
|
4
12
|
`do-execute-plan`'s Behavioral Flow, factored out here per Anthropic's progressive-disclosure
|
|
5
13
|
guidance so the other invocation modes (`--scope next|phase:N|all|resume`, and the `--review`
|
|
6
14
|
modifier) don't pay the token cost of this algorithm on every invocation.
|
|
@@ -80,7 +88,7 @@ do not restate its counts from memory or re-derive them by reading the tree.
|
|
|
80
88
|
Run it from the project root: the verb resolves which feature is active exactly the way `paths`
|
|
81
89
|
does, from the working directory. The one case worth knowing about is a non-git root holding more
|
|
82
90
|
than one feature directory — there the resolver cannot choose, and exits 2 naming every candidate.
|
|
83
|
-
Ask the user which one via
|
|
91
|
+
Ask the user which one via the question tool and re-run as `"$DOFLOW" scaffold --slug=<chosen>
|
|
84
92
|
--json`; do not pick for them.
|
|
85
93
|
|
|
86
94
|
Exit codes follow the runtime's uniform contract: `0` complete, `1` a finding you must report to the
|
|
@@ -93,14 +101,14 @@ What the generator does, so you can read its output rather than guess at it:
|
|
|
93
101
|
1. **Reads all three artifacts** and records each one's SHA-256 in `MANIFEST.md`. A missing one, or
|
|
94
102
|
a `plan.md` with no parseable task list, is `BLOCKED`: no source files are written.
|
|
95
103
|
2. **Builds the traceability chain** — a task's `[US#]` resolves through `requirement.md`'s FR index
|
|
96
|
-
to its requirements, and through `design.md`
|
|
104
|
+
to its requirements, and through `design.md` Components & Boundaries to the components serving them. That chain is
|
|
97
105
|
what puts a real FR / component / task in every file header instead of a generic banner.
|
|
98
106
|
3. **Mirrors the intended source layout** from every task's `files:` value into `scaffold/src/`,
|
|
99
107
|
keeping each path exactly as the plan wrote it and appending `.stub`. In a repository whose code
|
|
100
108
|
already lives in `src/`, that reads as `scaffold/src/src/runtime/thing.js.stub`; the doubling is
|
|
101
109
|
deliberate, so a path can never collide with `MANIFEST.md` or `contracts/`.
|
|
102
110
|
4. **Emits per-file frames** in the language of the file's own extension — the plan already stated
|
|
103
|
-
it, so nothing is inferred. Where `design.md`
|
|
111
|
+
it, so nothing is inferred. Where `design.md` API / Interface Contracts declares an interface for the file's component,
|
|
104
112
|
that block is carried through verbatim as a quoted comment; where it does not, the file gets one
|
|
105
113
|
clearly labelled placeholder signature and is listed under **Emitted without a declared shape**.
|
|
106
114
|
No API nobody wrote down is ever invented.
|
|
@@ -397,7 +405,7 @@ rather than restated as prose.
|
|
|
397
405
|
- Never write outside `agent-docs/doflow/<slug>/scaffold/` — not into the source tree, and not
|
|
398
406
|
into a target service's own repo (including the dependency service scanned for language
|
|
399
407
|
inference in Part 2 step 4 — read-only). This is the one property the whole artifact rests on, and
|
|
400
|
-
`test/guards/scaffold.test.
|
|
408
|
+
`test/guards/scaffold.test.ts` enforces it by running the generator against a filesystem that can
|
|
401
409
|
only reach the feature directory.
|
|
402
410
|
- `code/`/`data/`/`mock/` content is pinned, not freeform: signatures and type/data shapes only,
|
|
403
411
|
zero implementation logic — in the inferred language, or the pinned generic-pseudocode grammar
|
|
@@ -422,9 +430,9 @@ rather than restated as prose.
|
|
|
422
430
|
generated `code/`/`data/`/`mock/`/`default/` output directory — still not a write outside
|
|
423
431
|
`agent-docs/doflow/<slug>/scaffold/` (the first Constraint above still holds), but visually
|
|
424
432
|
confusing; not auto-detected or renamed.
|
|
425
|
-
- The
|
|
426
|
-
|
|
427
|
-
|
|
433
|
+
- The gates are the chain's own: the advisory `pre-implement-gate.sh` and step 1's
|
|
434
|
+
`"$DOFLOW" prereqs --require-plan`. Neither Part adds gates. Part 2 unresolved dependencies do
|
|
435
|
+
not block; Part 1 non-zero exits are reportable, not stops.
|
|
428
436
|
- A `depends-on:` value whose starting directory does not exist on disk at all is excluded from
|
|
429
437
|
service-identity derivation *entirely* (Part 2 step 1) — it never reaches Part 2 step 5's local
|
|
430
438
|
generation path. It gets a frame only if the same task also carries an `external-contract:` field
|
|
@@ -438,4 +446,4 @@ rather than restated as prose.
|
|
|
438
446
|
- A documented dependency's frame renders in the *consuming* task's own inferred language (Part 2
|
|
439
447
|
step 4,
|
|
440
448
|
reused unchanged, applied to the consumer's repo) — never a language inferred from the
|
|
441
|
-
dependency itself, which has no local repo to infer one from.
|
|
449
|
+
dependency itself, which has no local repo to infer one from.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Writing a `state.md` checkpoint (SKILL.md step 8)
|
|
2
|
+
|
|
3
|
+
- Every checkpoint: append the finished task(s) to the Task Ledger (`Commits` as the actual
|
|
4
|
+
`[base7]..[head7]` range once committed, or `uncommitted (working tree)` when this run doesn't
|
|
5
|
+
commit on its own), move them from **In Progress** to **Completed**, and rewrite **Status**,
|
|
6
|
+
**Blocked**, **Findings** and **Next Action** (the next pending task) in place, deleting a
|
|
7
|
+
blocker or finding that no longer applies, so a resumed session (or a different one) can pick up
|
|
8
|
+
from this file and `git log` alone, never from conversation memory. A `Findings` entry records
|
|
9
|
+
a review finding deliberately left unfixed (rare); write "None." otherwise, never omit it.
|
|
10
|
+
- This is bookkeeping, not a gate: a write failure here degrades resumability, not correctness —
|
|
11
|
+
report it and continue rather than treating it as a task failure.
|
|
@@ -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
|
-
|
|
111
|
-
|
|
112
|
-
here). Options: `Proceed` / `Let me review the artifacts first` / `Stop here`.
|
|
110
|
+
advisory hook (`pre-implement-gate.sh`; its scope is in `references/DOFLOW_CHAIN.md`), which
|
|
111
|
+
still reports a missing artifact. 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:**
|
|
@@ -164,8 +163,8 @@ Before a feature stage relies on an external fact that local or user evidence ca
|
|
|
164
163
|
ambiguous answer.
|
|
165
164
|
- Record each gate answer it collects through `orchestrate --action decide-gate`, so the stage skill
|
|
166
165
|
that owns that gate finds it already resolved instead of asking the user the same question twice.
|
|
167
|
-
- Compose with the existing `pre-implement-gate.sh`
|
|
168
|
-
That hook keys on branch and artifact state, not on class, so it can
|
|
166
|
+
- Compose with the existing `pre-implement-gate.sh` advisory hook rather than bypass or duplicate it.
|
|
167
|
+
That hook keys on branch and artifact state, not on class, so it can advise against a `bug` or
|
|
169
168
|
`trivial-edit` workflow's edits on a branch that already holds an incomplete feature dir —
|
|
170
169
|
surface its message as written.
|
|
171
170
|
|
|
@@ -125,10 +125,10 @@ A `caller-not-a-stage` rejection is about **you**, not about the class. Answer i
|
|
|
125
125
|
stage — propose one of those, or hand the work to the skill this class names for the stage you
|
|
126
126
|
meant. Re-proposing the same class will be rejected the same way.
|
|
127
127
|
|
|
128
|
-
## The
|
|
128
|
+
## The advisory 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 advises on: SKILL.md step 7): if the
|
|
131
|
+
current branch already carries a feature directory the gate flags, it advises on source edits
|
|
132
132
|
regardless of the class in play — so a `bug` or `trivial-edit` workflow started on that branch will
|
|
133
|
-
|
|
134
|
-
it, and do not create placeholder artifacts to satisfy it.
|
|
133
|
+
get that advisory at its implementation stage. Surface the hook's message as written. Do not route
|
|
134
|
+
around 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,16 +46,15 @@ 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
|
|
|
56
|
+
Once per stage, after `feature_slug` resolves, run `"$DOFLOW" attendance --task-id "<feature_slug>"`; `unattended` → `references/WORKFLOW_HANDOFF.md` § Unattended stage.
|
|
57
|
+
|
|
59
58
|
2. **Resolve the task id, then evaluate readiness — skip only when standalone**:
|
|
60
59
|
- `<task id>` is the same unit every recording stage keys on: the plan task id when one exists,
|
|
61
60
|
otherwise the feature slug that step 1's `"$DOFLOW" paths --json` resolved, or the issue id you
|
|
@@ -76,9 +75,9 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
76
75
|
of `bug`, `refactor`, `dependency-change` or `trivial-edit` the recorded work already fits.
|
|
77
76
|
`do-implement` never serves `feature`; that class's implementation stage is `/do-execute-plan`.
|
|
78
77
|
```bash
|
|
79
|
-
"$DOFLOW" classify --task-class "<proposed>" --calling-skill do-implement --json
|
|
78
|
+
"$DOFLOW" classify --task-class "<proposed>" --calling-skill do-implement --view brief --json
|
|
80
79
|
```
|
|
81
|
-
Branch on
|
|
80
|
+
Branch on `outcome`, not the exit code. `ACCEPTED` — the returned `workflow` names
|
|
82
81
|
the validated class to evaluate readiness against. `REJECTED` — stop, print `message` verbatim
|
|
83
82
|
(it names `validClasses`), ask the user to choose from that set, then re-validate; never
|
|
84
83
|
substitute `feature` for the class that was rejected.
|
|
@@ -97,7 +96,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
97
96
|
computes, so a zero exit is not a green light.
|
|
98
97
|
- **`STOP`** — refuse to modify source. Report which claim is conflicted and what evidence
|
|
99
98
|
disagrees, then stop. Do not edit anyway.
|
|
100
|
-
- **`ASK_USER`** — a decision is owed by the user. Ask it through
|
|
99
|
+
- **`ASK_USER`** — a decision is owed by the user. Ask it through RULE_04 (`rules/RULES.md`)
|
|
101
100
|
mechanism and wait; editing first would decide it silently on their behalf.
|
|
102
101
|
- **`ENTER`** — proceed to the context-pack call below. In standalone mode this includes
|
|
103
102
|
`NEEDS_EVIDENCE`: the unmet contract is reported, not enforced — relay the missing
|
|
@@ -121,8 +120,8 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
121
120
|
established.
|
|
122
121
|
- The repository's `pre-implement-gate` hook checks file existence (`requirement.md` /
|
|
123
122
|
`design.md` / `plan.md`) on every `Edit`/`Write` call regardless of which skill is editing. On
|
|
124
|
-
a harness with an edit hook it also
|
|
125
|
-
|
|
123
|
+
a harness with an edit hook it also advises when a held task's readiness record is not
|
|
124
|
+
`READY`; the hook never denies. This step writes that record, and is not a way around it.
|
|
126
125
|
|
|
127
126
|
3. **Understand before writing**:
|
|
128
127
|
- Read the files the change touches and their immediate neighbors — naming conventions, error
|
|
@@ -141,7 +140,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
141
140
|
duplicates the host's own edit-approval mechanisms.
|
|
142
141
|
- Stop after the change set only when one of two things is true: the user asked for the plan
|
|
143
142
|
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 `
|
|
143
|
+
a genuine user-owned decision — then ask it per RULE_04 (`rules/RULES.md`) and wait, because
|
|
145
144
|
editing first would decide it silently.
|
|
146
145
|
|
|
147
146
|
5. **Implement**:
|
|
@@ -149,8 +148,8 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
149
148
|
unimplemented mock functions, or `throw new Error('Not implemented')` placeholders in the
|
|
150
149
|
produced change. Every changed component must be fully wired and functional.
|
|
151
150
|
- Before the first source edit, a run for this task needs step 2's recorded readiness to be
|
|
152
|
-
`READY`: the
|
|
153
|
-
|
|
151
|
+
`READY`: the edit hook only advises, and the runtime refuses step 7's handoff after the edits are
|
|
152
|
+
made. A standalone `NEEDS_EVIDENCE` does not pass it.
|
|
154
153
|
- Keep it scoped to what was asked — no bonus refactors, no speculative abstractions (the same
|
|
155
154
|
scope-discipline rule the chain's own artifacts would otherwise remind you of; here, hold
|
|
156
155
|
yourself to it directly).
|
|
@@ -218,6 +217,6 @@ advance past the mutating stage only this skill may complete.
|
|
|
218
217
|
multi-task checklist through specialist subagents — that is `/do-execute-plan`'s job once a real
|
|
219
218
|
plan exists; silently override the repository's own `pre-implement-gate` hook. That hook triggers
|
|
220
219
|
on any `Edit`/`Write` call, not on which skill made it — a branch mid-chain with a started feature
|
|
221
|
-
but no `design.md` still gets
|
|
220
|
+
but no `design.md` still gets the same advisory here as it would anywhere else, and that is by
|
|
222
221
|
design, not a gap this skill works around. Resolve a workflow gate, or start a workflow run for a
|
|
223
222
|
standalone implementation.
|
|
@@ -37,13 +37,15 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
|
|
|
37
37
|
|
|
38
38
|
`feature_slug` `null` with a non-empty `candidate_slugs` is an unresolved choice, not "no active feature": ask one option per entry, re-resolve with `"$DOFLOW" paths --json --slug="<chosen>"`, and use that slug for the rest of this flow. `/do-flow` passing `--slug` already resolves it — no prompt then.
|
|
39
39
|
|
|
40
|
+
Once per stage, after `feature_slug` resolves, run `"$DOFLOW" attendance --task-id "<feature_slug>"`; `unattended` → `references/WORKFLOW_HANDOFF.md` § Unattended stage.
|
|
41
|
+
|
|
40
42
|
2. **Propose one task class; the runtime validates it** — name exactly one class id for the work
|
|
41
43
|
being planned. `/do-flow` passes one when it invoked this skill; a user who named one settles it;
|
|
42
44
|
otherwise derive it from `requirement.md` and `design.md`, not from their mere existence.
|
|
43
45
|
```bash
|
|
44
|
-
"$DOFLOW" classify --task-class "<proposed>" --calling-skill do-plan --json
|
|
46
|
+
"$DOFLOW" classify --task-class "<proposed>" --calling-skill do-plan --view brief --json
|
|
45
47
|
```
|
|
46
|
-
Branch on
|
|
48
|
+
Branch on `outcome`, not the exit code.
|
|
47
49
|
- **`ACCEPTED`** — the returned `workflow` is this run's plan of record; read `stages`, `gates` and `handoff` off it rather than from memory.
|
|
48
50
|
- **`REJECTED`** — **stop.** Print `message` verbatim (it already names `validClasses` and any `suggestions`), ask the user to choose from `validClasses`, then re-validate. Never substitute `feature`.
|
|
49
51
|
A rejection may be about **you** rather than the class (`reason: caller-not-a-stage`). Then the fix is to propose one of the classes in `fit.hostingClasses`, or to hand the work to the skill this class names for the stage you meant — not to re-propose the same class.
|
|
@@ -59,8 +61,8 @@ stages to implementation, and writing them a `plan.md` adds a gate their workflo
|
|
|
59
61
|
not have.
|
|
60
62
|
|
|
61
63
|
3. **Precondition (advisory)** — if `has_requirement` or `has_design` is false, warn and offer to
|
|
62
|
-
run `/do-brainstorm` / `/do-design` first. This gate is **advisory** (skippable),
|
|
63
|
-
hook
|
|
64
|
+
run `/do-brainstorm` / `/do-design` first. This gate is **advisory** (skippable), like the edit
|
|
65
|
+
hook.
|
|
64
66
|
4. **Read inputs** — compile the recorded prior context first, using the same task id rule step 10
|
|
65
67
|
uses below (the plan task id for anything already scoped to a single `- [ ]` task, otherwise the
|
|
66
68
|
feature slug):
|
|
@@ -70,17 +72,17 @@ not have.
|
|
|
70
72
|
**Exit 1 means the pack came back empty; exit 3 means overflow: the pack is complete, act on
|
|
71
73
|
`overflowAction.message` and report the gap.** By this point `do-design` should have batched
|
|
72
74
|
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
|
-
|
|
75
|
+
task id mismatched. Empty packs are advisory; prerequisites check artifact existence only. Report
|
|
76
|
+
them in this stage's report and `plan.md` §3 "Research & Decisions"; prose without a compiled
|
|
77
|
+
pack cannot claim prior evidence. When non-empty, read it alongside `requirement.md`,
|
|
78
|
+
`design.md`, and the constitution.
|
|
77
79
|
**Also read `specs.md` when step 1's `has_specs` is true** — use that flag, never a filesystem
|
|
78
80
|
check of your own, and read the `specs` path the resolver returned. `/do-design` moves the
|
|
79
81
|
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
|
|
82
|
+
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
83
|
plan must decompose toward live only in `specs.md`. Planning from `design.md` alone on such a
|
|
82
84
|
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`
|
|
85
|
+
had a `specs.md`), the contracts are still in `design.md` (API / Interface Contracts, Data Model) and there is nothing extra to
|
|
84
86
|
read. Read
|
|
85
87
|
`constitution_base`,
|
|
86
88
|
then read `constitution_local` **only when `has_constitution_local` is true** — use that flag,
|
|
@@ -115,15 +117,17 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
|
|
|
115
117
|
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
118
|
This stage fills the plan from requirement + design + constitution rather than by eliciting, so
|
|
117
119
|
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
|
|
120
|
+
counterpart here. Should a future revision of this skill add a question-tool clarification
|
|
119
121
|
loop, each of its rounds logs to `plan-<NN>-question.md` at the feature root exactly as
|
|
120
122
|
`/do-brainstorm` and `/do-design` log theirs to their own subdirectories, numbered from step 1's
|
|
121
123
|
`plan_next_round`.
|
|
122
|
-
6. **Constitution Check (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
6. **Constitution Check (exit gate)** — evaluate the plan against both tiers as reconciled in step
|
|
125
|
+
4. Record one row per principle in `plan.md` §2: its id, its tier (MUST unless it says `**Tier:**
|
|
126
|
+
SHOULD`) and PASS/FAIL; a base MUST that tier-2 makes SHOULD names that overlay version in its
|
|
127
|
+
row. On a violation, revise the approach first. A MUST marked FAIL or left
|
|
128
|
+
without a row refuses step 11's handoff; a SHOULD FAIL is a note. That refusal is the runtime's,
|
|
129
|
+
beside the advisory hook on artifact existence (`references/DOFLOW_CHAIN.md` scopes both).
|
|
130
|
+
There is no waiver: revise the plan, or a person amends the constitution with `/do-constitution`.
|
|
127
131
|
7. **Decompose into Tasks (section 8)** — dependency-ordered, `[US#]`-traced to the requirement's
|
|
128
132
|
user stories, owner+files named per task, with checkpoints and completion criteria.
|
|
129
133
|
Read the guidance tree's `references/ORCHESTRATION.md` and
|
|
@@ -131,7 +135,7 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
|
|
|
131
135
|
`--depth shallow|normal|deep` is the single granularity knob: it sets how finely a phase is
|
|
132
136
|
split into tasks and how much detail each task carries. Default `normal`.
|
|
133
137
|
**Why explicit task scoping and `[P]` markers**: Specifying concrete file paths (`files: [...]`)
|
|
134
|
-
and
|
|
138
|
+
and agent-spec owners (review tasks name `reviewer`) per task
|
|
135
139
|
enables `/do-execute-plan` to compute write-set isolation (`parallel-check`). Tasks with disjoint
|
|
136
140
|
file sets run concurrently without merge conflicts, while overlapping tasks are safely serialized.
|
|
137
141
|
**Mark `[P]` by default:** parallel execution is the framework default, so apply `[P]` to every
|
|
@@ -159,8 +163,13 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
|
|
|
159
163
|
table: `primary` if it owns a task via `files:`, `dependency-only` if it's only ever reached via
|
|
160
164
|
`depends-on:`. A single-repo result → `N/A: single-repo feature`. Derivation only — no branch is
|
|
161
165
|
created here (`/do-execute-plan`'s job, lazily, per repo).
|
|
162
|
-
9. **
|
|
166
|
+
9. **Self-review, then validate** — reread the plan against itself and fix it inline: every
|
|
167
|
+
requirement id and `[US#]` story is traced to a task or a §7 row, no TBD/TODO/"later" placeholder
|
|
168
|
+
is left, and no task is coarser than `--depth` sets (split one that is). `plan-check` scans the
|
|
169
|
+
first two and prints each one as a `findings` entry with its `path:line`. Fix every entry, then run
|
|
170
|
+
the advisory consistency check and surface its findings verbatim:
|
|
163
171
|
```bash
|
|
172
|
+
"$DOFLOW" plan-check "<plan path>" --json
|
|
164
173
|
"$DOFLOW" validate "<plan path>"
|
|
165
174
|
```
|
|
166
175
|
This also verifies each `### Task Summary` rollup row against the `- [ ]` lines under its
|
|
@@ -190,14 +199,19 @@ Item schema, provenance rules, and the refused-field list: the guidance tree's `
|
|
|
190
199
|
```bash
|
|
191
200
|
"$DOFLOW" render-audit --slug="<task id>" --json
|
|
192
201
|
```
|
|
193
|
-
Leave any returned approval gate for `/do-flow` or `/do-execute-plan` to present
|
|
202
|
+
Leave any returned approval gate for `/do-flow` or `/do-execute-plan` to present (unattended: the loop
|
|
203
|
+
decides it by policy).
|
|
194
204
|
|
|
195
205
|
12. **Stop** — report the plan path, Constitution Check result, the task count (`[P]`/sequential),
|
|
196
206
|
and the derived branch name/repo count when the Repo Branch Plan is populated.
|
|
197
207
|
|
|
208
|
+
### Planning Efficiency Invariants
|
|
209
|
+
- Identify concurrent versus sequential operations across disjoint write sets.
|
|
210
|
+
- Map explicit dependencies between tasks; batch tool calls; maximize parallel execution gains.
|
|
211
|
+
|
|
198
212
|
## Embedded feature research
|
|
199
213
|
|
|
200
|
-
For an external fact gap or
|
|
214
|
+
For an external fact gap or request, follow the Gap or request protocol in `../do-document/references/embedded-research.md` before stage completion.
|
|
201
215
|
|
|
202
216
|
## Boundaries
|
|
203
217
|
**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
|
>
|