@mmerterden/multi-agent-pipeline 20.4.0 → 20.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +10 -0
  3. package/docs/facts.json +5 -4
  4. package/install/_dev-only-files.mjs +1 -0
  5. package/manifest.json +44 -41
  6. package/package.json +4 -3
  7. package/pipeline/agents/android-architect.md +1 -0
  8. package/pipeline/agents/backend-architect.md +1 -0
  9. package/pipeline/agents/bulk-reader.md +1 -0
  10. package/pipeline/agents/code-reviewer.md +2 -1
  11. package/pipeline/agents/dev-critic.md +1 -0
  12. package/pipeline/agents/explorer.md +1 -0
  13. package/pipeline/agents/ios-architect.md +1 -0
  14. package/pipeline/agents/plan-critic.md +1 -0
  15. package/pipeline/agents/security-auditor.md +1 -0
  16. package/pipeline/agents/task-clarifier.md +1 -0
  17. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +1 -1
  18. package/pipeline/commands/multi-agent/update/SKILL.md +3 -1
  19. package/pipeline/lib/confusables.json +100 -0
  20. package/pipeline/lib/normalize-text.mjs +48 -0
  21. package/pipeline/lib/outbound-gate.mjs +10 -1
  22. package/pipeline/lib/redact.mjs +53 -0
  23. package/pipeline/lib/vercel-deploy.sh +5 -7
  24. package/pipeline/multi-agent-refs/features/unattended-security.md +5 -0
  25. package/pipeline/schemas/autopilot-config.schema.json +5 -0
  26. package/pipeline/scripts/_autopilot-outcomes.mjs +2 -0
  27. package/pipeline/scripts/agent-guard.py +30 -1
  28. package/pipeline/scripts/audit-log-rotate.sh +3 -0
  29. package/pipeline/scripts/audit-log.sh +10 -2
  30. package/pipeline/scripts/autopilot-intake.mjs +17 -15
  31. package/pipeline/scripts/autopilot-publish.mjs +16 -1
  32. package/pipeline/scripts/autopilot-runner.mjs +20 -0
  33. package/pipeline/scripts/log-metric.sh +5 -0
  34. package/pipeline/scripts/pr-request.mjs +9 -3
  35. package/pipeline/scripts/pre-commit-check.sh +59 -16
  36. package/pipeline/scripts/pre-push-check.sh +3 -3
  37. package/pipeline/scripts/run-ui-tests.sh +5 -5
  38. package/pipeline/scripts/update-check.sh +73 -21
  39. package/pipeline/scripts/website-deploy-commit.sh +3 -2
  40. package/pipeline/skills/.skill-manifest.json +2 -2
  41. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +1 -1
package/CHANGELOG.md CHANGED
@@ -16,6 +16,40 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
18
 
19
+ ## [20.6.0] - 2026-09-26
20
+
21
+ ### Added
22
+
23
+ - `pipeline/lib/normalize-text.mjs` and `pipeline/lib/confusables.json`: NFKC, invisible characters removed and look-alike letters and dashes mapped to ASCII. `agent-guard.py` reads the same table.
24
+ - `eval-guard-robustness.mjs` (in `npm test`): each attribution trailer and every provider in `secret-patterns.json` is passed through disguises (zero-width space, word joiner, Cyrillic letter, non-breaking hyphen) and must still be blocked by `agent-guard`, the outbound gate, the commit hook and the redactor; ordinary Turkish text, emoji and Unicode in code must still pass.
25
+ - `check-rewrite-overlap.mjs` (maintainer tool, not shipped): the share of a rewritten file's 6-word sequences that also appear in its source, with a `--max` threshold.
26
+
27
+ ### Changed
28
+
29
+ - The npm `license` field is `MIT AND LicenseRef-PolyForm-Perimeter-1.0.0`, and `LICENSE` names the skills that stay under PolyForm Perimeter 1.0.0 (listed in `NOTICE-swift-ios-skills.md`). Nothing was removed; the label now matches what the package carries.
30
+
31
+ ### Fixed
32
+
33
+ - `agent-guard` blocked an attribution trailer only when it was written in plain ASCII; one written with a zero-width space, a Cyrillic letter, a non-breaking hyphen or a fullwidth colon passed. The rule now also matches the folded text.
34
+ - The outbound gate, `redact.mjs` and `pre-commit-check.sh` recognise a credential that carries an invisible character. `smoke-secret-parity.sh` runs every provider with a zero-width space through both surfaces.
35
+ - The pre-commit high-entropy scan no longer blocks long identifiers made of words, such as the Info.plist keys `UIApplicationSceneManifest_Generation` and `UISupportedInterfaceOrientations` behind the `INFOPLIST_KEY_` build-setting prefix. A letters-only token passes only when its CamelCase, `_` and `-` segments read like words; random mixed-case tokens are still blocked, including letters-only ones that the previous CamelCase exemption let through. The leading `+` of a staged diff line is stripped before candidates are extracted, so a token at column 0 is judged by its own shape.
36
+
37
+ ## [20.5.0] - 2026-09-25
38
+
39
+ ### Added
40
+
41
+ - `pipeline/lib/redact.mjs` replaces every credential the outbound gate recognises with `[redacted:<rule>]`. `audit-log.sh` and `log-metric.sh` pass each line through it, so a token copied into an error message never reaches `audit.jsonl` or `metrics.jsonl`; the rest of the message is kept for debugging. `smoke-log-redaction.sh` runs every provider in `secret-patterns.json` through both writers.
42
+ - Autopilot `githubAssignee` (default `@me`): GitHub intake lists only issues assigned to the operator, as the Jira search already does. `"*"` lists every labelled issue.
43
+ - Every persona declares `disallowedTools: Write, Edit, NotebookEdit`; `lint-personas` requires it. MCP tools stay inherited.
44
+
45
+ ### Fixed
46
+
47
+ - Autopilot refuses to push a commit whose message would close an issue on merge, and the closing-keyword check recognises the full issue URL form.
48
+ - Autopilot takes nothing while the installed version is below the published `required` floor (`blocked-version-floor`, not an attempt), instead of spending a session per queued item on a run whose Phase 0 halts.
49
+ - `update-check.sh` reads the installed version marker before any repo clone, so a stale clone no longer reports a forced update after every update. It also treats a future cache stamp as stale, writes the cache atomically, remembers an unreachable registry for an hour, honours `updateCheck.ttlHours`, and orders a prerelease below its release.
50
+ - `/multi-agent:update` skips the download and reinstall when already current.
51
+ - `audit-log.sh` escapes newlines and tabs, and the audit file and its archives are created 0600.
52
+
19
53
  ## [20.4.0] - 2026-09-25
20
54
 
21
55
  ### Changed
package/LICENSE CHANGED
@@ -19,3 +19,13 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
+
23
+ ---
24
+
25
+ Third-party content under another license
26
+
27
+ The skills listed in pipeline/skills/shared/external/NOTICE-swift-ios-skills.md
28
+ are derived from dpearson2699/swift-ios-skills and remain under the PolyForm
29
+ Perimeter License 1.0.0 (https://polyformproject.org/licenses/perimeter/1.0.0),
30
+ not the MIT License above. That license's Required Notice is carried in the
31
+ NOTICE file. Other vendored skills keep the licenses their NOTICE files name.
package/docs/facts.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$comment": "Generated by pipeline/scripts/gen-facts.mjs. Do not hand-edit: the site reads this, and a number edited here instead of at its source is the drift this file removes.",
3
- "generatedAt": "2026-09-25",
4
- "version": "20.4.0",
3
+ "generatedAt": "2026-09-26",
4
+ "version": "20.6.0",
5
5
  "phaseSchema": 2,
6
6
  "phases": [
7
7
  {
@@ -40,13 +40,14 @@
40
40
  "skillCountAll": 218,
41
41
  "agentCount": 10,
42
42
  "hosts": ["Claude Code", "Codex CLI", "Copilot CLI"],
43
- "toolCount": 118,
43
+ "toolCount": 124,
44
44
  "toolCategories": {
45
45
  "ios": 40,
46
46
  "android": 31,
47
47
  "web": 18,
48
48
  "code": 8,
49
49
  "design": 7,
50
+ "voice": 6,
50
51
  "pass": 4,
51
52
  "context": 3,
52
53
  "agent": 2,
@@ -55,5 +56,5 @@
55
56
  "media": 1
56
57
  },
57
58
  "pluginSkillCount": 245,
58
- "toolkitVersion": "3.15.0"
59
+ "toolkitVersion": "3.16.0"
59
60
  }
@@ -66,6 +66,7 @@ const DEV_ONLY_TOOLING = Object.freeze([
66
66
  "lint-personas.mjs", // imports install/_codex-agents.mjs, which never ships to scripts/
67
67
  "lint-mcp-refs.mjs",
68
68
  "check-md-links.mjs",
69
+ "check-rewrite-overlap.mjs", // compares a rewrite against a source only a maintainer has
69
70
  "gen-ref-toc.mjs", // regenerates the repo's own reference tree; an install has no pipeline/
70
71
  "validate-schemas.mjs", // validates the repo's own schema files, needs ajv
71
72
  "sync-parity-check.sh",
package/manifest.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.4.0",
4
- "commit": "47524b22c14c8b28503ea0707ac4b7d7dfa3718f",
5
- "generatedAt": "2026-09-25T15:35:01.768Z",
3
+ "version": "20.6.0",
4
+ "commit": "3fc39a82ab127eef5b3e5004ebc279232a2d020c",
5
+ "generatedAt": "2026-09-26T14:39:59.575Z",
6
6
  "algorithm": "sha256",
7
- "fileCount": 1217,
7
+ "fileCount": 1220,
8
8
  "files": {
9
- "CHANGELOG.md": "3d7abc887673cc1897d4eea75c3db3d4cd2a396a6cb8148c3e1e607e29c2984b",
10
- "LICENSE": "8d8c51aaf1e1538b180c69965fa038db71be86798cc3e26a143bebfefe16a43e",
9
+ "CHANGELOG.md": "67d8197e2f23337512cca774519c4f111868adbf736f284c2919a49ae684b6c5",
10
+ "LICENSE": "ab7264a940291b3fd39e40133c06772351490f5e33c88e20fd5d8333227abfa0",
11
11
  "README.md": "0613eebb0b38062bd94c44043595d1950b5c9b470874dd8e402c052fd20960cf",
12
12
  "README.tr.md": "0c6b5e6943d6c3d3bf3a7ed99c705fb9a78d15d7722e6252f58404d3f6d3524d",
13
13
  "SECURITY.md": "0eb89553ddcfc56bfe9712315b55a6630ee2f579631aaeccd6ad24f8ac769a0b",
@@ -33,7 +33,7 @@
33
33
  "docs/best-practices.md": "f8b75b0d38b5896a6a852bb30a1edddeb24dab8b5b7b1d9313290e1241c72024",
34
34
  "docs/ecosystem.md": "e6c00f30e95b5e178f77bdfbefd686c8a4164f39c03865a89ab23465d1a37acf",
35
35
  "docs/engineering.md": "550528cd47c7d2c921729c68d0782a00ac8e77a4bdfec479f6749f9c3235d188",
36
- "docs/facts.json": "5b4dd591c0972a9021bb96761715555b63a2de819d4207439f32c27a3193f01c",
36
+ "docs/facts.json": "34a26f599d40a37e2bdd7f35b208ddb211c444b854e942adb88132c96f8ecba6",
37
37
  "docs/features.md": "6c9f0efb00c683e6f611c440c87847b187f8b0eee59e9e812f3a241695bc2ae1",
38
38
  "docs/performance.md": "bbf2f3922c25dcba0c1a9e69ef420e3871a729af5b35009a49b48a5d3c5cd151",
39
39
  "docs/recovery-guide.md": "59a8f1b66b34cb9ff5507b3d54dac3b9915e184aa044d9c758d18cac818d510e",
@@ -44,7 +44,7 @@
44
44
  "install/_codex-instructions.mjs": "add75ffc0e8d8db0e3bf275b46017a897a4cadb83dc66c7d3affd73bcead20f8",
45
45
  "install/_common.mjs": "8e7dac0c08e0712b3fec5ce6b8db08ccfb4bd3e36d98d22d9e1df8dcd5371250",
46
46
  "install/_copilot-instructions.mjs": "73e4b82b2af0f3e1669f772fa0788dac6b540c131e56d5fe38dcf29be85cc019",
47
- "install/_dev-only-files.mjs": "8f8327a19fd03f8aaf7c5f739391ea4c97d47a59bb936e9b8cb485a3e59dbfe6",
47
+ "install/_dev-only-files.mjs": "51285901f3b650ff22a76f8c05b23c69b9ceb6fe3da3333cece9e0caf65065a4",
48
48
  "install/_managed-block.mjs": "7328728a7c82744b66218034389fc295d1384311daa5415408afa94be14303d3",
49
49
  "install/_mcp-register.mjs": "56a785984afbba54aedc3677652ca4ee990d98d45b6599a3937cb656cad53b46",
50
50
  "install/_platform-filter.mjs": "1c66acc79da0da0c1aa5a57050989e84198c3153e6437ee03f1d3bacbb12ff2c",
@@ -61,17 +61,17 @@
61
61
  "install/templates/multi-agent-autopilot-awake.plist.template": "ddd25c76c56fcbb38a89de8e35637372d70ace993d6bc487a88ca9cfb702fe1f",
62
62
  "install/templates/multi-agent-autopilot.plist.template": "122c8a61cd927edd99375d6e3da40f1d42bcceed5b6641785c8b28bb930bc77e",
63
63
  "install/unattended-profile-legacy.json": "f52e86b998956f09ad306b1735a6c10b58580d7082d8a55665a4c6bb15c3aa1f",
64
- "package.json": "ef6a78d030798ebfd4823be3c4b884ce9a7b24a04d1b1ea9e2671d6c8ef8ec3c",
65
- "pipeline/agents/android-architect.md": "baa5787b3a4c800dd065e27e05f44462927c9938c8bb676c80f18cb10e2b12c4",
66
- "pipeline/agents/backend-architect.md": "a83bd7f8b0a5289a1ef9a9b59d60fc759b8db260606ff2df427cf5ade5db8530",
67
- "pipeline/agents/bulk-reader.md": "0b9d415fab2c449d43329d759049af9401255d06b32d57a38c95e684837b19bf",
68
- "pipeline/agents/code-reviewer.md": "544351ee4b2620bf7abc30e0e839a37f2a6c2b21051696642dbc958960d123ff",
69
- "pipeline/agents/dev-critic.md": "93598bf9c2b27430a38966491fcce37ffdec56b58c3811221e274316cc7c94e1",
70
- "pipeline/agents/explorer.md": "9e72db35159b455a21a956375ffa457871131c7234f6ff5ae1e46c97a8112563",
71
- "pipeline/agents/ios-architect.md": "31d9415e4a6e5daade3246c401f4e5b44627f850313f624b72747c8479c9ff2f",
72
- "pipeline/agents/plan-critic.md": "6cebab0d01449ee5ead70bdaffc5e409b3df8890863f1027c3f9a569f0ac04ee",
73
- "pipeline/agents/security-auditor.md": "8d399b8eef2d0f4b3bb6164d25bbbcb4285895dbb0cb9e3f82b2c1f762fda856",
74
- "pipeline/agents/task-clarifier.md": "9dba052a9ed44cafcc8302a4ae8628d9bb3b97f815b13af9985221821b8a5b12",
64
+ "package.json": "ad296bb61988074861178c88e988bfef7332fd592e7f6c88d51b25c81a51ae3d",
65
+ "pipeline/agents/android-architect.md": "11fb74543cb0ebcf9525ca6654fe95d53da7229e0bf4a1149b31fd9005abc453",
66
+ "pipeline/agents/backend-architect.md": "b02a606c301e4714131aed70ae6d16eeb77fbc819a001e2752cff2488d4246de",
67
+ "pipeline/agents/bulk-reader.md": "6597052cd7d205bac2b1c7633f5232fe1a40730664a913b8eb77efd5a786dc25",
68
+ "pipeline/agents/code-reviewer.md": "995c72b5d79bc64e45230b54e8ac5b90fbab73f187a509b331f83e5ec3493800",
69
+ "pipeline/agents/dev-critic.md": "33843216b79977ce2926fc9c54f8c9eef30b91632a11ef624647229b61a9b36a",
70
+ "pipeline/agents/explorer.md": "12564aec29d4581684bf84313b86a4add5a6989d3b8db5c35769674cab5649c6",
71
+ "pipeline/agents/ios-architect.md": "e1fe0c034a4dfa76794ed04ba9f4bf85d5cdd3a5d6b948cc0635e8dda8baeef9",
72
+ "pipeline/agents/plan-critic.md": "02d2a0e384cfbabfaf4726043a566486b6f034073efd1aa33c6d65febe8141d5",
73
+ "pipeline/agents/security-auditor.md": "aa6e695b3ea4e9fc11da421537aefe0fc99bfd0a9bd0b93bddfc9a5a9a009365",
74
+ "pipeline/agents/task-clarifier.md": "90c37ede5ccd0ffd09423e75ff83ba9b04f48bf0b6b0dabfda020c757b9bacc2",
75
75
  "pipeline/claude-md-template.md": "bcc75808a54f32f11e688875cda23d3be3c1524511258e3d4ea5e7c0d2a92a92",
76
76
  "pipeline/commands/archive-guard.md": "16c5d3feaa91950402d62e66adc7fcf519a25d028a9303cb1e9c08af2765c04b",
77
77
  "pipeline/commands/deploy.md": "d20f95f3b1d2357c8c92f3047e8fe11eadf539ff13cab9b54f072f0ad697242a",
@@ -81,7 +81,7 @@
81
81
  "pipeline/commands/multi-agent/analysis-resolve/SKILL.md": "3c712e86d4b2e80d1ba51811ea32c8d5fa11291ab62c6dae944f9c19ddfd9868",
82
82
  "pipeline/commands/multi-agent/analysis/SKILL.md": "a20662c5c3495bb3fe676e43a8d71ce3148886f2ace582496b094dec6d7aea78",
83
83
  "pipeline/commands/multi-agent/autopilot-off/SKILL.md": "59cd59a3f69e51dd8fe39f414e448f79237fa6764986bd0ddbdbf9ff1523fb69",
84
- "pipeline/commands/multi-agent/autopilot-on/SKILL.md": "4503e6709f184c42623ba72d238b985f910b8ae7554a8aca2703982a87588b63",
84
+ "pipeline/commands/multi-agent/autopilot-on/SKILL.md": "d8f7847004f2bdcf7923527bddfaa17fb9f09a83fd5e3a9d997e0d1871907938",
85
85
  "pipeline/commands/multi-agent/autopilot-status/SKILL.md": "73cea063993bb5c6781112f7bba6f6dd2a5014bcdd4400f9f3c48b582f50252d",
86
86
  "pipeline/commands/multi-agent/autopilot/SKILL.md": "4f90d957f9cbbeb74015e09efb82bad4d87210a0a123e23fad274d12b470427d",
87
87
  "pipeline/commands/multi-agent/build-optimize/SKILL.md": "e74d6f5be703acef1704092d5fe53485d95fe6c220bb768accaf68ebd212b7c1",
@@ -137,7 +137,7 @@
137
137
  "pipeline/commands/multi-agent/test/SKILL.md": "5a67be2b1ec0321e79f8b7f35be53676e349e55a4f8ca09a07f0de89dadac8c4",
138
138
  "pipeline/commands/multi-agent/testflight-validation/SKILL.md": "38fa8d3d3c8340d025e100c53a70183cbad22665b7ddccbb6102c05986cce489",
139
139
  "pipeline/commands/multi-agent/uninstall/SKILL.md": "b2124820a6e10cdd72be71df2183aad4f8bd8988ec90248c88599c1514f7d9ab",
140
- "pipeline/commands/multi-agent/update/SKILL.md": "63b896036401a37da80de26a53eb855b0dba368215ee96ab0f83ef22478f7d21",
140
+ "pipeline/commands/multi-agent/update/SKILL.md": "f596052221345312ce03937b88604ab82b303e3255a64b5dfe7c49dda87a5148",
141
141
  "pipeline/commands/sim-test.md": "17fcefc2030f0ab24b3ee59807dfc11264b34d7455138081996859b1fee8664e",
142
142
  "pipeline/contract/CHANGELOG.md": "33d5dd6b35d8498928f431729dbccc9aae2f42e3beb04da1bd52f682846b2c10",
143
143
  "pipeline/contract/README.md": "4a60faddcd31973302bab93bb3fab74da96024c79aaba3676c6ceeabc2088132",
@@ -167,6 +167,7 @@
167
167
  "pipeline/lib/autopilot-state.sh": "e97d4cb4fce18be8be3485702be0e6d0948209a14f9725cbc83c2721d293432a",
168
168
  "pipeline/lib/channels-multi-repo.sh": "aef26f888bddbaf7fb0e2e86143d612da776b4a4282bcee8144a090a9050b989",
169
169
  "pipeline/lib/classify-intent.sh": "dab0896bc9707a10ac046d0b31d25a48c363cdde76cb1d720bf847deefc0364c",
170
+ "pipeline/lib/confusables.json": "2638872fc47c7a8c087902938d67a88440e855e66ede487ac1c057ff85f1571f",
170
171
  "pipeline/lib/context-link-extractor.sh": "84a154dcabf57136be17199b21d02120d70cc0ca34e8f48fe24bdda74eddda1d",
171
172
  "pipeline/lib/count-lib.sh": "7bafe152b0ffb9ca6fb9296b7ecaaef33deb9410286b3579fefbb37796044f79",
172
173
  "pipeline/lib/credential-inventory.sh": "adff81b265a9cf4f8c9135011686c12963cf5eeeafcb266be54456c803ffde38",
@@ -192,12 +193,14 @@
192
193
  "pipeline/lib/model-dispatch.sh": "7edd5c92d41ee3bf74972e0827ccbb671853d5410e7fb0af0b7cb020f95e05c5",
193
194
  "pipeline/lib/model-rung.sh": "2a5e04af3c6829d4c72e5f518e668a9cc2feffe6f2abb90a68c485f52e81959a",
194
195
  "pipeline/lib/multi-repo-pipeline.sh": "5cca6bcc4fb857448ddadb31add343952be89423a328267e56496c7b7cdc7710",
195
- "pipeline/lib/outbound-gate.mjs": "9cedbb9ce3e99af6bc4a7d3625a4a2ee4ce841c41425b130de58a52dc82c6cfb",
196
+ "pipeline/lib/normalize-text.mjs": "db5f3b6618c679762227083299ec7f7bef8f1bb6b9179f19449b5ff904812c45",
197
+ "pipeline/lib/outbound-gate.mjs": "4e89bf43554af4c727ef110505658159c7a7a3c53d8a4007f0e2e65dab87896f",
196
198
  "pipeline/lib/parse-complaints.sh": "d787ce870f141cf7f881da80fab4320814044554065e82e94632f061675b4d12",
197
199
  "pipeline/lib/phase-schema.mjs": "8fc0c909f129341295cd8ef2ea9e93cecd0ac493c3a8d83e25879f7ff522f1ab",
198
200
  "pipeline/lib/plan-todos.sh": "4992bed180774a27f84892add8b09e0f7b53e9b8fefb75f60325a04d1af18c56",
199
201
  "pipeline/lib/post-pr-review.sh": "c7a8f8c648ac7aebf904e70ae482c026de5b3cc897b376cd8aa52356fda8b805",
200
202
  "pipeline/lib/pr-request-location.mjs": "622ca4705ec8ee00e0a4609657d8ee684fcdc077f3099ab312cf41b5b0c41efd",
203
+ "pipeline/lib/redact.mjs": "9abe7d74a1fa5d9d1ca9742652b485626e0ae86b62a7229c9ac478813b854bcf",
201
204
  "pipeline/lib/regular-file.mjs": "084dd2c98a664a1e4a937757cc5e5e5d7e162b6aa422f8c7cfdb27f7834c6cbc",
202
205
  "pipeline/lib/repo-cache.sh": "82bbdd3d61746042ad5341554a1077098d4b56f15caf6c5cc092377a273c8f45",
203
206
  "pipeline/lib/repo-hygiene.sh": "67f4227d2bc84198d51205f1f16d055e76a07fe11a4e5c2b8103559c44cefa04",
@@ -216,7 +219,7 @@
216
219
  "pipeline/lib/usage-endpoint.mjs": "9aed3a854e729f82563ca7614c9ab8dbb5af3b42fa0f7c10204b0094627b9906",
217
220
  "pipeline/lib/user-facing.mjs": "08d8a1f4f12e36de88673d24167e244862f56671586a5ce26e73f52821996eed",
218
221
  "pipeline/lib/user-facing.sh": "969038aa575a7075cbc8c2857b3e6bddfa5c8ea8a15811ad65c6660735539b76",
219
- "pipeline/lib/vercel-deploy.sh": "7890a86f050611e7743e101303f1263527713019824a15aa4dddc09940bb0a65",
222
+ "pipeline/lib/vercel-deploy.sh": "50d3d8a0b2c60daf90365396f37337d89a60230a94e7bd4c89b19acf1849de99",
220
223
  "pipeline/multi-agent-refs/_account-picker.md": "42715ba746e1fc681a57436d72fc643e3f16de023f0409fee8782b013f7a144a",
221
224
  "pipeline/multi-agent-refs/_dev-context.md": "4d0905cc537c7f8526d3c92cf09bb44d2ab50680470ee0baa2dd5c3b1d0565d5",
222
225
  "pipeline/multi-agent-refs/_input-parser.md": "4cf222b1c4a405bd71521f5290f45408cc8a47913a0a39166c68210104e90cc5",
@@ -279,7 +282,7 @@
279
282
  "pipeline/multi-agent-refs/features/stack-adapters.md": "71e23385da872ceed35263f4838f154800aa2da55bb6688ccca74726b70a3ef5",
280
283
  "pipeline/multi-agent-refs/features/stack-skill-routing.md": "8d45fb7331509411617d2bf5c42e752eaaa7ada24dcf38140f2710b28ab4fc0f",
281
284
  "pipeline/multi-agent-refs/features/unattended-gates.md": "46b516cac81a4eacf5d58bc3b1613e2266c26f1559be8dac060d1dc6b7d7ca01",
282
- "pipeline/multi-agent-refs/features/unattended-security.md": "384561f8f9900e031b1d888c901e30e3a33e30c6a2bc5d32852374b1372effd0",
285
+ "pipeline/multi-agent-refs/features/unattended-security.md": "8b7c5718e95c81debd915650ff2458b4764fa78eeceed779476955b4f04165a8",
283
286
  "pipeline/multi-agent-refs/features/url-enrichment.md": "72e01a799d9fa54b56c762ba404a9f9236adbbf98320e395a96f6b0f5917e76b",
284
287
  "pipeline/multi-agent-refs/features/usage-reporting.md": "6c232060da49033ef2c9ccead69084dfb7cfe45333f670b407b8afada8b99007",
285
288
  "pipeline/multi-agent-refs/features/verify-by-test.md": "b0735adaa7ead797167b8d9ea48a10851a138083c6e638738cc96c66b02a1e37",
@@ -341,7 +344,7 @@
341
344
  "pipeline/schemas/analysis-spec.schema.json": "42e4d527c69f952fb6a08bca5bcbbd14dfb75291cf028ce3c653043db70bd622",
342
345
  "pipeline/schemas/answer-request.schema.json": "29d4211a2a05a230e0707b171b73341d2e56f6b83edb178b731905211aab4e23",
343
346
  "pipeline/schemas/answer-result.schema.json": "7e998e8dcd48d6152c867fd178c6c1107e97c21d19429e67554e7d7a3aa42a28",
344
- "pipeline/schemas/autopilot-config.schema.json": "bc30ae33f5cc6884d883a485637c5fb22e64396148e4f5f8ecf3b33b3c67a7bf",
347
+ "pipeline/schemas/autopilot-config.schema.json": "c183332327520026c02f87f65377a1838e5de9cb9210337e6c4a6aaa7a0706c5",
345
348
  "pipeline/schemas/bulk-read-output.schema.json": "468d447ee69d5576d16835cdd167a9191bf33d2b6e3af89373907582ef93f49e",
346
349
  "pipeline/schemas/clarify-output.schema.json": "13c3d933d24d9541a97fe7630f97587157c92e420794d6dea359726377c986a6",
347
350
  "pipeline/schemas/code-graph.schema.json": "ec022b4ac1ff1daada79cadc4469b7365f9faebd81d839c40bd931b41222fb4e",
@@ -411,7 +414,7 @@
411
414
  "pipeline/scripts/README.md": "937adf6f34ce18fc07d91d6556abcdd39debf2df7819c3f16e009430dc0549a7",
412
415
  "pipeline/scripts/_autopilot-config.mjs": "0f42d2791f1d71c4aad5a0735ca56fef1ed27d275b72f99d8ca8f95fcb8aa83a",
413
416
  "pipeline/scripts/_autopilot-ops.mjs": "5e84d628482434c8f09dc69601c73ab70e928af15c2f068d998d2f61bd692d1a",
414
- "pipeline/scripts/_autopilot-outcomes.mjs": "939cf6cbce7217b8c0b86ca982927167e6a212ccd129b459062886d5feaf7f95",
417
+ "pipeline/scripts/_autopilot-outcomes.mjs": "5b2423814d979ed5c657473290083b296f7245d40507c866e7931b2771001236",
415
418
  "pipeline/scripts/_code-graph.mjs": "b1b269ef90c8c0c356c9691e0e7b2f0b56a5130a69f9ca2535c9dfcb8c653807",
416
419
  "pipeline/scripts/_command-contract.mjs": "e97a5c624e0768769da54d4175e9f7655f1de1dcd0832468bc66bf140b0f5a6f",
417
420
  "pipeline/scripts/_cost.mjs": "bdf03835af4719b72e4574f2d5ca827e94f9d80e49527a8e9e200a0aa4ecd7a9",
@@ -426,20 +429,20 @@
426
429
  "pipeline/scripts/_smoke-root.sh": "dad129959a4e37a0cd0f4f6c04f6d66c5a43752b2bf33989db9c002eb106b832",
427
430
  "pipeline/scripts/_stack-adapter.mjs": "a754c042d237cd03abf11c6909099a7a3ea798cdd13d49b03787797fd3496cd7",
428
431
  "pipeline/scripts/_stack-routing.mjs": "d64421b48eb42efffeae01f1d64ec56182269285de62e80434f3b8b05610e2ab",
429
- "pipeline/scripts/agent-guard.py": "a9856912d62d5769d3cd7fcb070007569398a085412cc7b26385caed66471fca",
432
+ "pipeline/scripts/agent-guard.py": "764e7ce3dd448b37cf7b69b03def5d173ab8dedadd2b2dca098e20ca15fd8604",
430
433
  "pipeline/scripts/agent-guard.sh": "5b57cea687754533c673b66a9dd2281ca06d12ef86bdc0d03fa285fc9e7debf8",
431
434
  "pipeline/scripts/aggregate-metrics.mjs": "c324e349993fb154a885263cf6665af0ff656e9c987b455a263dad8b96cca667",
432
435
  "pipeline/scripts/analysis-story-tree.mjs": "8fd371d3e552a3f60533f18c7699074ae6089016c6663512410c4fa02494548f",
433
436
  "pipeline/scripts/anonymize-findings.mjs": "5d7e042793790c1b924d4d952b4f79b7e5f1dd0a3fe936f1ee16a4fa2ba820dd",
434
437
  "pipeline/scripts/answer-question.mjs": "b948df9d063f623a7ccd9cc65903c4388018b6b968228f77eb2e229223a61b1c",
435
- "pipeline/scripts/audit-log-rotate.sh": "5c3b737c4fe07256c885e6d5dca4f9a14574ebf43dbf34dd96e7818b89806b33",
436
- "pipeline/scripts/audit-log.sh": "17de3aac87488cbc6b49c441c2491c936df1a1dc8cd1bc27feda8274e600a721",
438
+ "pipeline/scripts/audit-log-rotate.sh": "5a4ef7d9ac75abbc5a5103fc2202b89707a2f2c00432ece133a132b483cd7450",
439
+ "pipeline/scripts/audit-log.sh": "5e0e45da2202a1a36f09408bf4c727f978c9850bf709c125cd2c0ccf414d7ff4",
437
440
  "pipeline/scripts/autopilot-arming.mjs": "38224fc58dc208e5e2d5793302cb67c6d0ab75be2dc4259cbe55ac87102a59b7",
438
441
  "pipeline/scripts/autopilot-awake.mjs": "23ae96e519fbaef86980e732196a581a861f4ffe9a319ce0bd3ffd7c9fe48b10",
439
- "pipeline/scripts/autopilot-intake.mjs": "40c1eb1719b4d5b92c8bca2fe9e27660467136641d2cdba3cac3c076cb0c7612",
442
+ "pipeline/scripts/autopilot-intake.mjs": "a65ac29850de94002bebd5db3f09b406c65f1875b32058cccea6b440f95c7526",
440
443
  "pipeline/scripts/autopilot-menubar.swift": "4fa39e603630565ac2cfb5a8b0bcf891dbefb02ce272252b9480605241670ac7",
441
- "pipeline/scripts/autopilot-publish.mjs": "9d2df8deb0c66f13f8322ded4a288e650366651f873e15bc3f764ffe19ff18bd",
442
- "pipeline/scripts/autopilot-runner.mjs": "7cb08c10a7032dccc9c049b7e448e6d6fdbe1d341a411e85e5c33b7fe9ecab2d",
444
+ "pipeline/scripts/autopilot-publish.mjs": "6a9727685d08c57983b9b6dfb398b7f7a7ef015ed14b8f61ac40207bb40f93d4",
445
+ "pipeline/scripts/autopilot-runner.mjs": "bf4398aff2bc98ff2d1a1e9c3606cf96e8e45b92dbe6980c5b5f0c3c5d7fdd3f",
443
446
  "pipeline/scripts/autopilot-status.sh": "8b9807155cfe5eff09ee3e01a8c3e5d1bbf7554db22de89de438531e4554b32f",
444
447
  "pipeline/scripts/base-branch-candidates.mjs": "c73a02033ed9f10c15b3aaf010432f0d4e429a75eba14731e9a64492e3fe3859",
445
448
  "pipeline/scripts/build-lock.sh": "9cf9a3f5100c337af86264ddc60f2ec763b6402c11c639946020037d78d5d365",
@@ -503,7 +506,7 @@
503
506
  "pipeline/scripts/learning-curve.mjs": "d574eec427c7f37a7a77a9ef9e2499f50dadc2215a20ae24e31654afd3497f36",
504
507
  "pipeline/scripts/learnings-ledger.mjs": "411bf80329a1c7700e5a523d5f0a7d1d3a716514f9656703bce67e26e71e0bb0",
505
508
  "pipeline/scripts/localize-commands.mjs": "d095d354be4bf5ea7c0a68969c1531421908b195755d591c5012334d821f201e",
506
- "pipeline/scripts/log-metric.sh": "41d5d6efeb336747216d6767f9b4025169c58a4e82a9fc03d5364a17b7309f73",
509
+ "pipeline/scripts/log-metric.sh": "f77b1c832fc7cb14dfe51feff023d76f76fb8891f0a61d514b52952e47681b8f",
507
510
  "pipeline/scripts/make-manifest.mjs": "db692c1bfcc0a7721ffb0b4d9ec57b74fadcaddf2821a32e222a4d4a513c425a",
508
511
  "pipeline/scripts/match-skills.mjs": "dd6c023a623ce6e9999f3eceaacd91f8d0c8ac621e3f025c8949e2203dc05bdf",
509
512
  "pipeline/scripts/maturity-followup.mjs": "531eb9578a71ea5bb2510bb24a48f264c36aaf7adceca7b4ec3dccd1c63ae412",
@@ -524,9 +527,9 @@
524
527
  "pipeline/scripts/plan-coverage-gate.mjs": "1a83bc52584438a9bd5cba96d2ddefed92a6a317d30ee695e67ef6c00b93e5a8",
525
528
  "pipeline/scripts/plan-critique-gate.mjs": "b139394e5f16d11e4997d0bb0b08529f439dbd7fad39781ef4c2475247d8fa97",
526
529
  "pipeline/scripts/plugin-refresh.sh": "687a33199ad963616ab537e32210ec8c967e76ecc42f494ee8a1dc9fe947fc30",
527
- "pipeline/scripts/pr-request.mjs": "59b86c7fd768067af7016836d6a29debec36c4d8f10171ae4591fd6773977989",
528
- "pipeline/scripts/pre-commit-check.sh": "81937ed7c0974fdfe440e19ce31405a38bbdf2b45a9bf226f490268fcf915942",
529
- "pipeline/scripts/pre-push-check.sh": "ff98e73d02aa75cfa9411c29c838241e8529e832e1421ca9c25c39aa07bcd968",
530
+ "pipeline/scripts/pr-request.mjs": "e6f4ded2366c6599bb345b3011ecc771e13b8a1561afa4c9a50bca4edff17456",
531
+ "pipeline/scripts/pre-commit-check.sh": "a4a091abff1f3a5695227bfca63cd257b09e859f8bd10bfba5700e0c9334e6ea",
532
+ "pipeline/scripts/pre-push-check.sh": "e449aff7f0336d7d624eff4c6221f56d8621ba9d010669601755e57fd4ee02c7",
530
533
  "pipeline/scripts/probe-evidence-capability.sh": "ac74252eed6b773fdbc7ec475a63606925f1ba7b5e7c6f911329f46fd920eae7",
531
534
  "pipeline/scripts/prune-logs.sh": "c5587b33104c7253e07be8cce8249b50014c52dfdf232de637811ffdd88e95e4",
532
535
  "pipeline/scripts/purge.sh": "95c60b272ae47209893dba9b17528538592bb5636da47940a02734cd9b4f0ce5",
@@ -544,7 +547,7 @@
544
547
  "pipeline/scripts/routine-registry.mjs": "eaffbb840cd0ac977d46659cb3bf5c6cbd21a969ee50491cdb4295d10d9d636b",
545
548
  "pipeline/scripts/run-aggregator.mjs": "e58ecdf900aa30ea1625939d72e6d4e26d13ae4e6bb2ee1fd68d99718def27c8",
546
549
  "pipeline/scripts/run-metrics.mjs": "6db53f3814a992c1f23beae7a54c84310be5af8e84dbff5a6768a91169152f02",
547
- "pipeline/scripts/run-ui-tests.sh": "5f1cb05ab0b387f9b89d8f34a0f60182906f0ca27cca4d41926b7217eee86bc5",
550
+ "pipeline/scripts/run-ui-tests.sh": "11331115a4c3fb436f8f35894b7f12a1be317c7cfcd7b7512aeb42b6a9aa21e3",
548
551
  "pipeline/scripts/runs-index.mjs": "7937dd3d6f3c5b7800d853ff06289fd5551413dda4f46b0f3db81483b7280e66",
549
552
  "pipeline/scripts/scaffold-gate.mjs": "e2935957771f1d332b9968a819de49676152c51991e89f4a9cab7467b6d18701",
550
553
  "pipeline/scripts/scan-agent-config.sh": "41dbd995de799f599dc365ea8cfe55542c48c7387c4f94a596a1e6feec278168",
@@ -573,7 +576,7 @@
573
576
  "pipeline/scripts/ui-tree-dumper.swift": "a09e42ef069eafa08c05afd8333e05b754ef6a7d8b9687712039b0f2c9801273",
574
577
  "pipeline/scripts/unattended_policy.py": "a03dda2176d8a4ebce05b34f353fdfa01ac5e67ddcc7a163e0966bbe9f83d7e7",
575
578
  "pipeline/scripts/uninstall.mjs": "ea698d098ebc5590fbe9656af72d26773c9addfa8a8b9f747ed16514ee96f686",
576
- "pipeline/scripts/update-check.sh": "327a02306884093d2b93f395d2c297d5dc6b0c59757a740004bfafb13616fef0",
579
+ "pipeline/scripts/update-check.sh": "9c00647e7ca4249414b2e5af08f61705ab5bd2106b6f66ae8ebce8aa143dc957",
577
580
  "pipeline/scripts/update-issue-progress.sh": "ccfef87743e91272e009e396ac07461d2784b2fa84a06c802a582526eeeb9ed9",
578
581
  "pipeline/scripts/usage-identity.mjs": "3e2479bafc290f1acb253f5273339c87550f97d332818a26e5ac266d7ef289dc",
579
582
  "pipeline/scripts/usage-register.mjs": "2844d2187226006d1a8b4e9b044d7591f4a5d3313cb24f9e388b36639022ce4c",
@@ -591,12 +594,12 @@
591
594
  "pipeline/scripts/verify-citations.mjs": "ed1c3d7d0dbebbc64a26524f0f321d3a0ec1318cbb60dd4517d6b3db77e7fd74",
592
595
  "pipeline/scripts/verify-skills.sh": "871fcdfe5567232cd49a4cce4401911a06c8df6ab712d0597e17ce1bf0f63d80",
593
596
  "pipeline/scripts/verify.mjs": "fdc9843dc33b37d08d132617f158b8fe10cc4ab3be5bf31714bf2453ac0f714f",
594
- "pipeline/scripts/website-deploy-commit.sh": "523482438b265ca1f1883ec5fb450e803566a1239eaccdc423e12c5426140a84",
597
+ "pipeline/scripts/website-deploy-commit.sh": "73cae49db83cf98eeeb08eb8852a13912bd5f05855319b184e348b9ca4dff44f",
595
598
  "pipeline/scripts/worktree-finalize.sh": "ca2bb363bec738cfce57ce5f46962d69664810003cc56dde0a82ab9133dbf557",
596
599
  "pipeline/scripts/worktree-prepare.sh": "9391c828375b127f77c86e3c830dbbaf355a61464c6437319969f2f1eecc72b1",
597
600
  "pipeline/scripts/worktrees.mjs": "90dfd09b70fffe9b56c331a4ae2692cc248f4898f4ee6aee4239ef0b20888a90",
598
601
  "pipeline/scripts/write-state.mjs": "e1198bf970eace07d3eff22b394808a526e473df65d3d58aa2d5a12cfdac8b49",
599
- "pipeline/skills/.skill-manifest.json": "cffda3b70d7f2807055ef6e963637b2d4e9650465a2b606d0d8dab429da35d03",
602
+ "pipeline/skills/.skill-manifest.json": "94bbe3de5468d7277f6268a570c82af7d8295166e2d9c27676839646c4faff77",
600
603
  "pipeline/skills/.skills-index.json": "042b1090f3e2ca310c6ce70d1bb304e8c7f96bd73133e504b95d83801608e470",
601
604
  "pipeline/skills/shared/README.md": "98196ea7c9d84637e8917ca4053c34b45de46586f71fb0c0034dce0808af857d",
602
605
  "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "7239fef717ea45b79276bfcc2c3903acd57950b6e00dd6a2a66399c4b09cbd51",
@@ -607,7 +610,7 @@
607
610
  "pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md": "9e405b0f7403c72b00a7ddf1e4b8518cfe37feb31d91d8e5ba70f0341efa5d0c",
608
611
  "pipeline/skills/shared/core/multi-agent-analysis/SKILL.md": "fff7f2c2d4aa769a5c08beb776a848f91caf485c1d84dd5a4a3571ff02c35e0e",
609
612
  "pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md": "aabfc6c4c0e0b1be7e054f252ea021a47436823ac6a0d5815d0fcab9e7d1f5ee",
610
- "pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md": "ca671ffe46809e3b0c825a6b5c19e8ea00e529874531eb480a0987428366d2f4",
613
+ "pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md": "d4f23f6f7bb493a4efa2cfa252fab50b22b6506aeaf31985db4498b5f010c8c8",
611
614
  "pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md": "0833c8c63b82c8c360bd2c5a9df77a958aa8829326fdb3ad0c7d8d8197a42c29",
612
615
  "pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md": "426158ddbb5e8d6e594cd2e02aceb197e1769d692602dfbd2a368a6707081bd3",
613
616
  "pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md": "8534891d1198597a0893d131e6b944d15443f62b24cb5584c486a235845fd281",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.4.0",
3
+ "version": "20.6.0",
4
4
  "description": "6-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",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "scripts": {
22
22
  "start": "node index.js",
23
- "test": "npm run format:check && npm run lint && node --test test/*.test.mjs && node pipeline/scripts/run-smokes.mjs && node pipeline/scripts/lint-skills.mjs && node pipeline/scripts/lint-personas.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/eval-recall.mjs && node pipeline/scripts/validate-schemas.mjs && node pipeline/scripts/validate-prefs.mjs && node pipeline/scripts/scorecard.mjs",
23
+ "test": "npm run format:check && npm run lint && node --test test/*.test.mjs && node pipeline/scripts/run-smokes.mjs && node pipeline/scripts/lint-skills.mjs && node pipeline/scripts/lint-personas.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/eval-recall.mjs && node pipeline/scripts/eval-guard-robustness.mjs && node pipeline/scripts/validate-schemas.mjs && node pipeline/scripts/validate-prefs.mjs && node pipeline/scripts/scorecard.mjs",
24
24
  "test:unit": "node --test test/*.test.mjs",
25
25
  "test:smoke": "node pipeline/scripts/run-smokes.mjs",
26
26
  "lint:skills": "node pipeline/scripts/lint-skills.mjs",
@@ -55,7 +55,7 @@
55
55
  "codex-cli"
56
56
  ],
57
57
  "author": "Mert Erden",
58
- "license": "MIT",
58
+ "license": "MIT AND LicenseRef-PolyForm-Perimeter-1.0.0",
59
59
  "publishConfig": {
60
60
  "registry": "https://registry.npmjs.org",
61
61
  "access": "public"
@@ -93,6 +93,7 @@
93
93
  "!pipeline/scripts/smoke-*.sh",
94
94
  "!pipeline/scripts/run-smokes.mjs",
95
95
  "!pipeline/scripts/eval-*.mjs",
96
+ "!pipeline/scripts/check-rewrite-overlap.mjs",
96
97
  "!pipeline/scripts/scorecard.mjs",
97
98
  "!pipeline/scripts/lint-skills.mjs",
98
99
  "!pipeline/scripts/lint-personas.mjs",
@@ -4,6 +4,7 @@ description: Android architect - evaluates design decisions, patterns, and mod
4
4
  model: fable
5
5
  preferredModel: fable
6
6
  modelRationale: "Architecture decisions across Gradle modules, Compose stability, Hilt graphs, and migration paths run on fable, the top tier (opus is the first fallback). No downgrade recommended."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  You are a senior Android architect with deep expertise in large-scale modular Android applications.
@@ -4,6 +4,7 @@ description: Backend architect - evaluates API design, data modeling, and syst
4
4
  model: fable
5
5
  preferredModel: fable
6
6
  modelRationale: "API design + migration safety + scaling analysis are top-tier concerns; fable is the top tier (opus is the first fallback) and handles concurrent-write / rollback edge cases in database migration reviews."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  You are a senior backend architect with expertise in API design, distributed systems, and data modeling.
@@ -4,6 +4,7 @@ description: "Reads ONE large file and returns a structured, line-numbered summa
4
4
  model: haiku
5
5
  preferredModel: haiku
6
6
  modelRationale: "Reading a file and reporting what is in it is extraction, not judgement - the task has a single source, a fixed output shape, and no reasoning chain. Haiku is the right rung and the whole point: the saving is the difference between this rung and the caller's. A worker that reasons is the wrong tool here, and the contract below forbids it explicitly, because a cheap rung's opinion about code is worth less than nothing."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  # Bulk Reader
@@ -3,7 +3,8 @@ name: code-reviewer
3
3
  description: "Code reviewer for multi-agent Phase 3 - security, architecture, quality, performance. Default model is fable (opus is the first fallback); Phase 3 orchestrator overrides to sonnet for Reviewer 3."
4
4
  model: fable
5
5
  preferredModel: fable
6
- modelRationale: "Reviewer 1 tier - deep security + architecture review runs on opus (top available intelligence tier). Phase 3 orchestrator overrides to sonnet for Reviewer 3 (quality/correctness focus) via CLAUDE_CODE_SUBAGENT_MODEL before dispatch. Copilot CLI adds Reviewer 2 on gpt-5.4 for cross-model diversity."
6
+ modelRationale: "Reviewer 1 tier - deep security + architecture review runs on fable, the top tier (opus is the first fallback). Phase 3 orchestrator overrides to sonnet for Reviewer 3 (quality/correctness focus) via CLAUDE_CODE_SUBAGENT_MODEL before dispatch. Copilot CLI adds Reviewer 2 on gpt-5.4 for cross-model diversity."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  # Code Reviewer Agent
@@ -4,6 +4,7 @@ description: "Phase 2.5 evaluator - runs after Dev's last edit, before Phase 3
4
4
  model: sonnet
5
5
  preferredModel: sonnet
6
6
  modelRationale: "Critic tier - deterministic checklist + build/test verification needs reliable JSON output and tool-use, not deep reasoning. Sonnet hits the cost/quality sweet spot. Opus override only when the diff is large (>500 LOC) or touches security-critical paths; orchestrator decides via PHASE_MODEL_OVERRIDE."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  # Dev Critic Agent - Phase 2.5
@@ -4,6 +4,7 @@ description: "Codebase explorer agent for multi-agent Phase 1 - scans project
4
4
  model: sonnet
5
5
  preferredModel: sonnet
6
6
  modelRationale: "Scan-heavy, pattern-recognition work - sonnet matches opus quality on file inventory and dependency graphs at a fraction of the cost. If the task requires architectural synthesis (rare at Phase 1), the orchestrator can override."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  # Codebase Explorer Agent
@@ -4,6 +4,7 @@ description: iOS architect - evaluates design decisions, patterns, and module
4
4
  model: fable
5
5
  preferredModel: fable
6
6
  modelRationale: "Architecture decisions require deep reasoning across modules, protocols, and migration paths - fable is the top tier (opus is the first fallback). No downgrade recommended; if cost is a concern, skip the architect consultation entirely."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  You are a senior iOS architect with deep expertise in large-scale modular iOS applications.
@@ -4,6 +4,7 @@ description: "Phase 1 adversarial plan critic - runs once after the plan valid
4
4
  model: fable
5
5
  preferredModel: fable
6
6
  modelRationale: "Finding the failure a planner did not see is judgement over the whole plan, analysis and codebase, so it takes the top rung. Resolved through model-dispatch.sh with a fable default: opus while the fable rung is off, the same resolution review uses. On opus the critic is the planner's own model, which weakens the independence the role exists for; plan-critique-gate.mjs, not the critic, decides the gate either way."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  # Plan Critic Agent - Phase 1, one round
@@ -4,6 +4,7 @@ description: Security specialist - static application security review across m
4
4
  model: opus
5
5
  preferredModel: opus
6
6
  modelRationale: "Security reasoning + compliance catalog cross-reference (OWASP Web/API Top 10, OWASP Mobile Top 10, Apple ITMS, Google Play policy) plus honest confidence calibration on subtle vulnerabilities (auth-flow gaps, injection sinks, SSRF, cert-pinning bypass, sensitive-data leaks). False negatives are expensive and a wrong severity is worse than silence; opus (top available tier) keeps the miss rate and the miscalibration rate low."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  You are a static application security auditor. You read code, configuration and dependency manifests and report vulnerabilities. You do NOT run the application, fire payloads, or reach a live target: this is a defensive, read-only review. Everything you claim is grounded in something you can point to in the source.
@@ -4,6 +4,7 @@ description: "Phase 0 Step 9 task ambiguity scorer - reads task description, e
4
4
  model: haiku
5
5
  preferredModel: haiku
6
6
  modelRationale: "Ambiguity scoring is a low-stakes classification + targeted question generation. Haiku hits this well - short context (issue body + Jira description), structured JSON output, no reasoning chain needed. Sonnet override is available via PHASE_MODEL_OVERRIDE for repos where ambiguity nuance matters (legal, regulated domains)."
7
+ disallowedTools: Write, Edit, NotebookEdit
7
8
  ---
8
9
 
9
10
  # Task Clarifier Agent - Phase 0 Step 9
@@ -76,7 +76,7 @@ The same name works on both sides and both mechanisms already exist:
76
76
 
77
77
  | Source | Query | Extra condition |
78
78
  |---|---|---|
79
- | GitHub | `gh issue list --repo <r> --label <label> --state open` | none - the label is the whole gate |
79
+ | GitHub | `gh issue list --repo <r> --label <label> --assignee @me --state open` | **assigned to you** (`githubAssignee`, `"*"` for any), so a label an issue form applies is not enough |
80
80
  | Jira | `assignee = currentUser() AND labels = "<label>" AND resolution = EMPTY AND status not in (Done, Closed, Cancelled)` | **assigned to you**, so a label somebody else adds is not enough |
81
81
 
82
82
  Two Jira caveats worth saying out loud when Jira is selected: labels are one
@@ -52,7 +52,9 @@ A git clone of the pipeline repo is a maintainer workspace, kept in sync by `/mu
52
52
  line above is where the floor is reported, so the user sees why a run halted;
53
53
  `$REQUIRED` does not survive into the later shell blocks.
54
54
 
55
- 2. **Stop early when already current** (still refresh the marketplace, step 4b):
55
+ 2. **Stop early when already current.** When the line below prints, skip
56
+ step 3 (no download, no reinstall) and continue at step 4b, so the stack
57
+ plugins are still refreshed:
56
58
  ```bash
57
59
  [ "$CUR" = "$LATEST" ] && echo "✓ Already up to date: v$LATEST"
58
60
  ```
@@ -0,0 +1,100 @@
1
+ {
2
+ "_readme": "Characters a guard folds before matching, applied after NFKC. `strip` lists invisible characters that are removed. `map` sends a character that renders like an ASCII one to that ASCII character: the dash family, and the Cyrillic and Greek letters whose glyphs match Latin ones. Chosen from the Unicode confusables data for the letters and punctuation the guard rules use. Read by lib/normalize-text.mjs and scripts/agent-guard.py.",
3
+ "strip": [
4
+ "\u00ad",
5
+ "\u034f",
6
+ "\u061c",
7
+ "\u115f",
8
+ "\u1160",
9
+ "\u17b4",
10
+ "\u17b5",
11
+ "\u180e",
12
+ "\u200b",
13
+ "\u200c",
14
+ "\u200d",
15
+ "\u200e",
16
+ "\u200f",
17
+ "\u202a",
18
+ "\u202b",
19
+ "\u202c",
20
+ "\u202d",
21
+ "\u202e",
22
+ "\u2060",
23
+ "\u2061",
24
+ "\u2062",
25
+ "\u2063",
26
+ "\u2064",
27
+ "\u2066",
28
+ "\u2067",
29
+ "\u2068",
30
+ "\u2069",
31
+ "\u3164",
32
+ "\ufeff",
33
+ "\uffa0"
34
+ ],
35
+ "map": {
36
+ "\u2010": "-",
37
+ "\u2011": "-",
38
+ "\u2012": "-",
39
+ "\u2013": "-",
40
+ "\u2014": "-",
41
+ "\u2015": "-",
42
+ "\u2043": "-",
43
+ "\u2212": "-",
44
+ "\ufe58": "-",
45
+ "\ufe63": "-",
46
+ "\u02d0": ":",
47
+ "\u0589": ":",
48
+ "\u05c3": ":",
49
+ "\u2236": ":",
50
+ "\ua789": ":",
51
+ "\u0410": "A",
52
+ "\u0412": "B",
53
+ "\u0421": "C",
54
+ "\u0415": "E",
55
+ "\u041d": "H",
56
+ "\u0406": "I",
57
+ "\u0408": "J",
58
+ "\u041a": "K",
59
+ "\u041c": "M",
60
+ "\u041e": "O",
61
+ "\u0420": "P",
62
+ "\u0405": "S",
63
+ "\u0422": "T",
64
+ "\u0425": "X",
65
+ "\u0423": "Y",
66
+ "\u0430": "a",
67
+ "\u0441": "c",
68
+ "\u0435": "e",
69
+ "\u0456": "i",
70
+ "\u0458": "j",
71
+ "\u043e": "o",
72
+ "\u0440": "p",
73
+ "\u0455": "s",
74
+ "\u0445": "x",
75
+ "\u0443": "y",
76
+ "\u04bb": "h",
77
+ "\u0501": "d",
78
+ "\u051b": "q",
79
+ "\u051d": "w",
80
+ "\u0391": "A",
81
+ "\u0392": "B",
82
+ "\u0395": "E",
83
+ "\u0396": "Z",
84
+ "\u0397": "H",
85
+ "\u0399": "I",
86
+ "\u039a": "K",
87
+ "\u039c": "M",
88
+ "\u039d": "N",
89
+ "\u039f": "O",
90
+ "\u03a1": "P",
91
+ "\u03a4": "T",
92
+ "\u03a5": "Y",
93
+ "\u03a7": "X",
94
+ "\u03bf": "o",
95
+ "\u03b1": "a",
96
+ "\u03bd": "v",
97
+ "\u03c1": "p",
98
+ "\u0131": "i"
99
+ }
100
+ }