@mmerterden/multi-agent-pipeline 12.4.0 → 12.6.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/CHANGELOG.md +169 -0
- package/README.md +1 -1
- package/docs/features.md +20 -0
- package/index.js +7 -1
- package/install/_dev-only-files.mjs +1 -0
- package/package.json +4 -3
- package/pipeline/agents/security-auditor.md +1 -1
- package/pipeline/commands/archive-guard.md +5 -5
- package/pipeline/commands/multi-agent/SKILL.md +2 -0
- package/pipeline/commands/multi-agent/design-check/SKILL.md +287 -0
- package/pipeline/commands/multi-agent/help/SKILL.md +45 -5
- package/pipeline/commands/multi-agent/refactor/SKILL.md +92 -12
- package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/sync/SKILL.md +119 -12
- package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
- package/pipeline/commands/sim-test.md +5 -5
- package/pipeline/lib/credential-store.sh +32 -0
- package/pipeline/lib/extract-conventions.sh +1 -0
- package/pipeline/lib/repo-cache.sh +1 -0
- package/pipeline/lib/shadow-git.sh +8 -0
- package/pipeline/multi-agent-refs/cross-cli-contract.md +3 -3
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +9 -1
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +3 -2
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +14 -4
- package/pipeline/multi-agent-refs/phases.md +2 -0
- package/pipeline/multi-agent-refs/prompt-assembly.md +31 -0
- package/pipeline/preferences-template.json +18 -1
- package/pipeline/schemas/agent-state.schema.json +90 -0
- package/pipeline/schemas/design-check-config.schema.json +162 -0
- package/pipeline/schemas/learnings-ledger.schema.json +4 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +30 -12
- package/pipeline/schemas/prefs.schema.json +161 -5
- package/pipeline/schemas/token-budget.json +2 -2
- package/pipeline/schemas/triage-corpus.schema.json +5 -1
- package/pipeline/scripts/README.md +7 -5
- package/pipeline/scripts/classify-plan-safety.mjs +8 -3
- package/pipeline/scripts/cost-budget-check.mjs +9 -5
- package/pipeline/scripts/eval-mine-corpus.mjs +19 -5
- package/pipeline/scripts/fixtures/install-layout.tsv +7 -7
- package/pipeline/scripts/gc-worktrees.sh +23 -1
- package/pipeline/scripts/learning-curve.mjs +167 -0
- package/pipeline/scripts/learnings-ledger.mjs +27 -2
- package/pipeline/scripts/lint-mcp-refs.mjs +207 -0
- package/pipeline/scripts/memory-load.sh +5 -1
- package/pipeline/scripts/render-work-summary.sh +4 -1
- package/pipeline/scripts/repo-map.mjs +1 -1
- package/pipeline/scripts/smoke-command-inventory.sh +81 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +1 -1
- package/pipeline/scripts/smoke-compliance-skills.sh +4 -4
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +12 -2
- package/pipeline/scripts/smoke-generate-issue.sh +6 -5
- package/pipeline/scripts/smoke-learning-curve.sh +61 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +2 -2
- package/pipeline/scripts/smoke-review-readiness.sh +3 -2
- package/pipeline/scripts/smoke-schema-validation.sh +19 -5
- package/pipeline/scripts/smoke-shadow-git.sh +4 -2
- package/pipeline/scripts/triage-memory.mjs +66 -10
- package/pipeline/scripts/uninstall.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +24 -8
- package/pipeline/skills/.skills-index.json +39 -3
- package/pipeline/skills/shared/README.md +10 -6
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +10 -8
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +248 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +22 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +67 -11
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +51 -9
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
- package/pipeline/skills/skills-index.md +8 -4
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,175 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
+
## [Unreleased]
|
|
18
|
+
|
|
19
|
+
## [12.6.0] - 2026-07-25
|
|
20
|
+
|
|
21
|
+
Two threads. The design-check command gains a scenario inventory, a coverage
|
|
22
|
+
gate and MCP-currency gating, and the refactor/sync pair learns to research,
|
|
23
|
+
audit and ship the companion dev-toolkit MCP server. Alongside that, a defect
|
|
24
|
+
sweep found eight gates and features that exited 0 while doing nothing - six
|
|
25
|
+
of them guarded by a smoke test whose fixture had the wrong shape, so the suite
|
|
26
|
+
stayed green the whole time.
|
|
27
|
+
|
|
28
|
+
Requires `@mmerterden/dev-toolkit-mcp` >= v2.9.0 for the App Store audit path.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **Eight gates and features that reported success while doing nothing.** Each
|
|
33
|
+
exited 0 without doing its job, and in six cases the guarding smoke test
|
|
34
|
+
hand-wrote a fixture with the wrong shape, so the suite stayed green.
|
|
35
|
+
`npx @mmerterden/multi-agent-pipeline uninstall` was a silent no-op (the
|
|
36
|
+
`isMainModule` guard compared `import.meta.url` to `argv[1]`, which is
|
|
37
|
+
`index.js` under the bin dispatcher). `cost-budget-check.mjs` probed
|
|
38
|
+
`.worktrees/<id>/phase-tracker.json` while `phase-tracker.sh` writes
|
|
39
|
+
`~/.claude/logs/multi-agent/<id>/tracker-state.json`, so the cost ceiling
|
|
40
|
+
could never fire; it also now prices `tokens_cached`. `classify-plan-safety.mjs`
|
|
41
|
+
required `score >= 50` while its heaviest rule is 35, so no single heavy
|
|
42
|
+
signal could trip the autopilot pause its own contract promises.
|
|
43
|
+
`triage-memory.mjs` and `learnings-ledger.mjs` derived the repo slug from
|
|
44
|
+
`--show-toplevel`, which inside a worktree is the task id, sharding the
|
|
45
|
+
per-repo store one directory per task; they now use `--git-common-dir`.
|
|
46
|
+
`state-2.0.0-to-2.1.0.mjs` emitted keys `agent-state.schema.json` rejects
|
|
47
|
+
under `additionalProperties: false`. `memory-load.sh` read `preferences.json`
|
|
48
|
+
while the installer only writes `multi-agent-preferences.json`, so per-repo
|
|
49
|
+
memory was dead in production. `smoke-cross-cli-behavior.sh` had unquoted
|
|
50
|
+
command substitution (SC2046) that made two gates pass while violations were
|
|
51
|
+
present. The CI leak gate in all three workflows grepped 5 of the 23
|
|
52
|
+
forbidden patterns and was `release.yml`'s only PII gate; all three now call
|
|
53
|
+
`smoke-personal-data.sh --root`, keeping one pattern list.
|
|
54
|
+
- **shellcheck moves from `error` to `warning` severity.** `error` returns zero
|
|
55
|
+
findings across all 175 scripts, so the gate could not catch this repo's
|
|
56
|
+
actual defect class - SC2046 is a warning. Noisy codes are excluded with a
|
|
57
|
+
per-code rationale. Four real findings surfaced and are fixed, including two
|
|
58
|
+
unguarded `cd` calls in `smoke-shadow-git.sh`, one preceding a relative
|
|
59
|
+
`rm -rf`.
|
|
60
|
+
- **`credential-store.sh` resolves logical keys through
|
|
61
|
+
`prefs.global.keychainMapping`.** `get github` searched the backend for a
|
|
62
|
+
credential literally named "github" and returned empty with exit 1 -
|
|
63
|
+
indistinguishable from "no such credential" - because the entry is named by
|
|
64
|
+
the mapping. Applied in `get`/`set`/`delete`, falling back to the logical key
|
|
65
|
+
when no mapping exists.
|
|
66
|
+
|
|
67
|
+
### Changed
|
|
68
|
+
|
|
69
|
+
- **`ios_app_store_audit` catalog grows to 18 rules**, requiring
|
|
70
|
+
`@mmerterden/dev-toolkit-mcp` >= v2.9.0. Adds `sdk-floor` (ITMS-90725, the
|
|
71
|
+
iOS 26 / Xcode 26 build floor in force since 2026-04-28). `embedded-sdk`'s
|
|
72
|
+
missing framework privacy manifest moves from a `5.1.1` WARNING to
|
|
73
|
+
`ITMS-91061` ERROR, an enforced rejection since 2025-02-12, so archives that
|
|
74
|
+
previously passed with a warning now fail. The rule count and the declared
|
|
75
|
+
minimum are updated across all nine files that asserted them.
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
|
|
79
|
+
- **`/multi-agent:refactor` band E (Step 0c)**: the companion dev-toolkit MCP
|
|
80
|
+
server is now in scope. The step researches current MCP practice (protocol
|
|
81
|
+
revisions and SDK releases, host-client conventions, peer servers, the
|
|
82
|
+
platform tooling it wraps, field practice) and audits the toolkit repo
|
|
83
|
+
against it: syntax, stdout hygiene (stdout carries the JSON-RPC frames),
|
|
84
|
+
advertised tool counts vs reality, `files[]` coverage, dependency freshness.
|
|
85
|
+
Findings land in the merged Step 4 plan as band-E items, applied in that repo
|
|
86
|
+
and shipped by sync. New focus filter: `/multi-agent:refactor dev-toolkit`.
|
|
87
|
+
- **`/multi-agent:sync` Step 3d**: ships the dev-toolkit MCP server when it
|
|
88
|
+
moved (dirty tree, unpushed commits, or an untagged version). Seven ship
|
|
89
|
+
gates run before anything leaves the machine, including a `tools/list`
|
|
90
|
+
stdio handshake that must answer with a non-zero tool count, an
|
|
91
|
+
advertised-count match against README and `package.json`, an
|
|
92
|
+
`npm pack --dry-run` check that every runtime `tools/*/` directory is inside
|
|
93
|
+
`files[]`, and a version-contract check against the minimums pipeline skills
|
|
94
|
+
declare. Publish goes to the registry from that repo's `publishConfig`
|
|
95
|
+
through a throwaway `--userconfig` built from the `npm` logical Keychain key.
|
|
96
|
+
Outside autopilot / `release` it asks first; `/multi-agent:sync dev-toolkit`
|
|
97
|
+
runs only this step.
|
|
98
|
+
- **`global.devToolkit` preference** (schema + template): `enabled`, `label`,
|
|
99
|
+
`localPath`, `mcpServerName`, `packageName`, `registry`, `repoUrl`. Both
|
|
100
|
+
commands fall back to auto-detecting the repo from the `mcpServers`
|
|
101
|
+
registration when `localPath` is absent, and skip silently when nothing
|
|
102
|
+
resolves. No path is ever hardcoded.
|
|
103
|
+
|
|
104
|
+
- **`smoke-command-inventory.sh`**: the command count is now DERIVED from
|
|
105
|
+
`pipeline/commands/multi-agent/*/` and the prose must agree with the tree
|
|
106
|
+
(contract header, both sync surfaces, every command listed on all three, and a
|
|
107
|
+
`shared/core` skill counterpart per command). `smoke-generate-issue.sh` and
|
|
108
|
+
`smoke-review-readiness.sh` stopped asserting the literal `41` and now compare
|
|
109
|
+
against the derived count too.
|
|
110
|
+
- **`lint-mcp-refs.mjs`**: every `mcp__<server>__<tool>` reference in
|
|
111
|
+
`commands/`, `skills/` and `multi-agent-refs/` must name a known registered
|
|
112
|
+
MCP server, and when the companion toolkit resolves locally the referenced
|
|
113
|
+
`dev-toolkit` tools are checked against its live `tools/list`. Wired into
|
|
114
|
+
`npm test` and `npm run test:quick`.
|
|
115
|
+
- **`validate-prefs.mjs`**: validates `preferences-template.json` against
|
|
116
|
+
`prefs.schema.json` (hard failure) and the local preferences file (advisory,
|
|
117
|
+
`--strict-live` to enforce). Dev-only (ajv), excluded from the published
|
|
118
|
+
package so the runtime stays zero-dep.
|
|
119
|
+
- `design-check` is registered in the command inventory: contract list +
|
|
120
|
+
category row, both sync inventories, and the Copilot mirror. Inventory is 42
|
|
121
|
+
commands.
|
|
122
|
+
|
|
123
|
+
### Fixed
|
|
124
|
+
|
|
125
|
+
- **Every `mcp__dev_toolkit__*` reference is now `mcp__dev-toolkit__*`** (55
|
|
126
|
+
lines across 10 files). A host composes MCP tool names as
|
|
127
|
+
`mcp__<registered-server-name>__<tool>` and the server registers as
|
|
128
|
+
`dev-toolkit`, so the snake_case form named tools that do not exist. The worst
|
|
129
|
+
case was silent: `design-check`'s `allowed-tools` allowlist matched nothing, so
|
|
130
|
+
the skill was denied the tools it needs, and `smoke-compliance-skills.sh`
|
|
131
|
+
asserted the wrong spelling and kept the gate green.
|
|
132
|
+
- `prefs.schema.json` accepted neither the template it describes nor a real
|
|
133
|
+
preferences file. Now declared: `global.modelFallback`, the `_*Template`
|
|
134
|
+
documentation blocks, nullable `defaultJiraKey`, `keychainMapping.figma_pat` /
|
|
135
|
+
`figma_user` / `claude_oauth_token` / `claude_oauth_token_fallback` (all four
|
|
136
|
+
resolved by shipped flows), project-level `componentDevWorkflow`, and a
|
|
137
|
+
`defaultReviewers` ceiling that fits real reviewer groups (10 -> 40).
|
|
138
|
+
- `global.derivedSkillSources` is now declared in `prefs.schema.json`. It was
|
|
139
|
+
used by refactor Step 0b and shipped in the preferences template, but the
|
|
140
|
+
strict (`additionalProperties: false`) global block rejected it.
|
|
141
|
+
- `/multi-agent:sync` Step 3d prefers the toolkit repo's own gate script
|
|
142
|
+
(`npm run gates`) over the inline gate list, so the definition lives in the
|
|
143
|
+
repo being shipped and the two cannot drift apart.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## [12.5.0] - 2026-07-24
|
|
148
|
+
|
|
149
|
+
Repo learning loop: repeated runs on the same repo produce better and cheaper
|
|
150
|
+
output over time. Plus a round of worktree hardening.
|
|
151
|
+
|
|
152
|
+
### Added
|
|
153
|
+
|
|
154
|
+
- **Freshness gate** for the triage corpus: `triage-memory` stamps each stored
|
|
155
|
+
row with the file's git `file_sha`, and queries annotate `stale=true` when
|
|
156
|
+
the file changed since the lesson was recorded, so dead lessons stop
|
|
157
|
+
resurfacing in later runs.
|
|
158
|
+
- **Causal diagnosis** on lessons: `learnings-ledger` rows carry an optional
|
|
159
|
+
`diagnosis` (the verbal root-cause "why", per Reflexion), and Phase 4's
|
|
160
|
+
lesson-memory loop now records it. `brief` renders it as `(why: ...)` so the
|
|
161
|
+
reason, not just the outcome, re-enters Phase 1 on the next run.
|
|
162
|
+
- **`learning-curve.mjs`** (+ smoke): a time-bucketed trend over
|
|
163
|
+
`metrics.jsonl` (first-pass clean rate, review cycles, rework per task,
|
|
164
|
+
tokens per task, cache ratio) that shows whether a repo's runs are improving.
|
|
165
|
+
- **`prompt-assembly.md`**: stable-prefix prompt-cache guidance, referenced
|
|
166
|
+
from `phases.md`, so lazy-loaded phase docs stay cache-friendly.
|
|
167
|
+
|
|
168
|
+
### Changed
|
|
169
|
+
|
|
170
|
+
- Worktree handling hardened: `.worktrees/` is now a first-class member of the
|
|
171
|
+
traversal-prune skip set (`node_modules`, `Pods`, `.build`, `DerivedData`,
|
|
172
|
+
`.next`) across every tree walker (`repo-map`, `repo-cache`,
|
|
173
|
+
`extract-conventions`, `shadow-git`), so no walker descends into a worktree
|
|
174
|
+
checkout. Phase 0 gains an explicit residue-guard + traversal-prune contract;
|
|
175
|
+
Phase 5 heals stale worktree admin state before recreating a worktree.
|
|
176
|
+
- `eval-mine-corpus` now reads the corpus from the per-repo memory dir it is
|
|
177
|
+
actually written to (was a path that never received data).
|
|
178
|
+
- Phase-doc total token budget recalibrated 50000 -> 51000 for the new
|
|
179
|
+
contracts (prose compressed first; every per-phase max still passes).
|
|
180
|
+
|
|
181
|
+
### Fixed
|
|
182
|
+
|
|
183
|
+
- `gc-worktrees.sh` anchors the repo on the main worktree and resolves paths on
|
|
184
|
+
both sides, so orphan detection no longer misfires from inside a worktree.
|
|
185
|
+
|
|
17
186
|
## [12.4.0] - 2026-07-23
|
|
18
187
|
|
|
19
188
|
User-defined routines: manage your own recurring, project-specific jobs as
|
package/README.md
CHANGED
|
@@ -64,7 +64,7 @@ The discipline behind all of this — bounded loops, evidence gates, token-budge
|
|
|
64
64
|
| Local | `/multi-agent:local "task"` | Full pipeline, current branch (no worktree) |
|
|
65
65
|
| Finish | `/multi-agent:finish` | Run the review→test→commit→report tail over local work |
|
|
66
66
|
|
|
67
|
-
Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`. Full list: `/multi-agent:help`.
|
|
67
|
+
Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. Full list: `/multi-agent:help`.
|
|
68
68
|
|
|
69
69
|
## Stacks
|
|
70
70
|
|
package/docs/features.md
CHANGED
|
@@ -249,6 +249,26 @@ Pipeline learns behavioral signals (feedback corrections, project constraints, e
|
|
|
249
249
|
|
|
250
250
|
**What does NOT go in memory**: architecture, code patterns, build gotchas, design decisions — those belong in the knowledge base.
|
|
251
251
|
|
|
252
|
+
### Lesson Diagnosis (Reflexion)
|
|
253
|
+
|
|
254
|
+
Phase 4's lesson-memory loop records the causal root cause of each fix (`--diagnosis`), not just the outcome: the verbal "why" that prevents recurrence (Reflexion). `learnings-ledger.mjs brief` renders it as `(why: ...)` back into Phase 1 + triage on the next run, so the reason re-enters the loop, not only the symptom.
|
|
255
|
+
|
|
256
|
+
### Corpus Freshness Gate
|
|
257
|
+
|
|
258
|
+
Each triage-corpus row is stamped with the file's git `file_sha`; a query annotates `stale=true` when the file changed since the lesson was recorded, so lessons about code that has since moved on stop resurfacing.
|
|
259
|
+
|
|
260
|
+
### Learning Curve
|
|
261
|
+
|
|
262
|
+
`learning-curve.mjs` renders a time-bucketed trend over `metrics.jsonl` (first-pass clean rate, review cycles, rework per task, tokens per task, cache ratio) so a repo's runs can be shown getting better and cheaper over time. Flags: `--bucket=<days>`, `--since`, `--json`, `--markdown`.
|
|
263
|
+
|
|
264
|
+
## User-Defined Routines
|
|
265
|
+
|
|
266
|
+
Turn a recurring, project-specific job into a first-class `/multi-agent:<name>` command.
|
|
267
|
+
|
|
268
|
+
- **`/multi-agent:save`** distills candidate routines from the work just done this session (and named procedures in `~/.claude/CLAUDE.md`), offers them in a multi-select picker (pick one, combine several into one, or free-text a new one), and registers the chosen routine.
|
|
269
|
+
- **`/multi-agent:routines`** lists saved routines (in `outputLanguage`); **`/multi-agent:forget`** removes one (guarded: never touches a shipped command).
|
|
270
|
+
- Backed by `routine-registry.mjs`. Saved routines are `local-only: true` command dirs + a `prefs.global.routines` entry: preserved across `/multi-agent:update` by install snapshot/restore, never synced to the public repo, and never counted in the command inventory.
|
|
271
|
+
|
|
252
272
|
## Integrations
|
|
253
273
|
|
|
254
274
|
### Figma / Component Generation (dispatched to marketplace plugins)
|
package/index.js
CHANGED
|
@@ -36,7 +36,13 @@ if (command === "--version" || command === "-v" || command === "version") {
|
|
|
36
36
|
} else if (!command || command === "install") {
|
|
37
37
|
await import(pathToFileURL(join(__dirname, "install.js")).href);
|
|
38
38
|
} else if (command === "uninstall" || command === "delete") {
|
|
39
|
-
await import(
|
|
39
|
+
const { main } = await import(
|
|
40
|
+
pathToFileURL(join(__dirname, "pipeline", "scripts", "uninstall.mjs")).href
|
|
41
|
+
);
|
|
42
|
+
await main().catch((e) => {
|
|
43
|
+
console.error("uninstall failed:", e.message);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
});
|
|
40
46
|
} else if (command === "help") {
|
|
41
47
|
console.log(`
|
|
42
48
|
multi-agent-pipeline — 8-phase AI development pipeline
|
|
@@ -13,5 +13,6 @@ export const DEV_ONLY_SCRIPTS = Object.freeze([
|
|
|
13
13
|
"smoke-figma-config-schema.sh",
|
|
14
14
|
"smoke-personal-data.sh", // scanner contains the patterns it detects
|
|
15
15
|
"smoke-install-leak-gate.sh", // same — scanner shadows the install pipeline
|
|
16
|
+
"validate-prefs.mjs", // needs ajv (devDependency); end users have no node_modules here
|
|
16
17
|
"fixtures", // smoke test fixtures live in the repo only, never ship to users
|
|
17
18
|
]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmerterden/multi-agent-pipeline",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.6.0",
|
|
4
4
|
"description": "8-phase AI development pipeline with full orchestration on Claude Code and Copilot 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",
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
},
|
|
15
15
|
"scripts": {
|
|
16
16
|
"start": "node index.js",
|
|
17
|
-
"test": "node --test test/*.test.mjs && node pipeline/scripts/run-smokes.mjs && node pipeline/scripts/lint-skills.mjs && node pipeline/scripts/eval-triage.mjs && node pipeline/scripts/eval-golden-tasks.mjs && node pipeline/scripts/eval-intent.mjs && node pipeline/scripts/validate-schemas.mjs",
|
|
17
|
+
"test": "node --test test/*.test.mjs && node pipeline/scripts/run-smokes.mjs && node pipeline/scripts/lint-skills.mjs && node pipeline/scripts/lint-mcp-refs.mjs && node pipeline/scripts/eval-triage.mjs && node pipeline/scripts/eval-golden-tasks.mjs && node pipeline/scripts/eval-intent.mjs && node pipeline/scripts/validate-schemas.mjs && node pipeline/scripts/validate-prefs.mjs",
|
|
18
18
|
"test:unit": "node --test test/*.test.mjs",
|
|
19
19
|
"test:smoke": "node pipeline/scripts/run-smokes.mjs",
|
|
20
20
|
"lint:skills": "node pipeline/scripts/lint-skills.mjs",
|
|
21
|
-
"test:quick": "node --test test/*.test.mjs && node pipeline/scripts/lint-skills.mjs",
|
|
21
|
+
"test:quick": "node --test test/*.test.mjs && node pipeline/scripts/lint-skills.mjs && node pipeline/scripts/lint-mcp-refs.mjs",
|
|
22
22
|
"test:coverage": "c8 --check-coverage --reporter=text --reporter=lcov node --test test/*.test.mjs && c8 report",
|
|
23
23
|
"lint": "eslint .",
|
|
24
24
|
"lint:fix": "eslint . --fix",
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"LICENSE",
|
|
73
73
|
"!pipeline/scripts/smoke-figma-config-schema.sh",
|
|
74
74
|
"!pipeline/scripts/smoke-personal-data.sh",
|
|
75
|
+
"!pipeline/scripts/validate-prefs.mjs",
|
|
75
76
|
"!pipeline/scripts/smoke-install-leak-gate.sh",
|
|
76
77
|
"!docs/internal/**"
|
|
77
78
|
],
|
|
@@ -85,7 +85,7 @@ Example: new `MANAGE_EXTERNAL_STORAGE` permission → `(google-play-compliance /
|
|
|
85
85
|
|
|
86
86
|
The two SKILL.md files contain tabular rule catalogs:
|
|
87
87
|
|
|
88
|
-
- **apple-archive-compliance** -
|
|
88
|
+
- **apple-archive-compliance** - 18 rules (privacy-manifest, required-reason-api, info-plist, code-signing, embedded-sdk, entitlement, asset-validation, binary-size, team-id-consistency, provisioning-profile, swift-abi, extension-signing, ipv6-compliance, debug-tool-leak, production-hygiene, duplicate-resource, dead-reference, sdk-floor) with ITMS codes + App Store Review Guideline refs.
|
|
89
89
|
- **google-play-compliance** - 21 rules across Technical / Security / Privacy / Hygiene categories with Play policy refs.
|
|
90
90
|
|
|
91
91
|
Cite rule + ref in your Output Format's `Category:` line so the code-reviewer and triage layers inherit the reference text unchanged.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Scan an .xcarchive for Apple App Store Review compliance (
|
|
2
|
+
description: Scan an .xcarchive for Apple App Store Review compliance (18-rule deep audit)
|
|
3
3
|
allowed-tools: Bash, Read, Glob
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Run the `ios_app_store_audit` MCP tool (shipped in `@mmerterden/dev-toolkit-mcp` ≥ v2.
|
|
7
|
-
on an iOS archive. Backed by the same
|
|
6
|
+
Run the `ios_app_store_audit` MCP tool (shipped in `@mmerterden/dev-toolkit-mcp` ≥ v2.9.0)
|
|
7
|
+
on an iOS archive. Backed by the same 18-rule catalog as `/multi-agent:test "store-ready"`
|
|
8
8
|
- this command is the lighter, post-hoc form (no platform-detect, no UI sweep).
|
|
9
9
|
|
|
10
10
|
> **v8.4.0 migration note:** The standalone `~/ArchiveGuard/.build/release/archive-guard`
|
|
11
|
-
> binary has been retired. The
|
|
11
|
+
> binary has been retired. The 18 rules live in
|
|
12
12
|
> `dev-toolkit-mcp/tools/ios-app-store-audit/rules/` as a pure-Node port. Output JSON
|
|
13
13
|
> shape is unchanged.
|
|
14
14
|
|
|
@@ -21,7 +21,7 @@ on an iOS archive. Backed by the same 17-rule catalog as `/multi-agent:test "sto
|
|
|
21
21
|
2. Ask user which archive to scan (or use the argument if provided: $ARGUMENTS).
|
|
22
22
|
3. Run the scan - preferred mode is the native MCP tool call:
|
|
23
23
|
```
|
|
24
|
-
|
|
24
|
+
mcp__dev-toolkit__ios_app_store_audit({
|
|
25
25
|
archive_path: "<archive_path>",
|
|
26
26
|
rules: "all" // "all" | "core" | "deep" | csv of ruleIDs
|
|
27
27
|
})
|
|
@@ -83,6 +83,7 @@ Lib scripts (`~/.claude/lib/`):
|
|
|
83
83
|
| `create-jira ["desc"] [figma-url] [swagger-url]` | Create a standards-compliant Jira issue: asks the type (**Task** / **Bug** / **Story**), mines the project's recent same-type issues for conventions (summary format, labels, priority, test-scenario style), detects the active sprint, drafts from a standard template with auto-sizing sections (Design Reference / API Contract / Screenshots appear only when their source is given), asks about unknown fields, then full draft preview + explicit approval before create. No worktree, no commits. |
|
|
84
84
|
| `test` or `test [args]` | UI Bug Hunter - screenshot + tap + analyze on booted simulator via MCP (read `$HOME/.claude/commands/sim-test.md`). `/multi-agent:test` also resolves here via the `commands/multi-agent/test/SKILL.md` delegate. |
|
|
85
85
|
| `manual-test [#id]` | Phase 5 standalone Manual Test - checks out the task branch, prints Xcode / SourceTree hints, waits for user verdict (`ok` / `fix: ...`). |
|
|
86
|
+
| `design-check [scope]` | Mock-mode vs Figma design audit (iOS / Android, local-only). Pick repo + module → mock-support feasibility gate (halts if unsupported) → **scenario inventory** (every launch arg / scenario case / scenario code / fixture / deep link becomes a countable target with file+line evidence) → scope resolve (empty = module, screen, `screen@variant`, target id, Figma URLs, `--resume`) → worktree Debug build + mock launch → drive EACH target by its own driver, capturing tap-reachable sub-states with it → per-variant pixel + px-spacing + typography + color compare → report (side-by-side + annotated overlay + stacked findings + fix prompt) exported to `~/DesignChecks/` as HTML + PDF (+ Confluence if enabled). **Coverage gate**: a target is audited or skipped with a concrete reason, else the run is reported INCOMPLETE with the missing ids. No commits, no CI. |
|
|
86
87
|
| `stack [ios\|android\|backend\|mobile\|all]` | Swap skills for next conversation. No arg = show current stack. |
|
|
87
88
|
| `language [en\|tr]` | Show or set the assistant `outputLanguage` (explanations and chat replies). `promptLanguage` is locked to `en` and is not toggleable. No arg = show current `outputLanguage`. With `en` or `tr` = set and persist `outputLanguage`. External payloads (commits, PR bodies, Jira) stay English. |
|
|
88
89
|
| `setup` | Keychain token + Git Identity onboarding |
|
|
@@ -134,6 +135,7 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
|
|
|
134
135
|
| Audit tools (Phase 5/6) | `$HOME/.claude/multi-agent-refs/audit-guide.md` |
|
|
135
136
|
| `test` | `$HOME/.claude/commands/sim-test.md` (colon-form `/multi-agent:test` uses the delegate at `commands/multi-agent/test/SKILL.md`) |
|
|
136
137
|
| `manual-test` | `$HOME/.claude/commands/multi-agent/manual-test/SKILL.md` |
|
|
138
|
+
| `design-check` | `$HOME/.claude/commands/multi-agent/design-check/SKILL.md` |
|
|
137
139
|
|
|
138
140
|
**Modifier flags** (`--dev`, `--local`, `autopilot`) and **ops** (`status`, `log`, `resume`, `kill`, `clear-logs`, `purge`, `review`) are parsed inline by this file - no separate spec files, they compose with the pipeline or do one-shot work.
|
|
139
141
|
|