mandrel 1.94.0 → 2.1.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/.agents/README.md +116 -99
- package/.agents/agents/acceptance-critic.md +9 -7
- package/.agents/agents/story-worker.md +45 -51
- package/.agents/audit-checklists/performance.md +1 -1
- package/.agents/docs/SDLC.md +498 -1287
- package/.agents/docs/agentrc-reference.json +185 -80
- package/.agents/docs/configuration.md +132 -190
- package/.agents/docs/execution-reference.md +51 -25
- package/.agents/docs/quality-gates.md +25 -33
- package/.agents/docs/workflows.md +8 -8
- package/.agents/instructions.md +113 -139
- package/.agents/rules/ci-remediation.md +11 -15
- package/.agents/rules/git-conventions-reference.md +48 -58
- package/.agents/rules/git-conventions.md +16 -22
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +83 -254
- package/.agents/schemas/audit-rules.json +59 -1
- package/.agents/schemas/audit-rules.schema.json +33 -1
- package/.agents/schemas/lifecycle/README.md +1 -2
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/merge.flip-failed.schema.json +33 -0
- package/.agents/schemas/lifecycle/merge.unlanded.schema.json +1 -0
- package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
- package/.agents/schemas/lifecycle/story.merged.schema.json +1 -1
- package/.agents/schemas/signal-event.schema.json +3 -3
- package/.agents/schemas/story-deliver-terminal.schema.json +152 -0
- package/.agents/schemas/validation-evidence.schema.json +1 -1
- package/.agents/scripts/acceptance-eval.js +22 -66
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.js +1 -1
- package/.agents/scripts/bootstrap.js +3 -3
- package/.agents/scripts/check-dead-exports.js +43 -104
- package/.agents/scripts/check-doc-links.js +2 -2
- package/.agents/scripts/check-lifecycle-lint.js +7 -10
- package/.agents/scripts/check-workflow-cli-lint.js +91 -0
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- package/.agents/scripts/deliver-recover.js +122 -0
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +20 -50
- package/.agents/scripts/generate-skills-index.js +17 -1
- package/.agents/scripts/generate-workflows-doc.js +4 -4
- package/.agents/scripts/lib/ITicketingProvider.js +1 -19
- package/.agents/scripts/lib/Logger.js +6 -10
- package/.agents/scripts/lib/audit-suite/runner.js +2 -2
- package/.agents/scripts/lib/audit-suite/selector.js +328 -28
- package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
- package/.agents/scripts/lib/baselines/kernel.js +206 -18
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -15
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +28 -33
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
- package/.agents/scripts/lib/bootstrap/manifest.js +8 -11
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +30 -53
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +0 -2
- package/.agents/scripts/lib/checks/core-bare-clean.js +6 -3
- package/.agents/scripts/lib/checks/index.js +3 -2
- package/.agents/scripts/lib/checks/loop-health.js +12 -11
- package/.agents/scripts/lib/checks/state.js +17 -248
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +26 -24
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +3 -4
- package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +2 -2
- package/.agents/scripts/lib/checks/worktree-residue-biome.js +3 -3
- package/.agents/scripts/lib/cli/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +39 -9
- package/.agents/scripts/lib/close-validation/gates.js +15 -15
- package/.agents/scripts/lib/close-validation/projections/inputs.js +7 -7
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +12 -12
- package/.agents/scripts/lib/close-validation/runner.js +13 -21
- package/.agents/scripts/lib/close-validation/telemetry.js +17 -8
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +52 -35
- package/.agents/scripts/lib/config/explain.js +61 -48
- package/.agents/scripts/lib/config/github.js +7 -5
- package/.agents/scripts/lib/config/limits.js +29 -80
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +12 -15
- package/.agents/scripts/lib/config/runners.js +20 -66
- package/.agents/scripts/lib/config/temp-paths.js +30 -63
- package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
- package/.agents/scripts/lib/config-resolver.js +2 -7
- package/.agents/scripts/lib/config-settings-schema-delivery.js +55 -161
- package/.agents/scripts/lib/config-settings-schema-quality.js +17 -16
- package/.agents/scripts/lib/config-settings-schema.js +100 -60
- package/.agents/scripts/lib/dead-exports-knip.js +105 -0
- package/.agents/scripts/lib/dead-exports-mode.js +51 -0
- package/.agents/scripts/lib/dependency-parser.js +3 -2
- package/.agents/scripts/lib/doc-tiers.js +2 -2
- package/.agents/scripts/lib/duplicate-search.js +242 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +23 -14
- package/.agents/scripts/lib/format-generated-json.js +97 -0
- package/.agents/scripts/lib/framework-version.js +19 -190
- package/.agents/scripts/lib/gh-exec.js +8 -0
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -180
- package/.agents/scripts/lib/git-utils.js +32 -20
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/json-utils.js +1 -2
- package/.agents/scripts/lib/label-constants.js +10 -38
- package/.agents/scripts/lib/label-taxonomy.js +10 -55
- package/.agents/scripts/lib/observability/active-story-env.js +44 -165
- package/.agents/scripts/lib/observability/runtime-friction.js +243 -0
- package/.agents/scripts/lib/observability/signal-validator.js +4 -4
- package/.agents/scripts/lib/observability/signals-writer.js +6 -82
- package/.agents/scripts/lib/observability/source-classifier.js +5 -5
- package/.agents/scripts/lib/observability/tool-trace-hook.js +2 -12
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/acceptance-clusters.js +1 -1
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +2 -2
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +105 -44
- package/.agents/scripts/lib/orchestration/code-review.js +78 -436
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +4 -4
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- package/.agents/scripts/lib/orchestration/deliver-recover.js +328 -0
- package/.agents/scripts/lib/orchestration/detectors-phase.js +12 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
- package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +34 -0
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +3 -2
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +142 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +17 -19
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +86 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +37 -103
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +21 -43
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +50 -85
- package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +3 -14
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +77 -21
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -0
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +354 -282
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +11 -22
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +4 -8
- package/.agents/scripts/lib/orchestration/plan-metrics.js +38 -6
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +71 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +245 -0
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +116 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +432 -858
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +778 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +47 -115
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +509 -0
- package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +52 -51
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +1 -1
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-stories.js +344 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +126 -47
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +3 -13
- package/.agents/scripts/lib/orchestration/review-providers/native.js +1 -154
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +3 -2
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +1 -1
- package/.agents/scripts/lib/orchestration/review-providers/types.js +5 -4
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +1 -1
- package/.agents/scripts/lib/orchestration/run-epilogue.js +784 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +25 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +11 -9
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +4 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +86 -41
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +608 -152
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +77 -32
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +305 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +44 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +37 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +2 -2
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +275 -46
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
- package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
- package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
- package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
- package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +10 -10
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +28 -42
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +360 -0
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +298 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +51 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +33 -0
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +60 -25
- package/.agents/scripts/lib/orchestration/ticket-lease.js +27 -74
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +130 -75
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +192 -377
- package/.agents/scripts/lib/orchestration/ticket-validator.js +123 -25
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +14 -72
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +45 -55
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +66 -6
- package/.agents/scripts/lib/orchestration/ticketing.js +0 -1
- package/.agents/scripts/lib/plan-phase-cleanup.js +12 -14
- package/.agents/scripts/lib/planning-corpus.js +12 -281
- package/.agents/scripts/lib/preflight-runner.js +4 -4
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- package/.agents/scripts/lib/qa/qa-context-hydrator.js +5 -5
- package/.agents/scripts/lib/signals/index.js +4 -17
- package/.agents/scripts/lib/signals/read.js +35 -35
- package/.agents/scripts/lib/signals/schema.js +8 -11
- package/.agents/scripts/lib/signals/span-tree.js +7 -7
- package/.agents/scripts/lib/signals/write.js +0 -1
- package/.agents/scripts/lib/single-story/story-merged-notify.js +13 -2
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/skills/parse-skill.js +16 -3
- package/.agents/scripts/lib/story-adjacency.js +17 -19
- package/.agents/scripts/lib/story-body/story-body.js +130 -75
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +51 -46
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/test-env.js +14 -1
- package/.agents/scripts/lib/test-tiers.js +0 -3
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +25 -39
- package/.agents/scripts/lib/validation-evidence.js +32 -60
- package/.agents/scripts/lib/wave-runner/ready-set.js +38 -12
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +72 -25
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +1 -2
- package/.agents/scripts/lint-issue-body.js +71 -40
- package/.agents/scripts/mandrel-update-preflight.js +1 -1
- package/.agents/scripts/notify.js +4 -3
- package/.agents/scripts/plan-context.js +102 -80
- package/.agents/scripts/plan-persist.js +230 -279
- package/.agents/scripts/plan-run-epilogue.js +142 -0
- package/.agents/scripts/post-structured-comment.js +0 -38
- package/.agents/scripts/pr-watch-with-update.js +43 -22
- package/.agents/scripts/providers/github/compose.js +0 -1
- package/.agents/scripts/providers/github/errors.js +0 -19
- package/.agents/scripts/providers/github/issues.js +13 -39
- package/.agents/scripts/providers/github/mappers.js +5 -12
- package/.agents/scripts/providers/github/sub-issues.js +0 -47
- package/.agents/scripts/providers/github/tickets.js +33 -156
- package/.agents/scripts/providers/github.js +17 -6
- package/.agents/scripts/resolve-stories.js +236 -0
- package/.agents/scripts/run-coverage.js +4 -1
- package/.agents/scripts/run-lint.js +2 -2
- package/.agents/scripts/run-verify.js +31 -2
- package/.agents/scripts/signals-view.js +25 -21
- package/.agents/scripts/single-story-close.js +178 -26
- package/.agents/scripts/single-story-confirm-merge.js +313 -24
- package/.agents/scripts/single-story-init.js +35 -30
- package/.agents/scripts/stories-wave-tick.js +85 -10
- package/.agents/scripts/story-plan.js +28 -49
- package/.agents/scripts/update-ticket-state.js +14 -65
- package/.agents/skills/core/code-review-and-quality/SKILL.md +28 -450
- package/.agents/skills/core/code-review-and-quality/reference.md +458 -0
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +22 -315
- package/.agents/skills/core/debugging-and-error-recovery/reference.md +323 -0
- package/.agents/skills/core/diagnose-friction/SKILL.md +14 -18
- package/.agents/skills/core/documentation-and-adrs/SKILL.md +25 -397
- package/.agents/skills/core/documentation-and-adrs/reference.md +403 -0
- package/.agents/skills/core/gates-and-baselines/SKILL.md +12 -12
- package/.agents/skills/core/idea-refinement/SKILL.md +9 -9
- package/.agents/skills/core/scope-triage/SKILL.md +31 -172
- package/.agents/skills/core/security-and-hardening/SKILL.md +22 -367
- package/.agents/skills/core/security-and-hardening/reference.md +375 -0
- package/.agents/skills/skills.index.json +3 -53
- package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +2 -4
- package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +1 -1
- package/.agents/skills/stack/qa/qa-harness/SKILL.md +1 -3
- package/.agents/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +6 -7
- package/.agents/workflows/audit-clean-code.md +7 -7
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +9 -10
- package/.agents/workflows/audit-lighthouse.md +11 -3
- package/.agents/workflows/audit-navigability.md +13 -2
- package/.agents/workflows/audit-performance.md +5 -6
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +11 -12
- package/.agents/workflows/audit-security.md +4 -5
- package/.agents/workflows/audit-seo.md +13 -3
- package/.agents/workflows/audit-sre.md +3 -3
- package/.agents/workflows/audit-to-stories.md +20 -20
- package/.agents/workflows/audit-ux-ui.md +10 -3
- package/.agents/workflows/deliver.md +177 -176
- package/.agents/workflows/git-cleanup.md +5 -6
- package/.agents/workflows/git-deliver.md +1 -1
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +35 -40
- package/.agents/workflows/helpers/code-quality-guardrails.md +7 -7
- package/.agents/workflows/helpers/code-review.md +75 -196
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +83 -44
- package/.agents/workflows/helpers/deliver-story.md +606 -0
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/parallel-tooling.md +3 -3
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +66 -86
- package/.agents/workflows/mandrel-update.md +2 -1
- package/.agents/workflows/plan.md +277 -145
- package/.agents/workflows/qa-assist.md +27 -33
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -6
- package/README.md +9 -8
- package/bin/mandrel.js +12 -1
- package/docs/CHANGELOG.md +70 -0
- package/lib/cli/registry.js +262 -19
- package/lib/cli/sync-agents.js +157 -0
- package/lib/cli/sync-commands.js +115 -6
- package/lib/cli/sync.js +168 -6
- package/lib/cli/update.js +105 -8
- package/lib/cli/version-helpers.js +131 -0
- package/lib/migrations/README.md +7 -5
- package/lib/migrations/index.js +12 -8
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +100 -0
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +101 -0
- package/package.json +2 -2
- package/.agents/agents/retro.md +0 -42
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer.md +0 -33
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/security-engineer.md +0 -111
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-perf-report.schema.json +0 -89
- package/.agents/schemas/epic-spec.schema.json +0 -153
- package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +0 -15
- package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.blocked.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.close.end.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.complete.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +0 -14
- package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +0 -17
- package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +0 -15
- package/.agents/schemas/lifecycle/epic.plan.end.schema.json +0 -18
- package/.agents/schemas/lifecycle/epic.plan.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +0 -16
- package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.watch.end.schema.json +0 -29
- package/.agents/schemas/lifecycle/epic.watch.start.schema.json +0 -16
- package/.agents/schemas/lifecycle/slice.end.schema.json +0 -21
- package/.agents/schemas/lifecycle/slice.heartbeat.schema.json +0 -20
- package/.agents/schemas/lifecycle/slice.start.schema.json +0 -17
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +0 -20
- package/.agents/schemas/risk-verdict.schema.json +0 -66
- package/.agents/schemas/story-perf-summary.schema.json +0 -73
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- package/.agents/scripts/analyze-execution.js +0 -444
- package/.agents/scripts/bookkeeping-reconcile.js +0 -117
- package/.agents/scripts/check-prepush-recovery.js +0 -90
- package/.agents/scripts/dispatcher.js +0 -295
- package/.agents/scripts/epic-audit-prepare.js +0 -497
- package/.agents/scripts/epic-audit-recheck.js +0 -274
- package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
- package/.agents/scripts/epic-deliver-preflight.js +0 -462
- package/.agents/scripts/epic-deliver-prepare.js +0 -852
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-reconcile.js +0 -625
- package/.agents/scripts/lib/baseline-snapshot.js +0 -979
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
- package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
- package/.agents/scripts/lib/config/lifecycle.js +0 -40
- package/.agents/scripts/lib/config/preflight.js +0 -58
- package/.agents/scripts/lib/config/retro.js +0 -77
- package/.agents/scripts/lib/epic-merge-lock.js +0 -322
- package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
- package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
- package/.agents/scripts/lib/git-merge-orchestrator.js +0 -261
- package/.agents/scripts/lib/observability/baseline-refresh-rate.js +0 -221
- package/.agents/scripts/lib/observability/hook-heartbeat.js +0 -219
- package/.agents/scripts/lib/observability/perf-aggregator.js +0 -813
- package/.agents/scripts/lib/observability/perf-report-readers.js +0 -328
- package/.agents/scripts/lib/observability/perf-report-render.js +0 -182
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +0 -270
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -539
- package/.agents/scripts/lib/orchestration/deliver-route.js +0 -173
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +0 -105
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -621
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +0 -400
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
- package/.agents/scripts/lib/orchestration/error-journal.js +0 -139
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
- package/.agents/scripts/lib/orchestration/lifecycle/emit-slice-lifecycle.js +0 -270
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +0 -155
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-diff.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -465
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -284
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +0 -665
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
- package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
- package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
- package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
- package/.agents/scripts/lib/orchestration/plan-review-routing.js +0 -63
- package/.agents/scripts/lib/orchestration/planning-context-budget.js +0 -213
- package/.agents/scripts/lib/orchestration/planning-risk.js +0 -194
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +0 -56
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +0 -33
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +0 -78
- package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +0 -68
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +0 -118
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +0 -396
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
- package/.agents/scripts/lib/orchestration/preflight-cache.js +0 -187
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +0 -275
- package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
- package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -302
- package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
- package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
- package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
- package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
- package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
- package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
- package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
- package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
- package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
- package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
- package/.agents/scripts/lib/push-epic-retry.js +0 -209
- package/.agents/scripts/lib/spec/index.js +0 -36
- package/.agents/scripts/lib/spec/loader.js +0 -425
- package/.agents/scripts/lib/spec/state.js +0 -208
- package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
- package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
- package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
- package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
- package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
- package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
- package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
- package/.agents/scripts/lib/wave-runner/tick.js +0 -754
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
- package/.agents/scripts/lifecycle-emit.js +0 -510
- package/.agents/scripts/retro-run.js +0 -218
- package/.agents/scripts/slice-phase.js +0 -361
- package/.agents/scripts/standalone-feedback-rollup.js +0 -188
- package/.agents/scripts/story-close.js +0 -294
- package/.agents/scripts/story-init.js +0 -599
- package/.agents/scripts/story-phase.js +0 -369
- package/.agents/scripts/wave-tick.js +0 -464
- package/.agents/skills/core/analyze-execution/SKILL.md +0 -98
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
- package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
- package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
- package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
- package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -383
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -547
- package/.agents/workflows/helpers/deliver-epic-single.md +0 -331
- package/.agents/workflows/helpers/deliver-epic.md +0 -998
- package/.agents/workflows/helpers/deliver-stories.md +0 -450
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -436
- package/.agents/workflows/helpers/epic-testing.md +0 -125
- package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
- package/.agents/workflows/helpers/plan-epic.md +0 -353
- package/.agents/workflows/helpers/plan-story.md +0 -251
- package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
- package/.agents/workflows/helpers/single-story-deliver.md +0 -557
package/.agents/instructions.md
CHANGED
|
@@ -8,15 +8,17 @@ set. You MUST strictly adhere to the following rules:
|
|
|
8
8
|
|
|
9
9
|
## 1. System Guardrails & Initialization
|
|
10
10
|
|
|
11
|
-
### A.
|
|
11
|
+
### A. Role Framing (no persona packs)
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
v2 has **no** `.agents/personas/` packs and **no** `persona::*` GitHub labels.
|
|
14
|
+
Behavioral constraints come from this file, always-on / on-demand rules, and
|
|
15
|
+
skills. Role-scoped spawn contexts (when used) live under `.agents/agents/`
|
|
16
|
+
via `delivery.routing.roleScopedAgents`. QA auth identities (`qa.personas`)
|
|
17
|
+
are a separate fixture concept — not agent behavior packs.
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
If a user says "act as [role]" in chat, apply the matching skill / workflow
|
|
20
|
+
guidance (e.g. QA skills for verification work, security skill for threat
|
|
21
|
+
modeling) rather than looking for a persona file.
|
|
20
22
|
|
|
21
23
|
### B. Skill Activation
|
|
22
24
|
|
|
@@ -36,9 +38,14 @@ The skill library uses a **two-tier architecture**:
|
|
|
36
38
|
|
|
37
39
|
When a task involves a specific domain or technology, you MUST read the
|
|
38
40
|
corresponding `.agents/skills/[tier]/[category]/[skill-name]/SKILL.md` file and
|
|
39
|
-
apply its constraints.
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
apply its constraints. A `SKILL.md` leads with its **Policy Capsule** — the
|
|
42
|
+
contract, and the whole cost of activating the skill — followed by pointers
|
|
43
|
+
into an on-demand `reference.md` sibling holding the long-form material
|
|
44
|
+
(patterns, worked examples, checklists). This is the same split the always-on
|
|
45
|
+
rules use (§ 1.F): read the capsule on activation, and open a `reference.md`
|
|
46
|
+
section only when the task actually engages it. Review the skill's `examples/`
|
|
47
|
+
directory or `examples.md` sibling **when present and relevant** to the task —
|
|
48
|
+
most skills do not ship one, so do not probe blindly. When uncertain which skill applies,
|
|
42
49
|
match the task against the one-line `description` in each skill's frontmatter
|
|
43
50
|
(catalogued in `.agents/skills/skills.index.json`). Skills compose: a complete
|
|
44
51
|
feature typically flows `idea-refinement` → the `/plan` workflow →
|
|
@@ -155,18 +162,17 @@ technology context is intentionally kept out of `.agentrc.json`.
|
|
|
155
162
|
|
|
156
163
|
You MUST log telemetry about operational difficulty or automation
|
|
157
164
|
opportunities you hit. Friction is a **local NDJSON signal**:
|
|
158
|
-
`diagnose-friction.js` appends one `kind: friction` record to the per-
|
|
165
|
+
`diagnose-friction.js` appends one `kind: friction` record to the per-run/
|
|
159
166
|
per-Story `signals.ndjson` stream on local disk — not posted to the ticket at
|
|
160
167
|
capture time; the retro phase surfaces the aggregate as routed proposals.
|
|
161
168
|
|
|
162
169
|
- **Command**:
|
|
163
170
|
`node .agents/scripts/diagnose-friction.js --story [STORY_ID] --cmd [FAILED_COMMAND]`
|
|
164
|
-
(add `--epic [EPIC_ID]` under an Epic).
|
|
165
171
|
- **When to fire**: after repeated tool-validation errors, an unrecoverable
|
|
166
172
|
command failure, ambiguity needing self-correction, or repetitive
|
|
167
173
|
boilerplate steps a workflow/skill could simplify.
|
|
168
174
|
|
|
169
|
-
The schema validation, the standalone
|
|
175
|
+
The schema validation, the standalone stream path, and the
|
|
170
176
|
never-silently-dropped guarantee are reference detail — see
|
|
171
177
|
[`docs/execution-reference.md` § Friction telemetry](docs/execution-reference.md#friction-telemetry).
|
|
172
178
|
|
|
@@ -201,19 +207,11 @@ recurred, and what assumption you would test next, then either Re-Plan or
|
|
|
201
207
|
hand back to the operator. Do not paper over the loop with another
|
|
202
208
|
just-in-case retry.
|
|
203
209
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
`.agents/workflows/helpers/deliver-epic.md`, re-ticked every 30 minutes via
|
|
210
|
-
`wave-tick.js --check-idle 30`) can distinguish a child still making
|
|
211
|
-
progress from a dead one. If you genuinely cannot proceed, transition to
|
|
212
|
-
`agent::blocked` and exit non-zero — never fall silent. A child with no
|
|
213
|
-
recent `story.heartbeat`, no commit on its `story-<id>` branch, and no
|
|
214
|
-
`agent::blocked` label is exactly the failure mode the idle watchdog is
|
|
215
|
-
built to catch, and the watchdog will re-dispatch (or escalate) the Story
|
|
216
|
-
without your participation.
|
|
210
|
+
While executing as a Story delivery sub-agent (via `helpers/deliver-story`),
|
|
211
|
+
if you genuinely cannot proceed you MUST transition to `agent::blocked` and
|
|
212
|
+
exit non-zero — **never fall silent**. A stalled child that reports nothing
|
|
213
|
+
is indistinguishable from a dead one, and the parent `/deliver` run can only
|
|
214
|
+
escalate what you surface.
|
|
217
215
|
|
|
218
216
|
### J. HITL Blocker Escalation (Safe Execution)
|
|
219
217
|
|
|
@@ -243,8 +241,7 @@ resolve by this **total ordering** (higher wins):
|
|
|
243
241
|
(§ 1.E).
|
|
244
242
|
2. **This file** — `.agents/instructions.md`.
|
|
245
243
|
3. **Global rules** — `.agents/rules/*.md` (§ 1.F).
|
|
246
|
-
4. **
|
|
247
|
-
5. **Skills** — `.agents/skills/**/SKILL.md` (§ 1.B).
|
|
244
|
+
4. **Skills** — `.agents/skills/**/SKILL.md` (§ 1.B).
|
|
248
245
|
|
|
249
246
|
Two carve-outs refine the ordering:
|
|
250
247
|
|
|
@@ -252,23 +249,25 @@ Two carve-outs refine the ordering:
|
|
|
252
249
|
tier overlap, the narrower, more-specific statement governs the broader one
|
|
253
250
|
(e.g. a stack-specific skill refines a general core skill; a per-rule
|
|
254
251
|
statement refines a cross-rule one).
|
|
255
|
-
- **`rules/security-baseline.md` is inviolable.** No
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
252
|
+
- **`rules/security-baseline.md` is inviolable.** No skill or local override
|
|
253
|
+
may relax a security MUST. A security constraint that conflicts with any
|
|
254
|
+
lower-tier guidance — or with a local override — always wins, regardless of
|
|
255
|
+
its tier position above.
|
|
259
256
|
|
|
260
257
|
---
|
|
261
258
|
|
|
262
259
|
## 2. FinOps & Token Budgeting (Economic Guardrails)
|
|
263
260
|
|
|
264
|
-
Mandrel does **not** enforce live LLM spend from response metadata
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
261
|
+
Mandrel does **not** enforce live LLM spend from response metadata, and it has
|
|
262
|
+
no operator-tunable context budget. What it does bound are fixed framework
|
|
263
|
+
ceilings — the `/plan` context envelope and plan-time Story sizing — and they
|
|
264
|
+
**fail closed** with a message naming what to trim, rather than silently
|
|
265
|
+
handing the model a truncated context. Your host runtime owns session quota and
|
|
266
|
+
hard stops. The constants, the ≈4-char/token estimate, and the trim options are
|
|
267
|
+
reference detail — see
|
|
269
268
|
[`docs/execution-reference.md` § FinOps & token budgeting](docs/execution-reference.md#finops--token-budgeting-economic-guardrails).
|
|
270
|
-
Consult it when
|
|
271
|
-
|
|
269
|
+
Consult it when `/plan` refused an over-ceiling envelope or an over-budget
|
|
270
|
+
Story count.
|
|
272
271
|
|
|
273
272
|
---
|
|
274
273
|
|
|
@@ -276,76 +275,51 @@ budget grounds.
|
|
|
276
275
|
|
|
277
276
|
1. **Context First:** Before proposing any solution, understand the
|
|
278
277
|
repository's tech stack, historical context, and structure.
|
|
279
|
-
- **Digest-first Reading (
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
278
|
+
- **Digest-first Reading (Story #4433)** — stated once here; it governs
|
|
279
|
+
every call site. **Never ingest the whole `project.docsContextFiles` set
|
|
280
|
+
up front.** Read the **docs digest** — a compact outline (path, byte
|
|
281
|
+
size, heading outline with line numbers, and the first paragraph under
|
|
282
|
+
each `##`) built from those files — decide which docs bear on the task at
|
|
283
|
+
hand, then **pull the full file on demand**, jumping to the section at
|
|
284
|
+
the line number the digest names. This is a hard cutover: no
|
|
285
|
+
read-every-file branch is retained on any path.
|
|
286
|
+
|
|
287
|
+
The call sites differ only in how the digest reaches you — the
|
|
288
|
+
discipline above is identical for all of them:
|
|
289
|
+
- `/plan` and interactive tasks — a file at `temp/run-<id>/docs-digest.md`
|
|
290
|
+
(`plan-context.js`, via the shared generator in
|
|
291
|
+
`.agents/scripts/lib/orchestration/docs-digest.js`).
|
|
292
|
+
- `/deliver` Story sub-agents (`helpers/deliver-story`) — the
|
|
293
|
+
`docsDigestPath` the caller threads.
|
|
294
|
+
- Standalone-Story planning (`story-plan.js --emit-context`) — inline as
|
|
295
|
+
`corpusContext.docsDigest` (no per-run directory to anchor a
|
|
296
|
+
file), alongside `corpusContext.relevantSections`.
|
|
297
|
+
|
|
298
|
+
When no digest exists for the task at hand — an ad hoc task outside
|
|
299
|
+
`/deliver`, `project.docsContextFiles` unset, or a null `docsDigestPath` —
|
|
300
|
+
there is **no mandatory docs read**: read a full doc only when the task's
|
|
301
|
+
own context points you at one.
|
|
302
|
+
|
|
303
|
+
The decisions log (`decisions.md`) may be either a single-file
|
|
304
|
+
dated-entry log or an **index** into a `decisions/` ADR directory — both
|
|
305
|
+
are first-class layouts (see
|
|
296
306
|
[`skills/core/documentation-and-adrs`](skills/core/documentation-and-adrs/SKILL.md)).
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
auto-loaded into every task's context. When no digest exists yet for
|
|
300
|
-
the task at hand (an ad hoc interactive task with no Epic in scope, or
|
|
301
|
-
`project.docsContextFiles` unset) there is no mandatory docs read —
|
|
302
|
-
read a full doc only when the task itself points you at one. This is a
|
|
303
|
-
hard cutover: there is no read-every-`docsContextFiles`-file branch
|
|
304
|
-
retained.
|
|
305
|
-
- **Digest-first Reading (`/deliver` story sub-agents)**: A `/deliver`
|
|
306
|
-
Story delivery sub-agent (dispatched via `helpers/epic-deliver-story` or
|
|
307
|
-
`helpers/single-story-deliver`) does **not** re-read the full
|
|
308
|
-
`project.docsContextFiles` set per Story. Instead it reads the **per-Epic
|
|
309
|
-
docs digest** — the same file and shape described above — that
|
|
310
|
-
`epic-deliver-prepare.js` writes to
|
|
311
|
-
`temp/epic-<epicId>/docs-digest.md` and the parent threads into the
|
|
312
|
-
child prompt as `docsDigestPath`. Use the digest to decide which docs are
|
|
313
|
-
relevant to the Story at hand, then **pull the full file on demand**
|
|
314
|
-
(reading the section at the line number the digest names) when a section
|
|
315
|
-
bears on the change. When `docsDigestPath` is null (the project has no
|
|
316
|
-
`project.docsContextFiles` configured) there is no digest to read and no
|
|
317
|
-
per-Story docs mandate — read a full doc only if the Story's own context
|
|
318
|
-
points you at one. This is the hard cutover from the former
|
|
319
|
-
read-every-file-per-Story rule: delivery children no longer ingest the
|
|
320
|
-
whole docs set up front.
|
|
321
|
-
- **Standalone-Story planning path (`story-plan.js --emit-context`)**:
|
|
322
|
-
The standalone counterpart to `/plan` for Stories that do not attach
|
|
323
|
-
to an Epic does not write a `docs-digest.md` file at all — there is
|
|
324
|
-
no per-Epic directory to anchor one. Instead `buildCorpusContext`
|
|
325
|
-
(`.agents/scripts/lib/planning-corpus.js`) builds the same compact
|
|
326
|
-
digest shape in memory and threads it inline as
|
|
327
|
-
`corpusContext.docsDigest` on the `--emit-context` envelope, next to
|
|
328
|
-
`corpusContext.relevantSections` (ranked excerpts from existing
|
|
329
|
-
Epics' Tech Spec sections). Treat `corpusContext.docsDigest` exactly
|
|
330
|
-
like the file-based digest above — decide relevance from the outline,
|
|
331
|
-
then pull the full file on demand — the only difference is the
|
|
332
|
-
delivery mechanism (inline JSON field vs. a temp file path), not the
|
|
333
|
-
content or the digest-first discipline.
|
|
307
|
+
Treat an index like any other digested doc: link-follow the per-ADR
|
|
308
|
+
bodies on demand rather than auto-loading them.
|
|
334
309
|
- **Conditional Reads**: When the task touches UI copy, layout, or
|
|
335
310
|
routing and the corresponding file is present in the project, also
|
|
336
311
|
read `docs/style-guide.md` and `docs/web-routes.md`. Skip both when
|
|
337
312
|
absent or unrelated to the task — they are not part of the universal
|
|
338
313
|
mandatory set.
|
|
339
|
-
- **
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
and the task-specific instructions.
|
|
314
|
+
- **Story Context**: Additionally, read the current Story's body — the
|
|
315
|
+
inline `## Spec` plus its `acceptance[]` / `verify[]` entries — and
|
|
316
|
+
the task-specific instructions.
|
|
343
317
|
- **Optimization**: For large projects, prioritize targeted retrieval
|
|
344
318
|
(semantic code search or focused text search) to isolate specific
|
|
345
319
|
schemas or decisions before reading broad files.
|
|
346
320
|
2. **Plan First:** For non-trivial tasks (3+ steps or architectural
|
|
347
|
-
decisions), enter **Plan Mode**. Update the
|
|
348
|
-
|
|
321
|
+
decisions), enter **Plan Mode**. Update the Story's `## Spec`
|
|
322
|
+
(via `/plan`) or create a new Technical Specification document
|
|
349
323
|
in the `docs/` root (if not already handled by a ticket) before
|
|
350
324
|
touching code.
|
|
351
325
|
3. **Artifacts over Chat:** Create log files for test results, build
|
|
@@ -396,24 +370,23 @@ budget grounds.
|
|
|
396
370
|
|
|
397
371
|
---
|
|
398
372
|
|
|
399
|
-
## 5. Git &
|
|
373
|
+
## 5. Git & Story Protocol (Strict Standards)
|
|
400
374
|
|
|
401
375
|
To maintain a clean and readable repository history, you MUST follow these
|
|
402
|
-
strict conventions for all
|
|
376
|
+
strict conventions for all Story-related Git operations. See
|
|
403
377
|
[`.agents/rules/git-conventions.md`](rules/git-conventions.md) for the full
|
|
404
378
|
canonical reference.
|
|
405
379
|
|
|
406
380
|
### A. Branch Naming (Canonical)
|
|
407
381
|
|
|
408
|
-
|
|
409
|
-
|
|
382
|
+
v2 delivery uses one branch shape. The runtime creates and maintains it
|
|
383
|
+
via `single-story-init.js`; agents commit on that branch only.
|
|
410
384
|
|
|
411
|
-
| Purpose
|
|
412
|
-
|
|
|
413
|
-
| Story execution
|
|
414
|
-
| Epic integration | `epic/<epicId>` | `/deliver` slash command | Story branches merge into this branch with `--no-ff`. Pushed per wave. |
|
|
385
|
+
| Purpose | Format | Owner | Notes |
|
|
386
|
+
| --------------- | ----------------- | ----------------------- | --------------------------------------------------------------------- |
|
|
387
|
+
| Story execution | `story-<storyId>` | `single-story-init.js` | Per-Story worktree at `.worktrees/story-<storyId>/`. PR target is `main` (squash + required checks). There is no `epic/<id>` integration branch and no `--no-ff` wave merge. |
|
|
415
388
|
|
|
416
|
-
- **Verification**: After `story-init.js` returns, confirm
|
|
389
|
+
- **Verification**: After `single-story-init.js` returns, confirm
|
|
417
390
|
`git branch --show-current` reports `story-<storyId>` before making any
|
|
418
391
|
commits. If it does not, **STOP** and re-init.
|
|
419
392
|
|
|
@@ -429,31 +402,32 @@ prompted.
|
|
|
429
402
|
|
|
430
403
|
### C. History Hygiene
|
|
431
404
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
-
|
|
447
|
-
|
|
448
|
-
- Each Story
|
|
449
|
-
`
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
-
|
|
455
|
-
|
|
456
|
-
|
|
405
|
+
Every Story reaches `main` via its own PR (`story-<id>` → squash + required
|
|
406
|
+
checks). `helpers/deliver-story` / `single-story-close.js` open that PR;
|
|
407
|
+
there is no Epic integration branch and no in-script push to `main`.
|
|
408
|
+
|
|
409
|
+
### D. Ticket hierarchy (Story-only)
|
|
410
|
+
|
|
411
|
+
v2 collapses the ticket model to **Story**. Acceptance criteria and
|
|
412
|
+
verification steps live inline on the Story body (`acceptance[]` /
|
|
413
|
+
`verify[]`); the folded Tech Spec lives inline in `## Spec` (over-budget
|
|
414
|
+
Specs fail closed — split or tighten; never write under `docs/`). Optional
|
|
415
|
+
`depends_on` edges order rare multi-Story runs — and, because `/deliver`
|
|
416
|
+
resolves them from live state, they order Stories **across plan runs and
|
|
417
|
+
over time**, not just within one batch.
|
|
418
|
+
|
|
419
|
+
- `/plan` emits one or more `type::story` issues (default N=1). There is no
|
|
420
|
+
batch label: `/deliver` takes ids and discovers the graph.
|
|
421
|
+
- Each Story is executed by `helpers/deliver-story` (invoked from
|
|
422
|
+
[`/deliver`](workflows/deliver.md)). There is no per-Task sub-loop; the
|
|
423
|
+
agent authors commit subjects directly per
|
|
424
|
+
[`rules/git-conventions.md`](rules/git-conventions.md) and references the
|
|
425
|
+
Story via `(refs #<storyId>)`.
|
|
426
|
+
- Branch model matches Section 5.A (`story-<id>` → PR → `main`).
|
|
427
|
+
- There is no `type::epic` / `type::task` label and no Epic issue form. An
|
|
428
|
+
Epic is at most an optional untyped human umbrella issue outside
|
|
429
|
+
orchestration; `/deliver` refuses tickets that still carry an
|
|
430
|
+
`Epic: #N` footer.
|
|
457
431
|
|
|
458
432
|
---
|
|
459
433
|
|
|
@@ -471,12 +445,12 @@ To keep the repository clean and avoid polluting the Git history:
|
|
|
471
445
|
|
|
472
446
|
## 7. Complexity-Aware Execution
|
|
473
447
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
`.agents/scripts/lib/orchestration/ticket-validator-sizing.js` (
|
|
479
|
-
|
|
448
|
+
`/plan` sizes each Story as a **capability slice a frontier model delivers
|
|
449
|
+
and self-verifies in one pass** — a broad footprint is normal when the
|
|
450
|
+
change is cohesive. The session-capacity backstop lives in one place:
|
|
451
|
+
`DEFAULT_MODEL_CAPACITY` in
|
|
452
|
+
`.agents/scripts/lib/orchestration/ticket-validator-sizing.js` (framework
|
|
453
|
+
constant — not operator-tunable). Do not re-slice a capability-sized
|
|
480
454
|
Story into per-module fragments just because it touches many files.
|
|
481
455
|
|
|
482
456
|
### A. When You See `⚠️ COMPLEXITY WARNING`
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# CI Failure Triage & Remediation
|
|
2
2
|
|
|
3
3
|
This rule applies when a delivery path is watching a pull request's CI checks
|
|
4
|
-
and a required check is red (or repeatedly slow) — the
|
|
5
|
-
|
|
6
|
-
([`deliver-epic.md`](../workflows/helpers/deliver-epic.md)) and the standalone
|
|
4
|
+
and a required check is red (or repeatedly slow) — the `/deliver` router
|
|
5
|
+
([`deliver.md`](../workflows/deliver.md)) runs each Story through the
|
|
7
6
|
single-Story Step 4 CI watch + fix loop
|
|
8
|
-
([`
|
|
9
|
-
|
|
7
|
+
([`deliver-story.md`](../workflows/helpers/deliver-story.md)), which hands off
|
|
8
|
+
to it. It is the single triage brain that mechanism defers to:
|
|
10
9
|
the watcher (`pr-watch-with-update.js`) surfaces the failing check, the run
|
|
11
10
|
link, and the failure signature; this rule decides what to do next.
|
|
12
11
|
|
|
@@ -27,8 +26,8 @@ guess.
|
|
|
27
26
|
|
|
28
27
|
Fetch the failing job log and record the failure signature (the failing check
|
|
29
28
|
name, the run id / run link, and the first distinctive error line). The
|
|
30
|
-
watcher already writes this to `temp/
|
|
31
|
-
|
|
29
|
+
watcher already writes this to `temp/story-<id>-ci-digest.{json,md}` — start
|
|
30
|
+
from that digest.
|
|
32
31
|
|
|
33
32
|
### 2. Classify the failure
|
|
34
33
|
|
|
@@ -50,18 +49,15 @@ path) or surfaces it inline (standalone path) — start from that digest.
|
|
|
50
49
|
A deterministic failure caused by the diff is remediated at source. Use the
|
|
51
50
|
existing per-check fix table — do **not** duplicate it here:
|
|
52
51
|
|
|
53
|
-
- **
|
|
54
|
-
[`deliver-
|
|
55
|
-
(§ 8.1 Remediation).
|
|
56
|
-
- **Standalone Step 4**:
|
|
57
|
-
[`single-story-deliver-reference.md` § Step 4 — CI watch + fix recovery](../workflows/helpers/single-story-deliver-reference.md#step-4--ci-watch--fix-recovery).
|
|
52
|
+
- **Story Step 4**:
|
|
53
|
+
[`deliver-story-reference.md` § Step 4 — CI watch + fix recovery](../workflows/helpers/deliver-story-reference.md#step-4--ci-watch--fix-recovery).
|
|
58
54
|
|
|
59
55
|
In short: lint/format → `npm run lint` + biome apply; maintainability/crap
|
|
60
56
|
baseline drift → re-run the ratcheted script and fix at source (refresh a
|
|
61
57
|
baseline only when the diff demonstrably can't be covered); test failure →
|
|
62
58
|
reproduce with `npm test`, fix source or test; coverage threshold → add tests.
|
|
63
|
-
Commit the fix on the delivery branch (`
|
|
64
|
-
|
|
59
|
+
Commit the fix on the delivery branch (`story-<storyId>`), push, and re-run the
|
|
60
|
+
watcher. Auto-merge stays armed across retries.
|
|
65
61
|
|
|
66
62
|
## Infra, transient, and flaky failures ARE root-cause defects
|
|
67
63
|
|
|
@@ -75,7 +71,7 @@ get to wave it off because "CI was flaky."
|
|
|
75
71
|
genuine attempt, that itself is a finding — record it in the issue you file
|
|
76
72
|
in step 4.
|
|
77
73
|
2. **Check whether it also fails on `main`.** Run the same check against an
|
|
78
|
-
unmodified `main`
|
|
74
|
+
unmodified `main` checkout. If it fails on `main`
|
|
79
75
|
too, the defect is **pre-existing** — it is not caused by the diff under
|
|
80
76
|
review, and the fix belongs in a separate change, not silently folded into
|
|
81
77
|
this delivery.
|
|
@@ -37,8 +37,10 @@ which deleted the existing compatibility shim layer across
|
|
|
37
37
|
`wave-session.js`, `IExecutionAdapter` / `ManualDispatchAdapter`, lifecycle
|
|
38
38
|
emit shims, and duplicate progress/comment writers in one pass. The
|
|
39
39
|
per-finding closing references (audit Findings #10, #11, #13, #17) live in
|
|
40
|
-
the merged PRs and the Epic #2646 history; the
|
|
41
|
-
|
|
40
|
+
the merged PRs and the Epic #2646 history; the Part 1 — Model-Evolution
|
|
41
|
+
Audit analysis this section grew out of is preserved at
|
|
42
|
+
`docs/roadmap.md` @ tag `mandrel-v1.94.0` (see the Historical-anchors
|
|
43
|
+
table in the live [`docs/roadmap.md`](../../docs/roadmap.md)).
|
|
42
44
|
|
|
43
45
|
Practical guidance when authoring a contract change:
|
|
44
46
|
|
|
@@ -79,15 +81,14 @@ checkout — reaping its own merged refs and fast-forwarding the base branch.
|
|
|
79
81
|
`/git-cleanup` is a recovery tool, not a routine chore.** The mechanics behind
|
|
80
82
|
that invariant:
|
|
81
83
|
|
|
82
|
-
Every flow that lands work — `/deliver`
|
|
83
|
-
|
|
84
|
+
Every flow that lands work — `/deliver` and `/git-deliver` — is responsible
|
|
85
|
+
for leaving the local checkout tidy without
|
|
84
86
|
operator intervention:
|
|
85
87
|
|
|
86
|
-
- **Fast-forwarding the base branch is owned by the flow.**
|
|
87
|
-
|
|
88
|
-
`git-cleanup.js --fast-forward-main --execute --yes`)
|
|
89
|
-
|
|
90
|
-
ends by telling the operator to "run `/git-cleanup` afterwards to catch up".
|
|
88
|
+
- **Fast-forwarding the base branch is owned by the flow.** `/deliver`
|
|
89
|
+
fast-forwards `main` itself in its cleanup phase (via
|
|
90
|
+
`git-cleanup.js --fast-forward-main --execute --yes`). No workflow ends by
|
|
91
|
+
telling the operator to "run `/git-cleanup` afterwards to catch up".
|
|
91
92
|
- **Reaping merged local refs is owned by the flow's next boot.** `/plan` and
|
|
92
93
|
`/git-deliver` open with a **protected boot sweep**
|
|
93
94
|
(`boot-sweep.js`) that fast-forwards `main`, prunes stale remote-tracking
|
|
@@ -118,55 +119,44 @@ operator intervention:
|
|
|
118
119
|
owning flow's hygiene step regressed — fix the flow, do not codify the manual
|
|
119
120
|
sweep.
|
|
120
121
|
|
|
121
|
-
### Shared-checkout contention (
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
the
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
**
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
this guard ever executes — this guard only ever refuses on a truly
|
|
160
|
-
_foreign_ epic's live lock or unrelated dirt.
|
|
161
|
-
- **Not fixed by this guard**: the guard reports the contention early and
|
|
162
|
-
actionably; it does not redesign the merge phase to use an isolated
|
|
163
|
-
worktree, and it does not change `restoreStartingBranch`'s existing
|
|
164
|
-
dirty-tree refusal behavior (`phases/branch-restore.js`) — both remain
|
|
165
|
-
out of scope. Resolution of an actual collision is still manual: wait for
|
|
166
|
-
the other Epic's story-close run to finish, or — only once you have
|
|
167
|
-
independently confirmed that process is no longer running — remove the
|
|
168
|
-
stale lock file and resolve the dirty tree by hand (stash/commit/reset;
|
|
169
|
-
never `git reset --hard` or `git checkout --force`).
|
|
122
|
+
### Shared-checkout contention (Stories #4460, #4424, #4545)
|
|
123
|
+
|
|
124
|
+
**One delivery per checkout is the model.** v2 has no Epic integration branch
|
|
125
|
+
and no merge phase that parks the shared checkout on someone else's branch:
|
|
126
|
+
each Story works in its own worktree (`.worktrees/story-<id>/`) and lands by
|
|
127
|
+
pushing `story-<id>` and opening a PR. The Epic-era collision this section used
|
|
128
|
+
to describe — `story-close.js` running `git checkout <epic-branch>` in the
|
|
129
|
+
shared main checkout under a per-Epic `epic-*.merge.lock` — is gone with the
|
|
130
|
+
machinery that caused it (Story #4545 deleted the last of that prose; the six
|
|
131
|
+
modules it named had already been removed in the v2.0.0 cutover).
|
|
132
|
+
|
|
133
|
+
Two guards remain, and they cover different hazards:
|
|
134
|
+
|
|
135
|
+
- **Per-Story lease** (`lib/orchestration/single-story-lease-guard.js`). The
|
|
136
|
+
standalone path has no Epic-scoped dispatch manifest to serialize two
|
|
137
|
+
operators driving the **same** Story, so `single-story-init.js` takes an
|
|
138
|
+
exclusive, time-bounded lease on the Story ticket (assignee-as-lease) and
|
|
139
|
+
clears it at close. It **fails closed** on a foreign assignee — there is no
|
|
140
|
+
heartbeat ledger to judge staleness from — so a foreign holder always blocks
|
|
141
|
+
unless you pass `--steal`, which you should do only after independently
|
|
142
|
+
confirming the other run is dead.
|
|
143
|
+
|
|
144
|
+
- **Wrong-tree guard** (`lib/orchestration/single-story-close/phases/wrong-tree-guard.js`,
|
|
145
|
+
Stories #3364 / #4424). `cd <workCwd>` steers the Bash tool's cwd but does
|
|
146
|
+
**not** scope path-based Edit/Write tools, which resolve absolute paths and
|
|
147
|
+
ignore cwd. An agent whose shell is correctly inside the worktree can still
|
|
148
|
+
edit the main checkout; close then gates a clean worktree and opens a
|
|
149
|
+
silent empty-diff PR. The guard inspects
|
|
150
|
+
`git -C <mainCheckout> status --porcelain` and intersects stray **tracked**
|
|
151
|
+
paths with the Story's own diff-path set, so a concurrent session's unrelated
|
|
152
|
+
dirt does not false-positive (framework-gap #4420). Untracked files are
|
|
153
|
+
ignored as scratch.
|
|
154
|
+
|
|
155
|
+
- **Recognition signature**: close aborts naming stray files in the main
|
|
156
|
+
checkout that intersect the Story's diff. **Resolution**: relocate those
|
|
157
|
+
edits under the worktree, restore the main checkout
|
|
158
|
+
(`git -C <main-repo> checkout -- <files>`), then re-run `/deliver <storyId>`.
|
|
159
|
+
Never `git reset --hard` or `git checkout --force` to clear the way.
|
|
170
160
|
|
|
171
161
|
## Documentation Freshness Gate
|
|
172
162
|
|
|
@@ -12,28 +12,22 @@ live in the on-demand
|
|
|
12
12
|
**before** doing the matching work; the core below is sufficient for every
|
|
13
13
|
routine commit, branch, and PR.
|
|
14
14
|
|
|
15
|
-
## Canonical Branching (
|
|
16
|
-
|
|
17
|
-
###
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
(e.g., `
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
`story-<storyId>`
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
>
|
|
31
|
-
> (Epic → Story), Stories have no child tickets. Commits
|
|
32
|
-
> land on `story-<storyId>` directly from the agent and the
|
|
33
|
-
> Conventional Commit subject references the parent Story via
|
|
34
|
-
> `(refs #<storyId>)`. See
|
|
35
|
-
> [`.agents/instructions.md` § 5.D](../instructions.md) for the
|
|
36
|
-
> full hierarchy contract.
|
|
15
|
+
## Canonical Branching (v2)
|
|
16
|
+
|
|
17
|
+
### Story branch → PR → main
|
|
18
|
+
|
|
19
|
+
Every Story lands on a dedicated **Story branch** named `story-<storyId>`
|
|
20
|
+
(e.g., `story-104`), seeded from `project.baseBranch` (`main` by default).
|
|
21
|
+
The runtime owns branch creation via `single-story-init.js`; agents commit
|
|
22
|
+
on that branch only. Close opens a PR against `main` (squash + required
|
|
23
|
+
checks). There is **no** `epic/<id>` integration branch and no `--no-ff`
|
|
24
|
+
wave merge.
|
|
25
|
+
|
|
26
|
+
> **Commit subjects.** Stories have no child tickets. Commits land on
|
|
27
|
+
> `story-<storyId>` directly from the agent and the Conventional Commit
|
|
28
|
+
> subject references the Story via `(refs #<storyId>)`. See
|
|
29
|
+
> [`.agents/instructions.md` § 5.D](../instructions.md) for the hierarchy
|
|
30
|
+
> contract.
|
|
37
31
|
|
|
38
32
|
## Conventional Commits
|
|
39
33
|
|