@mmerterden/multi-agent-pipeline 16.0.0 → 16.0.1
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/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,23 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
16
16
|
|
|
17
17
|
## [Unreleased]
|
|
18
18
|
|
|
19
|
+
## [16.0.1] - 2026-08-23
|
|
20
|
+
|
|
21
|
+
Found by reviewing v16.0.0 after it shipped. Four defects, three of them mine from that release.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- **`/multi-agent:update` could not download the release, and said the opposite.** Step 3 ran `npm pack --registry "$REG"` under a comment claiming "an ambient .npmrc must not reroute the scope elsewhere". `--registry` does **not** override a scope mapping: a user-level `@scope:registry=https://npm.pkg.github.com` line wins, npm fails with `notarget`, and `--silent` hid the reason. Measured on the maintainer's own machine - exit 1, no tarball. The scope is now pinned with `--@<scope>:registry`, the failure prints the diagnosis and the `npm config get` command that confirms it, and the tarball name comes from npm's own output instead of a glob that would have extracted a stale tgz left in the temp dir. This mattered more than usual because v16.0.0 published a `required` floor whose remedy is exactly this command.
|
|
26
|
+
- **`analyst.evidence` and `analyst.signals` shipped declared-but-inert in v15.22.0.** Nothing read them. They passed `smoke-prefs-consumed.sh` because the words "evidence" and "signals" saturate the very file that should have consumed them. Phase 1d now names `prefs.global.analyst.evidence[]`, `.signals[]` and `.webSignals` where it dispatches, and states that a source absent from its array is off rather than unreachable.
|
|
27
|
+
- **`priorArtEnrichment.topN` never reached the script it configures.** `triage-memory.mjs query` reads `memoryRecall.maxResults` (5) unless `--top` is passed, so a user setting `topN: 3` got 5 and no signal. Phase 4 passes `--top` now.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- **`smoke-prefs-consumed.sh` was reporting green off its own prose.** The gate lists formerly-inert settings in its header to document them, and its own file sat in the search path, so `contextOffload.minLines`, `learningsLedger.maxBriefEntries`, `testGap.scanTree` and `.promoteSeverity` were all satisfied by the sentence describing them as broken. It excludes itself now, the way the portability and personal-data scanners already did.
|
|
32
|
+
- **A second rule, for the blind spot that let two of the above ship.** A new setting must name its full path - `parent.leaf`, or the shell form `prefs_parent_leaf`, which is the stronger signal since it can only come from resolving that exact key. Bare-leaf matching survives for 32 grandfathered settings that are legitimately referenced by leaf name in prose. The list is a ratchet enforced mechanically, not by promise: an entry that has since been wired fails the gate until it is deleted.
|
|
33
|
+
- Underscore is a word character to both `grep -w` and `\w`, so a bare-leaf search never sees `${prefs_testGap_scanTree:-false}`. Three genuinely wired settings looked dead the moment the gate stopped searching itself; recognising the shell form is what tells a real defect from that artefact.
|
|
34
|
+
- The scan is one filesystem walk matched in memory instead of two recursive greps per setting across 944 files: 2 minutes back down to 1.5 seconds.
|
|
35
|
+
|
|
19
36
|
## [16.0.0] - 2026-08-23
|
|
20
37
|
|
|
21
38
|
### Removed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmerterden/multi-agent-pipeline",
|
|
3
|
-
"version": "16.0.
|
|
3
|
+
"version": "16.0.1",
|
|
4
4
|
"description": "8-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI and Codex CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -45,9 +45,23 @@ A git clone of the pipeline repo is a maintainer workspace, kept in sync by `/mu
|
|
|
45
45
|
```bash
|
|
46
46
|
UPD_DIR="${TMPDIR:-/tmp}/multi-agent-update"
|
|
47
47
|
rm -rf "$UPD_DIR" && mkdir -p "$UPD_DIR"
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
# `--registry` does NOT override a scope mapping. A user-level .npmrc line
|
|
49
|
+
# like `@scope:registry=https://npm.pkg.github.com` wins over it, so the
|
|
50
|
+
# download hits the wrong registry, fails with `notarget`, and `--silent`
|
|
51
|
+
# hides why. Pin the SCOPE, which is the setting that actually loses.
|
|
52
|
+
SCOPE=$(printf '%s' "$PKG" | sed -n 's|^@\([^/]*\)/.*|\1|p')
|
|
53
|
+
PACK_OUT=$(npm pack "$PKG@$LATEST" ${SCOPE:+"--@${SCOPE}:registry=$REG"} \
|
|
54
|
+
--registry "$REG" --pack-destination "$UPD_DIR" 2>&1) || {
|
|
55
|
+
echo "Download failed for $PKG@$LATEST:"; printf '%s\n' "$PACK_OUT"
|
|
56
|
+
echo "If this says 'notarget', an .npmrc scope mapping is routing @${SCOPE} elsewhere:"
|
|
57
|
+
echo " npm config get @${SCOPE}:registry"
|
|
58
|
+
exit 1
|
|
59
|
+
}
|
|
60
|
+
# Never glob into tar: an older tarball left in $UPD_DIR would be extracted
|
|
61
|
+
# instead, and the run would install the version it was trying to leave.
|
|
62
|
+
TGZ="$UPD_DIR/$(printf '%s' "$PACK_OUT" | tail -1 | tr -d '[:space:]')"
|
|
63
|
+
[ -f "$TGZ" ] || { echo "npm pack reported no tarball; aborting."; exit 1; }
|
|
64
|
+
tar -xzf "$TGZ" -C "$UPD_DIR"
|
|
51
65
|
node "$UPD_DIR/package/install.js" --all
|
|
52
66
|
```
|
|
53
67
|
|
|
@@ -191,10 +191,12 @@ Runs after Phase 1c, only when `ai-analyst-toolkit` is enabled. Not enabled is a
|
|
|
191
191
|
|
|
192
192
|
Two tiers, and the difference decides where a fact is allowed to appear.
|
|
193
193
|
|
|
194
|
-
| Tier | Sources | Bucket | May appear in |
|
|
195
|
-
|
|
196
|
-
| Evidence | `evidence-github`, `evidence-registry` | `state.analysisSpec.evidence.outside[]` | any section, cited `GitHub:<owner>/<repo>#<n>` or `Release:<pkg>@<ver>` (Locked 3) |
|
|
197
|
-
| Signal | `signal-community` | `state.analysisSpec.evidence.signals[]` | Section 20 Risks only, as a "reported in the wild" row with its link and date |
|
|
194
|
+
| Tier | Sources | Enabled by | Bucket | May appear in |
|
|
195
|
+
|---|---|---|---|---|
|
|
196
|
+
| Evidence | `evidence-github`, `evidence-registry` | `prefs.global.analyst.evidence[]` (default `["github","registry"]`) | `state.analysisSpec.evidence.outside[]` | any section, cited `GitHub:<owner>/<repo>#<n>` or `Release:<pkg>@<ver>` (Locked 3) |
|
|
197
|
+
| Signal | `signal-community` | `prefs.global.analyst.signals[]` (default `["stackoverflow","hackernews"]`), plus `prefs.global.analyst.webSignals` for Reddit / X | `state.analysisSpec.evidence.signals[]` | Section 20 Risks only, as a "reported in the wild" row with its link and date |
|
|
198
|
+
|
|
199
|
+
Read those three prefs before dispatching: a source absent from its array is not queried and is not reported as unreachable either, because the user turned it off rather than the network failing. `prefs.global.analyst.evidence[]` set to `[]` disables the whole evidence tier without disabling the plugin.
|
|
198
200
|
|
|
199
201
|
What to ask for: whether a dependency the feature touches has an open upstream bug, what a pinned version actually changed, whether prior art exists for the pattern being introduced, and whether anyone outside this team has reported the same symptom.
|
|
200
202
|
|
|
@@ -413,7 +413,7 @@ Launch **1 Agent** (subagent_type: `general-purpose`, model: `fable` on Claude C
|
|
|
413
413
|
- Raw findings from Reviewer 1 + Reviewer 2 (merged JSON)
|
|
414
414
|
- Task scope (Phase 1 analysis summary + Phase 2 plan)
|
|
415
415
|
- Full diff being reviewed
|
|
416
|
-
- **Prior-art context (advisory)** -
|
|
416
|
+
- **Prior-art context (advisory)** - per raw finding, `triage-memory.mjs query --top <prefs.global.priorArtEnrichment.topN>` (default 3). Pass `--top`: without it the script falls back to `memoryRecall.maxResults`, a different concern, and `topN` silently does nothing. Off when `priorArtEnrichment.enabled = false`.
|
|
417
417
|
|
|
418
418
|
```bash
|
|
419
419
|
PRIOR_ART="["
|