@khoavu882/doflow 2.0.0-beta.4 → 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 -3
- 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 +7 -17
- 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-bash-guard.sh +7 -17
- package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
- package/core/harnesses/claude/hooks/pre-implement-gate.sh +7 -18
- package/core/harnesses/claude/hooks/session-end.sh +23 -10
- package/core/harnesses/claude/hooks/session-start.sh +5 -3
- package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
- package/core/harnesses/claude/hooks/stop-check.sh +5 -3
- package/core/harnesses/claude/hooks/subagent-audit.sh +5 -5
- package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -3
- 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/mcp-tool-guard.sh +7 -15
- package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
- package/core/harnesses/codex/hooks/pre-bash-guard.sh +7 -15
- package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
- package/core/harnesses/codex/hooks/pre-implement-gate.sh +7 -16
- package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
- package/core/harnesses/codex/hooks/session-start.sh +5 -3
- package/core/harnesses/codex/hooks/stop-check.sh +6 -5
- package/core/harnesses/codex/hooks/subagent-audit.sh +18 -6
- package/core/harnesses/codex/hooks/user-prompt-submit.sh +5 -4
- 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 +21 -5
- package/core/harnesses/kiro/hooks/pre-bash-guard.sh +21 -5
- package/core/harnesses/kiro/hooks/pre-implement-gate.sh +21 -5
- package/core/harnesses/kiro/hooks/session-start.sh +12 -5
- package/core/harnesses/kiro/hooks/stop-check.sh +22 -30
- package/core/harnesses/pi/extensions/doflow-guard.js +167 -0
- package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +27 -12
- package/core/harnesses/shared/hooks/adapters/antigravity.js +14 -57
- package/core/harnesses/shared/hooks/bridge/bridge.sh +277 -0
- package/core/harnesses/shared/hooks/bridge/envelope.jq +129 -0
- package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
- package/core/harnesses/shared/hooks/bridge/respond.sh +70 -0
- package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
- package/core/harnesses/shared/hooks/policies/capture-failure.sh +51 -16
- package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
- package/core/harnesses/shared/hooks/policies/contract.sh +78 -0
- package/core/harnesses/shared/hooks/policies/deny-json.sh +35 -9
- 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 +65 -40
- package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +48 -35
- package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +284 -33
- package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +180 -110
- package/core/harnesses/shared/hooks/policies/session-context.sh +66 -7
- package/core/harnesses/shared/hooks/policies/stop-check.sh +61 -23
- package/core/harnesses/shared/hooks/policies/subagent-audit.sh +39 -6
- package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
- package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +97 -159
- package/core/harnesses/shared/hooks/stream-hook-runner.js +114 -187
- package/core/harnesses/shared/locator/doflow-run +2 -3
- package/core/registry/advice.json +3 -3
- package/core/registry/assets.json +72 -80
- package/core/registry/capabilities.json +12 -0
- package/core/registry/contracts.json +60 -33
- 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 +1542 -277
- package/core/registry/lifecycle.json +2837 -37
- 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 +701 -30
- 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 +154 -35
- 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 +24 -23
- 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 +17 -59
- 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 +28 -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 +7 -9
- package/core/shared/skills/do-plan/SKILL.md +29 -19
- 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 +226 -113
- package/src/adapters/claude/index.js +39 -5
- package/src/adapters/codex/agents.js +25 -15
- package/src/adapters/codex/hooks.js +40 -5
- package/src/adapters/codex/index.js +100 -22
- package/src/adapters/codex/native-projection.js +6 -2
- package/src/adapters/copilot/index.js +58 -23
- package/src/adapters/copy-tree.js +294 -48
- 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 +38 -13
- package/src/adapters/opencode/index.js +8 -8
- package/src/adapters/pi/hooks.js +120 -0
- package/src/adapters/pi/index.js +48 -16
- package/src/adapters/resolve-source.js +26 -2
- package/src/cli/commands/install.js +3 -2
- 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 +3 -2
- package/src/cli/index.js +338 -33
- package/src/cli/runtime-commands.js +243 -52
- 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 +74 -0
- package/src/lifecycle/hook-step.js +61 -0
- package/src/lifecycle/hook-tier.js +160 -0
- package/src/lifecycle/index.js +434 -86
- package/src/lifecycle/retired-harnesses.js +318 -0
- package/src/lifecycle/view.js +35 -15
- package/src/registry/index.js +686 -32
- 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 +514 -0
- 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 +27 -12
- package/src/runtime/cli-result.js +11 -4
- package/src/runtime/cli.js +221 -277
- package/src/runtime/config-home.js +42 -0
- package/src/runtime/context/arbitrate.js +767 -0
- package/src/runtime/context/budget.js +203 -0
- package/src/runtime/context/compose.js +1367 -0
- package/src/runtime/context/delivery-store.js +100 -0
- package/src/runtime/context/emission-rules.js +118 -0
- package/src/runtime/context/identity.js +227 -0
- package/src/runtime/context/mandatory.js +594 -0
- package/src/runtime/context/pointer.js +142 -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 +1106 -245
- 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-fields.js +39 -0
- package/src/runtime/evidence-ledger.js +41 -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 +77 -10
- 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 +3 -3
- 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 +127 -16
- package/src/runtime/research-request.js +50 -25
- package/src/runtime/retrieval-plan.js +402 -73
- package/src/runtime/retrieval-record.js +293 -0
- 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 +63 -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 +290 -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 +202 -56
- package/src/runtime/task-sources.js +147 -0
- package/src/runtime/task-state.js +440 -65
- 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/.antigravity-plugin/hooks.json +0 -39
- 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 -21
- package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
- package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -21
- package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
- package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -22
- 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 -5
- package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
- package/core/harnesses/shared/hooks/adapters/arg-fields.js +0 -19
- package/core/harnesses/shared/hooks/adapters/gemini.js +0 -114
- package/core/harnesses/shared/hooks/hooks.json +0 -47
- 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 -210
- package/src/adapters/gemini/index.js +0 -390
|
@@ -51,8 +51,8 @@ Rules:
|
|
|
51
51
|
which is reconciled only after the whole file is read.
|
|
52
52
|
|
|
53
53
|
Which sections take an index: `requirement.md` §3 Functional Requirements, §4 Non-Functional
|
|
54
|
-
Requirements and §8 Assumptions; `design.md`
|
|
55
|
-
Assumptions; `plan.md` §4 Components & Changes and §6 Risks; `specs.md` §1 Interface Contracts.
|
|
54
|
+
Requirements and §8 Assumptions; `design.md` Components & Boundaries, Design Risks & Alternatives
|
|
55
|
+
Considered and Assumptions; `plan.md` §4 Components & Changes and §6 Risks; `specs.md` §1 Interface Contracts.
|
|
56
56
|
Prose sections do not.
|
|
57
57
|
|
|
58
58
|
## 2. Status and Maturity — two closed vocabularies
|
|
@@ -92,8 +92,8 @@ vocabulary in the wrong place, and `Draft` was never a legal member of it.
|
|
|
92
92
|
## 3. History — the live body stays current
|
|
93
93
|
|
|
94
94
|
When an item is superseded, its obsolete prose leaves the `**Detail**` block and moves to the
|
|
95
|
-
artifact's own final History section —
|
|
96
|
-
`specs.md`. The index row stays as a tombstone. Reading the body top to bottom therefore yields
|
|
95
|
+
artifact's own final History section — the section titled History, last in `requirement.md`,
|
|
96
|
+
`design.md` and `plan.md`; §2 for `specs.md`. The index row stays as a tombstone. Reading the body top to bottom therefore yields
|
|
97
97
|
current truth with no historical detours, while the supersession is still visible at a glance.
|
|
98
98
|
|
|
99
99
|
Two rules bind that mechanism, and nothing else in this document states them:
|
|
@@ -120,7 +120,7 @@ below so the reasoning behind a reversal is not compressed into a cell:
|
|
|
120
120
|
|
|
121
121
|
| Date | ID | Change | Replaced by |
|
|
122
122
|
|---|---|---|---|
|
|
123
|
-
| 2026-07-29 | FR-001 | Field renamed during design | design
|
|
123
|
+
| 2026-07-29 | FR-001 | Field renamed during design | design Interface Contracts |
|
|
124
124
|
|
|
125
125
|
**Detail**
|
|
126
126
|
|
|
@@ -146,7 +146,9 @@ A feature with a decision register compacts History mechanically; see §12.
|
|
|
146
146
|
| Artifact | Section | Slot |
|
|
147
147
|
|---|---|---|
|
|
148
148
|
| `requirement.md` | §1 | Scope boundary `flowchart` |
|
|
149
|
-
| `design.md` |
|
|
149
|
+
| `design.md` | System Overview (C4) | Three C4 levels, each a `flowchart` with `subgraph` boundaries |
|
|
150
|
+
| `design.md` | Concepts | Relationship `flowchart` of the domain nouns, edges labelled |
|
|
151
|
+
| `design.md` | Journeys | Per journey: one `flowchart` or `sequenceDiagram`, plus a `stateDiagram-v2` for each stateful thing it creates |
|
|
150
152
|
| `plan.md` | §8 | Phase and task dependency `flowchart` |
|
|
151
153
|
| `data-model.md` | §1 | Conceptual domain map `flowchart`, then one `erDiagram` per bounded subdomain |
|
|
152
154
|
| `data-model.md` | §2 | Interaction `sequenceDiagram` |
|
|
@@ -158,7 +160,7 @@ in-scope item produces, so the shape of the change is visible before the prose.
|
|
|
158
160
|
`subgraph IN["In scope"]` / `subgraph OUT["Out of scope"]`. Write `N/A: [why]` for a change too
|
|
159
161
|
small to have a meaningful boundary.
|
|
160
162
|
|
|
161
|
-
### C4 levels — `design.md`
|
|
163
|
+
### C4 levels — `design.md` System Overview (C4)
|
|
162
164
|
|
|
163
165
|
C4 is kept as the **conceptual zoom model** — system context, container, component — and rendered
|
|
164
166
|
with Mermaid `flowchart` plus `subgraph` blocks marking C4 boundaries. Each level takes its own
|
|
@@ -171,13 +173,13 @@ heading, written `### C4 Level 1: System Context`, `### C4 Level 2: Container` a
|
|
|
171
173
|
| C4 Level 2 | Independently deployable units and how they talk | yes |
|
|
172
174
|
| C4 Level 3 | Internals of one container | only when the feature touches 3+ components in a single container |
|
|
173
175
|
|
|
174
|
-
**No level label may match `^C[0-9]+$`.** That pattern is what a `design.md`
|
|
176
|
+
**No level label may match `^C[0-9]+$`.** That pattern is what a `design.md` component ID looks
|
|
175
177
|
like, so a bare `C3` in the same document is ambiguous between the third zoom level and the third
|
|
176
178
|
component. Spelling the level `C4 Level 3` keeps the C4 vocabulary explicit for a reviewer who
|
|
177
179
|
cites levels by number while leaving the component IDs unambiguous.
|
|
178
180
|
|
|
179
181
|
Skip a level with `N/A: [why]`; for C4 Level 3 that is normally
|
|
180
|
-
`N/A: covered by
|
|
182
|
+
`N/A: covered by Components & Boundaries`. `DIAGRAM_GUIDE.md` §1 carries the reasoning that
|
|
181
183
|
excludes the `C4Context` / `C4Container` diagram types in favour of `flowchart`.
|
|
182
184
|
|
|
183
185
|
### Task dependency graph — `plan.md` §8
|
|
@@ -235,8 +237,8 @@ Acceptance criteria are formatted as testable Gherkin BDD scenario blocks mapped
|
|
|
235
237
|
|
|
236
238
|
## 7. Technical Scaffolding in specs.md and data-model.md
|
|
237
239
|
|
|
238
|
-
`specs.md` and `data-model.md` provide dedicated homes for technical implementation anchors — `design.md`
|
|
239
|
-
only a one-line pointer to them:
|
|
240
|
+
`specs.md` and `data-model.md` provide dedicated homes for technical implementation anchors — `design.md`'s API / Interface Contracts and Data Model
|
|
241
|
+
sections hold only a one-line pointer to them:
|
|
240
242
|
- **Interface Contracts (`specs.md` §1):** HTTP endpoints (methods, routes, request/response shapes, status codes), CLI verb signatures, and repository/service interfaces (`interface` → `concrete` → `mock`).
|
|
241
243
|
- **Data Model (`data-model.md` §1):** Relational data model diagrams, database table schema catalogs (table purpose, keys, relations, indexes, ORM/DDL file references), and UX design tokens (color palettes, component states, layout cues).
|
|
242
244
|
|
|
@@ -262,7 +264,8 @@ file nobody looked at.
|
|
|
262
264
|
|
|
263
265
|
Checked: index/detail parity both directions · `Status` vocabulary · ID-shaped supersede targets
|
|
264
266
|
resolve · superseded items have a History entry · plan rollup counts match the checklist ·
|
|
265
|
-
decision references are not stale · no unknown decision references (every cited `DEC-###` is in the register)
|
|
267
|
+
decision references are not stale · no unknown decision references (every cited `DEC-###` is in the register) ·
|
|
268
|
+
plan task lines parse as the task-attempt ledger reads them (task-graph).
|
|
266
269
|
|
|
267
270
|
Parity reads both detail-entry forms of §1: the `- **<ID>` bullet, and the `#### <ID>: <text>`
|
|
268
271
|
heading whose ID also appears in that section's index table. A heading that merely looks ID-shaped
|
|
@@ -289,7 +292,7 @@ disagree, deciding which one is wrong is authoring judgement, not a mechanical f
|
|
|
289
292
|
Three sections exist so a reviewer can reach a judgement from the top of a document rather than by
|
|
290
293
|
reading it whole:
|
|
291
294
|
|
|
292
|
-
- **`design.md`
|
|
295
|
+
- **`design.md` Architecture Approach — the decision-and-blocker summary.** A table with the columns `Decision`,
|
|
293
296
|
`Shape chosen`, `Owner`, `Blocks approval?`, positioned above the architectural prose. One row per
|
|
294
297
|
decision the design makes. A reviewer who reads only this table knows what is being settled, who
|
|
295
298
|
settled it, and what stands between the design and approval.
|
|
@@ -318,7 +321,7 @@ flowchart. There is one spelling of it in this document and no second one.
|
|
|
318
321
|
|
|
319
322
|
### The component detail shape
|
|
320
323
|
|
|
321
|
-
A `design.md`
|
|
324
|
+
A `design.md` Components & Boundaries detail entry names the component after its ID, then answers four labels
|
|
322
325
|
in this order: `**Responsibility:**`, `**Owns:**`, `**Does not own:**`, `**Contracts:**`. None may
|
|
323
326
|
be dropped or reordered. What a component deliberately does *not* own is the half a reviewer cannot
|
|
324
327
|
reconstruct from the code, which is why it has a label of its own rather than a sentence.
|
|
@@ -328,6 +331,17 @@ bold-labelled lists on exactly that ground. The entry still begins `- **<ID>:**`
|
|
|
328
331
|
locates it; the labels sit in nested bullets beneath. No other artifact's detail entries take this
|
|
329
332
|
shape.
|
|
330
333
|
|
|
334
|
+
### The `design.md` section order
|
|
335
|
+
|
|
336
|
+
In order: `Architecture Approach`, `System Overview (C4)`, `Concepts`, `Journeys`,
|
|
337
|
+
`Components & Boundaries`, `API / Interface Contracts`, `Data Model`, `Sequence / Data Flow`,
|
|
338
|
+
`Design Risks & Alternatives Considered`, `Open Points for Review`, `Assumptions`, `History`. Readers
|
|
339
|
+
locate a section by title, never number, so an older nine-section design still parses. The front half
|
|
340
|
+
(through `Journeys`) uses plain nouns, no component IDs or code names. Each `### Journey N — <name>`
|
|
341
|
+
has one picture, a `stateDiagram-v2` per stateful thing it creates, and a rules table; `Journeys` also
|
|
342
|
+
holds a `### Worked example` and an `### Eligibility / decision inputs` table. A guard compares this
|
|
343
|
+
list with the template and the §4 slot registry.
|
|
344
|
+
|
|
331
345
|
### Nothing checks this per artifact
|
|
332
346
|
|
|
333
347
|
These are conventions the writing skill follows, not rules the checker runs. `validate-artifacts.sh`
|
|
@@ -363,8 +377,8 @@ applies.
|
|
|
363
377
|
|
|
364
378
|
- A line that applies a registered decision cites it as a bare `DEC-###`.
|
|
365
379
|
- `plan.md` §3 lists the `DEC-###` decisions the plan rests on and authors no `D#`.
|
|
366
|
-
- A design
|
|
367
|
-
"Decide for me" pick cites its `DEC-###` in `Basis`.
|
|
380
|
+
- A design Architecture Approach row ends its `Shape chosen` cell with its `DEC-###`. An
|
|
381
|
+
Assumptions row that came from a "Decide for me" pick cites its `DEC-###` in `Basis`.
|
|
368
382
|
- A line citing a superseded decision is a `stale` finding unless it also names a later decision in
|
|
369
383
|
that chain, and a cited `DEC-###` absent from the register is an `unknown` finding (§9).
|
|
370
384
|
- Compaction moves History content to `decisions/history/<artifact>.md` and leaves one pointer line,
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
How a chain artifact reads, sentence by sentence. Structure lives in `ARTIFACT_FORMAT.md`; this file
|
|
4
4
|
covers only the writing. Read on demand by `do-brainstorm`, `do-design` and `do-plan` when
|
|
5
|
-
filling a template, and
|
|
5
|
+
filling a template, and by `do-document` and `research-writer` when drafting prose. Never loaded
|
|
6
|
+
into a session by default.
|
|
6
7
|
|
|
7
8
|
## 1. The rules
|
|
8
9
|
|
|
@@ -90,7 +91,7 @@ prose rule applies in full to free prose.
|
|
|
90
91
|
| Prose rule | Conflicting construct | Which governs |
|
|
91
92
|
|---|---|---|
|
|
92
93
|
| Bold for a functional reason only | The `- **<ID>:**` detail-entry shape the checker locates entries by | The detail shape governs. The bold is a structural label, not emphasis. |
|
|
93
|
-
| Bold for a functional reason only | The `Responsibility` / `Owns` / `Does not own` / `Contracts` labels of a `design.md`
|
|
94
|
+
| Bold for a functional reason only | The `Responsibility` / `Owns` / `Does not own` / `Contracts` labels of a `design.md` Components & Boundaries entry | The labelled shape governs. `ARTIFACT_FORMAT.md` §10 declares these four labels and their order. |
|
|
94
95
|
| No em or en dashes | The literal `None — initial version.` that `ARTIFACT_FORMAT.md` §3 requires a new artifact to write | The literal governs. Write the em dash. |
|
|
95
96
|
| Sentence case headings | Every `##` section heading in the four chain-artifact templates, which `ARTIFACT_FORMAT.md` names by their exact words and `validate-artifacts.sh` locates History by | The template headings govern. Do not re-case a heading in a chain artifact. |
|
|
96
97
|
| Sentence case headings | The `#### <ID>: <text>` heading form of a detail entry, §1's second grammar | The heading governs. Its ID is matched literally against an index row, so its case is not free. |
|
|
@@ -1,47 +1,49 @@
|
|
|
1
1
|
# Base Constitution (tier-1)
|
|
2
2
|
|
|
3
|
-
**Version:** 1.
|
|
3
|
+
**Version:** 1.1.0 · **Scope:** all repos using the doflow chain
|
|
4
4
|
|
|
5
5
|
> The universal, non-negotiable rules every feature inherits. This is the **tier-1 base**;
|
|
6
6
|
> each repo's `agent-docs/constitution.md` (tier-2) overlays it and **takes precedence on
|
|
7
7
|
> conflict**. `do-paths.sh` locates both tiers and reports whether tier-2 exists; the overlay
|
|
8
8
|
> itself is performed by the chain skill reading both files, and `/do-plan`'s Constitution Check
|
|
9
|
-
> records
|
|
10
|
-
> computed and what is convention.
|
|
9
|
+
> records one PASS/FAIL row per principle, which the runtime checks at the planning stage's exit.
|
|
10
|
+
> See `DOFLOW_CHAIN.md` → "Two-tier constitution" for what is computed and what is convention.
|
|
11
11
|
|
|
12
12
|
## Principles
|
|
13
13
|
|
|
14
|
-
Each states the norm; the arrow points at the always-loaded rule that carries the detail.
|
|
14
|
+
Each states the norm; the arrow points at the always-loaded rule that carries the detail. A
|
|
15
|
+
principle is MUST unless its body has a `**Tier:** SHOULD` line; every base principle is MUST.
|
|
15
16
|
|
|
16
17
|
### P1 — Safety over speed
|
|
17
18
|
Security, data integrity, and production safety are never traded for velocity; a destructive or
|
|
18
|
-
irreversible action needs explicit confirmation. → `rules/
|
|
19
|
+
irreversible action needs explicit confirmation. → `rules/RULES.md` RULE_01.
|
|
19
20
|
|
|
20
21
|
### P2 — Evidence over assumptions
|
|
21
22
|
A claim is backed by a test, a run, or a document, never guessed; a failure is root-caused before
|
|
22
|
-
it is fixed. → `rules/
|
|
23
|
+
it is fixed. → `rules/RULES.md` RULE_01, `PRINCIPLES.md`.
|
|
23
24
|
|
|
24
25
|
### P3 — Finish what you start
|
|
25
26
|
No TODO stubs, mocks, or "not implemented" throws in delivered code: done means validated, not
|
|
26
|
-
compiling. → `rules/
|
|
27
|
+
compiling. → `rules/RULES.md` RULE_02.
|
|
27
28
|
|
|
28
29
|
### P4 — Scope discipline (YAGNI)
|
|
29
30
|
Build only what the spec asks — no bonus features, no speculative abstraction.
|
|
30
|
-
→ `rules/
|
|
31
|
+
→ `rules/RULES.md` RULE_02.
|
|
31
32
|
|
|
32
|
-
### P5 — Parallel
|
|
33
|
-
|
|
34
|
-
→ `rules/
|
|
33
|
+
### P5 — Parallel when write sets are disjoint
|
|
34
|
+
Shared write sets/dependencies run sequentially.
|
|
35
|
+
→ `rules/RULES.md` RULE_02.
|
|
35
36
|
|
|
36
37
|
### P6 — Professional honesty
|
|
37
38
|
No invented metrics, no marketing language; state "untested / needs validation" plainly and push
|
|
38
|
-
back on a bad approach with evidence. → `rules/
|
|
39
|
+
back on a bad approach with evidence. → `rules/RULES.md` RULE_03.
|
|
39
40
|
|
|
40
41
|
## Governance
|
|
41
42
|
- This base is versioned (semver). Tier-2 repo constitutions may **add** or **override** principles,
|
|
42
43
|
but may not weaken P1 (Safety). *This constraint is stated to the reading agent; nothing
|
|
43
44
|
validates it, so a tier-2 file that weakened P1 would not be rejected by any check.*
|
|
44
45
|
- `/do-plan` MUST evaluate its Constitution Check against both tiers together (tier-2 taking
|
|
45
|
-
precedence) and record PASS/FAIL
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
precedence) and record one PASS/FAIL row per principle in `plan.md` §2 "Constitution Check". A
|
|
47
|
+
MUST row marked FAIL, or a MUST principle with no row, refuses the planning stage's exit; a
|
|
48
|
+
SHOULD FAIL is advisory. No model waiver exists: revise the plan, or a person amends the
|
|
49
|
+
constitution through `/do-constitution`. Gate scope: `DOFLOW_CHAIN.md`.
|
|
@@ -136,7 +136,7 @@ it carries.
|
|
|
136
136
|
|
|
137
137
|
Some features author diagrams in PlantUML under `design/c4/` and commit the render. These apply on top of everything above.
|
|
138
138
|
|
|
139
|
-
**C4 divides by level**: `context.puml`, `container.puml`, `component.puml`, one file each; a level not drawn has no file. The Mermaid in `design.md`
|
|
139
|
+
**C4 divides by level**: `context.puml`, `container.puml`, `component.puml`, one file each; a level not drawn has no file. The Mermaid in `design.md` System Overview (C4) is generated from these, so editing it by hand
|
|
140
140
|
is a change the next render discards.
|
|
141
141
|
|
|
142
142
|
**The generated view drops seven things** — element type, technology, description, sprite, tag, link
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# DoFlow Chain — Spec-Driven Delivery
|
|
2
2
|
|
|
3
3
|
A spec-kit-style, phase-gated delivery loop (`do-brainstorm → do-design → do-plan →
|
|
4
|
-
do-execute-plan → do-test → do-code-review`) on top of the rest of the `/do-*` skills and the
|
|
5
|
-
specialist agents (`core-implementer`, `
|
|
6
|
-
`system-architect`). Discipline borrowed from
|
|
7
|
-
hooks rather than a prompt-read registry.
|
|
4
|
+
do-execute-plan → do-test → do-code-review`) on top of the rest of the `/do-*` skills and the seven
|
|
5
|
+
specialist agents (`core-implementer`, `delivery-lead`, `quality-guardian`,
|
|
6
|
+
`research-writer`, `reviewer`, `spec-analyst`, `system-architect`). Discipline borrowed from
|
|
7
|
+
spec-kit; enforcement done with the harness's real hooks rather than a prompt-read registry.
|
|
8
|
+
The implement-gate hook is registered in
|
|
8
9
|
`settings.json`. `do-constitution` sits outside the numbered chain — a standalone,
|
|
9
10
|
still-invocable skill that maintains the persistent rules every phase inherits, not a phase
|
|
10
11
|
itself. `do-implement` sits outside the numbered chain too, for the opposite reason: it is the
|
|
@@ -18,13 +19,11 @@ remains the chain's own implementation phase.
|
|
|
18
19
|
|------|-------|
|
|
19
20
|
| `skills/` | Chain skills: `do-brainstorm` (also creates the feature branch/dir, writes `requirement.md`, optionally captures a PBI/ticket ID), `do-design` (writes `design.md`), `do-plan` (also writes the dependency-ordered task checklist inside `plan.md`, plus a Repo Branch Plan for multi-repo features), `do-execute-plan` (also supports `--scaffold` to emit a reviewable code scaffold under the feature dir — the source layout, signatures and test stubs the three artifacts imply, plus a per-dependency-service contract frame — and lazily creates/tracks each repo's branch as it's first touched; a non-local dependency with a `external-contract:` field gets a frame generated from that doc instead of the default silent skip), `do-test`, `do-code-review`. `do-constitution` is standalone, not part of the numbered chain. |
|
|
20
21
|
| `scripts/doflow/` | The runtime seam. Skills call `bin/doflow-run <verb>` and never name a helper: the dispatcher decides which `bash/*.sh` helper or Node command serves each verb. The dispatcher owns the verb namespace and is the only place it is written down — an inventory here is the drift this row used to produce. |
|
|
21
|
-
| `hooks/`
|
|
22
|
-
| `templates/doflow/`
|
|
23
|
-
| `references/`
|
|
22
|
+
| `shared/hooks/policies/` | `mcp-tool-guard.sh`: MCP policy; `pre-bash-guard.sh`: command denials; `pre-implementation-gate.sh`: artifact/readiness edit gate; `stop-check.sh`: blocks stopping on unfinished-work markers. Harnesses with hook support call these; support differs per harness. |
|
|
23
|
+
| `templates/doflow/` | `constitution-template.md` (tier-2); `data-model-template.md`; `design-template.md`; `external-contract-template.md`; `intent-template.md`; `plan-template.md`; `question-log-template.md`; `requirement-template.md`; `specs-template.md`; `state-template.md`. Chain skills seed feature dirs from a shared pool, not per-skill `assets/`. |
|
|
24
|
+
| `guidance/references/` | `ARTIFACT_FORMAT.md`, `ARTIFACT_VOICE.md`, `CONSTITUTION_BASE.md` (global tier-1), `DIAGRAM_GUIDE.md`, `DOFLOW_CHAIN.md`, `EVIDENCE_LEDGER.md`, `MODEL_SELECTION.md`, `ORCHESTRATION.md`, `RESEARCH_CONFIG.md`, `WORKFLOW_HANDOFF.md`. |
|
|
24
25
|
|
|
25
|
-
>
|
|
26
|
-
> or a project's own `.claude/` in project scope). Chain skills' resolver lookups check the global
|
|
27
|
-
> config dir first, then walk upward from `$PWD` for a project-scoped `.claude/` install.
|
|
26
|
+
> Except `skills/`, use resolver roots: `.doflow/` at/above `$PWD`, then `$HOME/.doflow/`; skills install per harness in its skills dir.
|
|
28
27
|
|
|
29
28
|
## Core design rules
|
|
30
29
|
|
|
@@ -37,7 +36,7 @@ remains the chain's own implementation phase.
|
|
|
37
36
|
Outside a git repo (e.g. doflow installed at a multi-service container root, above the actual
|
|
38
37
|
git sub-repos), `do-paths.sh` falls back to scanning `agent-docs/doflow/` directly — one
|
|
39
38
|
candidate auto-selects, 2+ candidates surface via `candidate_slugs` for the calling skill to
|
|
40
|
-
disambiguate using the platform-specific `
|
|
39
|
+
disambiguate using the platform-specific RULE_04 mechanism in `rules/RULES.md`. Artifacts live in
|
|
41
40
|
`<repo>/agent-docs/doflow/NNN-slug/`
|
|
42
41
|
either way.
|
|
43
42
|
- **Pre-chain intent — an input, not a phase.** An idea that has not been committed to yet goes in
|
|
@@ -53,13 +52,11 @@ remains the chain's own implementation phase.
|
|
|
53
52
|
`requirement.md`'s `**Intent:**` field — the argument that does so is declared in `/do-brainstorm`'s
|
|
54
53
|
own `argument-hint`, which is where a single-skill argument is owned. Discovery without an intent is
|
|
55
54
|
unchanged and is the ordinary case.
|
|
56
|
-
- **
|
|
57
|
-
`design.md`, or `plan.md` is missing. Every other gate is advisory/skippable (solo,
|
|
58
|
-
low-ceremony).
|
|
55
|
+
- **Implement gate (hard):** Denies source edits for started features missing `requirement.md`/`design.md`/`plan.md` (`missing-artifacts`), or held tasks without READY at their workflow's first source-mutating stage (`readiness-missing`, `readiness-not-ready`, `readiness-wrong-template`, or `readiness-store-conflict` when a linked worktree's copy differs from the main checkout's). Other blockers: `shared/hooks/policies/`, and the planning stage's exit, which refuses a constitution MUST conflict ("Two-tier constitution" below); all other chain gates are advisory/skippable.
|
|
59
56
|
- **Two-tier constitution — what is computed vs. what is convention.**
|
|
60
57
|
`references/CONSTITUTION_BASE.md` (tier-1, global) is overlaid by
|
|
61
58
|
`<repo>/agent-docs/constitution.md` (tier-2, per-repo), and tier-2 takes precedence. **That
|
|
62
|
-
overlay is performed by the chain skill reading both files — no component
|
|
59
|
+
overlay is performed by the chain skill reading both files — no component writes a merged file.** This is
|
|
63
60
|
the canonical statement; other places point here rather than restating it.
|
|
64
61
|
|
|
65
62
|
| Step | What happens | Guarantee |
|
|
@@ -67,14 +64,15 @@ remains the chain's own implementation phase.
|
|
|
67
64
|
| Locate tier-1 | `do-paths.sh` searches two candidates, first hit wins; `null` if none | **computed** |
|
|
68
65
|
| Locate tier-2 | `do-paths.sh` emits the path plus `has_constitution_local` | **computed** |
|
|
69
66
|
| Read both files | the chain skill opens them | agent-performed |
|
|
70
|
-
| Overlay; tier-2 takes precedence on conflict | the chain skill reconciles them
|
|
67
|
+
| Overlay; tier-2 takes precedence on conflict | the chain skill reconciles them; the exit check overlays them by principle id | **convention**; **computed** for the check |
|
|
71
68
|
| "Tier-2 may not weaken P1 (Safety)" | a rule stated to the agent | **convention, unvalidated** |
|
|
72
|
-
| Constitution Check verdict |
|
|
69
|
+
| Constitution Check verdict | one PASS/FAIL row per principle in `plan.md` §2; the `do-plan` stage's handoff refuses a MUST marked FAIL or without a row | **computed — blocks the planning exit** |
|
|
73
70
|
| Propagate pointer to the agent context file | `sync-context.sh` writes a marker block | **computed** |
|
|
74
71
|
|
|
75
72
|
Both path lookups run unconditionally, whether or not `do-constitution` has ever been invoked.
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
The model judges each principle; the runtime enforces only the record, MUST unless a principle
|
|
74
|
+
says `**Tier:** SHOULD`, with no waiver. Nothing validates the P1 rule, and no merged artifact
|
|
75
|
+
exists, so avoid describing the overlay as *resolved*.
|
|
78
76
|
The convention is still load-bearing: it is how the rules actually reach a feature's planning.
|
|
79
77
|
- **`templates/doflow/` is a shared template pool, not the Agent Skills standard's
|
|
80
78
|
`references/`/`assets/` pattern.** The standard nests bundled resources one level inside their
|
|
@@ -51,14 +51,13 @@ linking (below), not by a field on the item.
|
|
|
51
51
|
|
|
52
52
|
## Superseding a stale item
|
|
53
53
|
|
|
54
|
-
An item's `freshness.status`
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
already applies.
|
|
54
|
+
An item's `freshness.status` only moves toward `STALE` (the file it named changed). Once a stale
|
|
55
|
+
item stops mattering, retire it rather than let it block readiness forever: `evidence --action
|
|
56
|
+
supersede --evidence-id <stale-id> --replaced-by <fresh-id>`, the replacement recorded first (the
|
|
57
|
+
rule `claim --action supersede` applies). Nothing is deleted: the item keeps its content and
|
|
58
|
+
locator, its `status` becomes `superseded`, and readiness stops counting it. With no replacement,
|
|
59
|
+
`evidence --action retire` with its stale selector (see the CLI help) retires every stale item the
|
|
60
|
+
same way, keeping the reason on each.
|
|
62
61
|
|
|
63
62
|
## Claims
|
|
64
63
|
|
|
@@ -33,8 +33,8 @@ mechanical work. Fewer turns can cost less than a cheaper model that needs repea
|
|
|
33
33
|
## Reviews
|
|
34
34
|
|
|
35
35
|
Reviews are read-only `frontier` work by an agent and model different from the author. Report if that
|
|
36
|
-
tier is unavailable. Review once per phase or fix batch; re-review
|
|
37
|
-
|
|
36
|
+
tier is unavailable. Review once per phase or fix batch; re-review after fixes is automatic, per
|
|
37
|
+
`doflow review --action start`.
|
|
38
38
|
|
|
39
39
|
## Archetype dispatch tiers
|
|
40
40
|
|
|
@@ -46,9 +46,11 @@ settle, after asking. Deep reviews use two independent reviewers with different
|
|
|
46
46
|
|---|---|---|
|
|
47
47
|
| `system-architect` | `frontier` | Architecture sets system shape: a consequential decision. |
|
|
48
48
|
| `core-implementer` | `standard` | Routine coding against a settled spec. |
|
|
49
|
-
| `quality-guardian` | `standard` |
|
|
49
|
+
| `quality-guardian` | `standard` | Testing and evidence work; review tasks belong to `reviewer`. |
|
|
50
50
|
| `spec-analyst` | `standard` | Requirements analysis and routine research. |
|
|
51
51
|
| `research-writer` | `standard` | Documentation and routine research. |
|
|
52
|
+
| `delivery-lead` | `frontier` | Plans and orchestrates delivery; its records gate merges. |
|
|
53
|
+
| `reviewer` | `frontier` | Review verdicts gate merges (`## Reviews`). |
|
|
52
54
|
|
|
53
55
|
## Briefs and inheritance
|
|
54
56
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# Orchestration
|
|
2
2
|
|
|
3
|
-
Use `references/MODEL_SELECTION.md`; follow `PRINCIPLES.md
|
|
4
|
-
`rules/RULE_04_QUESTIONS.md`.
|
|
3
|
+
Use `references/MODEL_SELECTION.md`; follow `PRINCIPLES.md` and `rules/RULES.md` (RULE_02, RULE_04).
|
|
5
4
|
|
|
6
5
|
## Role and handoff
|
|
7
6
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Rules
|
|
2
|
+
|
|
3
|
+
## RULE_01 Safety
|
|
4
|
+
Conflict order: Safety > Scope > Quality > Speed. Prototype != Production requirements.
|
|
5
|
+
- Read the date from the environment before any temporal claim; never infer it from your knowledge cutoff, and state its source.
|
|
6
|
+
|
|
7
|
+
## RULE_02 Workflow
|
|
8
|
+
- **Parallel when write sets are disjoint; otherwise sequential.** Use task lists past 3 tasks when available.
|
|
9
|
+
- Run lint/typecheck before marking complete.
|
|
10
|
+
- Check deps (package.json) and existing patterns before any changes.
|
|
11
|
+
- Feature delivery follows the doflow chain — see `references/DOFLOW_CHAIN.md` for the phase-gated flow, artifact contracts, and the enforced gate.
|
|
12
|
+
- Start it = Finish it. No partial features, TODO stubs, mocks, or "not implemented" throws. <!-- must-carry -->
|
|
13
|
+
- All generated code must work as specified; no scaffolding placeholders.
|
|
14
|
+
|
|
15
|
+
**Scope Discipline**
|
|
16
|
+
- Build ONLY what's asked — no bonus features, no enterprise bloat (auth/monitoring/deployment unless requested). <!-- must-carry -->
|
|
17
|
+
- MVP first; YAGNI; single responsibility per component.
|
|
18
|
+
|
|
19
|
+
## RULE_03 Quality
|
|
20
|
+
**Naming**: Follow language standards (camelCase JS, snake_case Python); no mixed conventions
|
|
21
|
+
**Files**: Follow the repository's existing layout; only if none exists, use `tests/` for tests, `scripts/` for scripts and `agent-docs/` for reports.
|
|
22
|
+
**Workspace**: Remove temp files, debug scripts, build artifacts after use; never leave clutter in VCS
|
|
23
|
+
|
|
24
|
+
**Professional Honesty**
|
|
25
|
+
- No marketing language ("blazingly fast", "100% secure", "magnificent")
|
|
26
|
+
- No invented sources, figures, citations or quotes; leave out what you cannot trace; state "untested/MVP/needs validation" honestly <!-- must-carry -->
|
|
27
|
+
- If you are not sure, say so plainly and name what is unknown; do not present a guess as established <!-- must-carry -->
|
|
28
|
+
- Warn when a claim may be outdated: information from memory or an old source can have changed since it was written
|
|
29
|
+
- Never attribute a statement or view to a real person unless you have verified it; otherwise omit the name
|
|
30
|
+
- Push back on bad approaches
|
|
31
|
+
|
|
32
|
+
## RULE_04 Questions
|
|
33
|
+
- Ask ONLY for genuine user-owned decisions unresolved by the request, the code, or sensible defaults.
|
|
34
|
+
- Enough to act → act; don't ask to confirm the obvious (see RULE_02 Scope Discipline).
|
|
35
|
+
- One question that unblocks beats three that re-litigate settled choices.
|
|
36
|
+
|
|
37
|
+
**Non-Interactive Fallback**
|
|
38
|
+
When no native interactive question tool (one that presents options and returns the user's choice) is available in the current session:
|
|
39
|
+
- Do NOT generate `{stage}-questions.md` files or halt execution waiting for manual file edits.
|
|
40
|
+
- Adopt the recommended default choice, record the adopted decision and rationale in the stage notes or artifact, and proceed with execution.
|
|
41
|
+
- If no sensible default exists and execution cannot safely proceed without user input, report the specific ambiguity and halt.
|
|
42
|
+
|
|
43
|
+
## Flags and runtime
|
|
44
|
+
What the user typed beats auto-detection. A flag is declared in the `argument-hint` of every skill that consumes it; shared flags are `--depth` and `--type`.
|
|
45
|
+
The runtime grades a source-editing stage against its class contract first (four states, no score), classifies a failed verification and retries it under a bound it sets, records and reads back every call (never reconstructs a run), and routes a need to a provider healthy here, not a habitual tool.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# do-args.sh — the one argument rule the do-*.sh helpers share. Sourced, never run.
|
|
3
|
+
#
|
|
4
|
+
# Their argument loops read `--flag=value`. A caller that writes `--flag value` used to fall through
|
|
5
|
+
# the loops' `*) ;;` arm with the flag dropped and the value ignored, so `do-paths.sh --slug x`
|
|
6
|
+
# silently resolved the ACTIVE feature instead of x. doflow_normalize_args folds the space form into
|
|
7
|
+
# the `=` form for the flags a script declares, so the loop itself stays as it was.
|
|
8
|
+
#
|
|
9
|
+
# doflow_normalize_args "<flag> <flag> ..." "$@"
|
|
10
|
+
# set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}
|
|
11
|
+
#
|
|
12
|
+
# The next word is a flag's value unless it starts with a dash: a value-less `--slug` (last, or
|
|
13
|
+
# followed by another flag) stays bare and is dropped by the loop exactly as before, and a word that
|
|
14
|
+
# starts with a dash is never swallowed. An empty word is a value. Flags a script did not declare,
|
|
15
|
+
# `--flag=value` words and positional words pass through untouched. bash 3.2 compatible: the array
|
|
16
|
+
# is filled by index and expanded with the `${a[@]+...}` guard, which `set -u` needs for an empty one.
|
|
17
|
+
|
|
18
|
+
doflow_normalize_args() {
|
|
19
|
+
local _flags=" $1 " _word _pending=""
|
|
20
|
+
shift
|
|
21
|
+
DOFLOW_ARGS=()
|
|
22
|
+
for _word in "$@"; do
|
|
23
|
+
if [ -n "$_pending" ]; then
|
|
24
|
+
case "$_word" in
|
|
25
|
+
-*) DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_pending" ;;
|
|
26
|
+
*) DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_pending=$_word"; _pending=""; continue ;;
|
|
27
|
+
esac
|
|
28
|
+
_pending=""
|
|
29
|
+
fi
|
|
30
|
+
case "$_word" in
|
|
31
|
+
--*=*) ;;
|
|
32
|
+
--*) case "$_flags" in *" $_word "*) _pending="$_word"; continue ;; esac ;;
|
|
33
|
+
esac
|
|
34
|
+
DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_word"
|
|
35
|
+
done
|
|
36
|
+
if [ -n "$_pending" ]; then DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_pending"; fi
|
|
37
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
2
3
|
# do-exec-paths.sh — resolve the execution workspace and one task's artifact paths.
|
|
3
4
|
#
|
|
4
5
|
# The single source of truth for where a task's brief, report, and review packages
|
|
@@ -29,6 +30,9 @@ group_id=""
|
|
|
29
30
|
tasks_csv=""
|
|
30
31
|
slug_override=""
|
|
31
32
|
mode=""
|
|
33
|
+
# Shared argument rule: `--flag value` is read like `--flag=value` for the flags named here (do-args.sh).
|
|
34
|
+
_da="$(dirname "$0")/do-args.sh"
|
|
35
|
+
if [ -r "$_da" ]; then . "$_da"; doflow_normalize_args "--task --group --tasks --slug" "$@"; set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}; fi
|
|
32
36
|
for arg in "$@"; do
|
|
33
37
|
case "$arg" in
|
|
34
38
|
--task=*)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
2
3
|
# do-git-state.sh — deterministic lifecycle state helper for /do-git.
|
|
3
4
|
#
|
|
4
5
|
# Emits JSON describing the repository's position in the development cycle.
|
|
@@ -30,6 +31,9 @@ mode=""
|
|
|
30
31
|
class_name=""
|
|
31
32
|
slug=""
|
|
32
33
|
|
|
34
|
+
# Shared argument rule: `--flag value` is read like `--flag=value` for the flags named here (do-args.sh).
|
|
35
|
+
_da="$(dirname "$0")/do-args.sh"
|
|
36
|
+
if [ -r "$_da" ]; then . "$_da"; doflow_normalize_args "--class --slug" "$@"; set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}; fi
|
|
33
37
|
for arg in "$@"; do
|
|
34
38
|
case "$arg" in
|
|
35
39
|
--state) mode="state" ;;
|
|
@@ -264,7 +268,14 @@ next_free_prerelease() {
|
|
|
264
268
|
printf '%s-%s.%s %s\n' "$core" "$label" "$candidate" "$skipped"
|
|
265
269
|
}
|
|
266
270
|
|
|
267
|
-
#
|
|
271
|
+
# What a release tag looks like: vX.Y.Z with an optional pre-release. A tag such as vx or vnext also
|
|
272
|
+
# matches `v*`, and under the version sort `vx` outranks every vN.N.N, so the base tag, the lifecycle
|
|
273
|
+
# release_tags and the next-version proposal all filter with this one pattern. A number has no
|
|
274
|
+
# leading zero (v01.0.0 is not a release), as semver has it.
|
|
275
|
+
RELEASE_TAG_PATTERN='^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?$'
|
|
276
|
+
|
|
277
|
+
# The newest release tag reachable from HEAD or from the production branch, by version order
|
|
278
|
+
# (versionsort.suffix=- ranks a pre-release below its stable release, which plain version sort does not);
|
|
268
279
|
# empty when there is none. do_next_version bases its proposal on it and the lifecycle output
|
|
269
280
|
# reports it, so the two never disagree. The reasoning behind "newest by version" and "reachable
|
|
270
281
|
# from production too" is in do_next_version's comments below.
|
|
@@ -277,7 +288,7 @@ find_base_tag() {
|
|
|
277
288
|
done <<< "$(production_refs)"
|
|
278
289
|
eligible="$(printf '%s\n' "$eligible" | sort -u | sed '/^$/d')"
|
|
279
290
|
if [ -n "$eligible" ]; then
|
|
280
|
-
base_tag="$(git tag --list 'v*' --sort=-v:refname 2>/dev/null | grep -Fx -f <(printf '%s\n' "$eligible") | head -1 || true)"
|
|
291
|
+
base_tag="$(git -c versionsort.suffix=- tag --list 'v*' --sort=-v:refname 2>/dev/null | grep -E "$RELEASE_TAG_PATTERN" | grep -Fx -f <(printf '%s\n' "$eligible") | head -1 || true)"
|
|
281
292
|
fi
|
|
282
293
|
printf '%s\n' "$base_tag"
|
|
283
294
|
}
|
|
@@ -350,7 +361,7 @@ do_next_version() {
|
|
|
350
361
|
fi
|
|
351
362
|
|
|
352
363
|
jq -n \
|
|
353
|
-
--arg base_tag "$
|
|
364
|
+
--arg base_tag "$base_tag" \
|
|
354
365
|
--arg current_version "$current_version" \
|
|
355
366
|
--arg next_version "$next_version" \
|
|
356
367
|
--arg next_prerelease "$next_prerelease" \
|
|
@@ -501,7 +512,7 @@ lifecycle_integration_ref() {
|
|
|
501
512
|
do_lifecycle() {
|
|
502
513
|
local integration="" tags="" base_tag=""
|
|
503
514
|
integration="$(lifecycle_integration_ref)"
|
|
504
|
-
tags="$(git tag --list 'v*' 2>/dev/null | grep -E
|
|
515
|
+
tags="$(git tag --list 'v*' 2>/dev/null | grep -E "$RELEASE_TAG_PATTERN" || true)"
|
|
505
516
|
base_tag="$(find_base_tag)"
|
|
506
517
|
|
|
507
518
|
local behind=0
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
2
3
|
# do-parallel-check.sh — verify one phase's [P] siblings really write disjoint files.
|
|
3
4
|
# Form dispatch groups by (phase, owner) and detect union overlaps.
|
|
4
5
|
#
|
|
@@ -25,6 +26,9 @@ set -uo pipefail
|
|
|
25
26
|
|
|
26
27
|
phase=""
|
|
27
28
|
slug_override=""
|
|
29
|
+
# Shared argument rule: `--flag value` is read like `--flag=value` for the flags named here (do-args.sh).
|
|
30
|
+
_da="$(dirname "$0")/do-args.sh"
|
|
31
|
+
if [ -r "$_da" ]; then . "$_da"; doflow_normalize_args "--phase --slug" "$@"; set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}; fi
|
|
28
32
|
for arg in "$@"; do
|
|
29
33
|
case "$arg" in
|
|
30
34
|
--phase=*) phase="${arg#--phase=}" ;;
|