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
|
@@ -23,7 +23,7 @@ export const DEFAULT_DECOMPOSER = Object.freeze({
|
|
|
23
23
|
* the GitHub API with concurrent label writes, while still allowing a
|
|
24
24
|
* small ready-set fan-out. Operators who want strictly sequential delivery
|
|
25
25
|
* should set `delivery.deliverRunner.concurrencyCap: 1`. Raising the cap
|
|
26
|
-
* reduces wall-clock time where dependencies allow. See `deliver.md` and
|
|
26
|
+
* reduces wall-clock time where dependencies allow. See `mandrel-deliver.md` and
|
|
27
27
|
* `agentrc-reference.json` `delivery.deliverRunner.concurrencyCap`.
|
|
28
28
|
*
|
|
29
29
|
* Story #4545 removed the sibling `verifyConcurrencyCap`: the
|
|
@@ -46,7 +46,7 @@ const DEFAULT_DELIVER_RUNNER = Object.freeze({
|
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
|
-
* Default auto-fix loop ceilings for /deliver code-review. Operators
|
|
49
|
+
* Default auto-fix loop ceilings for /mandrel-deliver code-review. Operators
|
|
50
50
|
* override via `delivery.codeReview.*` in `.agentrc.json` (Story #2611,
|
|
51
51
|
* Epic #2586; `autoFixSeverity` default `'medium'` per Story #4399).
|
|
52
52
|
*/
|
|
@@ -77,7 +77,7 @@ export function resolveWorkingPath({
|
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
79
|
* One-shot environment-aware runtime resolution. Returns the trio of runtime
|
|
80
|
-
* signals consumed across `/deliver`: whether worktree isolation is on
|
|
80
|
+
* signals consumed across `/mandrel-deliver`: whether worktree isolation is on
|
|
81
81
|
* for this process, the session id for claim labels, and whether we're in a
|
|
82
82
|
* Claude Code web session. Each signal also records its **source** so the
|
|
83
83
|
* `story-init` startup log can name why the value is what it is.
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
* parent of `git rev-parse --git-common-dir`) rather than `process.cwd()`.
|
|
42
42
|
* Without this, a story child that `cd`s into `.worktrees/story-<id>/` before
|
|
43
43
|
* emitting a lifecycle record would append it to
|
|
44
|
-
* `<worktree>/temp/run-N/lifecycle.ndjson`, while the `/deliver` host
|
|
44
|
+
* `<worktree>/temp/run-N/lifecycle.ndjson`, while the `/mandrel-deliver` host
|
|
45
45
|
* (running from the main checkout) reads the main-checkout copy — so the
|
|
46
46
|
* host never sees the child's records (the audit-#3513 bug class; its
|
|
47
47
|
* original `story.heartbeat` instance is gone with that emitter, but the
|
|
@@ -372,7 +372,7 @@ function storyTerminalEnvelopeName(sid) {
|
|
|
372
372
|
* `close-gates-<sid>.log`, and `deliver-recover.js` reads the pair together to
|
|
373
373
|
* tell a finished close from a live one. Sharing `orchestrationLogDir` also
|
|
374
374
|
* means it inherits main-checkout anchoring for free — the close runs inside
|
|
375
|
-
* `.worktrees/story-<sid>/` while the `/deliver` host reads from the main
|
|
375
|
+
* `.worktrees/story-<sid>/` while the `/mandrel-deliver` host reads from the main
|
|
376
376
|
* checkout, and an un-anchored path would put the envelope somewhere the
|
|
377
377
|
* router never looks.
|
|
378
378
|
*
|
|
@@ -66,13 +66,13 @@ const DOCS_FRESHNESS_SCHEMA = {
|
|
|
66
66
|
*/
|
|
67
67
|
const DELIVER_RUNNER_SCHEMA = {
|
|
68
68
|
type: 'object',
|
|
69
|
-
description: 'Bounded-concurrency knob for the /deliver fan-out.',
|
|
69
|
+
description: 'Bounded-concurrency knob for the /mandrel-deliver fan-out.',
|
|
70
70
|
properties: {
|
|
71
71
|
concurrencyCap: {
|
|
72
72
|
type: 'integer',
|
|
73
73
|
minimum: 1,
|
|
74
74
|
description:
|
|
75
|
-
'Maximum ready Stories dispatched by /deliver at once. Default 3. Moderate by design — keeps host-quota consumption predictable while allowing a small ready-set fan-out. Set 1 for strictly sequential delivery; raise further on hosts with adequate parallel-agent quota. See deliver.md for the sequencing model and throughput tradeoff.',
|
|
75
|
+
'Maximum ready Stories dispatched by /mandrel-deliver at once. Default 3. Moderate by design — keeps host-quota consumption predictable while allowing a small ready-set fan-out. Set 1 for strictly sequential delivery; raise further on hosts with adequate parallel-agent quota. See deliver.md for the sequencing model and throughput tradeoff.',
|
|
76
76
|
// getRunners() resolves this from its own DEFAULT_DELIVER_RUNNER
|
|
77
77
|
// constant, not from this annotation; the parity suite asserts the two
|
|
78
78
|
// agree.
|
|
@@ -637,7 +637,7 @@ const TEMP_RETENTION_SCHEMA = {
|
|
|
637
637
|
export const DELIVERY_SCHEMA = {
|
|
638
638
|
type: 'object',
|
|
639
639
|
description:
|
|
640
|
-
'Everything `/deliver` and `single-story-close` consume: execution timeouts, worktree isolation, runner concurrency, docs freshness, signals, quality gates, merge/CI watch, review ceremony, and the feedback loop.',
|
|
640
|
+
'Everything `/mandrel-deliver` and `single-story-close` consume: execution timeouts, worktree isolation, runner concurrency, docs freshness, signals, quality gates, merge/CI watch, review ceremony, and the feedback loop.',
|
|
641
641
|
properties: {
|
|
642
642
|
execution: EXECUTION_SCHEMA,
|
|
643
643
|
docsFreshness: DOCS_FRESHNESS_SCHEMA,
|
|
@@ -223,7 +223,7 @@ export const QUALITY_SCHEMA = {
|
|
|
223
223
|
navigability: {
|
|
224
224
|
type: 'object',
|
|
225
225
|
description:
|
|
226
|
-
"Navigability lens + journey-suite config (Epic #4131, F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and /deliver's per-Story ceremony (journey suite). Opt-in: absent or empty routeGlobs degrades to a silent no-op.",
|
|
226
|
+
"Navigability lens + journey-suite config (Epic #4131, F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and /mandrel-deliver's per-Story ceremony (journey suite). Opt-in: absent or empty routeGlobs degrades to a silent no-op.",
|
|
227
227
|
properties: {
|
|
228
228
|
routeGlobs: {
|
|
229
229
|
type: 'array',
|
|
@@ -242,7 +242,7 @@ export const QUALITY_SCHEMA = {
|
|
|
242
242
|
journeySuite: {
|
|
243
243
|
type: 'string',
|
|
244
244
|
description:
|
|
245
|
-
"Path or command for the per-persona journey suite /deliver's per-Story ceremony runs.",
|
|
245
|
+
"Path or command for the per-persona journey suite /mandrel-deliver's per-Story ceremony runs.",
|
|
246
246
|
},
|
|
247
247
|
},
|
|
248
248
|
additionalProperties: false,
|
|
@@ -253,7 +253,7 @@ export const QUALITY_SCHEMA = {
|
|
|
253
253
|
|
|
254
254
|
/**
|
|
255
255
|
* `delivery.codeReview` — review-provider chain + bounded-retry knobs for
|
|
256
|
-
* the /deliver code-review ceremony (Story-close and plan-run close).
|
|
256
|
+
* the /mandrel-deliver code-review ceremony (Story-close and plan-run close).
|
|
257
257
|
*
|
|
258
258
|
* `autoFixSeverity` (Story #4399) is the threshold that governs which
|
|
259
259
|
* findings the host-LLM focused-fix routing remediates on-branch —
|
|
@@ -263,7 +263,7 @@ export const QUALITY_SCHEMA = {
|
|
|
263
263
|
export const CODE_REVIEW_SCHEMA = {
|
|
264
264
|
type: 'object',
|
|
265
265
|
description:
|
|
266
|
-
'Review-provider chain plus bounded-retry knobs for the /deliver code-review ceremony.',
|
|
266
|
+
'Review-provider chain plus bounded-retry knobs for the /mandrel-deliver code-review ceremony.',
|
|
267
267
|
properties: {
|
|
268
268
|
// Story #2825 (Epic #2815) seeded the pluggable review backend
|
|
269
269
|
// with `native`; Story #2830 added `codex` (the
|
|
@@ -353,7 +353,7 @@ export const CODE_REVIEW_SCHEMA = {
|
|
|
353
353
|
type: 'integer',
|
|
354
354
|
minimum: 0,
|
|
355
355
|
description:
|
|
356
|
-
'Maximum auto-fix retry attempts per finding in /deliver Phase 5 (code-review). 0 disables auto-fix. Default 3.',
|
|
356
|
+
'Maximum auto-fix retry attempts per finding in /mandrel-deliver Phase 5 (code-review). 0 disables auto-fix. Default 3.',
|
|
357
357
|
default: DEFAULT_CODE_REVIEW.maxFixAttempts,
|
|
358
358
|
},
|
|
359
359
|
maxFixScopeFiles: {
|
|
@@ -367,7 +367,7 @@ export const CODE_REVIEW_SCHEMA = {
|
|
|
367
367
|
type: 'string',
|
|
368
368
|
enum: ['high', 'medium'],
|
|
369
369
|
description:
|
|
370
|
-
'Severity threshold for on-branch remediation in /deliver Phase 5 (code-review). `medium` (default) routes 🔴/🟠/🟡 findings into the host-LLM focused-fix routing (Mediums batched per lens: one commit per lens, a single validation + rescan at the end) while 🟢 suggestions still graduate to follow-up issues; `high` reproduces the pre-4399 Critical/High-only routing. Hard cutover — no back-compat flag.',
|
|
370
|
+
'Severity threshold for on-branch remediation in /mandrel-deliver Phase 5 (code-review). `medium` (default) routes 🔴/🟠/🟡 findings into the host-LLM focused-fix routing (Mediums batched per lens: one commit per lens, a single validation + rescan at the end) while 🟢 suggestions still graduate to follow-up issues; `high` reproduces the pre-4399 Critical/High-only routing. Hard cutover — no back-compat flag.',
|
|
371
371
|
default: DEFAULT_CODE_REVIEW.autoFixSeverity,
|
|
372
372
|
},
|
|
373
373
|
},
|
|
@@ -432,7 +432,7 @@ const GITHUB_SCHEMA = {
|
|
|
432
432
|
};
|
|
433
433
|
|
|
434
434
|
// ---------------------------------------------------------------------------
|
|
435
|
-
// planning.* — inputs to /plan
|
|
435
|
+
// planning.* — inputs to /mandrel-plan
|
|
436
436
|
// ---------------------------------------------------------------------------
|
|
437
437
|
|
|
438
438
|
// Story #4541: `planning.context.{maxBytes, summaryMode}` was retired. The
|
|
@@ -456,7 +456,7 @@ const GITHUB_SCHEMA = {
|
|
|
456
456
|
const PLANNING_SCHEMA = {
|
|
457
457
|
type: 'object',
|
|
458
458
|
description:
|
|
459
|
-
'Inputs to `/plan`: risk escalation heuristics, ceremony-lite routing, and the cross-Story conflict-finding severity gates.',
|
|
459
|
+
'Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, and the cross-Story conflict-finding severity gates.',
|
|
460
460
|
properties: {
|
|
461
461
|
riskHeuristics: {
|
|
462
462
|
...LIST_OR_EXTENDER_OF_STRINGS,
|
|
@@ -591,7 +591,7 @@ const PLANNING_SCHEMA = {
|
|
|
591
591
|
};
|
|
592
592
|
|
|
593
593
|
// ---------------------------------------------------------------------------
|
|
594
|
-
// delivery.* — /deliver + story-deliver consume. The full block of
|
|
594
|
+
// delivery.* — /mandrel-deliver + story-deliver consume. The full block of
|
|
595
595
|
// per-key sub-schemas lives in `config-settings-schema-delivery.js` (refs
|
|
596
596
|
// #3457); DELIVERY_SCHEMA is imported above and referenced unchanged below.
|
|
597
597
|
// ---------------------------------------------------------------------------
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* duplicate-search.js — Cross-Story Duplicate Detection
|
|
3
3
|
*
|
|
4
|
-
* Used by `/plan` to surface open Stories whose scope overlaps with a
|
|
4
|
+
* Used by `/mandrel-plan` to surface open Stories whose scope overlaps with a
|
|
5
5
|
* seed / seed-file / tickets corpus before new Stories are created.
|
|
6
6
|
* Returns ranked candidates with an overlap score and URL so the host
|
|
7
7
|
* LLM can pause for HITL confirmation.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* prior-feedback-fetcher.js — gh-CLI-backed fetcher for open meta feedback
|
|
3
|
-
* issues that feed the `/plan` Phase 0 planner context.
|
|
3
|
+
* issues that feed the `/mandrel-plan` Phase 0 planner context.
|
|
4
4
|
*
|
|
5
5
|
* Story #2554 / Epic #2547. Tech Spec #2550 specifies that the fetcher MUST
|
|
6
6
|
* return open issues carrying the `meta::framework-gap` and
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* `recurringDefectClasses[]` array derived from the `friction::<class>`
|
|
18
18
|
* labels the retro routed-proposals composer stamps onto the meta issues it
|
|
19
19
|
* proposes. That closes the retro→planner loop: a recurring defect class
|
|
20
|
-
* caught by review/deliver is filed as a `meta::*` + `friction::<class>`
|
|
21
|
-
* issue, and the next `/plan` Phase 0 surfaces the class (with a recurrence
|
|
20
|
+
* caught by review/mandrel-deliver is filed as a `meta::*` + `friction::<class>`
|
|
21
|
+
* issue, and the next `/mandrel-plan` Phase 0 surfaces the class (with a recurrence
|
|
22
22
|
* count across the open feedback issues) to the decompose-author guidance so
|
|
23
23
|
* the planning floor ratchets up. The derivation is no-op-safe: issues with
|
|
24
24
|
* no `friction::*` label contribute nothing and the array is empty.
|
|
@@ -297,7 +297,7 @@ export async function fetchPriorFeedback({
|
|
|
297
297
|
|
|
298
298
|
// Story #4135 (Epic #4131, F11) — close the retro→planner loop: derive the
|
|
299
299
|
// recurring defect classes from the `friction::<class>` labels carried by
|
|
300
|
-
// the deduped feedback issues, so the next /plan Phase 0 surfaces them to
|
|
300
|
+
// the deduped feedback issues, so the next /mandrel-plan Phase 0 surfaces them to
|
|
301
301
|
// the decompose-author guidance. No-op-safe when no issue carries a
|
|
302
302
|
// `friction::*` label (empty array, no behavioural change).
|
|
303
303
|
envelope.recurringDefectClasses = extractRecurringDefectClasses([
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* (`retro-proposals.js`) already split the Epic's source-tagged friction
|
|
7
7
|
* into `framework` / `consumer` actionable items, each carrying a
|
|
8
8
|
* pre-drafted `gh issue create` command stanza. Historically an operator
|
|
9
|
-
* had to copy-paste those stanzas by hand, so `/plan` Phase 0's
|
|
9
|
+
* had to copy-paste those stanzas by hand, so `/mandrel-plan` Phase 0's
|
|
10
10
|
* `recurringDefectClasses` stayed empty unless someone remembered to run
|
|
11
11
|
* the commands. This module files them mechanically instead — the retro
|
|
12
12
|
* body then lists the real filed issue numbers rather than paste-ready
|
|
@@ -51,7 +51,7 @@ export const FINDING_CLASSES = Object.freeze([
|
|
|
51
51
|
/**
|
|
52
52
|
* Class → label-set routing table. Each class maps to exactly one label set.
|
|
53
53
|
* `tooling-dx` is the framework-gap path: it carries `meta::framework-gap` so
|
|
54
|
-
* the `/plan` Phase 0 feedback fetcher surfaces it to the planner.
|
|
54
|
+
* the `/mandrel-plan` Phase 0 feedback fetcher surfaces it to the planner.
|
|
55
55
|
*/
|
|
56
56
|
const CLASS_TO_LABELS = Object.freeze({
|
|
57
57
|
'product-bug': [FOCUS_LABELS.PRODUCT],
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* tail of the exploratory-QA Triage path: once an operator has dispositioned a
|
|
6
6
|
* session's ledger items (see `.agents/schemas/qa-ledger.schema.json` and
|
|
7
7
|
* `lib/qa/qa-session.js`), the still-untriaged backlog is clustered and each
|
|
8
|
-
* cluster is promoted to a follow-up ticket — a single Story (via `/plan`)
|
|
9
|
-
* for a tight, one-deliverable cluster, or a multi-Story plan-seed (via `/plan --seed`) for
|
|
8
|
+
* cluster is promoted to a follow-up ticket — a single Story (via `/mandrel-plan`)
|
|
9
|
+
* for a tight, one-deliverable cluster, or a multi-Story plan-seed (via `/mandrel-plan --seed`) for
|
|
10
10
|
* a broad cluster that spans multiple coverage surfaces. Each contributing
|
|
11
11
|
* ledger item then has the resulting `routedTo` issue link written back onto it
|
|
12
12
|
* so a resume run sees the item as filed rather than re-promoting it.
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* Pure orchestration: **no network I/O lives here.** Every GitHub side-effect
|
|
24
24
|
* (issue search, ticket creation) flows through INJECTED PORTS so the unit test
|
|
25
25
|
* runs with no network. Production wires the ports to the GitHub provider /
|
|
26
|
-
* `/plan` / `/plan` surfaces; tests pass in-memory stubs.
|
|
26
|
+
* `/mandrel-plan` / `/mandrel-plan` surfaces; tests pass in-memory stubs.
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
import { fingerprintFinding, routeFinding } from './route-finding.js';
|
|
@@ -35,8 +35,8 @@ const TRIAGED_DISPOSITIONS = Object.freeze(['file', 'defer', 'dismiss']);
|
|
|
35
35
|
/**
|
|
36
36
|
* The two promotion targets a cluster routes to.
|
|
37
37
|
*
|
|
38
|
-
* `PLAN_SEED` promotes a broad cluster by seeding a multi-Story `/plan`
|
|
39
|
-
* run (`/plan --seed`). Its persisted wire token is the legacy string
|
|
38
|
+
* `PLAN_SEED` promotes a broad cluster by seeding a multi-Story `/mandrel-plan`
|
|
39
|
+
* run (`/mandrel-plan --seed`). Its persisted wire token is the legacy string
|
|
40
40
|
* `'epic'`: archived qa-ledger records (and the distributed
|
|
41
41
|
* `qa-ledger.schema.json` `routedTo.kind` enum) still carry `'epic'`, so
|
|
42
42
|
* the value is kept read-compatible while the write-side constant name is
|
|
@@ -49,8 +49,8 @@ export const PROMOTION_TARGETS = Object.freeze({
|
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
51
|
* A cluster of more than this many distinct coverage surfaces is broad enough
|
|
52
|
-
* to warrant a plan-seed (`/plan --seed`) rather than a single Story
|
|
53
|
-
* (`/plan`). One or two surfaces is a tight, single-deliverable cluster.
|
|
52
|
+
* to warrant a plan-seed (`/mandrel-plan --seed`) rather than a single Story
|
|
53
|
+
* (`/mandrel-plan`). One or two surfaces is a tight, single-deliverable cluster.
|
|
54
54
|
*/
|
|
55
55
|
const EPIC_COVERAGE_THRESHOLD = 2;
|
|
56
56
|
|
|
@@ -168,8 +168,8 @@ export function clusterLedgerItems(items) {
|
|
|
168
168
|
/**
|
|
169
169
|
* Decide a cluster's promotion target. A cluster that spans more than
|
|
170
170
|
* {@link EPIC_COVERAGE_THRESHOLD} distinct coverage surfaces is broad enough to
|
|
171
|
-
* warrant a plan-seed (`/plan --seed`); otherwise it is a single-deliverable
|
|
172
|
-
* Story (`/plan`).
|
|
171
|
+
* warrant a plan-seed (`/mandrel-plan --seed`); otherwise it is a single-deliverable
|
|
172
|
+
* Story (`/mandrel-plan`).
|
|
173
173
|
*
|
|
174
174
|
* @param {{ coverages: string[] }} cluster
|
|
175
175
|
* @returns {'story'|'epic'}
|
|
@@ -242,7 +242,7 @@ function routedToLink(issue, kind) {
|
|
|
242
242
|
* shared `routeFinding` against existing Issues (via the injected search
|
|
243
243
|
* port). This dedups against work already filed.
|
|
244
244
|
* 2. On a `new` decision, open the follow-up ticket through the injected
|
|
245
|
-
* `createStory` (`/plan`) or `createPlanSeed` (`/plan --seed`) port,
|
|
245
|
+
* `createStory` (`/mandrel-plan`) or `createPlanSeed` (`/mandrel-plan --seed`) port,
|
|
246
246
|
* chosen by {@link targetForCluster}. On any other decision, link back to
|
|
247
247
|
* the matched Issue rather than creating a duplicate.
|
|
248
248
|
* 3. Stamp the resolved `routedTo` link onto every contributing ledger item
|
|
@@ -259,9 +259,9 @@ function routedToLink(issue, kind) {
|
|
|
259
259
|
* @param {(finding: object) => Promise<Array<{ number: number, state: string, title?: string, body?: string }>>} [ports.searchCandidates]
|
|
260
260
|
* Optional semantic candidate search, forwarded to `routeFinding`.
|
|
261
261
|
* @param {(cluster: object) => Promise<{ number: number, url?: string }>} ports.createStory
|
|
262
|
-
* Opens a single Story (`/plan`) for a tight cluster.
|
|
262
|
+
* Opens a single Story (`/mandrel-plan`) for a tight cluster.
|
|
263
263
|
* @param {(cluster: object) => Promise<{ number: number, url?: string }>} ports.createPlanSeed
|
|
264
|
-
* Opens a plan-seed (`/plan --seed`) run for a broad cluster.
|
|
264
|
+
* Opens a plan-seed (`/mandrel-plan --seed`) run for a broad cluster.
|
|
265
265
|
* @returns {Promise<{
|
|
266
266
|
* promotions: Array<{
|
|
267
267
|
* clusterKey: string,
|
|
@@ -249,9 +249,9 @@ function parseAllFooterValues(text, pattern, isValid) {
|
|
|
249
249
|
* Carry audit dedup provenance from a source document into a target body
|
|
250
250
|
* (Story #4877).
|
|
251
251
|
*
|
|
252
|
-
* The audit sweep's Single-plan path emits a `/plan` seed whose MVP Scope
|
|
252
|
+
* The audit sweep's Single-plan path emits a `/mandrel-plan` seed whose MVP Scope
|
|
253
253
|
* bullets already carry the `audit-fingerprints` / `audit-semantic-keys`
|
|
254
|
-
* footers (Story #4626). Nothing then copied them into the Story `/plan`
|
|
254
|
+
* footers (Story #4626). Nothing then copied them into the Story `/mandrel-plan`
|
|
255
255
|
* actually persisted, so the recommended path filed Stories that the next
|
|
256
256
|
* sweep could not recognise and re-filed as new. It was left to the authoring
|
|
257
257
|
* agent to notice HTML comments in a one-pager and hand-carry them — a
|