mandrel 2.42.0 → 2.43.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.
@@ -72,6 +72,10 @@
72
72
  "Monorepo-wide AST or text replacements touching overlapping files in parallel (catastrophic merge-conflict risk across concurrent agents).",
73
73
  "Schema migrations that rewrite existing rows or drop columns without a backfill or rollback plan."
74
74
  ],
75
+ "memoryPool": {
76
+ "staleAfterDays": 30,
77
+ "growthDelta": 25
78
+ },
75
79
  "failOnSharedEditors": false,
76
80
  "requireExplicitCrossStoryDeps": false,
77
81
  "crossCuttingRegistries": [
@@ -118,7 +118,7 @@ GitHub provider identity plus the remote stance the bootstrap enforces. `owner`,
118
118
 
119
119
  ### `planning` (optional)
120
120
 
121
- Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, and the cross-Story conflict-finding severity gates.
121
+ Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, the memory-hygiene advisory thresholds, and the cross-Story conflict-finding severity gates.
122
122
 
123
123
  | Key | Required | Type | Default | Description |
124
124
  | --- | --- | --- | --- | --- |
@@ -126,6 +126,9 @@ Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, an
126
126
  | `complexityGate` | No | `object` | — | Shape-derived ceremony-lite complexity routing. A lite claim is validated against the authored Story shape at persist and re-derived from the Story body at dispatch; conservative (full on any doubt). Never relaxes the Story-ticket / PR-to-main / repo-gates / security-baseline non-negotiables. |
127
127
  | `complexityGate.enabled` | No | `boolean` | — | Master switch. When false, lite routing is disabled everywhere: persist refuses lite claims and dispatch always takes the sub-agent path. Default true. |
128
128
  | `complexityGate.maxArtifacts` | No | `integer` | — | Enumerated-artifact threshold reported by the plan-context complexity signals. An input signal for the planner verdict — carries no routing authority. Default 1. |
129
+ | `memoryPool` | No | `object` | — | Thresholds for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool. |
130
+ | `memoryPool.staleAfterDays` | No | `integer` | `30` | Recommend a consolidation pass once the pool's stamp is older than this many days. Default 30. |
131
+ | `memoryPool.growthDelta` | No | `integer` | `25` | Recommend a consolidation pass once this many entries have been written since the last one. Measured against the entry count the last pass stamped, so a stamp predating that field leaves growth unmeasured and only the age threshold applies. Default 25. |
129
132
  | `failOnSharedEditors` | No | `boolean` | `false` | When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only). |
130
133
  | `requireExplicitCrossStoryDeps` | No | `boolean` | `false` | When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only). |
131
134
  | `crossCuttingRegistries` | No | `string[]` or `{ append?, prepend? }` | `["lib/orchestration/lifecycle/listeners/index.js","**/listeners/index.js","**/handlers/index.js"]` | Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted. |
@@ -59,7 +59,7 @@ description, edit the workflow file’s front-matter and regenerate.
59
59
  | `/mandrel-deliver` | Unified delivery entry point. Takes Story ids or a plain-language prompt, derives which path the work belongs on, and lands it via the single deliver-story engine — story-<id> → PR → main. |
60
60
  | `/mandrel-plan` | Unified planning entry point. Interrogate → author → persist. Emits one Story by default; splits into N>1 only under the default-single split policy. |
61
61
  | `/mandrel-update` | npm-era upgrade wraparound for a Mandrel consumer. Runs `npx mandrel update` (resolve newest published version → install → re-materialize `.agents/` → migrate → doctor → surface changelog) as the single mechanical step, then walks the operator through the judgment wraparound the CLI deliberately leaves unowned: reconcile `.agentrc.json`, install the stabilized quality-gate surface, refresh the harness permission allowlist, reconcile the consumer's `AGENTS.md` / runbooks against the surfaced changelog, and stage + commit the staged lockfile bump. |
62
- | `/memory-consolidate` | Attended consolidation pass over this project's agent memory pool — merge duplicates, verify claims against the current tree, prune with operator confirmation, rewrite the index, and stamp the pool so the /mandrel-plan advisory goes quiet. |
62
+ | `/memory-consolidate` | Attended consolidation pass over this project's agent memory pool — merge duplicates, verify claims against the current tree, prune with operator confirmation, rewrite the index, and stamp the pool with the date and entry count the /mandrel-plan advisory measures its next nudge against. |
63
63
  | `/prototype` | Operator-invoked UI prototype pass. Discovers the consumer's design-system SSOT first, then — only after the operator confirms — writes exactly one self-contained HTML file under the gitignored workspace-root temp tree, so a layout can be reviewed before its UI acceptance criteria are authored. |
64
64
  | `/qa-assist` | 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. |
65
65
  | `/qa-explore` | Agent-led exploratory-QA loop — the agent Plans a surface with an explicit static-vs-drive method choice, drives it (browser MCP or static), and captures ledger items read-only, then Triages — a bounded per-surface session, HITL-gated at every phase transition, routed through the shared dedup/coverage/classification/missing-test/redaction/session core under temp/qa/ |
@@ -298,7 +298,7 @@
298
298
  },
299
299
  "planning": {
300
300
  "type": "object",
301
- "description": "Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, and the cross-Story conflict-finding severity gates.",
301
+ "description": "Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, the memory-hygiene advisory thresholds, and the cross-Story conflict-finding severity gates.",
302
302
  "properties": {
303
303
  "riskHeuristics": {
304
304
  "oneOf": [
@@ -352,6 +352,25 @@
352
352
  },
353
353
  "additionalProperties": false
354
354
  },
355
+ "memoryPool": {
356
+ "type": "object",
357
+ "description": "Thresholds for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool.",
358
+ "properties": {
359
+ "staleAfterDays": {
360
+ "type": "integer",
361
+ "minimum": 1,
362
+ "description": "Recommend a consolidation pass once the pool's stamp is older than this many days. Default 30.",
363
+ "default": 30
364
+ },
365
+ "growthDelta": {
366
+ "type": "integer",
367
+ "minimum": 1,
368
+ "description": "Recommend a consolidation pass once this many entries have been written since the last one. Measured against the entry count the last pass stamped, so a stamp predating that field leaves growth unmeasured and only the age threshold applies. Default 25.",
369
+ "default": 25
370
+ }
371
+ },
372
+ "additionalProperties": false
373
+ },
355
374
  "failOnSharedEditors": {
356
375
  "type": "boolean",
357
376
  "description": "When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).",
@@ -456,7 +456,7 @@ const GITHUB_SCHEMA = {
456
456
  const PLANNING_SCHEMA = {
457
457
  type: 'object',
458
458
  description:
459
- 'Inputs to `/mandrel-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, the memory-hygiene advisory thresholds, and the cross-Story conflict-finding severity gates.',
460
460
  properties: {
461
461
  riskHeuristics: {
462
462
  ...LIST_OR_EXTENDER_OF_STRINGS,
@@ -498,6 +498,34 @@ const PLANNING_SCHEMA = {
498
498
  },
499
499
  additionalProperties: false,
500
500
  },
501
+ // Story #5182 — the `/mandrel-plan` Phase 0 memory-hygiene advisory's two
502
+ // arms. The count arm this replaced was an absolute ceiling, which no
503
+ // consolidation pass could ever bring a pool back under; `growthDelta`
504
+ // measures entries written since the last pass instead, which a pass
505
+ // does reset. Both are advisory thresholds — nothing here gates a plan.
506
+ memoryPool: {
507
+ type: 'object',
508
+ description:
509
+ 'Thresholds for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool.',
510
+ properties: {
511
+ staleAfterDays: {
512
+ type: 'integer',
513
+ minimum: 1,
514
+ description:
515
+ "Recommend a consolidation pass once the pool's stamp is older than this many days. Default 30.",
516
+ default: 30,
517
+ },
518
+ growthDelta: {
519
+ type: 'integer',
520
+ minimum: 1,
521
+ description:
522
+ 'Recommend a consolidation pass once this many entries have been written since the last one. Measured against the entry count the last pass stamped, so a stamp predating that field leaves growth unmeasured and only the age threshold applies. Default 25.',
523
+ default: 25,
524
+ },
525
+ },
526
+ additionalProperties: false,
527
+ },
528
+
501
529
  // Cross-Story conflict-finding severity gates. Off by default so
502
530
  // existing repos keep advisory-only behaviour; flipping either to
503
531
  // `true` upgrades the matching finding class to `'hard'`, which routes