mandrel 2.37.0 → 2.38.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 +16 -16
- package/.agents/agents/plan-critic.md +1 -1
- package/.agents/docs/SDLC.md +40 -40
- package/.agents/docs/configuration.md +16 -16
- package/.agents/docs/execution-reference.md +3 -3
- package/.agents/docs/quality-gates.md +2 -2
- package/.agents/docs/workflows.md +6 -6
- package/.agents/instructions.md +5 -5
- package/.agents/rules/changelog-style.md +3 -3
- package/.agents/rules/ci-remediation.md +1 -1
- package/.agents/rules/git-conventions-reference.md +4 -4
- package/.agents/schemas/agentrc.schema.json +9 -9
- package/.agents/schemas/story-deliver-terminal.schema.json +2 -2
- package/.agents/schemas/validation-evidence.schema.json +1 -1
- package/.agents/scripts/acceptance-eval.js +1 -1
- package/.agents/scripts/apply-quality-bootstrap.js +1 -1
- package/.agents/scripts/audit-to-stories.js +2 -2
- package/.agents/scripts/check-doc-links.js +32 -4
- package/.agents/scripts/check-test-temp-hygiene.js +1 -1
- package/.agents/scripts/check-workflow-cli-lint.js +1 -1
- package/.agents/scripts/deliver-light.js +10 -10
- package/.agents/scripts/deliver-recover.js +1 -1
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +1 -1
- package/.agents/scripts/generate-workflows-doc.js +1 -1
- package/.agents/scripts/lib/audit-suite/selector.js +1 -1
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +1 -1
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +1 -1
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +5 -5
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +1 -1
- package/.agents/scripts/lib/bdd-runner-detect.js +1 -1
- package/.agents/scripts/lib/bdd-scenario-budget.js +1 -1
- package/.agents/scripts/lib/bdd-scenario-scanner.js +3 -3
- package/.agents/scripts/lib/bdd-step-index.js +1 -1
- package/.agents/scripts/lib/bootstrap/branch-protection.js +1 -1
- package/.agents/scripts/lib/bootstrap/commit-push.js +2 -2
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +1 -1
- package/.agents/scripts/lib/checks/core-bare-clean.js +1 -1
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +1 -1
- package/.agents/scripts/lib/cli-args.js +1 -1
- package/.agents/scripts/lib/command-header.js +1 -1
- package/.agents/scripts/lib/config/delivery-routing.js +1 -1
- package/.agents/scripts/lib/config/explain.js +1 -1
- 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-settings-schema-delivery.js +3 -3
- package/.agents/scripts/lib/config-settings-schema-quality.js +6 -6
- package/.agents/scripts/lib/config-settings-schema.js +3 -3
- package/.agents/scripts/lib/duplicate-search.js +1 -1
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +4 -4
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/classify-finding.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +12 -12
- package/.agents/scripts/lib/findings/route-finding.js +2 -2
- package/.agents/scripts/lib/generated/agentrc-validator.js +1 -1
- package/.agents/scripts/lib/git-branch-lifecycle.js +2 -2
- package/.agents/scripts/lib/label-constants.js +2 -2
- package/.agents/scripts/lib/label-taxonomy.js +1 -1
- package/.agents/scripts/lib/onboard/init-tail.js +4 -4
- package/.agents/scripts/lib/onboard/scaffold-docs.js +2 -2
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +1 -1
- package/.agents/scripts/lib/orchestration/code-review.js +4 -4
- package/.agents/scripts/lib/orchestration/complexity-gate.js +5 -5
- package/.agents/scripts/lib/orchestration/deliver-recover.js +3 -3
- package/.agents/scripts/lib/orchestration/docs-digest.js +3 -3
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +2 -2
- package/.agents/scripts/lib/orchestration/light-backstop.js +1 -1
- package/.agents/scripts/lib/orchestration/light-escalation.js +6 -6
- package/.agents/scripts/lib/orchestration/light-suitability.js +19 -19
- package/.agents/scripts/lib/orchestration/plan-context.js +4 -4
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +2 -2
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +2 -2
- package/.agents/scripts/lib/orchestration/plan-metrics.js +1 -1
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +1 -1
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +3 -3
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +6 -6
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +16 -16
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +3 -3
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +6 -6
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +7 -7
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +1 -1
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +3 -3
- package/.agents/scripts/lib/orchestration/remote-verifier.js +2 -2
- package/.agents/scripts/lib/orchestration/resolve-stories.js +4 -4
- package/.agents/scripts/lib/orchestration/run-epilogue.js +2 -2
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +2 -2
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +5 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +3 -3
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +2 -2
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +14 -12
- package/.agents/scripts/lib/orchestration/ticket-validator.js +1 -1
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +3 -3
- package/.agents/scripts/lib/plan-phase-cleanup.js +1 -1
- package/.agents/scripts/lib/signals/schema.js +1 -1
- package/.agents/scripts/lib/story-adjacency.js +2 -2
- package/.agents/scripts/lib/templates/decomposer-prompts.js +1 -1
- package/.agents/scripts/lib/ticket-body-sections.js +1 -1
- package/.agents/scripts/lib/util/concurrent-map.js +1 -1
- package/.agents/scripts/lib/util/parse-id-list.js +1 -1
- package/.agents/scripts/lib/wave-runner/live-probe.js +4 -4
- package/.agents/scripts/lib/wave-runner/ready-set.js +1 -1
- package/.agents/scripts/lib/workflow-closure.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +2 -2
- package/.agents/scripts/lint-issue-body.js +3 -3
- package/.agents/scripts/plan-context.js +4 -4
- package/.agents/scripts/plan-critics.js +2 -2
- package/.agents/scripts/plan-persist.js +2 -2
- package/.agents/scripts/plan-run-epilogue.js +2 -2
- package/.agents/scripts/providers/github/board-add.js +1 -1
- package/.agents/scripts/providers/github/errors.js +1 -1
- package/.agents/scripts/providers/github/tickets.js +6 -6
- package/.agents/scripts/resolve-stories.js +3 -3
- package/.agents/scripts/resync-status-column.js +1 -1
- package/.agents/scripts/run-lint.js +1 -1
- package/.agents/scripts/single-story-close.js +2 -2
- package/.agents/scripts/single-story-init.js +5 -5
- package/.agents/scripts/stories-wave-tick.js +8 -8
- package/.agents/skills/core/idea-refinement/SKILL.md +5 -5
- package/.agents/skills/core/scope-triage/SKILL.md +3 -3
- package/.agents/skills/skills.index.json +1 -1
- package/.agents/skills/stack/qa/qa-harness/SKILL.md +1 -1
- package/.agents/workflows/audit-data-model.md +1 -1
- package/.agents/workflows/audit-documentation.md +2 -2
- package/.agents/workflows/audit-to-stories.md +11 -11
- package/.agents/workflows/git-deliver.md +4 -4
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-review.md +4 -4
- package/.agents/workflows/helpers/deliver-light.md +26 -26
- package/.agents/workflows/helpers/deliver-reference.md +15 -7
- package/.agents/workflows/helpers/deliver-story-reference.md +9 -4
- package/.agents/workflows/helpers/deliver-story.md +6 -7
- package/.agents/workflows/helpers/diagnose.md +2 -2
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/helpers/plan-reference.md +9 -9
- package/.agents/workflows/helpers/qa-core.md +8 -8
- package/.agents/workflows/helpers/worktree-lifecycle.md +6 -6
- package/.agents/workflows/{deliver.md → mandrel-deliver.md} +15 -19
- package/.agents/workflows/{plan.md → mandrel-plan.md} +9 -9
- package/.agents/workflows/memory-consolidate.md +4 -4
- package/.agents/workflows/prototype.md +3 -3
- package/.agents/workflows/qa-assist.md +12 -12
- package/.agents/workflows/qa-explore.md +6 -6
- package/.agents/workflows/qa-run.md +1 -1
- package/README.md +7 -7
- package/docs/CHANGELOG.md +11 -0
- package/lib/cli/doctor.js +1 -1
- package/lib/cli/init.js +1 -1
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ description:
|
|
|
5
5
|
deliver-story engine — story-<id> → PR → main.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# /deliver
|
|
8
|
+
# /mandrel-deliver
|
|
9
9
|
|
|
10
10
|
> **Lean spine.** Happy path + gate list. Sequencing, dispatch mechanics,
|
|
11
11
|
> intent phrases, ceremony and the epilogue live in on-demand
|
|
@@ -16,7 +16,7 @@ description:
|
|
|
16
16
|
|
|
17
17
|
## Role
|
|
18
18
|
|
|
19
|
-
One delivery door. `/deliver` owns input resolution, sequencing and the
|
|
19
|
+
One delivery door. `/mandrel-deliver` owns input resolution, sequencing and the
|
|
20
20
|
close-and-land tail; Stories are implemented via
|
|
21
21
|
[`helpers/deliver-story.md`](helpers/deliver-story.md).
|
|
22
22
|
|
|
@@ -32,11 +32,11 @@ you read:
|
|
|
32
32
|
|
|
33
33
|
| Invocation | Shape | Behavior |
|
|
34
34
|
| --- | --- | --- |
|
|
35
|
-
| `/deliver` | bare | List the open `agent::ready` Stories and ask which to deliver. Deliver nothing until answered. |
|
|
36
|
-
| `/deliver 4712` | ids | One Story via `helpers/deliver-story.md`, **inline in this session** — no `story-worker` spawn. |
|
|
37
|
-
| `/deliver 4712 4713 …` | ids | Resolve the set, sequence by the discovered graph via `stories-wave-tick.js`, dispatch sub-agents. |
|
|
38
|
-
| `/deliver 4712 - 4716` | ids | A **range** — every id in the inclusive span. |
|
|
39
|
-
| `/deliver add a --json flag to doctor` | prompt | Unplanned work: gate, author a receipt Story, land it — [`helpers/deliver-light.md`](helpers/deliver-light.md). |
|
|
35
|
+
| `/mandrel-deliver` | bare | List the open `agent::ready` Stories and ask which to deliver. Deliver nothing until answered. |
|
|
36
|
+
| `/mandrel-deliver 4712` | ids | One Story via `helpers/deliver-story.md`, **inline in this session** — no `story-worker` spawn. |
|
|
37
|
+
| `/mandrel-deliver 4712 4713 …` | ids | Resolve the set, sequence by the discovered graph via `stories-wave-tick.js`, dispatch sub-agents. |
|
|
38
|
+
| `/mandrel-deliver 4712 - 4716` | ids | A **range** — every id in the inclusive span. |
|
|
39
|
+
| `/mandrel-deliver add a --json flag to doctor` | prompt | Unplanned work: gate, author a receipt Story, land it — [`helpers/deliver-light.md`](helpers/deliver-light.md). |
|
|
40
40
|
|
|
41
41
|
**The discriminator is lexical and total.** An argument matching `^#?\d+$` is an
|
|
42
42
|
id, and `^#?\d+\s*[-–—]\s*#?\d+$` an inclusive **range** — pass one on as a
|
|
@@ -92,14 +92,10 @@ it to an operator or add it to an attended run.
|
|
|
92
92
|
- **0** — dispatch each `ready` id (already capped and overlap-free); an
|
|
93
93
|
empty `ready` with work in flight means "waiting", so keep looping;
|
|
94
94
|
`epilogueDue: true` means every Story is done — step 4.
|
|
95
|
-
- **2** — `cycleError
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
`blockedReason`, the protocol's HITL pause
|
|
100
|
-
([`instructions.md` § 1.J](../instructions.md)) — **stop the loop and
|
|
101
|
-
surface it; do not poll**, resuming once the operator unblocks it. Blocked
|
|
102
|
-
outranks a wedge, not a cycle.
|
|
95
|
+
- **2 / 3 / 4** — `cycleError` / `wedged` / `blocked`: stop the loop and
|
|
96
|
+
route per reference § Sequencing edge cases. **4** is the protocol's HITL
|
|
97
|
+
pause ([`instructions.md` § 1.J](../instructions.md)) — surface it and
|
|
98
|
+
wait for the operator; never poll.
|
|
103
99
|
|
|
104
100
|
4. **Close each hand-off** (§ Closing what the workers hand back), then, with
|
|
105
101
|
every Story landed, run the **per-run epilogue (N>1)**:
|
|
@@ -143,13 +139,13 @@ it): reference § Ceremony.
|
|
|
143
139
|
- **Land or block — never a silent local build** (digest § 2). Attended delivers
|
|
144
140
|
default to close-and-land (`delivery.routing.closeAndLand: true`); rest at
|
|
145
141
|
`agent::closing` only when a human owns it.
|
|
146
|
-
- **`/deliver` never plans.** Planned tickets come from [`/plan`](plan.md), and
|
|
147
|
-
an over-scope prompt **escalates and ends** — never invoke `/plan` in this
|
|
142
|
+
- **`/mandrel-deliver` never plans.** Planned tickets come from [`/mandrel-plan`](mandrel-plan.md), and
|
|
143
|
+
an over-scope prompt **escalates and ends** — never invoke `/mandrel-plan` in this
|
|
148
144
|
session to rescue it ([`helpers/deliver-light.md`](helpers/deliver-light.md)
|
|
149
145
|
§ Escalation is terminal).
|
|
150
146
|
|
|
151
147
|
## See also
|
|
152
148
|
|
|
153
|
-
[`/plan`](plan.md), [`helpers/deliver-story.md`](helpers/deliver-story.md) (the
|
|
149
|
+
[`/mandrel-plan`](mandrel-plan.md), [`helpers/deliver-story.md`](helpers/deliver-story.md) (the
|
|
154
150
|
engine), [`helpers/deliver-light.md`](helpers/deliver-light.md) (the unplanned
|
|
155
|
-
prompt path, shared with `/plan` Gate #1).
|
|
151
|
+
prompt path, shared with `/mandrel-plan` Gate #1).
|
|
@@ -5,7 +5,7 @@ description:
|
|
|
5
5
|
policy.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# /plan
|
|
8
|
+
# /mandrel-plan
|
|
9
9
|
|
|
10
10
|
> **Lean spine.** Happy path + gate list; edge-case detail lives on demand in
|
|
11
11
|
> [`helpers/plan-reference.md`](helpers/plan-reference.md).
|
|
@@ -18,11 +18,11 @@ it, act**:
|
|
|
18
18
|
|
|
19
19
|
| Invocation | Mode | Behavior |
|
|
20
20
|
| --- | --- | --- |
|
|
21
|
-
| `/plan` | ask | Ask what to plan; nothing runs first. |
|
|
22
|
-
| `/plan add a --json flag to doctor` | seed | Ideation from prose: interrogate → author **one Story by default** → persist. |
|
|
23
|
-
| `/plan temp/notes/idea.md` | seed-file | Same, from notes. An existing file is a path, not prose. |
|
|
24
|
-
| `/plan 4712[,4713…]` | tickets | Fetch issue(s), analyze into proper Stories (prefer N=1 rewrite). |
|
|
25
|
-
| `/plan 4712`, already delivered | amends | Amend a shipped Story from a **delta envelope**, not a re-interrogation. |
|
|
21
|
+
| `/mandrel-plan` | ask | Ask what to plan; nothing runs first. |
|
|
22
|
+
| `/mandrel-plan add a --json flag to doctor` | seed | Ideation from prose: interrogate → author **one Story by default** → persist. |
|
|
23
|
+
| `/mandrel-plan temp/notes/idea.md` | seed-file | Same, from notes. An existing file is a path, not prose. |
|
|
24
|
+
| `/mandrel-plan 4712[,4713…]` | tickets | Fetch issue(s), analyze into proper Stories (prefer N=1 rewrite). |
|
|
25
|
+
| `/mandrel-plan 4712`, already delivered | amends | Amend a shipped Story from a **delta envelope**, not a re-interrogation. |
|
|
26
26
|
|
|
27
27
|
**Resolving a bare id.** Read live state rather than asking: `agent::done` can
|
|
28
28
|
only be amended, an open unplanned issue can only be planned. **Announce the
|
|
@@ -156,14 +156,14 @@ JSON. Tickets mode also comments on and closes each source id
|
|
|
156
156
|
|
|
157
157
|
## Constraints
|
|
158
158
|
|
|
159
|
-
- `/plan` starts delivery **only** through a confirmed Gate #1 light route —
|
|
160
|
-
never off its own authored Stories, which land via [`/deliver`](deliver.md).
|
|
159
|
+
- `/mandrel-plan` starts delivery **only** through a confirmed Gate #1 light route —
|
|
160
|
+
never off its own authored Stories, which land via [`/mandrel-deliver`](mandrel-deliver.md).
|
|
161
161
|
- Duplicate search targets open Stories (`type::story`), not Epics; and
|
|
162
162
|
deterministic gates still fail closed under `--yes`.
|
|
163
163
|
|
|
164
164
|
## See also
|
|
165
165
|
|
|
166
|
-
[`/deliver`](deliver.md), [`/audit-to-stories`](audit-to-stories.md),
|
|
166
|
+
[`/mandrel-deliver`](mandrel-deliver.md), [`/audit-to-stories`](audit-to-stories.md),
|
|
167
167
|
[`helpers/plan-reference.md`](helpers/plan-reference.md) (on-demand detail),
|
|
168
168
|
[`core/scope-triage`](../skills/core/scope-triage/SKILL.md) — optional
|
|
169
169
|
split-advisory notes only (no routing verdict).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: >-
|
|
3
3
|
Attended consolidation pass over this project's agent memory pool — merge
|
|
4
4
|
duplicates, verify claims against the current tree, prune with operator
|
|
5
|
-
confirmation, rewrite the index, and stamp the pool so the /plan advisory
|
|
5
|
+
confirmation, rewrite the index, and stamp the pool so the /mandrel-plan advisory
|
|
6
6
|
goes quiet.
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -96,7 +96,7 @@ Then write the receipt to `.consolidation-stamp.json` in the pool root:
|
|
|
96
96
|
{ "lastConsolidatedAt": "<ISO-8601 timestamp>" }
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
The `/plan` Phase 0 advisory reads this file; until it is written, the nudge
|
|
99
|
+
The `/mandrel-plan` Phase 0 advisory reads this file; until it is written, the nudge
|
|
100
100
|
keeps firing. Write it **only** after Gate #2 — the stamp asserts an operator
|
|
101
101
|
reviewed the pass, so writing it early makes it a lie.
|
|
102
102
|
|
|
@@ -112,5 +112,5 @@ Close with counts: entries read, corrected, merged, pruned, and the new total.
|
|
|
112
112
|
|
|
113
113
|
## See also
|
|
114
114
|
|
|
115
|
-
[`/plan`](plan.md) (surfaces the advisory at its Gate #1),
|
|
116
|
-
[`/deliver`](deliver.md) (point-of-write corrections as work lands).
|
|
115
|
+
[`/mandrel-plan`](mandrel-plan.md) (surfaces the advisory at its Gate #1),
|
|
116
|
+
[`/mandrel-deliver`](mandrel-deliver.md) (point-of-write corrections as work lands).
|
|
@@ -13,7 +13,7 @@ active runs" says nothing about layout, density, or interaction, so delivery
|
|
|
13
13
|
resolves those by taste. `/prototype` puts a reviewable artifact in front of the
|
|
14
14
|
operator before the criteria are written.
|
|
15
15
|
|
|
16
|
-
**Operator-invoked only.** `/plan` may report that a plan touches UI and that
|
|
16
|
+
**Operator-invoked only.** `/mandrel-plan` may report that a plan touches UI and that
|
|
17
17
|
this command exists; it must never run it. No workflow, gate, or script invokes
|
|
18
18
|
`/prototype` — the whole design rests on the operator asking for it.
|
|
19
19
|
|
|
@@ -89,7 +89,7 @@ documentation-freshness gate already carries that failure mode.
|
|
|
89
89
|
- **One file, under the temp tree.** Never a second artifact, never outside the
|
|
90
90
|
gitignored workspace-root temp tree, and never a committed prototype
|
|
91
91
|
directory by default.
|
|
92
|
-
- **Never invoked automatically.** `/plan` records the offer and proceeds with
|
|
92
|
+
- **Never invoked automatically.** `/mandrel-plan` records the offer and proceeds with
|
|
93
93
|
planning; no workflow, gate, or script may call this command.
|
|
94
94
|
- **Read-only over the codebase.** The prototype file is the only write. Do not
|
|
95
95
|
edit application source, tokens, or components to make a prototype render.
|
|
@@ -100,5 +100,5 @@ documentation-freshness gate already carries that failure mode.
|
|
|
100
100
|
|
|
101
101
|
- [`/audit-ux-ui`](audit-ux-ui.md) — the same design-system SSOT discovery,
|
|
102
102
|
applied as a review lens after the UI ships.
|
|
103
|
-
- [`/plan`](plan.md) — where the advisory `complexitySignals.uiSurface` offer
|
|
103
|
+
- [`/mandrel-plan`](mandrel-plan.md) — where the advisory `complexitySignals.uiSurface` offer
|
|
104
104
|
surfaces. It names this command; it never runs it.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Human-led QA assist loop — set up, then ride a rolling multi-observation intake session. The operator reports observations in any order; the agent enriches each (repro + root-cause file:line + coverage verdict for bugs; analysis + options + recommendation for enhancements), asks clarifying questions only when ambiguous, and appends a redacted ledger item — recording, never planning — to a persistent, resumable session under temp/qa/. Only when the operator says they are done does it review the full ledger and hand off to /plan.
|
|
2
|
+
description: Human-led QA assist loop — set up, then ride a rolling multi-observation intake session. The operator reports observations in any order; the agent enriches each (repro + root-cause file:line + coverage verdict for bugs; analysis + options + recommendation for enhancements), asks clarifying questions only when ambiguous, and appends a redacted ledger item — recording, never planning — to a persistent, resumable session under temp/qa/. Only when the operator says they are done does it review the full ledger and hand off to /mandrel-plan.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# /qa-assist
|
|
@@ -21,7 +21,7 @@ high-quality, triage-ready ledger. The session has four movements:
|
|
|
21
21
|
a final review of the **entire** ledger and asks any last clarifying
|
|
22
22
|
questions.
|
|
23
23
|
4. **Triage & Plan** (Phase 4) — only then does it route the full ledger through
|
|
24
|
-
[`/plan`](plan.md) to generate Stories.
|
|
24
|
+
[`/mandrel-plan`](mandrel-plan.md) to generate Stories.
|
|
25
25
|
|
|
26
26
|
Unlike [`/qa-explore`](qa-explore.md) (where the *agent* drives open-ended
|
|
27
27
|
exploration of a named surface), `/qa-assist` is **human-led**: the human owns
|
|
@@ -89,12 +89,12 @@ rolling loop stays fluid:
|
|
|
89
89
|
to **ask clarifying questions when the observation is ambiguous**. After each
|
|
90
90
|
append it **echoes the recorded item** for correction, then **loops back** for
|
|
91
91
|
the next observation. It does **not** triage, route, file tickets, or invoke
|
|
92
|
-
`/plan` during intake.
|
|
92
|
+
`/mandrel-plan` during intake.
|
|
93
93
|
- **Two things always require explicit operator confirmation** (the HITL write
|
|
94
94
|
gate in [`helpers/qa-core.md`](helpers/qa-core.md)). First, the session-level
|
|
95
95
|
transition into **Phase 4 — Triage & Plan** — the operator must say they are
|
|
96
96
|
done. Second, **every write that leaves the local ledger** — filing a ticket,
|
|
97
|
-
invoking `/plan`, or mutating a label. Present the artifact, ask, and wait.
|
|
97
|
+
invoking `/mandrel-plan`, or mutating a label. Present the artifact, ask, and wait.
|
|
98
98
|
|
|
99
99
|
In short: appending to the rolling ledger is the natural product of intake and
|
|
100
100
|
needs no gate beyond the echo-back; **planning and anything that leaves the
|
|
@@ -198,7 +198,7 @@ every decision to the shared helpers; never re-derive them in prose.
|
|
|
198
198
|
## Phase 3 — Record (per observation), then loop
|
|
199
199
|
|
|
200
200
|
Goal: persist the enriched finding to the rolling ledger and **return to
|
|
201
|
-
intake**. **No triage, routing, ticket-filing, or `/plan` happens here** — that
|
|
201
|
+
intake**. **No triage, routing, ticket-filing, or `/mandrel-plan` happens here** — that
|
|
202
202
|
is Phase 4, and only after the operator says they are done.
|
|
203
203
|
|
|
204
204
|
1. **Append a `QaLedgerItem`** to the ledger (shape per
|
|
@@ -232,17 +232,17 @@ its transition is **explicitly operator-gated**.
|
|
|
232
232
|
2. **Triage the ledger** through the shared classify → route → disposition →
|
|
233
233
|
promote procedure in [`helpers/qa-core.md`](helpers/qa-core.md): dedup/route
|
|
234
234
|
each `file` finding against open + closed Issues, then promote the
|
|
235
|
-
`file`-dispositioned findings through `promoteFindings` → `/plan` (never a raw
|
|
235
|
+
`file`-dispositioned findings through `promoteFindings` → `/mandrel-plan` (never a raw
|
|
236
236
|
Issue), stamping each cluster's `fingerprintFooter(sha)` into the seed.
|
|
237
237
|
`defer` carries an item forward as backlog; `dismiss` marks it non-actionable.
|
|
238
238
|
3. **Gate:** the move into this phase, and every write inside it (seed write,
|
|
239
|
-
`/plan` invocation, ticket-filing, label mutation), is **operator-gated** —
|
|
239
|
+
`/mandrel-plan` invocation, ticket-filing, label mutation), is **operator-gated** —
|
|
240
240
|
confirm each one. The plan→deliver hard stop is preserved; redaction has
|
|
241
241
|
already run, so nothing unredacted reaches disk or GitHub.
|
|
242
242
|
|
|
243
243
|
After planning, summarize: the findings recorded, the route/promotion decisions
|
|
244
244
|
(`new`/`update-existing`/`duplicate`/`regression-of-closed`), whether each
|
|
245
|
-
cluster became a Story via `/plan --seed-file`, and any `defer` backlog a
|
|
245
|
+
cluster became a Story via `/mandrel-plan --seed-file`, and any `defer` backlog a
|
|
246
246
|
resumed session will pick up.
|
|
247
247
|
|
|
248
248
|
---
|
|
@@ -259,7 +259,7 @@ the `/qa-assist`-specific deltas are:
|
|
|
259
259
|
records each. **Never invent an observation**; ask clarifying questions only
|
|
260
260
|
when one is ambiguous, batched across the dump.
|
|
261
261
|
- **Record during intake; plan only on "done".** Phases 1–3 enrich, append, and
|
|
262
|
-
loop — never triage, route, file, or invoke `/plan`. All of that is Phase 4,
|
|
262
|
+
loop — never triage, route, file, or invoke `/mandrel-plan`. All of that is Phase 4,
|
|
263
263
|
entered only on explicit operator confirmation that testing is done.
|
|
264
264
|
- **Light intake gate, firm boundary gate.** Intake → Enrich → Record is fluid
|
|
265
265
|
(echo-back, no ceremony); the move into Phase 4 and every write that leaves the
|
|
@@ -275,11 +275,11 @@ the `/qa-assist`-specific deltas are:
|
|
|
275
275
|
|
|
276
276
|
## See also
|
|
277
277
|
|
|
278
|
-
- [`/plan`](plan.md) — the planning pipeline `/qa-assist` chains into in Phase 4.
|
|
278
|
+
- [`/mandrel-plan`](mandrel-plan.md) — the planning pipeline `/qa-assist` chains into in Phase 4.
|
|
279
279
|
The plan→deliver hard stop is preserved across the handoff.
|
|
280
280
|
- [`/qa-explore`](qa-explore.md) — the agent-led sibling that drives a named
|
|
281
|
-
surface and triages through the same `/plan` handoff.
|
|
281
|
+
surface and triages through the same `/mandrel-plan` handoff.
|
|
282
282
|
- [`/audit-to-stories`](audit-to-stories.md) — the precedent for the
|
|
283
|
-
findings → `/plan` handoff and the shared fingerprint-footer dedup contract.
|
|
283
|
+
findings → `/mandrel-plan` handoff and the shared fingerprint-footer dedup contract.
|
|
284
284
|
- [`helpers/qa-core.md`](helpers/qa-core.md) — the shared contract/session/
|
|
285
285
|
redaction/QaLedgerItem/triage/HITL core.
|
|
@@ -31,7 +31,7 @@ workflow states only the `/qa-explore`-specific phases (Plan / Capture) plus a
|
|
|
31
31
|
Constraints delta.
|
|
32
32
|
|
|
33
33
|
> **When to run**: ad-hoc agent-driven exploration of a freshly delivered Story
|
|
34
|
-
> or Feature, a regression sweep over a risky surface before `/deliver`, or a
|
|
34
|
+
> or Feature, a regression sweep over a risky surface before `/mandrel-deliver`, or a
|
|
35
35
|
> structured agent-driven bug-hunt captured into a triageable ledger.
|
|
36
36
|
>
|
|
37
37
|
> **Skills**: `core/qa-coverage-mapping`, `stack/qa/qa-explore-driving`
|
|
@@ -198,14 +198,14 @@ For each observation the agent makes while driving:
|
|
|
198
198
|
Route the captured ledger through the shared classify → route → disposition →
|
|
199
199
|
promote procedure in [`helpers/qa-core.md`](helpers/qa-core.md), with the
|
|
200
200
|
operator deciding each `file` / `defer` / `dismiss` and every write
|
|
201
|
-
operator-gated. `file` findings are promoted through `/plan` (never a raw
|
|
201
|
+
operator-gated. `file` findings are promoted through `/mandrel-plan` (never a raw
|
|
202
202
|
Issue); `defer` carries an item forward as backlog; `dismiss` marks it
|
|
203
203
|
non-actionable.
|
|
204
204
|
|
|
205
205
|
After triage, write the updated dispositions back to the ledger (still under
|
|
206
206
|
`temp/qa/`), and summarize: items captured, the driving method used, classes,
|
|
207
207
|
routes (`new`/`update-existing`/`duplicate`/`regression-of-closed`), the
|
|
208
|
-
Stories (`/plan --seed-file`) promoted, and the deferred rolling backlog a
|
|
208
|
+
Stories (`/mandrel-plan --seed-file`) promoted, and the deferred rolling backlog a
|
|
209
209
|
resumed session will pick up.
|
|
210
210
|
|
|
211
211
|
---
|
|
@@ -238,11 +238,11 @@ the `/qa-explore`-specific deltas are:
|
|
|
238
238
|
|
|
239
239
|
## See also
|
|
240
240
|
|
|
241
|
-
- [`/plan`](plan.md) — the planning pipeline Triage chains into for a
|
|
241
|
+
- [`/mandrel-plan`](mandrel-plan.md) — the planning pipeline Triage chains into for a
|
|
242
242
|
`file`-dispositioned finding. The plan→deliver hard stop is preserved.
|
|
243
243
|
- [`/qa-assist`](qa-assist.md) — the human-led sibling that enriches a single
|
|
244
|
-
operator observation and triages through the same `/plan` handoff.
|
|
244
|
+
operator observation and triages through the same `/mandrel-plan` handoff.
|
|
245
245
|
- [`/audit-to-stories`](audit-to-stories.md) — the precedent for the
|
|
246
|
-
findings → `/plan` handoff and the shared fingerprint-footer dedup contract.
|
|
246
|
+
findings → `/mandrel-plan` handoff and the shared fingerprint-footer dedup contract.
|
|
247
247
|
- [`helpers/qa-core.md`](helpers/qa-core.md) — the shared contract/session/
|
|
248
248
|
redaction/QaLedgerItem/triage/HITL core.
|
|
@@ -26,7 +26,7 @@ the agent never invents those decisions in prose.
|
|
|
26
26
|
|
|
27
27
|
> **When to run**: during sprint testing to exercise a targeted slice of the
|
|
28
28
|
> acceptance suite (a feature, a tag expression, or a domain), for regression
|
|
29
|
-
> passes before `/deliver`, or on demand while debugging a Story's
|
|
29
|
+
> passes before `/mandrel-deliver`, or on demand while debugging a Story's
|
|
30
30
|
> user-visible behavior in a live browser.
|
|
31
31
|
>
|
|
32
32
|
> **Skills**: `stack/qa/gherkin-authoring`, `stack/qa/playwright-bdd`
|
package/README.md
CHANGED
|
@@ -30,26 +30,26 @@ provisions both as part of a cold start (`git init` → `gh repo create --push`
|
|
|
30
30
|
The canonical cold-start path is one command, then one slash command:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
npx mandrel init # install mandrel → sync → prompt → bootstrap → onboarding tail → /plan handoff
|
|
33
|
+
npx mandrel init # install mandrel → sync → prompt → bootstrap → onboarding tail → /mandrel-plan handoff
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
```text
|
|
37
37
|
# then, inside Claude Code (commands load from .claude/commands/):
|
|
38
|
-
/plan --seed "…" # interrogate → author one Story (default) → persist
|
|
39
|
-
/deliver <id> # story-<id> → PR → main
|
|
38
|
+
/mandrel-plan --seed "…" # interrogate → author one Story (default) → persist
|
|
39
|
+
/mandrel-deliver <id> # story-<id> → PR → main
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
`npx mandrel init` installs `mandrel` (when `./.agents/` is absent),
|
|
43
43
|
materializes it via `mandrel sync`, then asks whether to **configure now**
|
|
44
44
|
(option 1 → runs `bootstrap.js`, then the onboarding tail: stack detection,
|
|
45
|
-
docs scaffolding offer, `mandrel doctor` readiness gate, and a `/plan`
|
|
45
|
+
docs scaffolding offer, `mandrel doctor` readiness gate, and a `/mandrel-plan`
|
|
46
46
|
handoff) or stop at **just the files** (option 2 → re-run `mandrel init`
|
|
47
47
|
any time to configure). Pass `--assume-yes` for a non-interactive run that
|
|
48
48
|
proceeds straight to configure (and forwards the flag to bootstrap). When
|
|
49
49
|
`./.agents/` is already present (you ran `npm install mandrel` first), `init`
|
|
50
50
|
skips the install/sync and goes straight to the prompt. Once `mandrel init`
|
|
51
|
-
completes, you land at the `/plan` handoff — run `/plan --seed "<idea>"` to
|
|
52
|
-
author your first Story, then deliver it with `/deliver <storyId>`
|
|
51
|
+
completes, you land at the `/mandrel-plan` handoff — run `/mandrel-plan --seed "<idea>"` to
|
|
52
|
+
author your first Story, then deliver it with `/mandrel-deliver <storyId>`
|
|
53
53
|
(`story-<id>` → PR → `main`).
|
|
54
54
|
|
|
55
55
|
### Manual equivalent
|
|
@@ -164,7 +164,7 @@ npx mandrel doctor # verify the install
|
|
|
164
164
|
Mandrel's effectiveness is measured by a separate companion repo,
|
|
165
165
|
**[mandrel-bench](https://github.com/dsj1984/mandrel-bench)** — a *consumer* of
|
|
166
166
|
the published `mandrel` package. It pins a specific framework version,
|
|
167
|
-
materializes it via `mandrel sync`, and drives Mandrel's own `/plan`→`/deliver`
|
|
167
|
+
materializes it via `mandrel sync`, and drives Mandrel's own `/mandrel-plan`→`/mandrel-deliver`
|
|
168
168
|
pipeline (plus a bare-model control) over a scenario corpus. Each run is scored
|
|
169
169
|
across five dimensions — Quality, Planning fidelity, and Autonomy (what the
|
|
170
170
|
scaffolding *buys*) versus Efficiency and Overhead ratio (what it *costs*) —
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -15,6 +15,17 @@ All notable changes to this project will be documented in this file.
|
|
|
15
15
|
-->
|
|
16
16
|
<!-- markdownlint-disable-file MD004 MD012 MD037 -->
|
|
17
17
|
|
|
18
|
+
## [2.38.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.37.0...mandrel-v2.38.0) (2026-09-04)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### ⚠ BREAKING CHANGES
|
|
22
|
+
|
|
23
|
+
* the `/plan` and `/deliver` slash commands are renamed to `/mandrel-plan` and `/mandrel-deliver`. Run `mandrel sync` (or `npm run sync:commands`) to reap the old command files and project the new ones. No `/plan` or `/deliver` alias remains.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
* rename /plan and /deliver to /mandrel-plan and /mandrel-deliver ([#5126](https://github.com/dsj1984/mandrel/issues/5126)) ([#5127](https://github.com/dsj1984/mandrel/issues/5127)) ([945d8de](https://github.com/dsj1984/mandrel/commit/945d8de4a41aeca7adc89c009a0252f5bb5387b4))
|
|
28
|
+
|
|
18
29
|
## [2.37.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.36.0...mandrel-v2.37.0) (2026-09-03)
|
|
19
30
|
|
|
20
31
|
|
package/lib/cli/doctor.js
CHANGED
|
@@ -122,7 +122,7 @@ export function formatClosureReport({
|
|
|
122
122
|
|
|
123
123
|
/**
|
|
124
124
|
* Best-effort write of the doctor verdict to `temp/doctor-result.json` under
|
|
125
|
-
* the consumer root so downstream workflows (e.g. the `/plan` first-run
|
|
125
|
+
* the consumer root so downstream workflows (e.g. the `/mandrel-plan` first-run
|
|
126
126
|
* preflight) can read the last recorded verdict without re-running doctor.
|
|
127
127
|
* `temp/` is the gitignored scratch root, so neither git nor the sync prune
|
|
128
128
|
* pass ever sees the cache. Any write failure is swallowed — the cache is
|
package/lib/cli/init.js
CHANGED
|
@@ -299,7 +299,7 @@ export async function planInit({
|
|
|
299
299
|
}
|
|
300
300
|
|
|
301
301
|
// Bootstrap succeeded — run the onboarding tail: stack detection, docs
|
|
302
|
-
// scaffolding offer, doctor gate, and /plan handoff. A tail that reports
|
|
302
|
+
// scaffolding offer, doctor gate, and /mandrel-plan handoff. A tail that reports
|
|
303
303
|
// `ok: false` (the doctor gate failed) makes the whole init exit
|
|
304
304
|
// non-zero; the tail already printed its own remediation message, and the
|
|
305
305
|
// earlier install/sync/bootstrap phases' results stand as completed.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* from consumer feature files.
|
|
5
5
|
*
|
|
6
6
|
* The v2 Epic removal deleted `acceptance-spec-reconciler.js`, the only
|
|
7
|
-
* consumer of the namespaced per-Epic AC tags, and the `/plan` authoring
|
|
7
|
+
* consumer of the namespaced per-Epic AC tags, and the `/mandrel-plan` authoring
|
|
8
8
|
* prompt no longer mandates them. Surviving tags in consumer `.feature`
|
|
9
9
|
* files are inert and violate the gherkin-standards tag taxonomy's
|
|
10
10
|
* no-ad-hoc-tags rule, so this step removes them: each `@epic-<digits>-ac-<digits>`
|
package/package.json
CHANGED