@yemi33/minions 0.1.2428 → 0.1.2430

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.
@@ -71,7 +71,9 @@
71
71
  </div>
72
72
  <div id="cc-tab-bar" style="display:flex;gap:8px;padding:4px 12px;border-bottom:1px solid var(--border);overflow:hidden;align-items:center;flex-shrink:0"></div>
73
73
  <div id="cc-messages" style="flex:1;overflow-y:auto;padding:12px 16px;display:flex;flex-direction:column;gap:10px"></div>
74
- <div style="padding:12px 16px;border-top:1px solid var(--border)">
74
+ <!-- W-ms3nbl6r000971ad: no border-top here — the rule landed directly above
75
+ #cc-suggestions-host, drawing a divider across the top of the pill area. -->
76
+ <div style="padding:12px 16px">
75
77
  <div id="cc-suggestions-host"></div>
76
78
  <!-- P-2a6d8e74 — image attachment thumbnail chips (paste / drag-drop); hidden until images are attached -->
77
79
  <div id="cc-attachments" style="display:none;flex-wrap:wrap;gap:6px;margin-bottom:8px"></div>
@@ -372,11 +372,12 @@
372
372
  defines --space-1..5 (4/8/12/16/20); --space-6 / --space-8 exist solely
373
373
  inside the #detail-panel scope, so referencing them here made `padding`
374
374
  and `margin` invalid at computed-value time — the pill rendered with
375
- zero padding and the group lost its spacing. Stay on the slim scale. */
375
+ zero padding and the group lost its spacing. Stay on the slim scale.
376
+ Left-aligned (W-ms3nbl6r000971ad) to match classic. */
376
377
  .cc-suggestions {
377
378
  display: flex;
378
379
  flex-wrap: wrap;
379
- justify-content: center;
380
+ justify-content: flex-start;
380
381
  align-items: center;
381
382
  gap: var(--space-2);
382
383
  width: 100%;
@@ -1255,10 +1255,12 @@
1255
1255
  #cc-messages > .cc-msg-action + .cc-msg-action { margin-top: -8px; }
1256
1256
 
1257
1257
  /* Suggested starter prompts (W-ms0vc4d0000ve615): content-sized pills in a
1258
- centered wrapping row, NOT full-width bars. `max-width` (not `width`) keeps
1259
- a long prompt inside the 420px drawer without stretching a short one. */
1258
+ left-aligned wrapping row, NOT full-width bars. `max-width` (not `width`)
1259
+ keeps a long prompt inside the 420px drawer without stretching a short one.
1260
+ Left-aligned (W-ms3nbl6r000971ad) so the pill lines up with the composer
1261
+ edge instead of floating mid-drawer. */
1260
1262
  .cc-suggestions {
1261
- display: flex; flex-wrap: wrap; justify-content: center; align-items: center;
1263
+ display: flex; flex-wrap: wrap; justify-content: flex-start; align-items: center;
1262
1264
  gap: var(--space-3);
1263
1265
  width: 100%; margin: var(--space-7) auto 0;
1264
1266
  }
@@ -1267,7 +1269,7 @@
1267
1269
  appearance: none; max-width: 100%; padding: var(--space-3) var(--space-7);
1268
1270
  border: 1px solid var(--border); border-radius: 999px;
1269
1271
  background: var(--surface2); color: var(--text); font: inherit;
1270
- font-size: var(--text-md); line-height: 1.4; text-align: center; cursor: pointer;
1272
+ font-size: var(--text-md); line-height: 1.4; text-align: left; cursor: pointer;
1271
1273
  transition: border-color var(--transition-base), color var(--transition-base);
1272
1274
  }
1273
1275
  .cc-suggestion:hover { border-color: var(--blue); color: var(--blue); }
package/docs/README.md CHANGED
@@ -66,12 +66,12 @@ Architecture, design proposals, and lifecycle references for people working on t
66
66
  - [qa-runbooks.md](qa-runbooks.md) — Per-project QA runbook schema, storage layout (`projects/<name>/runbooks/<id>.json`), CRUD endpoints, run-record lifecycle, and the `qa-validate` agent sidecar contract.
67
67
  - [rfc-completion-json.md](rfc-completion-json.md) — RFC for replacing stdout regex-scraping with a structured `completion.json` control-plane protocol.
68
68
  - [runtime-adapters.md](runtime-adapters.md) — Runtime adapter contract (`engine/runtimes/*`): how the engine talks to Claude Code, Copilot CLI, and future CLIs through a single capability-flagged interface.
69
- - [self-improvement.md](self-improvement.md) — The six self-improvement mechanisms (learnings inbox, per-agent history, review feedback, quality metrics, etc.) that form Minions' continuous feedback loop, including structured review learning (durable, opt-in lessons from verified review findings).
69
+ - [self-improvement.md](self-improvement.md) — The six self-improvement mechanisms (learnings inbox, per-agent history, review feedback, quality metrics, etc.) that form Minions' continuous feedback loop, including structured review learning (durable, always-on lessons from verified review findings).
70
70
  - [shared-lifecycle-module-map.md](shared-lifecycle-module-map.md) — Documentation-only module-boundary audit of `engine/shared.js` / `engine/lifecycle.js`: function inventory, cross-file call graph, and a proposed split map (no code moved).
71
71
  - [skills.md](skills.md) — Skill block format: how agents emit reusable `\`\`\`skill` blocks and how the engine extracts them into native personal-skill directories.
72
72
  - [slim-ux/concepts.md](slim-ux/concepts.md) — Slim-UX design notes: simplified surface concepts driving the project picker, inline project link, and decoupled folder picker.
73
73
  - [slim-ux/architecture-suggestions.md](slim-ux/architecture-suggestions.md) — Slim-UX follow-up architecture suggestions paired with `concepts.md`.
74
- - [team-memory.md](team-memory.md) — End-to-end hybrid memory system: file-backed inputs and consolidation, SQL/FTS5 records, retrieval and fallback, prompt bounds, episodic capture, the review-learning lifecycle (capture/recall/promotion/contradiction/diagnostics) and its staged rollout + rollback, security, APIs, and operations.
74
+ - [team-memory.md](team-memory.md) — End-to-end hybrid memory system: file-backed inputs and consolidation, SQL/FTS5 records, retrieval and fallback, prompt bounds, episodic capture, the review-learning lifecycle (capture/recall/promotion/contradiction/diagnostics) and its rollout history + acceptance measurement, security, APIs, and operations.
75
75
  - [timeouts-and-liveness.md](timeouts-and-liveness.md) — What kills (or doesn't kill) a live tracked agent: the wall-clock vs steering kill invariants, spawn-phase watchdog gates, steering safety nets, and stale-orphan detection ladder.
76
76
  - [visual-evidence-ci.md](visual-evidence-ci.md) — GitHub Actions before/after dashboard capture: path and label triggers, deterministic base/head fixtures, artifact/comment lifecycle, trust boundary, and local reproduction.
77
77
  - [watches.md](watches.md) — Persistent monitoring jobs: target-type registry, conditions, follow-up actions, and the `watches.d/` plugin folder.
@@ -195,7 +195,7 @@ These fields do not replace `reviewFindingResolution`. An unchanged
195
195
  review-feedback fix must still set `noop: true` and prove the exact trusted
196
196
  finding through the stricter no-op contract below.
197
197
 
198
- When `review-learning-capture` is enabled, the engine processes normalized
198
+ The engine processes normalized
199
199
  entries only after the completion is otherwise successful and all PR/work-item
200
200
  contracts pass. `accepted-fixed` requires verified remote-head advancement or
201
201
  an independent approval of the exact current review head.
package/docs/security.md CHANGED
@@ -160,9 +160,11 @@ defenses enforced at the persistence boundary in `engine/review-learning.js`:
160
160
  actually showed it, and only within its own project. A forged id, an unshown
161
161
  lesson, or a cross-project id is rejected as a diagnostic — it cannot quarantine a
162
162
  lesson it was never given.
163
- - **Flag-gated, capture-only-safe.** Both flags default off; capture-only changes no
164
- rendered prompt, and disabling recall is a complete prompt rollback. Stored
165
- records stay auditable through the diagnostics endpoints regardless of flag state.
163
+ - **Structurally bounded, not flag-bounded.** Capture and recall are always on;
164
+ their safety comes from the constraints above (verified findings only,
165
+ project-scoped byte-capped recall, trusted-trace binding, reversible
166
+ quarantine), not from a switch. Stored records stay auditable through the
167
+ diagnostics endpoints.
166
168
  - **Injection-flag / nonce gates still apply.** A completion flagged
167
169
  `failure_class: "injection-flagged"` or failing the nonce check never reaches
168
170
  review-learning capture or application processing.
@@ -161,7 +161,7 @@ in the future, avoid the patterns flagged here.
161
161
 
162
162
  Without this, review findings only exist in the inbox file under the reviewer's name. The author never explicitly sees them unless they happen to read the consolidated notes.md. The feedback loop ensures the author gets a direct, targeted learning from every review.
163
163
 
164
- ### 3a. Structured review learning (durable, opt-in)
164
+ ### 3a. Structured review learning (durable, always-on)
165
165
 
166
166
  The narrative feedback file above is per-PR and consolidated into free-text notes.
167
167
  **Review learning** is its durable, structured evolution: a verified reviewer
@@ -174,11 +174,11 @@ deterministically. It is fully specified in
174
174
  and a stable finding key `<project>|<canonical-pr-id>|<host-namespaced-source-key>`.
175
175
  They are globally excluded from generic FTS recall and only surface through the
176
176
  dedicated project-scoped path.
177
- - **Capture.** With `review-learning-capture` on, only a completed Minions
177
+ - **Capture.** Only a completed Minions
178
178
  `changes-requested` verdict creates an unresolved *candidate*; a verified
179
179
  `accepted-fixed` / `satisfied-elsewhere` disposition promotes it to one active
180
180
  lesson. Invalid/stale/deferred close or hold the candidate.
181
- - **Recall.** With `review-learning-recall` on, a dispatch with a resolved project
181
+ - **Recall.** A dispatch with a resolved project
182
182
  recalls up to 4 records / 4 KiB as a separately fenced `## Applicable Prior Review
183
183
  Lessons` section, ranked by exact symbol → file → tag overlap.
184
184
  - **Application, correction, supersession.** Agents report `applied` /
@@ -189,11 +189,12 @@ deterministically. It is fully specified in
189
189
  - **Promotion.** A high-confidence, repeatedly observed lesson can be human-promoted
190
190
  into repository guidance (`CLAUDE.md` / `AGENTS.md` / Copilot instructions or a
191
191
  project skill) via a normal PR — never by editing a checkout.
192
- - **Diagnostics, retention & rollback.** Retrieval decisions, a lifecycle timeline,
193
- rollout aggregates, and the staged-rollout comparison are exposed under
194
- `/api/memory-records/*`. Both flags default off and expire 2027-01-31; disabling
195
- recall is a complete prompt rollback (see
196
- [team-memory.md Staged rollout and acceptance](team-memory.md#staged-rollout-and-acceptance)).
192
+ - **Diagnostics & retention.** Retrieval decisions, a lifecycle timeline,
193
+ rollout aggregates, and the rollout comparison are exposed under
194
+ `/api/memory-records/*`. Capture and recall are unconditional the temporary
195
+ `review-learning-capture` / `review-learning-recall` flags were removed once
196
+ the staged rollout completed (see
197
+ [team-memory.md → Rollout history and acceptance](team-memory.md#rollout-history-and-acceptance)).
197
198
 
198
199
  ## 4. Human Feedback on PRs
199
200
 
@@ -272,7 +272,7 @@ Migration 027 adds the storage foundation for review-derived procedural memory:
272
272
  replace the hash.
273
273
  - Human-feedback fix dispatches snapshot that bounded source list in
274
274
  `meta.commentSources`, including contexts coalesced during cooldown.
275
- - When `review-learning-capture` is enabled, only a completed Minions
275
+ - Only a completed Minions
276
276
  `changes-requested` verdict creates an unresolved candidate. Review identity,
277
277
  project, canonical PR, configured author, reviewer, dispatch, source item,
278
278
  and a source hash are persisted; the raw review note remains only in its
@@ -378,7 +378,7 @@ and they are **globally excluded** from the generic FTS pack
378
378
  (`searchMemoryRecords` drops `source_type='review-learning'` unless a caller
379
379
  passes `includeReviewLearning`, which only the operator dashboard search does).
380
380
 
381
- When `features.review-learning-recall` is on and a dispatch has a resolved
381
+ When a dispatch has a resolved
382
382
  project context, the path:
383
383
 
384
384
  1. lists active project-scoped lessons straight from the review-learning index
@@ -399,9 +399,8 @@ Each run records bounded telemetry through `recordRetrievalRun` with
399
399
  `retrieval_kind='review-learning'`, the dispatch and work-item ids, selected
400
400
  record ids, per-record scores, and reason codes (`exact-symbol`, `exact-file`,
401
401
  `exact-tag`, `lexical`, `not-applicable`, `record-cap`, `byte-cap`) — never any
402
- prompt or comment body. With recall off (capture-only), the rendered prompt is
403
- unchanged with respect to review-learning records, and projectless Command
404
- Center / unrelated central work receive no section.
402
+ prompt or comment body. Projectless Command Center / unrelated central work
403
+ receive no section.
405
404
 
406
405
  ## Prompt assembly and fallback
407
406
 
@@ -412,8 +411,8 @@ appends memory context in this order:
412
411
  2. Either **Relevant Memory** or the legacy pair:
413
412
  - **Team Notes** from `notes.md`;
414
413
  - **Personal Memory** from `knowledge/agents/<agentId>.md`.
415
- 3. **Applicable Prior Review Lessons**, when `review-learning-recall` is on, the
416
- dispatch has a project, and at least one applicable lesson exists (bounded and
414
+ 3. **Applicable Prior Review Lessons**, when the
415
+ dispatch has a project and at least one applicable lesson exists (bounded and
417
416
  fenced independently of the generic memory budget).
418
417
  4. Later non-memory appendices such as propagated project instructions.
419
418
 
@@ -498,8 +497,6 @@ completion result.
498
497
  | Key | Default | Purpose |
499
498
  |-----|---------|---------|
500
499
  | `features.memoryRetrieval` | `true` | Enables structured retrieval. Feature resolution is environment override, then `config.features`, then registry default. |
501
- | `features.review-learning-capture` | `false` | Temporary gate for capturing verified review-learning candidates and lessons. |
502
- | `features.review-learning-recall` | `false` | Temporary independent gate for the dedicated review-learning recall path. |
503
500
  | `engine.memoryRetrievalShadowMode` | `false` | Measure retrieval without replacing legacy prompt memory. |
504
501
  | `engine.memoryRetrievalTopK` | `8` | Maximum selected records. |
505
502
  | `engine.memoryRetrievalMaxBytes` | `8192` | UTF-8 byte budget for selected record blocks. |
@@ -513,52 +510,41 @@ completion result.
513
510
  | `engine.agentMemorySummaryDays` | `30` | Age trigger for summary eligibility. |
514
511
 
515
512
  Feature flags are exposed by the generic Dashboard **Settings > Features**
516
- surface. The two review-learning flags expire on 2027-01-31 and default off, so
517
- the migration alone changes no prompt. Settings also exposes shadow mode,
518
- episodic capture, retrieval bounds, the inbox threshold, and automatic KB sweep.
519
- The personal-file window and summary keys are configuration-only today.
520
-
521
- Environment overrides are `MINIONS_FEATURE_MEMORYRETRIEVAL=1|0`,
522
- `MINIONS_FEATURE_REVIEW_LEARNING_CAPTURE=1|0`, and
523
- `MINIONS_FEATURE_REVIEW_LEARNING_RECALL=1|0`.
524
-
525
- ## Staged rollout and acceptance
526
-
527
- Review-learning ships behind two independent, default-off flags so the schema,
528
- capture, recall, promotion, contradiction, and diagnostics code can all land on
529
- `main` without changing a single rendered prompt. The rollout is deliberately
530
- staged and measured; do not skip stages.
531
-
532
- ### Stage 0 flags off (baseline behaviour)
533
-
534
- With both `review-learning-capture` and `review-learning-recall` off:
535
-
536
- - No candidate or lesson is captured; a `changes-requested` review completion is
537
- handled exactly as before.
538
- - No `## Applicable Prior Review Lessons` section is ever rendered, so the review,
539
- fix, re-review, memory, comment-poller, and dashboard flows are byte-for-byte
540
- identical to the pre-feature engine.
541
- - `processReviewLearningApplications` short-circuits (recall gate), so an agent's
542
- `reviewLearningApplications` payload is ignored and no lesson is mutated.
543
- - Any records that already exist in SQL (e.g. from a prior enabled window or the
544
- offline backfill) stay fully auditable through the diagnostics endpoints; only
545
- prompt injection is gated, never storage or inspection.
546
-
547
- ### Stage 1 — capture-only for 30 days
548
-
549
- Enable `review-learning-capture` only (recall stays off). This is the measurement
550
- baseline: verified findings become candidates and lessons and accrue `created`,
551
- `retrieved`-less, and `repeated-finding` lifecycle events, but **no lesson is ever
552
- injected into a prompt**. Capture-only changes no rendered prompt. Run this for at
553
- least 30 days to collect a per-project, per-normalized-area baseline recurrence
554
- rate (the share of resolved valid findings that recurred).
513
+ surface. Settings also exposes shadow mode, episodic capture, retrieval bounds,
514
+ the inbox threshold, and automatic KB sweep. The personal-file window and summary
515
+ keys are configuration-only today.
516
+
517
+ Review-learning capture and recall are **not** flagged — they graduated to
518
+ always-on behaviour and have no config or environment override. Their bounds are
519
+ structural, not switchable: capture only accepts verified findings, recall is
520
+ project-scoped and byte-bounded, contradictions are quarantined reversibly, and
521
+ review-learning records are globally excluded from generic FTS retrieval.
522
+
523
+ The environment override for structured retrieval is
524
+ `MINIONS_FEATURE_MEMORYRETRIEVAL=1|0`.
525
+
526
+ ## Rollout history and acceptance
527
+
528
+ Review-learning shipped behind two independent, default-off flags
529
+ (`review-learning-capture`, `review-learning-recall`) so the schema, capture,
530
+ recall, promotion, contradiction, and diagnostics code could all land on `main`
531
+ without changing a single rendered prompt. That staged rollout is **complete**:
532
+ both flags were removed and the behaviour is now unconditional. The stages below
533
+ are retained as history and as the shape of the acceptance measurement, which is
534
+ still exposed by the diagnostics endpoints.
535
+
536
+ ### Stage 1 — capture-only measurement window
537
+
538
+ Capture ran alone (recall still gated off): verified findings became candidates
539
+ and lessons and accrued `created` and `repeated-finding` lifecycle events, but no
540
+ lesson was injected into a prompt. That window is the recurrence baseline a
541
+ per-project, per-normalized-area share of resolved valid findings that recurred.
555
542
 
556
543
  ### Stage 2 — one-project recall canary
557
544
 
558
- Enable `review-learning-recall` for a **single project** (per-project
559
- `config.features` override or the `MINIONS_FEATURE_REVIEW_LEARNING_RECALL` env
560
- override on that project's engine). Recall now injects at most 4 records / 4 KiB of
561
- bounded, fenced lessons on dispatches in that project. Watch the canary for:
545
+ Recall was enabled for a single project. Recall injects at most 4 records / 4 KiB
546
+ of bounded, fenced lessons on dispatches in that project. The canary was watched
547
+ for:
562
548
 
563
549
  - contradiction alerts (`review-learning-contradiction` inbox notes) — an
564
550
  evidence-backed contradiction quarantines the offending lesson automatically;
@@ -566,7 +552,7 @@ bounded, fenced lessons on dispatches in that project. Watch the canary for:
566
552
  confirm lessons are selected for the right file/symbol reasons; and
567
553
  - the recurrence rate for the canary project's first 30 active days.
568
554
 
569
- ### Expansion criteria (the success gate)
555
+ ### The success gate (still live)
570
556
 
571
557
  `GET /api/memory-records/rollout-comparison`
572
558
  (`memoryStore.getReviewLearningRolloutComparison`) compares the **30-day
@@ -576,23 +562,18 @@ grouped by project and normalized area. It only reports `status: "success"` for
576
562
  (`minimumSample`, default 20 — otherwise `status: "insufficient-sample"`) **and**
577
563
  the repeated valid-finding rate fell by at least `minReduction` (default `0.25` =
578
564
  25%). A zero baseline rate is reported as `no-improvement`, never a divide-by-zero
579
- success. Do not broaden the recall canary to another project until its comparison
580
- row reports `success`.
581
-
582
- ### Immediate prompt rollback
583
-
584
- Recall is a pure prompt-injection layer, so rolling it back is instant and total:
585
-
586
- 1. Set `config.features["review-learning-recall"] = false` (or
587
- `MINIONS_FEATURE_REVIEW_LEARNING_RECALL=0`). The very next dispatch renders no
588
- `## Applicable Prior Review Lessons` section disabling recall is a complete
589
- prompt rollback.
590
- 2. Optionally set `config.features["review-learning-capture"] = false` to stop
591
- accruing new candidates/lessons. Existing records remain in SQL and stay
592
- auditable through the diagnostics endpoints; nothing is deleted.
593
-
594
- No migration, restart-ordering, or data cleanup is required to roll back — the flags
595
- gate prompt behaviour, not storage.
565
+ success. The comparison endpoint remains the way to measure review-learning's
566
+ effect per project and area now that the behaviour is always on.
567
+
568
+ ### Reverting is a code change, not a switch
569
+
570
+ There is no flag to flip any more. Both capture and recall are unconditional, so
571
+ backing the behaviour out means reverting the graduation commit. What has not
572
+ changed is that recall is a pure prompt-injection layer over storage: a revert
573
+ stops candidates accruing and stops the `## Applicable Prior Review Lessons`
574
+ section rendering, but every existing record stays in SQL and stays auditable
575
+ through the diagnostics endpoints. Nothing is deleted, and no migration,
576
+ restart-ordering, or data cleanup is involved.
596
577
 
597
578
  ### Promotion into repository guidance
598
579
 
@@ -102,18 +102,6 @@ const FEATURES = {
102
102
  addedIn: '0.1.2233',
103
103
  expires: '2027-01-31',
104
104
  },
105
- 'review-learning-capture': {
106
- description: 'Capture verified code-review findings as bounded, project-scoped review-learning candidates and procedural lessons.',
107
- default: false,
108
- addedIn: '0.1.2203',
109
- expires: '2027-01-31',
110
- },
111
- 'review-learning-recall': {
112
- description: 'Recall bounded applicable review lessons through the dedicated project-scoped review-learning path.',
113
- default: false,
114
- addedIn: '0.1.2203',
115
- expires: '2027-01-31',
116
- },
117
105
  };
118
106
 
119
107
  const ENV_TRUTHY = new Set(['1', 'true', 'on', 'yes']);
@@ -17,7 +17,6 @@ const harness = require('./harness');
17
17
  const reviewLearning = require('./review-learning');
18
18
  const smallStateStore = require('./small-state-store');
19
19
  const prdStore = require('./prd-store');
20
- const features = require('./features');
21
20
  const memoryStore = require('./memory-store');
22
21
  const promotion = require('./promotion');
23
22
  const { isBranchActive } = require('./cooldown');
@@ -3915,7 +3914,6 @@ function createReviewFeedbackForAuthor(reviewerAgentId, pr, config, opts = {}) {
3915
3914
  const authorAgentId = pr.agent.toLowerCase();
3916
3915
  if (!config.agents?.[authorAgentId]) return null;
3917
3916
  if (opts.reviewVerdict !== REVIEW_STATUS.CHANGES_REQUESTED) return null;
3918
- if (!features.isFeatureOn('review-learning-capture', config)) return null;
3919
3917
 
3920
3918
  const project = opts.project || opts.dispatchItem?.meta?.project || null;
3921
3919
  if (!project?.name) {
@@ -4512,7 +4510,6 @@ function _recordRepeatedFindingEvent(lesson, group, match, provenance) {
4512
4510
  function captureVerifiedReviewLearnings({
4513
4511
  dispatchItem,
4514
4512
  agentId,
4515
- config,
4516
4513
  structuredCompletion,
4517
4514
  branchChange,
4518
4515
  reviewFixResolution,
@@ -4522,7 +4519,6 @@ function captureVerifiedReviewLearnings({
4522
4519
  const supportedType = dispatchItem?.type === WORK_TYPE.REVIEW
4523
4520
  || shared.isFixLikeWorkType(dispatchItem?.type);
4524
4521
  if (!supportedType || !Array.isArray(rawLearnings) || rawLearnings.length === 0) return result;
4525
- if (!features.isFeatureOn('review-learning-capture', config || {})) return result;
4526
4522
 
4527
4523
  let groups;
4528
4524
  try {
@@ -4715,7 +4711,6 @@ function _resolveDispatchProject(dispatchItem) {
4715
4711
  function processReviewLearningApplications({
4716
4712
  dispatchItem,
4717
4713
  agentId,
4718
- config,
4719
4714
  structuredCompletion,
4720
4715
  } = {}) {
4721
4716
  const result = {
@@ -4727,9 +4722,6 @@ function processReviewLearningApplications({
4727
4722
  };
4728
4723
  const rawApplications = structuredCompletion?.reviewLearningApplications;
4729
4724
  if (!Array.isArray(rawApplications) || rawApplications.length === 0) return result;
4730
- // Applications describe how recalled lessons fared, so they are only
4731
- // meaningful when the recall path is active.
4732
- if (!features.isFeatureOn('review-learning-recall', config || {})) return result;
4733
4725
 
4734
4726
  let applications;
4735
4727
  try {
@@ -6753,7 +6745,6 @@ async function runPostCompletionHooks(dispatchItem, agentId, code, stdout, confi
6753
6745
  captureVerifiedReviewLearnings({
6754
6746
  dispatchItem,
6755
6747
  agentId,
6756
- config,
6757
6748
  structuredCompletion,
6758
6749
  branchChange: prFixBranchChange,
6759
6750
  reviewFixResolution,
@@ -6772,7 +6763,6 @@ async function runPostCompletionHooks(dispatchItem, agentId, code, stdout, confi
6772
6763
  processReviewLearningApplications({
6773
6764
  dispatchItem,
6774
6765
  agentId,
6775
- config,
6776
6766
  structuredCompletion,
6777
6767
  });
6778
6768
  } catch (err) {
@@ -784,12 +784,12 @@ function renderPlaybook(type, vars) {
784
784
  }
785
785
 
786
786
  // Reserved deterministic review-lesson recall (P-a6137579). A dedicated
787
- // project + audience path, independent of the generic memory budget above and
788
- // gated on its own feature flag. Review-learning records are globally excluded
789
- // from generic recall, so with recall off (capture-only) the rendered prompt
790
- // is unchanged with respect to those records. Only dispatches with a resolved
791
- // project context are eligible; projectless CC / central work get no section.
792
- if (projectName && features.isFeatureOn('review-learning-recall', configEarly)) {
787
+ // project + audience path, independent of the generic memory budget above.
788
+ // Review-learning records are globally excluded from generic recall, so this
789
+ // section is the only place they reach a prompt. Only dispatches with a
790
+ // resolved project context are eligible; projectless CC / central work get no
791
+ // section.
792
+ if (projectName) {
793
793
  try {
794
794
  const applicable = memoryRetrieval.retrieveApplicableReviewLearnings({
795
795
  title: vars.item_name || vars.pr_title || '',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.2428",
3
+ "version": "0.1.2430",
4
4
  "description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
5
5
  "bin": {
6
6
  "minions": "bin/minions.js"