mandrel 1.58.0 → 1.60.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 +100 -98
- package/.agents/docs/SDLC.md +140 -141
- package/.agents/docs/configuration.md +16 -16
- package/.agents/docs/workflows.md +7 -8
- package/.agents/instructions.md +12 -11
- package/.agents/personas/architect.md +1 -1
- package/.agents/personas/product.md +1 -1
- package/.agents/personas/project-manager.md +14 -14
- package/.agents/personas/technical-writer.md +1 -1
- package/.agents/rules/changelog-style.md +5 -5
- package/.agents/rules/git-conventions.md +3 -3
- package/.agents/schemas/agentrc.schema.json +3 -3
- package/.agents/schemas/audit-rules.json +20 -0
- package/.agents/schemas/dispatch-manifest.json +4 -4
- package/.agents/schemas/epic-spec.schema.json +15 -45
- package/.agents/schemas/lifecycle/README.md +1 -1
- package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +1 -1
- package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +1 -1
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +1 -1
- package/.agents/schemas/validation-evidence.schema.json +1 -1
- package/.agents/scripts/README.md +1 -1
- package/.agents/scripts/acceptance-eval.js +21 -4
- package/.agents/scripts/acceptance-spec-reconciler.js +2 -2
- package/.agents/scripts/analyze-execution.js +2 -2
- package/.agents/scripts/assert-branch.js +1 -3
- package/.agents/scripts/audit-to-stories.js +1 -1
- package/.agents/scripts/bootstrap.js +1 -1
- package/.agents/scripts/check-arch-cycles.js +360 -0
- package/.agents/scripts/check-doc-links.js +2 -3
- package/.agents/scripts/coverage-capture.js +24 -3
- package/.agents/scripts/diagnose-friction.js +1 -1
- package/.agents/scripts/dispatcher.js +2 -2
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/epic-audit-prepare.js +3 -3
- package/.agents/scripts/epic-deliver-note-intervention.js +2 -2
- package/.agents/scripts/epic-deliver-preflight.js +11 -9
- package/.agents/scripts/epic-deliver-prepare.js +13 -5
- package/.agents/scripts/epic-execute-record-wave.js +5 -5
- package/.agents/scripts/epic-plan-healthcheck.js +6 -10
- package/.agents/scripts/epic-plan-spec-validate.js +1 -1
- package/.agents/scripts/epic-reconcile.js +11 -29
- package/.agents/scripts/evidence-gate.js +2 -2
- package/.agents/scripts/generate-workflows-doc.js +1 -1
- package/.agents/scripts/git-rebase-and-resolve.js +1 -1
- package/.agents/scripts/hierarchy-gate.js +40 -24
- package/.agents/scripts/lib/ITicketingProvider.js +1 -1
- package/.agents/scripts/lib/audit-suite/selector.js +1 -1
- package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +2 -2
- package/.agents/scripts/lib/baseline-snapshot.js +7 -7
- package/.agents/scripts/lib/baselines/kinds/coverage.js +33 -149
- package/.agents/scripts/lib/baselines/kinds/duplication.js +27 -116
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +192 -0
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +34 -133
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +31 -124
- package/.agents/scripts/lib/baselines/kinds/mutation.js +25 -111
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +59 -0
- package/.agents/scripts/lib/baselines/maintainability-baseline-save.js +37 -0
- package/.agents/scripts/lib/baselines/writer.js +1 -1
- package/.agents/scripts/lib/bdd-runner-detect.js +1 -1
- package/.agents/scripts/lib/bdd-scenario-scanner.js +3 -3
- package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +1 -1
- package/.agents/scripts/lib/bootstrap/branch-protection.js +1 -1
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +1 -1
- package/.agents/scripts/lib/bootstrap/commit-push.js +2 -2
- package/.agents/scripts/lib/close-validation/commands.js +188 -0
- package/.agents/scripts/lib/close-validation/gates.js +235 -0
- package/.agents/scripts/lib/close-validation/process.js +101 -0
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +1 -1
- package/.agents/scripts/lib/close-validation/runner.js +325 -0
- package/.agents/scripts/lib/close-validation/telemetry.js +70 -0
- package/.agents/scripts/lib/codebase-snapshot.js +1 -1
- package/.agents/scripts/lib/config/explain.js +1 -1
- package/.agents/scripts/lib/config/quality.js +6 -6
- package/.agents/scripts/lib/config/runners.js +2 -2
- package/.agents/scripts/lib/config/runtime.js +1 -1
- package/.agents/scripts/lib/config/temp-paths.js +2 -2
- package/.agents/scripts/lib/config-resolver.js +2 -5
- package/.agents/scripts/lib/config-settings-schema-delivery.js +2 -2
- package/.agents/scripts/lib/config-settings-schema-quality.js +1 -1
- package/.agents/scripts/lib/config-settings-schema.js +3 -3
- package/.agents/scripts/lib/coverage-capture.js +147 -4
- package/.agents/scripts/lib/cpu-pool.js +14 -0
- package/.agents/scripts/lib/crap-utils.js +6 -11
- package/.agents/scripts/lib/duplicate-search.js +1 -1
- package/.agents/scripts/lib/dynamic-workflow/capability.js +1 -1
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +87 -0
- package/.agents/scripts/lib/epic-plan-clarity.js +1 -1
- package/.agents/scripts/lib/epic-plan-ideation.js +1 -1
- package/.agents/scripts/lib/feedback-loop/memory-freshness.js +1 -1
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +1 -1
- package/.agents/scripts/lib/findings/classify-finding.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +10 -10
- package/.agents/scripts/lib/git-utils.js +24 -22
- package/.agents/scripts/lib/label-constants.js +3 -4
- package/.agents/scripts/lib/label-taxonomy.js +3 -8
- package/.agents/scripts/lib/maintainability-engine.js +1 -1
- package/.agents/scripts/lib/maintainability-utils.js +4 -187
- package/.agents/scripts/lib/observability/perf-report-readers.js +32 -23
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +81 -7
- package/.agents/scripts/lib/orchestration/code-review.js +95 -82
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +8 -9
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +3 -3
- package/.agents/scripts/lib/orchestration/detectors-phase.js +2 -2
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +30 -38
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +14 -37
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +22 -22
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +7 -21
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +3 -3
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +2 -2
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +206 -58
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +27 -3
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +28 -8
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +3 -3
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +4 -4
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +3 -3
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +13 -41
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +7 -7
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +2 -3
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +2 -8
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +4 -4
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +103 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +22 -64
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +38 -76
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +4 -4
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +10 -10
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +8 -20
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +7 -15
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +72 -41
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +2 -4
- package/.agents/scripts/lib/orchestration/file-assumptions.js +6 -5
- package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +1 -1
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +2 -2
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +1 -1
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +144 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +3 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +8 -8
- package/.agents/scripts/lib/orchestration/manifest-builder.js +5 -5
- package/.agents/scripts/lib/orchestration/parked-follow-ons.js +2 -2
- package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +5 -5
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +3 -3
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +3 -3
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +7 -7
- package/.agents/scripts/lib/orchestration/preflight-cache.js +36 -13
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +1 -1
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +1 -1
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +2 -2
- package/.agents/scripts/lib/orchestration/retro-runner.js +3 -3
- package/.agents/scripts/lib/orchestration/review-depth.js +1 -1
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +5 -60
- package/.agents/scripts/lib/orchestration/review-providers/native.js +7 -6
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +105 -0
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +7 -59
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +2 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +2 -4
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +32 -35
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +1 -2
- package/.agents/scripts/lib/orchestration/spec-freshness.js +1 -1
- package/.agents/scripts/lib/orchestration/spec-renderer.js +36 -73
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +1 -1
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +451 -503
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +8 -2
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +47 -2
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +2 -2
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +1 -1
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +358 -54
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +1 -1
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +3 -2
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +32 -5
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +5 -18
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +3 -3
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +33 -16
- package/.agents/scripts/lib/orchestration/story-reachability.js +47 -0
- package/.agents/scripts/lib/orchestration/task-body-validator.js +6 -6
- package/.agents/scripts/lib/orchestration/ticket-lease.js +1 -1
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +4 -35
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +1 -10
- package/.agents/scripts/lib/orchestration/ticket-validator.js +25 -70
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +44 -73
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +16 -7
- package/.agents/scripts/lib/orchestration/ticketing/state.js +53 -439
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +471 -0
- package/.agents/scripts/lib/orchestration/ticketing.js +0 -1
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +3 -3
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +2 -8
- package/.agents/scripts/lib/plan-phase-cleanup.js +1 -1
- package/.agents/scripts/lib/preflight-runner.js +1 -1
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +4 -5
- package/.agents/scripts/lib/presentation/manifest-builder.js +28 -34
- package/.agents/scripts/lib/presentation/manifest-formatter.js +3 -4
- package/.agents/scripts/lib/presentation/manifest-helpers.js +1 -1
- package/.agents/scripts/lib/presentation/manifest-procedures.js +4 -4
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +4 -23
- package/.agents/scripts/lib/presentation/manifest-renderer.js +1 -1
- package/.agents/scripts/lib/presentation/manifest-story-views.js +2 -11
- package/.agents/scripts/lib/project-root.js +17 -0
- package/.agents/scripts/lib/signals/schema.js +1 -1
- package/.agents/scripts/lib/spec/index.js +1 -1
- package/.agents/scripts/lib/spec/loader.js +2 -2
- package/.agents/scripts/lib/spec/state.js +7 -16
- package/.agents/scripts/lib/story-adjacency.js +76 -0
- package/.agents/scripts/lib/story-init/context-resolver.js +3 -3
- package/.agents/scripts/lib/story-init/state-transitioner.js +2 -2
- package/.agents/scripts/lib/story-init/task-graph-builder.js +7 -7
- package/.agents/scripts/lib/story-lifecycle.js +9 -9
- package/.agents/scripts/lib/story-plan.js +1 -1
- package/.agents/scripts/lib/templates/decomposer-prompts.js +59 -52
- package/.agents/scripts/lib/transpile.js +93 -0
- package/.agents/scripts/lib/wave-runner/tick.js +4 -153
- package/.agents/scripts/lib/workers/crap-worker.js +1 -1
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/creation.js +20 -2
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +90 -0
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +26 -8
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +74 -0
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +1 -1
- package/.agents/scripts/lifecycle-emit.js +1 -1
- package/.agents/scripts/providers/github/board-add.js +1 -1
- package/.agents/scripts/providers/github/errors.js +1 -1
- package/.agents/scripts/providers/github/mappers.js +2 -2
- package/.agents/scripts/providers/github/tickets.js +114 -10
- package/.agents/scripts/resync-status-column.js +1 -1
- package/.agents/scripts/retro-run.js +2 -2
- package/.agents/scripts/run-lint.js +10 -1
- package/.agents/scripts/run-tests.js +24 -4
- package/.agents/scripts/single-story-init.js +1 -1
- package/.agents/scripts/stories-wave-tick.js +13 -10
- package/.agents/scripts/story-close.js +1 -1
- package/.agents/scripts/story-init.js +162 -26
- package/.agents/scripts/story-phase.js +5 -5
- package/.agents/scripts/story-plan.js +3 -3
- package/.agents/scripts/sync-branch-from-base.js +2 -2
- package/.agents/scripts/validate-docs-freshness.js +1 -1
- package/.agents/scripts/wave-tick.js +1 -1
- package/.agents/skills/core/analyze-execution/SKILL.md +2 -2
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +21 -26
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +23 -56
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +4 -4
- package/.agents/skills/core/hydrate-context/SKILL.md +2 -2
- package/.agents/skills/core/idea-refinement/SKILL.md +4 -4
- package/.agents/skills/core/knowledge-transfer/SKILL.md +2 -2
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +1 -1
- package/.agents/skills/core/scope-triage/SKILL.md +9 -10
- package/.agents/skills/core/using-agent-skills/SKILL.md +1 -1
- package/.agents/skills/skills.index.json +7 -7
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +1 -1
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/workflows/agents-update.md +2 -2
- package/.agents/workflows/audit-architecture.md +2 -2
- package/.agents/workflows/audit-clean-code.md +2 -2
- package/.agents/workflows/audit-dependencies.md +1 -1
- package/.agents/workflows/audit-devops.md +1 -1
- package/.agents/workflows/audit-documentation.md +226 -0
- package/.agents/workflows/audit-lighthouse.md +1 -1
- package/.agents/workflows/audit-performance.md +2 -2
- package/.agents/workflows/audit-privacy.md +1 -1
- package/.agents/workflows/audit-quality.md +2 -2
- package/.agents/workflows/audit-security.md +2 -2
- package/.agents/workflows/audit-seo.md +1 -1
- package/.agents/workflows/audit-sre.md +1 -1
- package/.agents/workflows/audit-to-stories.md +10 -10
- package/.agents/workflows/audit-ux-ui.md +1 -1
- package/.agents/workflows/deliver.md +85 -0
- package/.agents/workflows/explain.md +3 -3
- package/.agents/workflows/git-merge-pr.md +1 -1
- package/.agents/workflows/git-pr-all.md +13 -10
- package/.agents/workflows/git-push.md +6 -3
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +1 -1
- package/.agents/workflows/helpers/code-review.md +5 -5
- package/.agents/workflows/{epic-deliver.md → helpers/deliver-epic.md} +59 -66
- package/.agents/workflows/{story-deliver.md → helpers/deliver-stories.md} +25 -25
- package/.agents/workflows/helpers/diagnose.md +1 -1
- package/.agents/workflows/helpers/epic-audit.md +6 -6
- package/.agents/workflows/helpers/epic-deliver-story.md +28 -39
- package/.agents/workflows/helpers/epic-plan-decompose.md +23 -23
- package/.agents/workflows/helpers/epic-plan-spec.md +6 -6
- package/.agents/workflows/helpers/epic-testing.md +3 -3
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/{epic-plan.md → helpers/plan-epic.md} +84 -84
- package/.agents/workflows/{story-plan.md → helpers/plan-story.md} +43 -43
- package/.agents/workflows/helpers/signals.md +1 -1
- package/.agents/workflows/helpers/single-story-deliver.md +12 -11
- package/.agents/workflows/helpers/worktree-lifecycle.md +18 -18
- package/.agents/workflows/onboard.md +21 -20
- package/.agents/workflows/plan.md +89 -0
- package/.agents/workflows/qa-explore.md +1 -1
- package/.agents/workflows/qa-run-harness.md +1 -1
- package/README.md +17 -20
- package/docs/CHANGELOG.md +1149 -0
- package/lib/cli/__tests__/update-changelog-surface.test.js +357 -0
- package/lib/cli/__tests__/update-reexec.test.js +513 -0
- package/lib/cli/init.js +338 -0
- package/lib/cli/update.js +413 -52
- package/package.json +3 -1
- package/.agents/scripts/lib/auto-refresh-baselines.js +0 -308
- package/.agents/scripts/lib/close-validation.js +0 -897
- package/.agents/scripts/lib/orchestration/cascade-grouping.js +0 -275
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter.js +0 -69
- package/.agents/scripts/lib/orchestration/reconciler.js +0 -137
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-scoped.js +0 -221
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-shared.js +0 -123
- package/.agents/scripts/lib/task-utils.js +0 -26
- package/.agents/scripts/story-deliver-prepare.js +0 -267
package/.agents/README.md
CHANGED
|
@@ -1,58 +1,62 @@
|
|
|
1
|
-
# Mandrel
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
orchestration engine that runs Epic → Feature → Story plans on
|
|
9
|
-
GitHub. The framework version is the version of the installed
|
|
10
|
-
[`mandrel`](https://www.npmjs.com/package/mandrel) npm
|
|
11
|
-
package — run `npm ls mandrel` (or read `package.json`), not a
|
|
12
|
-
count here.
|
|
1
|
+
# Mandrel Framework
|
|
2
|
+
|
|
3
|
+
An opinionated workflow framework for AI coding assistants built on
|
|
4
|
+
Epic-centric GitHub orchestration. Planning, execution, and state all live natively in GitHub Issues, Labels, and Projects V2.
|
|
5
|
+
|
|
6
|
+
This is the consumer README inside the distributed `.agents/` bundle. It explains what each part of the bundle is for and captures the cross-directory authoring conventions. The process narrative for
|
|
7
|
+
`/plan` and `/deliver` stays in [`docs/SDLC.md`](docs/SDLC.md).
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
> Story bodies. See [`docs/SDLC.md` § Ticket hierarchy](docs/SDLC.md) for the
|
|
17
|
-
> diagram and execution-model implications.
|
|
9
|
+
The framework payload (`.agents/`) is consumed by host repos. It ships inside the [`mandrel`](https://www.npmjs.com/package/mandrel)
|
|
10
|
+
npm package and is materialized into a consumer's `./.agents/` directory by `mandrel sync`. It carries a system prompt, a baseline rule pack, a two-tier skill library, a slash-command workflow set, and the orchestration engine that runs Epic → Story plans on GitHub.
|
|
18
11
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
cross-directory authoring conventions. The process narrative for
|
|
22
|
-
`/epic-plan` and `/epic-deliver` stays in [`docs/SDLC.md`](docs/SDLC.md).
|
|
12
|
+
The framework version is the version of the installed [`mandrel`](https://www.npmjs.com/package/mandrel) npm package — run `npm ls mandrel` (or read `package.json`), not a
|
|
13
|
+
count here.
|
|
23
14
|
|
|
24
15
|
---
|
|
25
16
|
|
|
26
17
|
## Activation
|
|
27
18
|
|
|
28
|
-
###
|
|
19
|
+
### All-in-one Install
|
|
29
20
|
|
|
30
|
-
|
|
31
|
-
root of your project (the folder does **not** need to be a git repo yet):
|
|
21
|
+
From an **empty or existing** local directory, run:
|
|
32
22
|
|
|
33
23
|
```bash
|
|
34
|
-
npx
|
|
24
|
+
npx mandrel init # install (if absent) → prompt: configure now, or just the files
|
|
35
25
|
```
|
|
36
26
|
|
|
37
|
-
`
|
|
38
|
-
`mandrel
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
`mandrel init` first **installs the framework if `./.agents/` is absent** —
|
|
28
|
+
`npm install mandrel --ignore-scripts` followed by an explicit `mandrel sync`,
|
|
29
|
+
so the materialization is a single deterministic step rather than a
|
|
30
|
+
postinstall-then-init double sync. When `./.agents/` already exists from a prior install, it skips straight to the prompt — the one subcommand is idempotent across both entry points.
|
|
31
|
+
|
|
32
|
+
It then shows a **two-option prompt**:
|
|
33
|
+
|
|
34
|
+
1. **Configure now** — runs `node .agents/scripts/bootstrap.js`, forwarding any
|
|
35
|
+
passthrough flags unchanged, to wire the project and GitHub side (creates the
|
|
36
|
+
GitHub repo + Projects board).
|
|
37
|
+
2. **Just the files** — stops after materialization and prints a re-run hint
|
|
38
|
+
(`mandrel init`) so you can configure later.
|
|
43
39
|
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
`--assume-yes` skips the prompt and configures non-interactively (the flag is
|
|
41
|
+
also forwarded to `bootstrap.js`); a non-TTY run without `--assume-yes` defaults
|
|
42
|
+
to **files-only**, so the side-effecting GitHub provisioning never runs
|
|
43
|
+
unattended.
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
After it completes, run **`/onboard`** inside Claude Code for the guided first
|
|
46
|
+
run — stack detection, docs scaffolding, a `mandrel doctor` readiness gate, and
|
|
47
|
+
a started `/plan` handoff.
|
|
48
|
+
|
|
49
|
+
### Manual Install
|
|
50
|
+
|
|
51
|
+
This section documents the manual steps `mandrel init` wraps, for operators who prefer to drive them by hand.
|
|
52
|
+
|
|
53
|
+
#### Mandrel Package
|
|
48
54
|
|
|
49
55
|
From an **empty or existing** project that does not yet have `.agents/`,
|
|
50
56
|
install the package and materialize the framework payload:
|
|
51
57
|
|
|
52
58
|
```bash
|
|
53
59
|
npm install mandrel
|
|
54
|
-
# pnpm add mandrel
|
|
55
|
-
# yarn add mandrel
|
|
56
60
|
```
|
|
57
61
|
|
|
58
62
|
Installing `mandrel` pins an exact, provenance-signed version in
|
|
@@ -69,13 +73,43 @@ npx mandrel sync --dry-run # preview the planned copies, write nothing
|
|
|
69
73
|
npx mandrel doctor # confirm the install is healthy
|
|
70
74
|
```
|
|
71
75
|
|
|
72
|
-
|
|
76
|
+
#### Bootstrap Config
|
|
73
77
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
78
|
+
To wire the local directory and GitHub, run `npx mandrel init` again or use the bootstrapper directly: `node .agents/scripts/bootstrap.js`
|
|
79
|
+
|
|
80
|
+
The bootstrap pipeline, in order:
|
|
81
|
+
|
|
82
|
+
1. **Preflight gate (runs first, before any mutation).** A single
|
|
83
|
+
fail-before-mutate check confirms Node is at the required major
|
|
84
|
+
version, `git` is on `PATH`, the command is running inside a git work
|
|
85
|
+
tree, and — unless `--skip-github` is set — that the `gh` CLI is
|
|
86
|
+
installed and authenticated. If any check fails the bootstrap prints
|
|
87
|
+
each failing check's remedy and halts with exit 1 **before** touching
|
|
88
|
+
a single file or making a GitHub call, so a half-configured repo is
|
|
89
|
+
never left behind.
|
|
90
|
+
2. **Resolve answers (owner / repo / base branch / operator handle /
|
|
91
|
+
project number).** Defaults are inferred from the local `git remote`
|
|
92
|
+
and config (no network calls). Each value is resolved through a
|
|
93
|
+
priority chain: CLI flag → environment variable
|
|
94
|
+
(`GH_OWNER`, `GH_REPO`, …) → silently-accepted inferred default →
|
|
95
|
+
interactive picker → free-text prompt → `--assume-yes` default.
|
|
96
|
+
3. **Project-side mutations.** Seeds `.agentrc.json` from
|
|
97
|
+
[`starter-agentrc.json`](starter-agentrc.json), merges the framework's
|
|
98
|
+
runtime dependencies into `package.json`, runs the install, wires the
|
|
99
|
+
command-sync hook (the UserPromptSubmit hook that regenerates the flat
|
|
100
|
+
`.claude/commands/` tree so every `/<command>` loads), wires the system
|
|
101
|
+
prompt (see below), gitignores derived artefacts, and runs the
|
|
102
|
+
quality-gates installer.
|
|
103
|
+
4. **GitHub-side mutations.** Creates the label taxonomy, Project V2
|
|
104
|
+
fields, branch protection, and merge-method settings. Skipped with
|
|
105
|
+
`--skip-github`.
|
|
77
106
|
|
|
78
|
-
|
|
107
|
+
The bootstrap is idempotent — safe to re-run; an already-configured
|
|
108
|
+
clone produces zero file mutations.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Upgrading and local additions
|
|
79
113
|
|
|
80
114
|
Once installed, the ongoing upgrade path is **`mandrel update`** — it bumps
|
|
81
115
|
`mandrel` to the newest non-major version, re-runs `mandrel sync`,
|
|
@@ -107,53 +141,9 @@ the consumer-owned space `mandrel sync` never copies into nor prunes and the
|
|
|
107
141
|
drift check treats as sanctioned, so keep project-specific skills and local
|
|
108
142
|
workflow fragments there rather than editing synced files in place.
|
|
109
143
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
When `.agents/` is already materialized, run the bootstrap straight from the
|
|
113
|
-
host repo root:
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
node .agents/scripts/bootstrap.js
|
|
117
|
-
# bootstrap also seeds a discoverable npm alias, so after the first run:
|
|
118
|
-
npm run bootstrap
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The bootstrap adds an `npm run bootstrap` script to the consumer's
|
|
122
|
-
`package.json` (pointing at `node .agents/scripts/bootstrap.js`) the
|
|
123
|
-
first time it runs — an operator-defined `bootstrap` script always wins,
|
|
124
|
-
so the seed is skipped when the key already exists.
|
|
125
|
-
|
|
126
|
-
The bootstrap pipeline, in order:
|
|
127
|
-
|
|
128
|
-
1. **Preflight gate (runs first, before any mutation).** A single
|
|
129
|
-
fail-before-mutate check confirms Node is at the required major
|
|
130
|
-
version, `git` is on `PATH`, the command is running inside a git work
|
|
131
|
-
tree, and — unless `--skip-github` is set — that the `gh` CLI is
|
|
132
|
-
installed and authenticated. If any check fails the bootstrap prints
|
|
133
|
-
each failing check's remedy and halts with exit 1 **before** touching
|
|
134
|
-
a single file or making a GitHub call, so a half-configured repo is
|
|
135
|
-
never left behind.
|
|
136
|
-
2. **Resolve answers (owner / repo / base branch / operator handle /
|
|
137
|
-
project number).** Defaults are inferred from the local `git remote`
|
|
138
|
-
and config (no network calls). Each value is resolved through a
|
|
139
|
-
priority chain: CLI flag → environment variable
|
|
140
|
-
(`GH_OWNER`, `GH_REPO`, …) → silently-accepted inferred default →
|
|
141
|
-
interactive picker → free-text prompt → `--assume-yes` default.
|
|
142
|
-
3. **Project-side mutations.** Seeds `.agentrc.json` from
|
|
143
|
-
[`starter-agentrc.json`](starter-agentrc.json), merges the framework's
|
|
144
|
-
runtime dependencies into `package.json`, runs the install, wires the
|
|
145
|
-
command-sync hook (the UserPromptSubmit hook that regenerates the flat
|
|
146
|
-
`.claude/commands/` tree so every `/<command>` loads), wires the system
|
|
147
|
-
prompt (see below), gitignores derived artefacts, and runs the
|
|
148
|
-
quality-gates installer.
|
|
149
|
-
4. **GitHub-side mutations.** Creates the label taxonomy, Project V2
|
|
150
|
-
fields, branch protection, and merge-method settings. Skipped with
|
|
151
|
-
`--skip-github`.
|
|
152
|
-
|
|
153
|
-
The bootstrap is idempotent — safe to re-run; an already-configured
|
|
154
|
-
clone produces zero file mutations.
|
|
144
|
+
---
|
|
155
145
|
|
|
156
|
-
|
|
146
|
+
## Automatic system-prompt wiring
|
|
157
147
|
|
|
158
148
|
The bootstrap wires the framework system prompt into a project-root
|
|
159
149
|
`CLAUDE.md` automatically, so there is no manual "load the system prompt"
|
|
@@ -170,7 +160,9 @@ If your AI tool is not Claude Code, load
|
|
|
170
160
|
[`instructions.md`](instructions.md) verbatim through that tool's own
|
|
171
161
|
system-prompt mechanism (`.cursorrules`, Custom Instructions, etc.).
|
|
172
162
|
|
|
173
|
-
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Interactive repo / project pickers
|
|
174
166
|
|
|
175
167
|
When the bootstrap runs interactively (a TTY, and `--assume-yes` is not
|
|
176
168
|
set), the **repo** and **project-number** questions render a live,
|
|
@@ -195,14 +187,16 @@ For non-interactive (CI) installs, pass `--owner`, `--repo`, and
|
|
|
195
187
|
After bootstrap, every Mandrel command is generated into a flat
|
|
196
188
|
`.claude/commands/` tree by `npm run sync:commands` (the UserPromptSubmit hook
|
|
197
189
|
keeps it current) and loads as a bare `/<command>` slash command — e.g.
|
|
198
|
-
`/
|
|
190
|
+
`/plan`, `/plan`, `/deliver`, `/audit-security`. The
|
|
199
191
|
commands load in every Claude Code environment. The [SDLC guide](docs/SDLC.md) walks
|
|
200
192
|
an end-to-end Epic; standalone Stories pair
|
|
201
|
-
[`/
|
|
202
|
-
Issue) with [`/
|
|
193
|
+
[`/plan`](workflows/helpers/plan-story.md) (idea → drafted Story
|
|
194
|
+
Issue) with [`/deliver`](workflows/helpers/deliver-stories.md) (Story Issue → merged
|
|
203
195
|
PR).
|
|
204
196
|
|
|
205
|
-
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Runtime dependencies
|
|
206
200
|
|
|
207
201
|
The framework scripts under `.agents/scripts/` import a small set of
|
|
208
202
|
third-party npm packages at runtime. The materialized `./.agents/` tree
|
|
@@ -237,12 +231,20 @@ in `runtime-deps.json`.
|
|
|
237
231
|
|
|
238
232
|
---
|
|
239
233
|
|
|
234
|
+
## Ticket Hierarchy
|
|
235
|
+
|
|
236
|
+
Mandrel uses a **2-tier hierarchy** (Epic → Story) with inline `acceptance[]` / `verify[]` on story bodies.
|
|
237
|
+
|
|
238
|
+
See [`docs/SDLC.md` § Ticket hierarchy](docs/SDLC.md) for the diagram and execution-model implications.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
240
242
|
## Contents
|
|
241
243
|
|
|
242
244
|
| Path | Purpose |
|
|
243
245
|
| ---- | ------- |
|
|
244
246
|
| [`instructions.md`](instructions.md) | Primary system prompt loaded by the host AI tool. |
|
|
245
|
-
| [`docs/SDLC.md`](docs/SDLC.md) | Operator process for `/
|
|
247
|
+
| [`docs/SDLC.md`](docs/SDLC.md) | Operator process for `/plan` and `/deliver`. |
|
|
246
248
|
| [`starter-agentrc.json`](starter-agentrc.json) | Bootstrap delta-seed copied to the consumer repo root as `.agentrc.json`. |
|
|
247
249
|
| [`agentrc-reference.json`](docs/agentrc-reference.json) | Exhaustive editor reference enumerating every schema key with its framework default. |
|
|
248
250
|
| [`personas/`](personas/) | Role-specific behavior packs selected by task persona or explicit user instruction. |
|
|
@@ -443,7 +445,7 @@ sessions, `gh auth login` is sufficient.
|
|
|
443
445
|
## Self-Healing Checks
|
|
444
446
|
|
|
445
447
|
`scripts/lib/checks/` is the discovery-based registry of named checks
|
|
446
|
-
consumed by preflight guards (`/
|
|
448
|
+
consumed by preflight guards (`/deliver`, `/story-close`, `npm test`),
|
|
447
449
|
the `diagnose.js` ad-hoc viewer, and the retro surface. Use one check per
|
|
448
450
|
file. The runner (`index.js`) loads checks at process start and filters by
|
|
449
451
|
scope at each call site.
|
|
@@ -567,7 +569,7 @@ Schema conventions:
|
|
|
567
569
|
## Code review providers (pluggable chain)
|
|
568
570
|
|
|
569
571
|
`runCodeReview()` (invoked at the end of `helpers/epic-deliver-story`,
|
|
570
|
-
`helpers/single-story-deliver`, and `/
|
|
572
|
+
`helpers/single-story-deliver`, and `/deliver`'s `delivery.code-review`
|
|
571
573
|
state) loads its review backend through a pluggable registry. Two configuration shapes are supported:
|
|
572
574
|
|
|
573
575
|
- **Legacy single provider** — `delivery.codeReview.provider: "native"`
|
|
@@ -719,7 +721,7 @@ falls from minutes to under a second.
|
|
|
719
721
|
## Multi-developer coordination
|
|
720
722
|
|
|
721
723
|
Two operators can drive the same repository at once — one running
|
|
722
|
-
`/
|
|
724
|
+
`/deliver <id>`, another running `/single-story-deliver <id>`, or two
|
|
723
725
|
operators on the same Epic from separate clones. The framework keeps those
|
|
724
726
|
runs from clobbering one another with **two distinct coordination layers**.
|
|
725
727
|
They solve different problems and must not be confused:
|
|
@@ -761,7 +763,7 @@ yanks the claim back from whoever legitimately took over.
|
|
|
761
763
|
|
|
762
764
|
**Where it's wired:**
|
|
763
765
|
|
|
764
|
-
- **`/
|
|
766
|
+
- **`/deliver`** acquires the lease on the **Epic** ticket during its
|
|
765
767
|
prepare phase, before any mutating git work
|
|
766
768
|
([`epic-deliver-lease-guard.js`](scripts/lib/orchestration/epic-deliver-lease-guard.js)).
|
|
767
769
|
A live foreign claim refuses the run; pass `--steal` to override and
|
|
@@ -774,7 +776,7 @@ yanks the claim back from whoever legitimately took over.
|
|
|
774
776
|
([`single-story-lease-guard.js`](scripts/lib/orchestration/single-story-lease-guard.js)).
|
|
775
777
|
The standalone path requires `github.operatorHandle` to be set — without
|
|
776
778
|
an operator identity the lease has no owner to record.
|
|
777
|
-
- **`/
|
|
779
|
+
- **`/plan`** acquires the lease on the **Epic** ticket before Phase 7
|
|
778
780
|
(spec) and releases it after Phase 8 (decompose)
|
|
779
781
|
([`epic-plan-lease-guard.js`](scripts/lib/orchestration/epic-plan-lease-guard.js)).
|
|
780
782
|
Because planning emits no `story.heartbeat` (heartbeats are a
|
|
@@ -793,7 +795,7 @@ confuse:
|
|
|
793
795
|
|
|
794
796
|
| File | Audience | Role |
|
|
795
797
|
| --------------------------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
796
|
-
| `.agentrc.json` (repo root) | The framework dogfooding itself | Live config used when running `/epic-*`, `/
|
|
798
|
+
| `.agentrc.json` (repo root) | The framework dogfooding itself | Live config used when running `/epic-*`, `/deliver` against this repo. Exercises the framework end-to-end. |
|
|
797
799
|
| `.agents/starter-agentrc.json` | Downstream consumer repos | Bootstrap delta-seed a consumer copies via `cp .agents/starter-agentrc.json .agentrc.json`. Minimum schema-required keys. |
|
|
798
800
|
| `.agents/docs/agentrc-reference.json` | Operators and reviewers | Exhaustive editor reference enumerating every schema key with its framework default. Not a copy target. |
|
|
799
801
|
|