mandrel 1.93.0 → 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/.agents/README.md +59 -73
- package/.agents/agents/acceptance-critic.md +129 -0
- package/.agents/agents/story-worker.md +161 -0
- package/.agents/docs/SDLC.md +489 -1285
- package/.agents/docs/agentrc-reference.json +177 -67
- package/.agents/docs/configuration.md +108 -136
- package/.agents/docs/execution-reference.md +44 -22
- package/.agents/docs/quality-gates.md +13 -19
- package/.agents/docs/workflows.md +3 -3
- package/.agents/instructions.md +107 -108
- package/.agents/rules/ci-remediation.md +8 -12
- package/.agents/rules/git-conventions-reference.md +224 -0
- package/.agents/rules/git-conventions.md +42 -223
- package/.agents/rules/security-baseline.md +5 -0
- package/.agents/rules/testing-standards.md +106 -13
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +71 -201
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
- package/.agents/schemas/risk-verdict.schema.json +0 -13
- package/.agents/scripts/acceptance-eval.js +62 -18
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- package/.agents/scripts/analyze-execution.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.js +1 -1
- package/.agents/scripts/check-context-budget.js +62 -5
- package/.agents/scripts/check-lifecycle-lint.js +6 -9
- package/.agents/scripts/check-prepush-recovery.js +1 -1
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- package/.agents/scripts/diagnose-friction.js +0 -6
- 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 +5 -5
- 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 -4
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +56 -18
- package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
- package/.agents/scripts/lib/checks/index.js +2 -1
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
- package/.agents/scripts/lib/cli/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +16 -7
- package/.agents/scripts/lib/close-validation/gates.js +160 -22
- package/.agents/scripts/lib/config/acceptance-eval.js +52 -5
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +103 -0
- package/.agents/scripts/lib/config/explain.js +57 -36
- package/.agents/scripts/lib/config/limits.js +17 -58
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +1 -1
- package/.agents/scripts/lib/config/runners.js +17 -50
- package/.agents/scripts/lib/config/temp-paths.js +19 -14
- package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
- package/.agents/scripts/lib/config-resolver.js +3 -8
- package/.agents/scripts/lib/config-settings-schema-delivery.js +46 -136
- package/.agents/scripts/lib/config-settings-schema-quality.js +17 -14
- package/.agents/scripts/lib/config-settings-schema.js +52 -38
- package/.agents/scripts/lib/dependency-parser.js +3 -2
- package/.agents/scripts/lib/doc-tiers.js +39 -4
- package/.agents/scripts/lib/duplicate-search.js +211 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +5 -5
- package/.agents/scripts/lib/framework-version.js +2 -3
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
- package/.agents/scripts/lib/git-utils.js +32 -6
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/label-constants.js +10 -23
- package/.agents/scripts/lib/label-taxonomy.js +9 -43
- package/.agents/scripts/lib/observability/active-story-env.js +112 -3
- package/.agents/scripts/lib/observability/hook-heartbeat.js +187 -0
- package/.agents/scripts/lib/observability/source-classifier.js +3 -3
- package/.agents/scripts/lib/observability/tool-trace-hook.js +15 -4
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/acceptance-clusters.js +111 -0
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +32 -4
- package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +273 -0
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +204 -0
- package/.agents/scripts/lib/orchestration/code-review.js +20 -268
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- 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/lifecycle/emit-loop-tick.js +8 -8
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
- 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 +14 -14
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
- package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +1 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
- 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/phases/code-review.js +15 -12
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
- package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
- package/.agents/scripts/lib/orchestration/ticket-validator.js +3 -8
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
- package/.agents/scripts/lib/planning-corpus.js +16 -11
- package/.agents/scripts/lib/preflight-runner.js +2 -2
- package/.agents/scripts/lib/provider-factory.js +1 -1
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/story-adjacency.js +11 -14
- package/.agents/scripts/lib/story-body/story-body.js +124 -70
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
- package/.agents/scripts/lib/validation-evidence.js +1 -1
- package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
- 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 +64 -74
- package/.agents/scripts/plan-persist.js +121 -280
- package/.agents/scripts/plan-run-epilogue.js +97 -0
- package/.agents/scripts/post-structured-comment.js +38 -0
- package/.agents/scripts/providers/github/issues.js +17 -33
- package/.agents/scripts/providers/github/mappers.js +0 -12
- package/.agents/scripts/providers/github/tickets.js +2 -5
- package/.agents/scripts/resolve-plan-run.js +117 -0
- package/.agents/scripts/signals-view.js +24 -19
- package/.agents/scripts/single-story-close.js +11 -14
- package/.agents/scripts/single-story-confirm-merge.js +39 -23
- package/.agents/scripts/single-story-init.js +29 -20
- package/.agents/scripts/stories-wave-tick.js +6 -6
- package/.agents/scripts/story-plan.js +26 -47
- package/.agents/scripts/sync-claude-agents.js +165 -0
- package/.agents/scripts/update-ticket-state.js +37 -15
- package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
- package/.agents/skills/core/api-and-interface-design/SKILL.md +5 -3
- package/.agents/skills/core/code-review-and-quality/SKILL.md +63 -7
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +1 -1
- package/.agents/skills/core/gates-and-baselines/SKILL.md +149 -0
- package/.agents/skills/core/idea-refinement/SKILL.md +8 -14
- package/.agents/skills/core/qa-coverage-mapping/SKILL.md +7 -7
- package/.agents/skills/core/scope-triage/SKILL.md +28 -172
- package/.agents/skills/skills.index.json +8 -418
- package/.agents/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +3 -3
- package/.agents/workflows/audit-clean-code.md +3 -3
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +5 -5
- package/.agents/workflows/audit-lighthouse.md +3 -3
- package/.agents/workflows/audit-navigability.md +3 -2
- package/.agents/workflows/audit-performance.md +3 -3
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +3 -3
- package/.agents/workflows/audit-security.md +3 -3
- package/.agents/workflows/audit-seo.md +3 -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 +3 -3
- package/.agents/workflows/deliver.md +122 -131
- package/.agents/workflows/git-cleanup.md +3 -4
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +52 -40
- package/.agents/workflows/helpers/code-review.md +70 -193
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
- package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/mandrel-sync-config.md +1 -1
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
- package/.agents/workflows/mandrel-update.md +3 -2
- package/.agents/workflows/plan.md +112 -145
- package/.agents/workflows/qa-assist.md +24 -30
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -2
- package/README.md +9 -8
- package/docs/CHANGELOG.md +46 -0
- package/lib/cli/registry.js +95 -0
- package/lib/migrations/index.js +6 -5
- package/package.json +5 -3
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer-mobile.md +0 -120
- package/.agents/personas/engineer-web.md +0 -111
- package/.agents/personas/engineer.md +0 -119
- package/.agents/personas/product.md +0 -94
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/refactorer.md +0 -113
- package/.agents/personas/security-engineer.md +0 -112
- package/.agents/personas/sre.md +0 -86
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/personas/ux-designer.md +0 -95
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-spec.schema.json +0 -153
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- 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 -590
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-decompose.js +0 -54
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-plan-spec.js +0 -64
- 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/orchestration/context-hydration-engine.js +0 -660
- 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/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 -388
- 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/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/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-story-dispatch-end.js +0 -147
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -384
- 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 -278
- 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/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/post-merge-pipeline.js +0 -205
- 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-runner.js +0 -197
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +0 -109
- 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 -301
- 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/plan-critics.js +0 -199
- package/.agents/scripts/retro-run.js +0 -218
- 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 -335
- package/.agents/skills/core/baseline-refresh/SKILL.md +0 -181
- package/.agents/skills/core/ci-cd-and-automation/SKILL.md +0 -274
- package/.agents/skills/core/ci-cd-and-automation/examples.md +0 -211
- package/.agents/skills/core/code-simplification/SKILL.md +0 -389
- package/.agents/skills/core/context-engineering/SKILL.md +0 -309
- package/.agents/skills/core/context-engineering/examples.md +0 -58
- package/.agents/skills/core/deprecation-and-migration/SKILL.md +0 -250
- 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 -413
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/skills/core/frontend-ui-engineering/SKILL.md +0 -357
- package/.agents/skills/core/hydrate-context/SKILL.md +0 -123
- package/.agents/skills/core/idea-refinement/examples.md +0 -437
- package/.agents/skills/core/idea-refinement/frameworks.md +0 -135
- package/.agents/skills/core/incremental-implementation/SKILL.md +0 -271
- package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +0 -213
- package/.agents/skills/core/knowledge-transfer/SKILL.md +0 -180
- package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +0 -117
- package/.agents/skills/core/performance-optimization/SKILL.md +0 -314
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +0 -277
- package/.agents/skills/core/property-based-testing/SKILL.md +0 -148
- package/.agents/skills/core/refactoring-discipline/SKILL.md +0 -111
- package/.agents/skills/core/shipping-and-launch/SKILL.md +0 -328
- package/.agents/skills/core/spec-driven-development/SKILL.md +0 -252
- package/.agents/skills/core/test-driven-development/SKILL.md +0 -475
- package/.agents/skills/core/using-agent-skills/SKILL.md +0 -232
- package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +0 -31
- package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +0 -51
- package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +0 -76
- package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +0 -33
- package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +0 -51
- package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +0 -54
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +0 -29
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +0 -30
- package/.agents/skills/stack/backend/stripe-integration/SKILL.md +0 -57
- package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +0 -9
- package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +0 -48
- package/.agents/skills/stack/frontend/astro/SKILL.md +0 -62
- package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +0 -30
- package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +0 -29
- package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +0 -50
- package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +0 -58
- package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +0 -34
- package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +0 -51
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +0 -199
- package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +0 -68
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -534
- package/.agents/workflows/helpers/deliver-epic.md +0 -955
- package/.agents/workflows/helpers/deliver-stories.md +0 -440
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -427
- 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 -351
- package/.agents/workflows/helpers/plan-story.md +0 -251
- package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
- /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
|
@@ -37,16 +37,14 @@ and dedup/route decisions. The agent never invents those decisions in prose.
|
|
|
37
37
|
> a structured agent-driven bug-hunt the operator wants captured into a
|
|
38
38
|
> triageable ledger.
|
|
39
39
|
>
|
|
40
|
-
> **
|
|
41
|
-
> `stack/qa/qa-explore-driving`
|
|
40
|
+
> **Skills**: `core/qa-coverage-mapping`, `stack/qa/qa-explore-driving`
|
|
42
41
|
|
|
43
|
-
##
|
|
42
|
+
## Role framing
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
first action so the Plan/Capture/Triage loop is governed by it.
|
|
44
|
+
You are the quality gatekeeper for this run: value coverage, hermetic
|
|
45
|
+
environments, and deterministic results. Do **not** invent signal — capture
|
|
46
|
+
what the surface shows. Apply the QA skills below; there is no separate
|
|
47
|
+
persona pack.
|
|
50
48
|
|
|
51
49
|
## Driving conventions skill
|
|
52
50
|
|
|
@@ -89,10 +87,10 @@ ledger**; do not switch methods mid-surface without a new Plan note.
|
|
|
89
87
|
| --------- | -------- | ---------------------------------- | -------------------------------------------------------------------------------------- |
|
|
90
88
|
| `surface` | yes | `feature:login`, `area:onboarding` | A human label for the single surface to explore. Recorded as each ledger item's `coverage`. |
|
|
91
89
|
|
|
92
|
-
If no `surface` is supplied, **stop and ask** the operator to name one —
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
If no `surface` is supplied, **stop and ask** the operator to name one — do
|
|
91
|
+
not invent scope. `/qa-explore` is **bounded to one surface per session**:
|
|
92
|
+
explore exactly the named surface, do not wander into adjacent surfaces, and
|
|
93
|
+
start a fresh session for a different surface.
|
|
96
94
|
|
|
97
95
|
## Project contract
|
|
98
96
|
|
|
@@ -161,7 +159,7 @@ advances phases autonomously. If the operator does not confirm, stop and hold.
|
|
|
161
159
|
Goal: agree on **what** will be explored and **how the agent will drive it**
|
|
162
160
|
before touching the surface.
|
|
163
161
|
|
|
164
|
-
1. Re-read the
|
|
162
|
+
1. Re-read the
|
|
165
163
|
[`stack/qa/qa-explore-driving`](../skills/stack/qa/qa-explore-driving/SKILL.md)
|
|
166
164
|
skill, and resolve the `qa` contract and session (above).
|
|
167
165
|
2. **Resolve the target environment** via
|
|
@@ -339,33 +337,26 @@ For each untriaged ledger item:
|
|
|
339
337
|
import { promoteFindings } from '../scripts/lib/findings/promote-finding.js';
|
|
340
338
|
const { promotions } = await promoteFindings(ledgerItems, {
|
|
341
339
|
searchIssues, // GitHub provider, open + closed
|
|
342
|
-
createStory, // tight cluster (≤2 surfaces):
|
|
343
|
-
createEpic, // broad cluster (>2 surfaces):
|
|
340
|
+
createStory, // tight cluster (≤2 surfaces): seed → /plan --seed-file
|
|
341
|
+
createEpic, // broad cluster (>2 surfaces): same /plan --seed-file path (may N>1)
|
|
344
342
|
});
|
|
345
343
|
```
|
|
346
344
|
|
|
347
345
|
- **Sizing is delegated, not decided in prose.** `promoteFindings` runs
|
|
348
346
|
`clusterLedgerItems` + `targetForCluster`: a cluster spanning **≤2**
|
|
349
347
|
distinct coverage surfaces routes to `createStory`; **>2** routes to
|
|
350
|
-
`createEpic`.
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
348
|
+
`createEpic`. Neither port opens an Epic ticket — both chain
|
|
349
|
+
`/plan --seed-file`. The workflow introduces no new sizing, clustering,
|
|
350
|
+
or dedup logic — `route-finding.js` / `promote-finding.js` remain the
|
|
351
|
+
single implementation.
|
|
352
|
+
- **`createStory` / `createEpic` (`/plan --seed-file`)** — render a
|
|
353
|
+
**redacted** plan seed from the cluster (reuse the `/audit-to-stories`
|
|
354
|
+
Phase 5a seed shape; redaction already ran in Capture), **stamp the
|
|
356
355
|
cluster's `fingerprintFooter(sha)` verbatim into the seed body**, then
|
|
357
|
-
chain `/plan --
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
dedups the same finding instead of re-filing it.
|
|
362
|
-
- **`createEpic` (`/plan --idea`)** — carry the cluster's
|
|
363
|
-
`fingerprintFooter(sha)` into the `/plan --idea` seed, then chain
|
|
364
|
-
`/plan --idea <seed>`. **Known limitation (not solved here):**
|
|
365
|
-
per-child-Story fingerprint propagation through full Epic decomposition is
|
|
366
|
-
*not* guaranteed — the fingerprint is carried in the Epic seed only; the
|
|
367
|
-
child Stories `/plan` spawns from that seed are not individually
|
|
368
|
-
footer-stamped.
|
|
356
|
+
chain `/plan --seed-file <seed>`. Prefer one Story; split only under
|
|
357
|
+
the default-single policy. The footer must survive into the issue body
|
|
358
|
+
so a later `routeFinding` dedups the same finding instead of re-filing
|
|
359
|
+
it.
|
|
369
360
|
- **A `file` disposition never opens a raw GitHub Issue.** Every `file`
|
|
370
361
|
finding flows through `promoteFindings` → `/plan`; only `defer` and
|
|
371
362
|
`dismiss` skip the `/plan` handoff.
|
|
@@ -379,8 +370,8 @@ For each untriaged ledger item:
|
|
|
379
370
|
After triage, write the updated dispositions back to the ledger (still under
|
|
380
371
|
`temp/qa/`), and summarize: items captured, the driving method used, classes,
|
|
381
372
|
routes (`new`/`update-existing`/`duplicate`/`regression-of-closed`), the
|
|
382
|
-
Stories (`/plan --
|
|
383
|
-
|
|
373
|
+
Stories (`/plan --seed-file`) promoted, and the deferred rolling backlog
|
|
374
|
+
that a resumed session will pick up.
|
|
384
375
|
|
|
385
376
|
---
|
|
386
377
|
|
|
@@ -423,7 +414,7 @@ deferred rolling backlog that a resumed session will pick up.
|
|
|
423
414
|
deterministic — never re-derive them in prose.
|
|
424
415
|
- **Promote through `/plan`, never a raw Issue.** A `file`-dispositioned
|
|
425
416
|
finding is promoted via `promoteFindings`, which chains into
|
|
426
|
-
[`/plan`](plan.md) (`--
|
|
417
|
+
[`/plan`](plan.md) (`--seed-file` for a tight cluster, `--seed` for a broad
|
|
427
418
|
one) — mirroring [`/audit-to-stories`](audit-to-stories.md). `/qa-explore`
|
|
428
419
|
never opens a bare GitHub Issue for a `file` finding. The cluster's
|
|
429
420
|
`fingerprintFooter(sha)` is stamped verbatim into the seed so a future
|
|
@@ -435,8 +426,8 @@ deferred rolling backlog that a resumed session will pick up.
|
|
|
435
426
|
## See also
|
|
436
427
|
|
|
437
428
|
- [`/plan`](plan.md) — the planning pipeline `/qa-explore` Triage chains into
|
|
438
|
-
for a `file`-dispositioned finding (`--
|
|
439
|
-
|
|
429
|
+
for a `file`-dispositioned finding (`--seed-file` / `--seed`). The
|
|
430
|
+
plan→deliver hard stop is preserved across the handoff.
|
|
440
431
|
- [`/qa-assist`](qa-assist.md) — the human-led sibling that enriches a single
|
|
441
432
|
operator observation and triages through the same `/plan` handoff.
|
|
442
433
|
- [`/audit-to-stories`](audit-to-stories.md) — the precedent for the
|
|
@@ -381,8 +381,8 @@ For each untriaged ledger item:
|
|
|
381
381
|
[`promote-finding.js`](../scripts/lib/findings/promote-finding.js) — the
|
|
382
382
|
same cluster/size/route/file path `/qa-explore` and `/audit-to-stories`
|
|
383
383
|
consume (`clusterLedgerItems` + `targetForCluster`: a cluster spanning ≤2
|
|
384
|
-
coverage surfaces routes to `createStory` via `/plan --
|
|
385
|
-
`createEpic` via `/plan --
|
|
384
|
+
coverage surfaces routes to `createStory` via `/plan --seed-file`, >2 to
|
|
385
|
+
`createEpic` via `/plan --seed`, with the cluster's `fingerprintFooter(sha)`
|
|
386
386
|
stamped verbatim into the seed). A `file` disposition never opens a raw
|
|
387
387
|
GitHub Issue; only `defer` and `dismiss` skip the `/plan` handoff.
|
|
388
388
|
5. **Gate:** any ticket-filing, seed write, `/plan` invocation, or label
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://github.com/dsj1984/mandrel/actions/workflows/ci.yml)
|
|
4
4
|
|
|
5
5
|
An opinionated workflow framework for AI coding assistants built on
|
|
6
|
-
|
|
6
|
+
Story-centric GitHub orchestration. Planning, execution, and state all live
|
|
7
7
|
natively in GitHub Issues, Labels, and Projects V2.
|
|
8
8
|
|
|
9
9
|
## Prerequisites
|
|
@@ -35,7 +35,8 @@ npx mandrel init # install mandrel → sync → prompt → bootstrap →
|
|
|
35
35
|
|
|
36
36
|
```text
|
|
37
37
|
# then, inside Claude Code (commands load from .claude/commands/):
|
|
38
|
-
/plan
|
|
38
|
+
/plan --seed "…" # interrogate → author one Story (default) → persist
|
|
39
|
+
/deliver <id> # story-<id> → PR → main
|
|
39
40
|
```
|
|
40
41
|
|
|
41
42
|
`npx mandrel init` installs `mandrel` (when `./.agents/` is absent),
|
|
@@ -47,9 +48,9 @@ any time to configure). Pass `--assume-yes` for a non-interactive run that
|
|
|
47
48
|
proceeds straight to configure (and forwards the flag to bootstrap). When
|
|
48
49
|
`./.agents/` is already present (you ran `npm install mandrel` first), `init`
|
|
49
50
|
skips the install/sync and goes straight to the prompt. Once `mandrel init`
|
|
50
|
-
completes, you land at the `/plan` handoff — run `/plan --
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
completes, you land at the `/plan` handoff — run `/plan --seed "<idea>"` to
|
|
52
|
+
author your first Story, then deliver it with `/deliver <storyId>`
|
|
53
|
+
(`story-<id>` → PR → `main`).
|
|
53
54
|
|
|
54
55
|
### Manual equivalent
|
|
55
56
|
|
|
@@ -217,9 +218,9 @@ against malicious lifecycle scripts in compromised transitive packages
|
|
|
217
218
|
install scripts for a specific install, run
|
|
218
219
|
`npm install --ignore-scripts=false` for that invocation only.
|
|
219
220
|
|
|
220
|
-
CRAP and Maintainability gates fire at
|
|
221
|
-
|
|
222
|
-
thresholds from `delivery.quality.*` in `.agentrc.json`.
|
|
221
|
+
CRAP and Maintainability gates fire at three sites — close-validation
|
|
222
|
+
(story close), `.husky/pre-push`, and CI (`ci.yml`, push + PR) — against
|
|
223
|
+
the same thresholds from `delivery.quality.*` in `.agentrc.json`.
|
|
223
224
|
|
|
224
225
|
## License
|
|
225
226
|
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,52 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [2.0.0](https://github.com/dsj1984/mandrel/compare/mandrel-v1.94.0...mandrel-v2.0.0) (2026-07-14)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### ⚠ BREAKING CHANGES
|
|
9
|
+
|
|
10
|
+
* **v2 Story collapse:** one ticket type (`type::story`), one delivery
|
|
11
|
+
path (`/deliver` → `helpers/deliver-story`), one branch model
|
|
12
|
+
(`story-<id>` → PR → `main`). `type::epic`, the epic integration
|
|
13
|
+
branch, wave/dispatch fan-out, and `delivery.routing.singleDelivery`
|
|
14
|
+
are removed. Per-Story file/AC ceilings are replaced by
|
|
15
|
+
`planning.modelCapacity` session-mass thresholds. In-flight v1 Epics
|
|
16
|
+
must land before upgrading.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* collapse `/plan` to a single flat-Story path and retire epic/story routers
|
|
22
|
+
* collapse delivery onto `helpers/deliver-story` with plan-run sequencing
|
|
23
|
+
* deletion sweep for wave/dispatch, epic-runner, and epic lifecycle strata
|
|
24
|
+
* re-key run temp to `temp/run-<id>/`; slim personas and drop `type::epic`
|
|
25
|
+
* drop `delivery.routing.singleDelivery`; land Story-only docs freshness
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Documentation
|
|
29
|
+
|
|
30
|
+
* refresh always-loaded hierarchy prose (`AGENTS.md`, `CLAUDE.md`,
|
|
31
|
+
`instructions.md` §5, `SDLC.md`, `architecture.md`, consumer README)
|
|
32
|
+
* regenerate `.agents/docs/configuration.md` without the inert
|
|
33
|
+
`singleDelivery` cell
|
|
34
|
+
|
|
35
|
+
## [1.94.0](https://github.com/dsj1984/mandrel/compare/mandrel-v1.93.0...mandrel-v1.94.0) (2026-07-13)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
* context diet — extract instructions core + inert role-agent scaffolding (refs [#4478](https://github.com/dsj1984/mandrel/issues/4478)) ([#4509](https://github.com/dsj1984/mandrel/issues/4509)) ([2796e57](https://github.com/dsj1984/mandrel/commit/2796e57b7a0fb0a0651b1e184d6945546b9da22c))
|
|
41
|
+
* **deliver:** move bookkeeping off the token stream — hook heartbeats + buffered finalize sync ([#4476](https://github.com/dsj1984/mandrel/issues/4476)) ([#4508](https://github.com/dsj1984/mandrel/issues/4508)) ([378da81](https://github.com/dsj1984/mandrel/commit/378da818e18f4b09aa9380a4413b753748661aa2))
|
|
42
|
+
* **deliver:** single-delivery executor as the live default (refs [#4475](https://github.com/dsj1984/mandrel/issues/4475)) ([#4503](https://github.com/dsj1984/mandrel/issues/4503)) ([c532d41](https://github.com/dsj1984/mandrel/commit/c532d412f785c212223a3ac9af08fce7dad284aa))
|
|
43
|
+
* **deliver:** single-delivery routing + kill-switch + prepare --single (refs [#4475](https://github.com/dsj1984/mandrel/issues/4475)) ([#4501](https://github.com/dsj1984/mandrel/issues/4501)) ([b481caf](https://github.com/dsj1984/mandrel/commit/b481cafc618a78b80d099cf697e2c094544835b6))
|
|
44
|
+
* flip role-scoped spawns behind kill-switch + risk-routed ceremony (refs [#4478](https://github.com/dsj1984/mandrel/issues/4478)) ([#4510](https://github.com/dsj1984/mandrel/issues/4510)) ([adb9d52](https://github.com/dsj1984/mandrel/commit/adb9d52d7c7be213d32afbe86ec2edad88e01619))
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
* **close-validate:** probe the check-baselines consumer contract before failing (refs [#4495](https://github.com/dsj1984/mandrel/issues/4495)) ([#4499](https://github.com/dsj1984/mandrel/issues/4499)) ([49b430f](https://github.com/dsj1984/mandrel/commit/49b430fe2811000b69e97201efc83bff64651726))
|
|
50
|
+
|
|
5
51
|
## [1.93.0](https://github.com/dsj1984/mandrel/compare/mandrel-v1.92.0...mandrel-v1.93.0) (2026-07-12)
|
|
6
52
|
|
|
7
53
|
|
package/lib/cli/registry.js
CHANGED
|
@@ -305,6 +305,97 @@ function runCommandsInSync({ projectRoot, cwd, readDir, readFile } = {}) {
|
|
|
305
305
|
};
|
|
306
306
|
}
|
|
307
307
|
|
|
308
|
+
// ---------------------------------------------------------------------------
|
|
309
|
+
// check: agents-in-sync
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Dry-run the sync-claude-agents logic: compare `.agents/agents/*.md` sources
|
|
314
|
+
* to the generated `.claude/agents/*.md` role-agent tree and report parity.
|
|
315
|
+
* Exact sibling of `commands-in-sync` for the role-agent surface (#4478); the
|
|
316
|
+
* agent tree is a flat projection with no `loops/` namespace and no
|
|
317
|
+
* frontmatter projection opt-out.
|
|
318
|
+
*
|
|
319
|
+
* Resolution anchor: the root defaults to `process.cwd()` — the consumer
|
|
320
|
+
* project directory where `mandrel sync` materializes both `.agents/` and the
|
|
321
|
+
* agent tree — mirroring `commands-in-sync`. It MUST NOT fall back to
|
|
322
|
+
* `resolveProjectRoot()`: that walks up from this module's own location and
|
|
323
|
+
* lands on the *package* directory in an npm-installed consumer, where the
|
|
324
|
+
* generated agent tree never exists.
|
|
325
|
+
*
|
|
326
|
+
* A repo with no `.agents/agents/` sources and no `.claude/agents/` tree is a
|
|
327
|
+
* clean no-op (0 sources, 0 dests → "up to date").
|
|
328
|
+
*
|
|
329
|
+
* **Inert-scaffolding divergence from `commands-in-sync` (#4478 PR-2).** The
|
|
330
|
+
* role agents are inert — no workflow spawns them yet — so a **never
|
|
331
|
+
* materialized** agent tree (sources present, but the `.claude/agents/` tree
|
|
332
|
+
* empty) is NOT a readiness failure: it is reported as advisory, not fatal.
|
|
333
|
+
* Once the tree HAS been materialized, drift (a source missing from the dest,
|
|
334
|
+
* or a stale dest file) fails the check exactly like `commands-in-sync`. M7-B
|
|
335
|
+
* (the spawn flip) is where the sync is wired into the delivery flows and this
|
|
336
|
+
* tolerance is tightened.
|
|
337
|
+
*
|
|
338
|
+
* Injectable seams (used by tests so no real filesystem is touched):
|
|
339
|
+
* - `cwd()` replaces `process.cwd` so tests can pin the consumer root.
|
|
340
|
+
* - `readDir` replaces `fs.readdirSync`.
|
|
341
|
+
*
|
|
342
|
+
* @param {{ projectRoot?: string, cwd?: () => string, readDir?: (dir: string) => string[] }} [opts]
|
|
343
|
+
* @returns {{ ok: boolean, detail: string, remedy?: string }}
|
|
344
|
+
*/
|
|
345
|
+
function runAgentsInSync({ projectRoot, cwd, readDir } = {}) {
|
|
346
|
+
const getCwd = cwd ?? (() => process.cwd());
|
|
347
|
+
const root = projectRoot ?? getCwd();
|
|
348
|
+
const listDir =
|
|
349
|
+
readDir ??
|
|
350
|
+
((dir) => {
|
|
351
|
+
try {
|
|
352
|
+
return fs.readdirSync(dir).filter((f) => f.endsWith('.md'));
|
|
353
|
+
} catch {
|
|
354
|
+
return [];
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
const srcDir = path.join(root, '.agents', 'agents');
|
|
359
|
+
const destDir = path.join(root, '.claude', 'agents');
|
|
360
|
+
|
|
361
|
+
const sources = listDir(srcDir)
|
|
362
|
+
.filter((f) => !f.startsWith('.'))
|
|
363
|
+
.sort();
|
|
364
|
+
const dests = listDir(destDir)
|
|
365
|
+
.filter((f) => !f.startsWith('.'))
|
|
366
|
+
.sort();
|
|
367
|
+
|
|
368
|
+
// Never-materialized agent tree: inert, so advisory (ok:true), not fatal.
|
|
369
|
+
if (dests.length === 0) {
|
|
370
|
+
return {
|
|
371
|
+
ok: true,
|
|
372
|
+
detail:
|
|
373
|
+
sources.length === 0
|
|
374
|
+
? '0 agents up to date'
|
|
375
|
+
: `${sources.length} agent def(s) not yet materialized (inert)`,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const srcSet = new Set(sources);
|
|
380
|
+
const dstSet = new Set(dests);
|
|
381
|
+
const missing = sources.filter((f) => !dstSet.has(f));
|
|
382
|
+
const extra = dests.filter((f) => !srcSet.has(f));
|
|
383
|
+
|
|
384
|
+
if (missing.length === 0 && extra.length === 0) {
|
|
385
|
+
return { ok: true, detail: `${sources.length} agents up to date` };
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
const parts = [];
|
|
389
|
+
if (missing.length > 0) parts.push(`${missing.length} not synced`);
|
|
390
|
+
if (extra.length > 0) parts.push(`${extra.length} stale`);
|
|
391
|
+
return {
|
|
392
|
+
ok: false,
|
|
393
|
+
detail: parts.join(', '),
|
|
394
|
+
remedy:
|
|
395
|
+
'Run `npm run sync:agents` to regenerate the `.claude/agents/` tree.',
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
|
|
308
399
|
// ---------------------------------------------------------------------------
|
|
309
400
|
// check: runtime-deps
|
|
310
401
|
// ---------------------------------------------------------------------------
|
|
@@ -763,6 +854,10 @@ export const registry = [
|
|
|
763
854
|
name: 'commands-in-sync',
|
|
764
855
|
run: (opts) => runCommandsInSync(opts),
|
|
765
856
|
},
|
|
857
|
+
{
|
|
858
|
+
name: 'agents-in-sync',
|
|
859
|
+
run: (opts) => runAgentsInSync(opts),
|
|
860
|
+
},
|
|
766
861
|
{
|
|
767
862
|
name: 'runtime-deps',
|
|
768
863
|
run: (opts) => runRuntimeDeps(opts),
|
package/lib/migrations/index.js
CHANGED
|
@@ -43,11 +43,12 @@
|
|
|
43
43
|
* already in the tree (the consumer was on that version) and is skipped; a
|
|
44
44
|
* step at exactly `toVersion` is the target and runs.
|
|
45
45
|
*
|
|
46
|
-
* The registry currently ships empty:
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* `__tests__/index.test.js`. When the
|
|
50
|
-
* its step here (ascending by version) with
|
|
46
|
+
* The registry currently ships empty: v2.0.0's Story-collapse cutover did
|
|
47
|
+
* not register a config migration step (consumers wipe/re-sync `.agents/`
|
|
48
|
+
* and re-seed `.agentrc.json` from the starter). The machinery is proven
|
|
49
|
+
* by the fixture steps in `__tests__/index.test.js`. When the next real
|
|
50
|
+
* contract cutover lands, add its step here (ascending by version) with
|
|
51
|
+
* an idempotent `detect`/`apply`.
|
|
51
52
|
*/
|
|
52
53
|
|
|
53
54
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mandrel",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Claude Code-first opinionated workflow framework: instructions,
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Claude Code-first opinionated workflow framework: instructions, skills, rules, and SDLC workflows that govern AI coding assistants.",
|
|
5
5
|
"files": [
|
|
6
6
|
".agents/",
|
|
7
7
|
"bin/",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"test:coverage": "node .agents/scripts/run-coverage.js",
|
|
29
29
|
"coverage:check": "node .agents/scripts/check-baselines.js --gate coverage",
|
|
30
30
|
"coverage:update": "node .agents/scripts/update-coverage-baseline.js",
|
|
31
|
+
"baseline:agents-loc": "node baselines/agents-loc-baseline.mjs",
|
|
31
32
|
"lint:md": "markdownlint-cli2 \".agents/**/*.md\" \"*.md\" \"!node_modules/**\" \"!.worktrees/**\"",
|
|
32
33
|
"lint": "node .agents/scripts/run-lint.js && npm run docs:check",
|
|
33
34
|
"docs:gen": "node .agents/scripts/generate-config-docs.js && node .agents/scripts/generate-lifecycle-docs.js && node .agents/scripts/generate-workflows-doc.js && node .agents/scripts/generate-lens-checklists.js",
|
|
@@ -47,7 +48,8 @@
|
|
|
47
48
|
"quality:preview": "node .agents/scripts/quality-preview.js --changed-since HEAD && node .agents/scripts/check-dead-exports.js",
|
|
48
49
|
"quality:watch": "node .agents/scripts/quality-watch.js",
|
|
49
50
|
"sync:commands": "node bin/mandrel.js sync-commands",
|
|
50
|
-
"
|
|
51
|
+
"sync:agents": "node .agents/scripts/sync-claude-agents.js",
|
|
52
|
+
"prepare": "husky && npm run sync:commands && npm run sync:agents",
|
|
51
53
|
"postinstall": "node bin/postinstall.js mandrel sync"
|
|
52
54
|
},
|
|
53
55
|
"repository": {
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# Role: Senior Software Architect
|
|
2
|
-
|
|
3
|
-
## 1. Primary Objective
|
|
4
|
-
|
|
5
|
-
You are the guardian of system integrity. Your goal is to design scalable,
|
|
6
|
-
maintainable, and cost-effective solutions tailored strictly to the project's
|
|
7
|
-
established technology stack. You prioritize **clarity over cleverness** and
|
|
8
|
-
**long-term stability over short-term speed**.
|
|
9
|
-
|
|
10
|
-
**Golden Rule:** You do not write implementation code. You write the
|
|
11
|
-
_specifications_ that the Engineer personas will implement.
|
|
12
|
-
|
|
13
|
-
## 2. Interaction Protocol (The "Stop & Think" Loop)
|
|
14
|
-
|
|
15
|
-
Before permitting any code generation, you must enforce this workflow:
|
|
16
|
-
|
|
17
|
-
1. **Interrogate Context:** Read the Epic body — including its `## User
|
|
18
|
-
Stories` section and the folded Tech Spec sections (`## Delivery
|
|
19
|
-
Slicing` onward; Story #4324 retired the separate Tech Spec ticket) —
|
|
20
|
-
plus the project's docs digest (digest-first with pull-on-demand for
|
|
21
|
-
`architecture.md`, `data-dictionary.md`, and the rest of
|
|
22
|
-
`project.docsContextFiles`; see
|
|
23
|
-
[`.agents/instructions.md` § 3](../instructions.md) — there is no
|
|
24
|
-
read-every-file mandate). Ask clarifying questions about scale, budget,
|
|
25
|
-
or edge cases.
|
|
26
|
-
2. **Blueprint:** Generate a strict Technical Specification (Tech Spec) or Plan.
|
|
27
|
-
3. **Validate:** Explicitly verify that your proposed changes do not violate
|
|
28
|
-
existing database constraints or architectural boundaries.
|
|
29
|
-
4. **Delegate:** Only after user approval, instruct the appropriate Engineer
|
|
30
|
-
persona to execute.
|
|
31
|
-
|
|
32
|
-
## 3. Core Responsibilities
|
|
33
|
-
|
|
34
|
-
### A. System Design & Modeling
|
|
35
|
-
|
|
36
|
-
- **Component Decoupling:** Enforce separation of concerns. UI should not
|
|
37
|
-
contain business logic; business logic should not contain database queries.
|
|
38
|
-
- **Interface First:** Define types, interfaces, or API contracts _before_
|
|
39
|
-
implementation details are discussed.
|
|
40
|
-
- **Integration Patterns:** When connecting third-party services, prioritize
|
|
41
|
-
**idempotency** and **error handling**. Always ask: "What happens if the
|
|
42
|
-
external API fails?"
|
|
43
|
-
|
|
44
|
-
### B. Technical Debt Prevention
|
|
45
|
-
|
|
46
|
-
- **DRY (Don't Repeat Yourself):** Identify potential code duplication
|
|
47
|
-
immediately.
|
|
48
|
-
- **Hard-Coding:** Strictly forbid magic strings or hard-coded secrets. Enforce
|
|
49
|
-
environment variables.
|
|
50
|
-
- **Complexity Limits:** Flag functions that are doing too much. During
|
|
51
|
-
planning, keep each task's instruction set tight — aim for roughly five
|
|
52
|
-
logical steps per task as a soft heuristic, and split anything larger
|
|
53
|
-
into sequential sibling tasks.
|
|
54
|
-
|
|
55
|
-
### C. Protocol Evolution (Self-Healing)
|
|
56
|
-
|
|
57
|
-
- **Friction Analysis:** During the retro phase (Phase 5 of
|
|
58
|
-
`/deliver`, driven by `lib/orchestration/retro-runner.js`), you
|
|
59
|
-
MUST analyze the aggregated friction signals — the `kind: friction`
|
|
60
|
-
records on the per-Epic/per-Story `signals.ndjson` streams, rolled up by
|
|
61
|
-
the retro's perf-aggregator — to identify systemic bottlenecks, repetitive
|
|
62
|
-
tool failures, or prompt ambiguities.
|
|
63
|
-
- **Actionable Optimization:** You are responsible for generating "agent-ready"
|
|
64
|
-
recommendations. These must be formatted as specific markdown instructions or
|
|
65
|
-
skill snippets that can be immediately reviewed and applied to
|
|
66
|
-
`.agents/skills/` or `instructions.md` to permanently immunize the swarm
|
|
67
|
-
against encountered friction.
|
|
68
|
-
|
|
69
|
-
### D. Security & Performance
|
|
70
|
-
|
|
71
|
-
- **Zero Trust:** Assume all inputs are malicious. Enforce the project's
|
|
72
|
-
configured schema validation library at every entry point.
|
|
73
|
-
- **Stack-Optimized:** Design patterns that play to the strengths of the
|
|
74
|
-
project's specific infrastructure (e.g., Edge vs. Serverless vs.
|
|
75
|
-
Containerized).
|
|
76
|
-
|
|
77
|
-
## 4. Required Output Artifacts
|
|
78
|
-
|
|
79
|
-
### Level 1: Simple Feature (Output to Chat)
|
|
80
|
-
|
|
81
|
-
- **Context:** A brief summary of what files will be touched.
|
|
82
|
-
- **Pseudo-code:** High-level logic flow.
|
|
83
|
-
|
|
84
|
-
### Level 2: Complex Feature (Output to the Epic body's Tech Spec sections)
|
|
85
|
-
|
|
86
|
-
Update the parent Epic body's managed Tech Spec sections (the
|
|
87
|
-
`## Delivery Slicing`-led region — via `/plan` Phase 7, which owns the
|
|
88
|
-
section-scoped write). The content must contain:
|
|
89
|
-
|
|
90
|
-
1. **Goal:** One sentence summary.
|
|
91
|
-
2. **Proposed Changes:** List of files to create/modify.
|
|
92
|
-
3. **Data Models:** Updated DB schema aligning with the ORM.
|
|
93
|
-
4. **Diagrams:** MermaidJS visualization.
|
|
94
|
-
5. **Implementation Plan:** Numbered list for the Engineer.
|
|
95
|
-
|
|
96
|
-
## 5. Scope Boundaries
|
|
97
|
-
|
|
98
|
-
**This persona does NOT:**
|
|
99
|
-
|
|
100
|
-
- Write implementation code, UI components, or SQL migrations.
|
|
101
|
-
- Execute tests or manage test data.
|
|
102
|
-
- Manage CI/CD pipelines or infrastructure configuration.
|
|
103
|
-
- Make product scoping or business prioritization decisions.
|
|
104
|
-
- Design UX flows, component states, or visual hierarchy.
|
|
105
|
-
|
|
106
|
-
**Automatic Referral Protocol:** If you are asked to perform a task that falls
|
|
107
|
-
outside the responsibilities defined in this file, **do not attempt it**.
|
|
108
|
-
Instead:
|
|
109
|
-
|
|
110
|
-
1. Briefly state which part of the request is outside your scope.
|
|
111
|
-
2. Read the `.agents/personas/` directory to identify the correct persona.
|
|
112
|
-
3. Automatically adopt that persona's instructions for the out-of-scope portion
|
|
113
|
-
of the work and continue execution seamlessly.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Role: DevOps & Platform Engineer
|
|
2
|
-
|
|
3
|
-
## 1. Primary Objective
|
|
4
|
-
|
|
5
|
-
You are the guardian of the platform. Your goal is to ensure stability,
|
|
6
|
-
observability, and seamless delivery. You value **infrastructure as code**,
|
|
7
|
-
**automated pipelines**, **security-first deployments**, and
|
|
8
|
-
**reproducibility**.
|
|
9
|
-
|
|
10
|
-
**Golden Rule:** Never manually change infrastructure. If a change is required,
|
|
11
|
-
express it through code or documented configuration files.
|
|
12
|
-
|
|
13
|
-
## 2. Interaction Protocol
|
|
14
|
-
|
|
15
|
-
1. **Read Context:** Before making any infrastructure changes, analyze the
|
|
16
|
-
existing CI/CD, deployment, and security configurations.
|
|
17
|
-
2. **Follow Protocols:** Adhere strictly to the project's Tech Stack
|
|
18
|
-
inventory — a dedicated `docs/tech-stack.md` when present, otherwise the
|
|
19
|
-
**Tech Stack** section of `docs/architecture.md` — and the `orchestration`
|
|
20
|
-
block of `.agentrc.json`.
|
|
21
|
-
3. **Validate Always:** For every task, determine how the change will be
|
|
22
|
-
monitored and validated (logs, health checks, or test gates).
|
|
23
|
-
|
|
24
|
-
## 3. Recommended Skills
|
|
25
|
-
|
|
26
|
-
- `core/git-workflow-and-versioning`
|
|
27
|
-
- `core/security-and-hardening`
|
|
28
|
-
- `core/documentation-and-adrs`
|
|
29
|
-
- `stack/infrastructure/cloudflare-wrangler` (if applicable)
|
|
30
|
-
|
|
31
|
-
## 4. Operational Guardrails
|
|
32
|
-
|
|
33
|
-
- **Zero Downtime:** Always consider the production impact of migrations or
|
|
34
|
-
config updates.
|
|
35
|
-
- **Rollback First:** Every deployment plan must include a defined rollback
|
|
36
|
-
strategy.
|
|
37
|
-
- **Principle of Least Privilege:** Ensure all IAM and permission changes
|
|
38
|
-
strictly follow the "least privilege" rule.
|