@mmerterden/multi-agent-pipeline 20.8.0 → 20.8.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.
Files changed (60) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/docs/facts.json +1 -1
  3. package/manifest.json +63 -62
  4. package/package.json +2 -2
  5. package/pipeline/lib/redact.mjs +3 -2
  6. package/pipeline/scripts/gen-skills-index.mjs +13 -1
  7. package/pipeline/scripts/pre-commit-check.sh +4 -0
  8. package/pipeline/skills/.skill-manifest.json +21 -21
  9. package/pipeline/skills/shared/README.md +64 -64
  10. package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -2
  11. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +2 -2
  12. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +6 -0
  13. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +3 -0
  14. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +3 -0
  15. package/pipeline/skills/shared/external/app-store-review/SKILL.md +3 -4
  16. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +5 -3
  17. package/pipeline/skills/shared/external/authentication/SKILL.md +29 -17
  18. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +3 -1
  19. package/pipeline/skills/shared/external/background-processing/SKILL.md +10 -8
  20. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +7 -7
  21. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +4 -2
  22. package/pipeline/skills/shared/external/core-data/SKILL.md +12 -2
  23. package/pipeline/skills/shared/external/coreml/SKILL.md +1 -1
  24. package/pipeline/skills/shared/external/cryptokit/SKILL.md +1 -1
  25. package/pipeline/skills/shared/external/device-integrity/SKILL.md +11 -5
  26. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +3 -3
  27. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +1 -1
  28. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +8 -7
  29. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +2 -2
  30. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +5 -2
  31. package/pipeline/skills/shared/external/localization-reuse-map/scripts/_shared.py +100 -0
  32. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +45 -26
  33. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +14 -16
  34. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +12 -5
  35. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +2 -1
  36. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +6 -5
  37. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +44 -18
  38. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +5 -2
  39. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +10 -11
  40. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +4 -33
  41. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +12 -59
  42. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +4 -2
  43. package/pipeline/skills/shared/external/skill-creator/template.md +7 -1
  44. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +6 -1
  45. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -2
  46. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +1 -1
  47. package/pipeline/skills/shared/external/swift-security/SKILL.md +10 -8
  48. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +8 -5
  49. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +13 -9
  50. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +7 -6
  51. package/pipeline/skills/shared/external/swift-testing/SKILL.md +8 -5
  52. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +1 -1
  53. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +3 -2
  54. package/pipeline/skills/shared/external/swiftdata/SKILL.md +5 -3
  55. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +17 -9
  56. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +4 -2
  57. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +13 -6
  58. package/pipeline/skills/shared/external/weatherkit/SKILL.md +8 -5
  59. package/pipeline/skills/shared/external/widgetkit/SKILL.md +15 -7
  60. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +8 -6
package/CHANGELOG.md CHANGED
@@ -16,6 +16,18 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
18
 
19
+ ## [20.8.1] - 2026-09-26
20
+
21
+ ### Fixed
22
+
23
+ - Knowledge skills were checked again against the iOS 26.4 SDK headers and interfaces and corrected where they disagreed: keychain error codes and `SecItemUpdate` rules, `@Model` sendability, the iOS 18 versus iOS 26 split of the WidgetKit, ActivityKit and `TabView` APIs, `CBManager.authorization`, the TLS hybrid group name, the Face ID usage-description behaviour, single completion of background tasks, `Sendable` Core Data stores, the `Transaction.updates` listener, the Swift 6.2 baseline and `CLGeocoder`'s deprecation. Numbers the SDK cannot confirm are attributed to Apple's documentation or removed, and six descriptions route overlapping requests to one skill each.
24
+ - `localization-reuse-map`: the scripts take the slug rule, language order, key normalisation, key patterns, skipped folders and row-marker rules from one `scripts/_shared.py`, which the 20.7.0 entry already described. A component-owned key is exempt only when its key column carries the `(owned by ...)` mark. `render-overlay.py --ui-lang` picks the label language (default `en`), and `publish-confluence.py --embed-heading` sets the heading above embedded previews.
25
+ - `npm test` fails when `pipeline/skills/shared/README.md` is out of date with the skills (`gen-skills-index.mjs --check`).
26
+ - `pre-commit-check.sh` warns on stderr when it scans non-ASCII content without the look-alike folding that `lib/normalize-text.mjs` provides.
27
+ - `eval-guard-robustness.mjs` no longer counts NFKD decomposition as a disguise.
28
+ - `check-rewrite-overlap.mjs` exits 2 on a non-integer `--n` or a non-numeric `--max`.
29
+ - The `skill-creator` template shows the optional `metadata` block.
30
+
19
31
  ## [20.8.0] - 2026-09-26
20
32
 
21
33
  ### Changed
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
3
  "generatedAt": "2026-09-26",
4
- "version": "20.8.0",
4
+ "version": "20.8.1",
5
5
  "phaseSchema": 2,
6
6
  "phases": [
7
7
  {
package/manifest.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.8.0",
4
- "commit": "43cab7a3b4b5d68d3f60d5de49a4bf5cab185b0b",
5
- "generatedAt": "2026-09-26T19:34:44.973Z",
3
+ "version": "20.8.1",
4
+ "commit": "45de439623d3f88764e1d2a265b4e2291a707c1f",
5
+ "generatedAt": "2026-09-27T05:31:39.321Z",
6
6
  "algorithm": "sha256",
7
- "fileCount": 1219,
7
+ "fileCount": 1220,
8
8
  "files": {
9
- "CHANGELOG.md": "074f8401f8ef60d7586350a78dab3dcc6a11612cfc9e1bd076d4664347ac519a",
9
+ "CHANGELOG.md": "9e63b7d5afa37edf74fc78d96bd484e2d023c4811def825417938845aee3877a",
10
10
  "LICENSE": "8d8c51aaf1e1538b180c69965fa038db71be86798cc3e26a143bebfefe16a43e",
11
11
  "README.md": "0613eebb0b38062bd94c44043595d1950b5c9b470874dd8e402c052fd20960cf",
12
12
  "README.tr.md": "0c6b5e6943d6c3d3bf3a7ed99c705fb9a78d15d7722e6252f58404d3f6d3524d",
@@ -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": "a2e36be3f468e2e74f7538c3c8004541f4803ab34ed7a6a3d1e5ca85ed197980",
36
+ "docs/facts.json": "e3da75a6d5f4e3e773ae6efc79aaa7813d8198b244a183fd81a67aa54b69ecee",
37
37
  "docs/features.md": "6c9f0efb00c683e6f611c440c87847b187f8b0eee59e9e812f3a241695bc2ae1",
38
38
  "docs/performance.md": "bbf2f3922c25dcba0c1a9e69ef420e3871a729af5b35009a49b48a5d3c5cd151",
39
39
  "docs/recovery-guide.md": "59a8f1b66b34cb9ff5507b3d54dac3b9915e184aa044d9c758d18cac818d510e",
@@ -61,7 +61,7 @@
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": "f39b73a1e44c1022b0fd8129c23daee5b55e0c8904a85ade8d551ac5ad7504f0",
64
+ "package.json": "efed7a265857ab81826a729fcb739fd79fb1685c11fd07d43ab384a1d339bf58",
65
65
  "pipeline/agents/android-architect.md": "11fb74543cb0ebcf9525ca6654fe95d53da7229e0bf4a1149b31fd9005abc453",
66
66
  "pipeline/agents/backend-architect.md": "b02a606c301e4714131aed70ae6d16eeb77fbc819a001e2752cff2488d4246de",
67
67
  "pipeline/agents/bulk-reader.md": "6597052cd7d205bac2b1c7633f5232fe1a40730664a913b8eb77efd5a786dc25",
@@ -200,7 +200,7 @@
200
200
  "pipeline/lib/plan-todos.sh": "4992bed180774a27f84892add8b09e0f7b53e9b8fefb75f60325a04d1af18c56",
201
201
  "pipeline/lib/post-pr-review.sh": "c7a8f8c648ac7aebf904e70ae482c026de5b3cc897b376cd8aa52356fda8b805",
202
202
  "pipeline/lib/pr-request-location.mjs": "622ca4705ec8ee00e0a4609657d8ee684fcdc077f3099ab312cf41b5b0c41efd",
203
- "pipeline/lib/redact.mjs": "9abe7d74a1fa5d9d1ca9742652b485626e0ae86b62a7229c9ac478813b854bcf",
203
+ "pipeline/lib/redact.mjs": "2fefa32781d8e0618a467b62ac5a01f89e59a6d123503af535203b638796fb28",
204
204
  "pipeline/lib/regular-file.mjs": "084dd2c98a664a1e4a937757cc5e5e5d7e162b6aa422f8c7cfdb27f7834c6cbc",
205
205
  "pipeline/lib/repo-cache.sh": "82bbdd3d61746042ad5341554a1077098d4b56f15caf6c5cc092377a273c8f45",
206
206
  "pipeline/lib/repo-hygiene.sh": "67f4227d2bc84198d51205f1f16d055e76a07fe11a4e5c2b8103559c44cefa04",
@@ -486,7 +486,7 @@
486
486
  "pipeline/scripts/gen-facts.mjs": "6ba70f7db881c3e3577a5ce3dcbfda09aa240f728ee577b019f2176d8051fd67",
487
487
  "pipeline/scripts/gen-mode-dispatch.mjs": "89e9f3d0902b0a1feac5ebad0ac767c07a8875c081c9d0094eb0e055b7da5ed8",
488
488
  "pipeline/scripts/gen-ref-toc.mjs": "23b4f4fd5e2ad7434433d23c116e056186b0ed27ce008cc01b1bd9a0ef13f4e7",
489
- "pipeline/scripts/gen-skills-index.mjs": "3fb7efeac49d9071c34fef0b477fb466d591201b9e45b02e3883a8027668fb8c",
489
+ "pipeline/scripts/gen-skills-index.mjs": "64606fb3165786ed1488cc368dcbe8f53d2e9402f02578823a31838b9730180d",
490
490
  "pipeline/scripts/git-path.mjs": "c035624f1ab924039b37e0911f56c6a1fa781ac41dc89fadfdaa4305f4359c12",
491
491
  "pipeline/scripts/github-ssh-setup.sh": "5a9e1836d80e4e176806c143a3c8ba4c1b9c4274ed49aac71f33bd40de31968b",
492
492
  "pipeline/scripts/glob-match.mjs": "c01722f2f60ef70838cbfeef55dfb8381b49c358c7a808a5b297a92cdeccf033",
@@ -528,7 +528,7 @@
528
528
  "pipeline/scripts/plan-critique-gate.mjs": "b139394e5f16d11e4997d0bb0b08529f439dbd7fad39781ef4c2475247d8fa97",
529
529
  "pipeline/scripts/plugin-refresh.sh": "687a33199ad963616ab537e32210ec8c967e76ecc42f494ee8a1dc9fe947fc30",
530
530
  "pipeline/scripts/pr-request.mjs": "e6f4ded2366c6599bb345b3011ecc771e13b8a1561afa4c9a50bca4edff17456",
531
- "pipeline/scripts/pre-commit-check.sh": "a4a091abff1f3a5695227bfca63cd257b09e859f8bd10bfba5700e0c9334e6ea",
531
+ "pipeline/scripts/pre-commit-check.sh": "43be6d8b31c02051e9a905274b735ed4cb9c6ccaa692928bdbd7ac1b17a3db69",
532
532
  "pipeline/scripts/pre-push-check.sh": "e449aff7f0336d7d624eff4c6221f56d8621ba9d010669601755e57fd4ee02c7",
533
533
  "pipeline/scripts/probe-evidence-capability.sh": "ac74252eed6b773fdbc7ec475a63606925f1ba7b5e7c6f911329f46fd920eae7",
534
534
  "pipeline/scripts/prune-logs.sh": "c5587b33104c7253e07be8cce8249b50014c52dfdf232de637811ffdd88e95e4",
@@ -599,9 +599,9 @@
599
599
  "pipeline/scripts/worktree-prepare.sh": "9391c828375b127f77c86e3c830dbbaf355a61464c6437319969f2f1eecc72b1",
600
600
  "pipeline/scripts/worktrees.mjs": "90dfd09b70fffe9b56c331a4ae2692cc248f4898f4ee6aee4239ef0b20888a90",
601
601
  "pipeline/scripts/write-state.mjs": "e1198bf970eace07d3eff22b394808a526e473df65d3d58aa2d5a12cfdac8b49",
602
- "pipeline/skills/.skill-manifest.json": "3876e7060724d862c63cc8b613c3122ea33f5d5905696099478e7148241db4f2",
602
+ "pipeline/skills/.skill-manifest.json": "29f591cb4dcf509fc59a0defcfaca6487e8c000c98d2919f0a350af441a72887",
603
603
  "pipeline/skills/.skills-index.json": "042b1090f3e2ca310c6ce70d1bb304e8c7f96bd73133e504b95d83801608e470",
604
- "pipeline/skills/shared/README.md": "95d29a06fb932086bddc7e48b24373f7da0ac4e4b337a6322f0dee1a323f9ae5",
604
+ "pipeline/skills/shared/README.md": "a144fb39993470b6379d9660e0ee0371bdc858aee3d7c1b375cb6aba03d046db",
605
605
  "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "7239fef717ea45b79276bfcc2c3903acd57950b6e00dd6a2a66399c4b09cbd51",
606
606
  "pipeline/skills/shared/core/apple-archive-compliance/references/rules.yml": "25129ce6d416242ac04c4032f7561e0c2761ab8bbadf08d9c9f49b573a663389",
607
607
  "pipeline/skills/shared/core/google-play-compliance/SKILL.md": "3d15929685bb84bcdd2fee621176b9c12686a2f5152bd46ed19b959d7e851cc0",
@@ -675,8 +675,8 @@
675
675
  "pipeline/skills/shared/external/NOTICE-xcode-build-skills.md": "95b644eeabf99bcab20c2cf4c523e68d5516a1c48a07db7429b7ee034d67249d",
676
676
  "pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md": "0508b6e832b43d54c6ed5f57d42c292925b81e4df1c132ba1786860385ea2838",
677
677
  "pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md": "8506e5cfede72a7d59ae79f108608e84054617c43a9101692a7e97fcea1a5d0a",
678
- "pipeline/skills/shared/external/alarmkit/SKILL.md": "dad252df33be787eb9dc9cf0a1d4657b19f69b44c6b4d14010b0cf50117cf4b5",
679
- "pipeline/skills/shared/external/alarmkit/evals/evals.json": "1440d7f558839f37047804351610afce4bec08b6da22dc0ee9c5f2e35451281b",
678
+ "pipeline/skills/shared/external/alarmkit/SKILL.md": "ce285a6e95d03e3bc2f5c3150822e6ee2d07a4b629b81e8c0df81e6840161cb9",
679
+ "pipeline/skills/shared/external/alarmkit/evals/evals.json": "31d6f2652a3a4887314dc92edfd6282f99cc3cdcf4af97620309b73e8d4d32e8",
680
680
  "pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md": "7a30ae8699c68c0092f9eb5dbf52a273e54bd1fa77cfecdec4bc00dee599a0e6",
681
681
  "pipeline/skills/shared/external/android-architecture/SKILL.md": "71f6af966558767378d0605fae9a280fdf05eeba3379835170ee4a274f1846a4",
682
682
  "pipeline/skills/shared/external/android-architecture/references/patterns.md": "10a4b6b9ab166c42a980e66610e3c381ce2a58532e957fabd031418bef256296",
@@ -712,15 +712,15 @@
712
712
  "pipeline/skills/shared/external/app-store-changelog/SKILL.md": "e9182f2f54beca5ebc984d2e21766d154d546f984322fd6c06ad3744cce85d2b",
713
713
  "pipeline/skills/shared/external/app-store-changelog/references/release-notes-guidelines.md": "c8dcb505b66ab8dc2008e35be44f290d5e03468bed48bf0f07c3adbb5c985ed4",
714
714
  "pipeline/skills/shared/external/app-store-changelog/scripts/collect_release_changes.sh": "d694f35dffbb1fafd3b5580a2211d07ffca90baf0eb8138bdf3fff8db5386d7b",
715
- "pipeline/skills/shared/external/app-store-optimization/SKILL.md": "3a933c14158a77a8124f74b7f4c145ec202d7ccb74c9b65af436dc236159648d",
715
+ "pipeline/skills/shared/external/app-store-optimization/SKILL.md": "6015dd7b4c8661e23b677c53c391a3e39116fee2ad6b2b031b3d310eef4a3e2b",
716
716
  "pipeline/skills/shared/external/app-store-optimization/evals/evals.json": "51d4461cc77dd2e6e558a5e850da551e4b40a63bfc93ac1f92da5395ece53f8e",
717
- "pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md": "6201208f31f04068c4107ca640f62cda450a1aba69981c24e679549d82a3f948",
718
- "pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md": "17b48ded8d23dc9f85df23ac8750b9a41be860e253e745416403a3ca451f0a36",
719
- "pipeline/skills/shared/external/app-store-review/SKILL.md": "a2cd777753347aa66ea7d3094df4209a4a377a1214387283db7ba7247007e4a1",
717
+ "pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md": "49fe99b9d7275f87b42745531286948596b1b5f8b898a7d303c4916c33d58122",
718
+ "pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md": "e00e2fe4d522c31beaa3f3a421737bd6ff72d3ab20d0b94142b47c92c1ac2097",
719
+ "pipeline/skills/shared/external/app-store-review/SKILL.md": "0b77f648fd2d54e991f1c25540629f0a7d4fd2a1b30de7f8aaf07331b93963ea",
720
720
  "pipeline/skills/shared/external/app-store-review/evals/evals.json": "d6271ef69c38f04edd71f4e80180e77fcfc48906fbd41fc486dd08ebb4ec108e",
721
721
  "pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md": "12bdf41c2e2a41e728769df337989439cc2fa7fe8fd1f2aed64703bc7f09fbf0",
722
722
  "pipeline/skills/shared/external/app-store-review/references/review-checklists.md": "8b9b4c31aa2cd42b3c767435ccf4417cf3a2a3a1a3157d0b0ca3109776daab71",
723
- "pipeline/skills/shared/external/apple-on-device-ai/SKILL.md": "7c89227595db96798f9a4225d75ab314c4eab3115ab54a4648501c820e0f2f87",
723
+ "pipeline/skills/shared/external/apple-on-device-ai/SKILL.md": "a86a4032c158cdf5523009e332618c0e460a70fe695be99fed8c8767a69afff8",
724
724
  "pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json": "158dbe36a4f17eef38fe02250dbd9bce7e26237d09f1458b30efe457e34fb397",
725
725
  "pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md": "4437b0562fb4d7996c8b4f187d5fab10efbe642f96d47a24be5c9d5055a0408b",
726
726
  "pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md": "e9debda671892adb0be39ff1569fcc1b6416468f1d4a674cbe39d1ebc4ba955c",
@@ -728,16 +728,16 @@
728
728
  "pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md": "421888d7e28a74293f186bd89b929198918f2e4e5b57b964fc690ec67a1d5c84",
729
729
  "pipeline/skills/shared/external/architecture/SKILL.md": "f8d253e4616811865f2ebded64d4dfb7483e72c6d2bbdf2b5dd6811925e50835",
730
730
  "pipeline/skills/shared/external/architecture/references/adr-and-review.md": "46d6ffdeb3f869a389a33bbe12a40c87c96740c77ebe6ba3d3bec77d8914c991",
731
- "pipeline/skills/shared/external/authentication/SKILL.md": "5b8fe68bd207b8ac88874ea514dce7683f7e91de60748b4444df643540bf45c1",
731
+ "pipeline/skills/shared/external/authentication/SKILL.md": "4d3da49257432d30196b9970721f801524a7cdce4e6ddcaefc4fe31832a49157",
732
732
  "pipeline/skills/shared/external/authentication/evals/evals.json": "89d829e61b24cb5d1865c0d79e14c9fbf2e0fe7deb42838025f209a49ec7cc41",
733
- "pipeline/skills/shared/external/authentication/references/keychain-biometric.md": "e2359d916791553cf9f26971438d9867b7a56b041d31952c536ead4008a59721",
733
+ "pipeline/skills/shared/external/authentication/references/keychain-biometric.md": "d6d6f2f30475aa820bad431e813a657672b71d86f286ece752789005bedbf18d",
734
734
  "pipeline/skills/shared/external/authentication/references/passkeys.md": "cf7c4b58edbcb25f036f99db98c3aa7b7413e03031a00349ef260cff9d3ba3e5",
735
735
  "pipeline/skills/shared/external/avkit/SKILL.md": "9425a429ed008ea0cdcd830d2ade6ec8202c9cd4af06a647a0f74676e85bd479",
736
736
  "pipeline/skills/shared/external/avkit/evals/evals.json": "f5381d000537abe85489323b4c0b9dcd701f898eb4c9f6f71c9953404fc02a5e",
737
737
  "pipeline/skills/shared/external/avkit/references/avkit-patterns.md": "2c018814692c18792871338a5e87500bcd67ba31bdaaa2ed2b919321d49dac2f",
738
- "pipeline/skills/shared/external/background-processing/SKILL.md": "a356a35289da428d977c85f6984fe204b50298955489752891f98332b891f971",
738
+ "pipeline/skills/shared/external/background-processing/SKILL.md": "876516478a6019297b886f754e2ec59e96bc73419cfff753dc7bdc7a4336b6e9",
739
739
  "pipeline/skills/shared/external/background-processing/evals/evals.json": "80b7001c1a7e0c114fde50d343562698f23603aa39c927004f5a45b09179dcc0",
740
- "pipeline/skills/shared/external/background-processing/references/background-task-patterns.md": "0fc1be76c629c6922eaea0fa8d3503d694895d783a78e8b23c621d460129d6a0",
740
+ "pipeline/skills/shared/external/background-processing/references/background-task-patterns.md": "fd39d3117fd99a62b32eeac0e707842f2a06c38d75aa3630c6c8c147c6f04be7",
741
741
  "pipeline/skills/shared/external/backlog/BACKLOG.md": "b84c4753116f13a5b4cc2f361fd3242cc246545d86f055ba45adf5920cda2736",
742
742
  "pipeline/skills/shared/external/backlog/SKILL.md": "f48d35654410bb800ab477c87b7ce6db8e758671cbb733c36429d8435b7d250f",
743
743
  "pipeline/skills/shared/external/callkit-voip/SKILL.md": "0a7102e006a54e38011e24c274c50b0988f210cdd34fb6405ba5db922f23d3e7",
@@ -758,10 +758,10 @@
758
758
  "pipeline/skills/shared/external/contacts-framework/evals/evals.json": "24baa24023f4b668c2c009288828956d08df26d7aa430f1159ac059adafb1bbb",
759
759
  "pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md": "5453379d80a36231006d505d0263d0bdfcb545369972e6b5c85deae5d2aeecdd",
760
760
  "pipeline/skills/shared/external/context-compression/SKILL.md": "03a4bb0432c176ea4625aee038d84463e1d343adf63f37b7690dd91cefecc313",
761
- "pipeline/skills/shared/external/core-bluetooth/SKILL.md": "4911322b33fc791564b3ee6498a6df66626f1749e479f3a869ff7528a2597208",
761
+ "pipeline/skills/shared/external/core-bluetooth/SKILL.md": "3b7b41c7287cb86ee3c5bc477952c659fddbf050ceefbad95ab8a95ff15750be",
762
762
  "pipeline/skills/shared/external/core-bluetooth/evals/evals.json": "8dd0f99f46195f756770cfc242127f0fba2505aa8a29583c66ebd0edb2f4ba0e",
763
763
  "pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md": "05615f38403a6fd91e04de6d0087946dfaf93fd4af7f1a302288972faf63723f",
764
- "pipeline/skills/shared/external/core-data/SKILL.md": "c0204397e9dabadad75d4ccbb0c06b4f55c47c97f61c65072a33e4480832ecf0",
764
+ "pipeline/skills/shared/external/core-data/SKILL.md": "c232488bc3de3542b25a8b40ba7da648a1c16b8fd467ade21dbde28620ab2c26",
765
765
  "pipeline/skills/shared/external/core-data/evals/evals.json": "d0b3e39024cc8730f0515d7887c91569b5f4d756979826da64259f1d80ffd117",
766
766
  "pipeline/skills/shared/external/core-motion/SKILL.md": "320b35344887d1c5918c05d20aea87e790406f83dee041f5d91be0b6fd67bdf7",
767
767
  "pipeline/skills/shared/external/core-motion/evals/evals.json": "a2b9355c59f40a4c9d6b23589f0310152c3056ea5d7c591d7c52aa6860133b69",
@@ -769,11 +769,11 @@
769
769
  "pipeline/skills/shared/external/core-nfc/SKILL.md": "0f58b94d639b887588a472385791762181286ab30f015b423d868a1cef8fa5d7",
770
770
  "pipeline/skills/shared/external/core-nfc/evals/evals.json": "3a9104849944a4943b23c03e1b775f783075d2d4dedb6cb2d3a0ff88919b861e",
771
771
  "pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md": "e5d8f5a19bbb7c38b67e916344365085a978f5bd73aa507967769f4a57b45e02",
772
- "pipeline/skills/shared/external/coreml/SKILL.md": "b16e3b2f288a9f98dabce1d70e759ca2af9e9773830719a64bee57c8b18f5eec",
772
+ "pipeline/skills/shared/external/coreml/SKILL.md": "b5f3fdf161a2bd2ab839a52093f0cb99c2c3026211e48a7d13dbab712e11b255",
773
773
  "pipeline/skills/shared/external/coreml/evals/evals.json": "ab68ab58614e693251c170ac3d1920f8b66e94792a862b1a993235e09538e347",
774
774
  "pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md": "242ad798a154dcd886ab8ede4269b221354fc04c6246594a05b6857e87eba3d9",
775
775
  "pipeline/skills/shared/external/council/SKILL.md": "6d69ba7de8cbfa06f94f551601b5517c91350f6dd09901df68acf979d3803134",
776
- "pipeline/skills/shared/external/cryptokit/SKILL.md": "6c1999c0199c7937c063997383f64b353ac692715f579f585adc8d2075f414b2",
776
+ "pipeline/skills/shared/external/cryptokit/SKILL.md": "419f46a3058145f48e1f38e56741dc8074441132a1834812a6d9ad020e1c2c7e",
777
777
  "pipeline/skills/shared/external/cryptokit/evals/evals.json": "8c04736753c5c86a20155a599ec4af4ba38d6f069e4396c973b7d00bab173305",
778
778
  "pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md": "ba2993ac2775e3146c0fb5505c29494d170c6f260ed5a1c18fae2ac4b7c5c67e",
779
779
  "pipeline/skills/shared/external/css-modern/SKILL.md": "911a7f371b24ef43790568e358a941f8ff67c8cb6fa57b5daa1a388964d03310",
@@ -784,7 +784,7 @@
784
784
  "pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md": "18aedf805b4d67355c223d08e250f4e931573ba3783cf3d17ed35869ea0da030",
785
785
  "pipeline/skills/shared/external/debugging-strategies/SKILL.md": "b3749d22253d55840b866a81782e3fc55589edd547fc0708d79e5fe7243dced6",
786
786
  "pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md": "91272ce26aac9c43d31dba921ff4d1a0733278dd26bfecee383d20704a90940d",
787
- "pipeline/skills/shared/external/device-integrity/SKILL.md": "9ac0956d2afb1afa48cc26514aa3ade9aa6ec57d5eb765d42ada61147360dfe2",
787
+ "pipeline/skills/shared/external/device-integrity/SKILL.md": "9d8c39c65f7b5918c25c7ef3dd438fe62901e61ecc6fa2d7ecbd7c9a0fcfa4c0",
788
788
  "pipeline/skills/shared/external/device-integrity/evals/evals.json": "022b1d6c6ef187c4b6bc13f5b3563e2e0cc4bb3957584be60d2fa9ed464aa76a",
789
789
  "pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md": "84b0d44b6a11daaae8383c7662e71dd2cd56d92bf52bde7537385beb66eb418c",
790
790
  "pipeline/skills/shared/external/docker-expert/SKILL.md": "b3db936caa89a2c249ae64896cfb4c0a72ac45064cc081d6f99c78efe6a1f9e9",
@@ -869,23 +869,24 @@
869
869
  "pipeline/skills/shared/external/live-activities/SKILL.md": "0a8b682b63b432246781133364fa4df98e4b1752ebc90994c4b39197f80522da",
870
870
  "pipeline/skills/shared/external/live-activities/evals/evals.json": "77a5ba20a4a2d0d6ca9a1913d462bff163a60568095b40057dcd13148a0ac168",
871
871
  "pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md": "c1f8c2a88ce0c4345432b5b023a081e8169c5e9f47079b9ab130a06b58a87bd1",
872
- "pipeline/skills/shared/external/localization-reuse-map/SKILL.md": "565fa80ffa729f49cb4a54fb8f1da98397de5aaf7fb308753d261b5dc9f51f46",
873
- "pipeline/skills/shared/external/localization-reuse-map/example-mapping.json": "f5998e566a1ffebcc8eec6f90b54809b9ef9840326839e9b5011c229690dba32",
874
- "pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md": "0ba94aeeeac4b468b5ec2064f0115cc4a67eda93c1aa7ffbed879d7be675c84d",
875
- "pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md": "ee66ed7d608927cd33045404d16e5a3636d4f5826a6265e5eaf82d4e6d763008",
876
- "pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md": "50d7f347a5964be986e4b7e0ebb22d9e1dba8e62ba7b8ae5fd1e64fbebbe138e",
877
- "pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py": "2bd16a03583d577fb1c64320d05e9329e0a9d0c738eedba88aad181b67a7626e",
878
- "pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py": "ff6a64307dc43fc96b8923c533f6646718d2e8500d6beaca70c6cbf1996d964c",
879
- "pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py": "b0d1f25164b3c80031ef094f6f74d26f241604ec1482dbd98d0cdf8895848087",
880
- "pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py": "dcf62517ebbe5359f95005f4985958ca35eea47c0d4b80ce335210578f93a7a6",
881
- "pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py": "72a5c33271c9aa79d4b63bd5b44c41f4fdc0b4b7c59f65aaffb8fb8f9ae2fb84",
872
+ "pipeline/skills/shared/external/localization-reuse-map/SKILL.md": "ee6d437ed7ea18111074797532376d7bc09419eb3cfef6d8dde5679592457903",
873
+ "pipeline/skills/shared/external/localization-reuse-map/example-mapping.json": "4e36ef6a64f2facc6ee034db260241dc977a7db49119deca487e7c2c3c08fcb6",
874
+ "pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md": "21739f27dbaea52047ab2abc9fdac93c53973ee1c0599b3a701d2c3c75448139",
875
+ "pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md": "cda0489fccda351b47d6ffcb84210e244f23ea2abeffbcaf64f26a1c2c7c6da0",
876
+ "pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md": "2d0e95169c2aa3dd67bcf72fd46010d4c6f5bb0f0e74f7f66cd9b1d615cf95a9",
877
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/_shared.py": "94c24ada0a7601b7d4d41e5f8d8f788603dda61c6493b6c6ec85c88f5500e4c9",
878
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py": "ba117a36981edb43d75632802363f854ecbd9d3eb5057aedff70823b2fae1638",
879
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py": "903592d3b81ddd94aa4c54efb4c43260f7c59bfa0a04df7583786358d90eb69a",
880
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py": "1a478b76ed15e0b18af5eb3c0db331c78213e09169941533808a1d6a0117a456",
881
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py": "4b91791730013b2a85ed1b0e61de42bcf4bcf0abf7736056d5022a94abcb6078",
882
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py": "f716ace1f3a5777cbd33dd911681fe982c3c77748e3af1d8e9816bbf540d25d5",
882
883
  "pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py": "c2569b1f9fe7086c9d3171363ac8e03ee8131a1fcc7e82e1c6f7f9009b939a44",
883
- "pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py": "1b81594418febd40ba4c187c5e9d476f3cb92e005e923005cb10cf1c40826805",
884
- "pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py": "6f4ba7c7ec2c1696563e9d9a6fd700fd9bbccddd21c4bbbaae77d65f3ae172f6",
885
- "pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py": "a43b826bb5c0e63d0caa9e8558f6da115fb7b9ac51e04e922fe210fd47ca13f7",
886
- "pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py": "b81d7b192a54755c787f7e1973e839fcf42f33a482aff0ee1db001596078c1af",
884
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py": "0b35d680235fb4a1e9cdd318e9ade2fe1e2276625d45dedc612fa334cd421125",
885
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py": "06c7f5bbd009610e370b6b33fe15415d7cbc091dcf986f1a60d639d3b58c390c",
886
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py": "499e8523afb5736a6414cea0cbc10542ccbf99509ab97334f095c18c607d5e66",
887
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py": "642606c4a109f282be5467ad7c3ed5c40b993f7097028f0eb2e9a9821022e218",
887
888
  "pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh": "cbea5b53799b27fde00c0381ebb6056852d04fabe8bfcaac5ac5f7574e365db1",
888
- "pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py": "33dc1332152aa16f1665f966435bcff0a351f03c16cc8a3c5198c3bf412e7d62",
889
+ "pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py": "1a28241018b9d5406363e74485f6b70401f70479118002a6df759c223499c5c2",
889
890
  "pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md": "52156bbf7a55cbfa9d7a5a09279d9b2d00f3617bd4e83ec31807c4d703030e6c",
890
891
  "pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md": "1796dbf9f28a77ec98758009da3d85a5d9290581cd25f0f54d98023e704d003f",
891
892
  "pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/Package.swift": "24cdd73b17cf98a2f315e60a7f883ddec8c94572f0d1643f46f4465ffccaf4a6",
@@ -903,7 +904,7 @@
903
904
  "pipeline/skills/shared/external/macos-spm-app-packaging/references/packaging.md": "c3d3784b4944e30be5878b413587a18a57e7964b88ac349444457cc911f2ab02",
904
905
  "pipeline/skills/shared/external/macos-spm-app-packaging/references/release.md": "5593058f07dbdb4a2bda0d27dff094dd57170fe5c10dd48ed065e088d30611a5",
905
906
  "pipeline/skills/shared/external/macos-spm-app-packaging/references/scaffold.md": "4eaff69594f0700196efc90da3106123fd9f82833bc193691bb0500a01756162",
906
- "pipeline/skills/shared/external/mapkit-location/SKILL.md": "fa78d74db0a13cdcf215a5f62c6b0ed33c5e1a6757b795a9968d131f0a9030ee",
907
+ "pipeline/skills/shared/external/mapkit-location/SKILL.md": "d6be293b79f2e0e3312db441c7c315779b7f345cea3c264508bfbf76f49e79ef",
907
908
  "pipeline/skills/shared/external/mapkit-location/evals/evals.json": "d50a323786845f4c06f5ece5bb888d55827374e54bc6a3d0997bf28a771d5b58",
908
909
  "pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md": "87d9dedec8f6139123b13413a9f2fb6bc015bf63160800ccab35524b4b09eb4d",
909
910
  "pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md": "916fd2a78d8055d30b7943bdfceb46b5f85b47d8a8207c1557007aeb0adefef3",
@@ -970,7 +971,7 @@
970
971
  "pipeline/skills/shared/external/skill-creator/examples.md": "c126fd05796033828607bca44ecf5c5e7719251159b07702c80356d565e2c088",
971
972
  "pipeline/skills/shared/external/skill-creator/label-check.md": "b92966967c8703ce352d8328672ab745147737ea43fbb517c5683249b080d8d0",
972
973
  "pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js": "c2be5b99bd93fea9a56d7892c8aede2233c435edc60479c2a8aa370352b0bb34",
973
- "pipeline/skills/shared/external/skill-creator/template.md": "c7761b4d9c03b26194cc51ba20305bcf5bc39c5ed1a4c6fe636a348c98a97e91",
974
+ "pipeline/skills/shared/external/skill-creator/template.md": "ebcd94c957302da1cd98ed24bc71681cdbd6d2e59abad174897e10fbc30646bb",
974
975
  "pipeline/skills/shared/external/speech-recognition/SKILL.md": "a58c5171aa43c573993916c35cd39d100b72a7b74671207fe1c096d56998dcfb",
975
976
  "pipeline/skills/shared/external/speech-recognition/evals/evals.json": "2303f6faa9a64034bf2cfac4622256f6a2bf561035b9c6288c852d778a87a96a",
976
977
  "pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md": "cc8a7ccdcdc6c4371492437ad4f718c776cc3ee654febfbd1e75612aff2db8fe",
@@ -982,7 +983,7 @@
982
983
  "pipeline/skills/shared/external/storekit/SKILL.md": "abdb949df40a7b6959dd2c08286b8b7a48338d6ba0772943ea8a50c8403ff782",
983
984
  "pipeline/skills/shared/external/storekit/evals/evals.json": "3a90968d66ac86765add2f6b54867d6bd43acb05c4c91182171d76ba8e189c64",
984
985
  "pipeline/skills/shared/external/storekit/references/app-review-guidelines.md": "e116e3c0292f11a62561e0cbedfdb7d2595e884e140a73eec487796374c0794a",
985
- "pipeline/skills/shared/external/storekit/references/core-patterns.md": "17f69ea5b043fd77394e02651f6a8274661922b610daaa14f8a06c4fc77b066c",
986
+ "pipeline/skills/shared/external/storekit/references/core-patterns.md": "9dcb0b018349eb61435b4011f847bdda9566f3376b6e2522655c4d6affb5df6a",
986
987
  "pipeline/skills/shared/external/storekit/references/storekit-advanced.md": "c08988b604ce0424a7b0f1789fabb4825f10c5b78acd69b3dad92a6ab507ea75",
987
988
  "pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md": "aa3713df8e948972ad1a8ef5ff106e812527913f55a25dede0e152992c852fdf",
988
989
  "pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json": "ef5e53784c0fd6a2529d45f0008d03be8274c00796f3e5228d55bc8b8b974cf8",
@@ -1014,12 +1015,12 @@
1014
1015
  "pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md": "6797fb63c1b06d4ab89d9d5cebb617d8ae7f45b801283f3bef144596a20a5ef6",
1015
1016
  "pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md": "98f90cd9dd9d0cc8cab23d05e05c78bc8c58a7d51451a37f1af8cd0779fc4b9a",
1016
1017
  "pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md": "ca199709dd05b84d7277eec358d6cc8ebc96437274bd9428e80f33b779f1aee9",
1017
- "pipeline/skills/shared/external/swift-concurrency/SKILL.md": "b231d006488648ec679cac3fb9f6676c32594db3425e32b1e217a7caff73aec0",
1018
+ "pipeline/skills/shared/external/swift-concurrency/SKILL.md": "428a7e31167e98ef300d0c000afda438bfdd7853793571ab4d1d05623e6d4383",
1018
1019
  "pipeline/skills/shared/external/swift-concurrency/evals/evals.json": "1013962db621805cb6bbc5d8b851b5c27d381db32df3229d553a06715c6921e8",
1019
1020
  "pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md": "281403c9e4dc7a98f9c2424f499c3388f0201c8092d22bc7becc54fb4c9a298d",
1020
1021
  "pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md": "95ce052f475eb0abedb8984a39b6bf0914bc862adf63b4c42a1d131a919dc68a",
1021
1022
  "pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md": "487d7a3dc18fb86fcbe41302bba664c1e084da28b60102b78e74a2bf129f2058",
1022
- "pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md": "0deff5a01bbd015c240c11a2b7f527c4a0082e3535c667e375460fd3d7c3c0d0",
1023
+ "pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md": "0727883bf34ef4e8759570334b58cf80a6926f67abd02897dbdfeccac17bf2d9",
1023
1024
  "pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md": "e16c6d277a02d8dc4ef808f858023afeb874f70300f75d5a374d9b2ff6e8bc75",
1024
1025
  "pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md": "3f563accdd054e8faf79597e16ff0afb27bd4ac23bdb9383f7551880319fdabb",
1025
1026
  "pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md": "c4168032624eb503dfc382b1be407f13d2fcf68ff37efd5ceea6f7862fedf31a",
@@ -1028,21 +1029,21 @@
1028
1029
  "pipeline/skills/shared/external/swift-language/evals/evals.json": "97184d76a2731b847382ae6e11dedd20671e3a1792e02b1251d70cc42f1fac6a",
1029
1030
  "pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md": "0491a034791c8f00f18277038b0812182b4025235b65eb05b518d43fa92bbcb6",
1030
1031
  "pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md": "a7254e8ed144a11c7f5f168257b4f1060348d063573e0a05342b21d72a8127eb",
1031
- "pipeline/skills/shared/external/swift-security/SKILL.md": "2dbc80cc138e70c0477f5340d372102e588a85970710add24d06dae19b5e58ff",
1032
+ "pipeline/skills/shared/external/swift-security/SKILL.md": "0358e6b23ec268c51bf34d9341a80150746d2cbe7f9e4159de5133442a1b0d2e",
1032
1033
  "pipeline/skills/shared/external/swift-security/evals/evals.json": "0242233bd24b35c3a5ddc544c161c4d6682439c732dba455ecc288657bccca76",
1033
1034
  "pipeline/skills/shared/external/swift-security/references/biometric-authentication.md": "1a5adc717f53584a401e1c568bff4a817e4318b32c812f7c791a75bf82f537f6",
1034
- "pipeline/skills/shared/external/swift-security/references/certificate-trust.md": "1b0aa3017280c9b81267a599186e7f931b219a005503b9a2d82b87bba4677cbf",
1035
+ "pipeline/skills/shared/external/swift-security/references/certificate-trust.md": "cb7fff203e2663cc95e806ea0c232c43547fabc2e8f91956a5d45a8ca53779e4",
1035
1036
  "pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md": "ebed571943d2572a643b7d02d2f61244f8c674ef117b757792ae8371be63bd00",
1036
1037
  "pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md": "486195e6288956dd192b6d5213a56b25667be6c02eea6ab64882c40886d24717",
1037
1038
  "pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md": "838ae8cac8896d14e3c137eec35afb6ff97b5471be1121ea1988dd4bf8421274",
1038
1039
  "pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md": "c97c2eb38213437e12f217edaa29144f3701ed9be675f1a43bc4a9409321031d",
1039
1040
  "pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md": "9df164f127f07cbb76e527ab1cd8fdb8aaf6d88a386ed3e2dff3ef2954625923",
1040
1041
  "pipeline/skills/shared/external/swift-security/references/keychain-access-control.md": "964cc74c1195bf5c6aedd242ee3aa6d352769320e0665779279b86ef37d898cd",
1041
- "pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md": "fc308f580dc56dd0c232df71a499971f414c02b7388074280c3d670bd755710b",
1042
+ "pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md": "be9813c37d122b7ecd6060225944b8a9883c913cdef861f4b27118c4d43bdc74",
1042
1043
  "pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md": "e46fcd46ae5e27ed6ff6681b607900632cfbcb04d3083f34b57c006e630e6946",
1043
1044
  "pipeline/skills/shared/external/swift-security/references/keychain-sharing.md": "2209c80d4418b20890596d40d60ddfdf5df76d14c1f3e44aee034ad8256447c4",
1044
1045
  "pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md": "1546281da8efc4cd6d5ea213d7f6a9eac10f5ebf853d07bb812e54139f8dcb65",
1045
- "pipeline/skills/shared/external/swift-security/references/secure-enclave.md": "afe72239e0484926fa9f3c094b1f009b7db67e813bcbf5e09d0de931557e7944",
1046
+ "pipeline/skills/shared/external/swift-security/references/secure-enclave.md": "10f56ff915937f292b51b674bf2dcbd997aee067fd7db8b244561bf597314991",
1046
1047
  "pipeline/skills/shared/external/swift-security/references/testing-security-code.md": "76b06b74e247566a17fd84ed285371737f5a335e9501ae278d11dfb24d047bb9",
1047
1048
  "pipeline/skills/shared/external/swift-testing-pro/SKILL.md": "619e0195346464f7d1ad286f11604d01946e73cec7fc1ee1066c546aaebb41af",
1048
1049
  "pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md": "c57191b283bb943dee2037f721b10144dca7ec2cfb59979a08bb6bf90c841150",
@@ -1050,9 +1051,9 @@
1050
1051
  "pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md": "51c610b5f4c7fc8b6552cba52d1a54b5463e8ea4ee065f3b009d0798f3bf1cf6",
1051
1052
  "pipeline/skills/shared/external/swift-testing-pro/references/new-features.md": "7ce342f0462e8493d7bea079557388a84fdf873848ef11858292e4d368de53ec",
1052
1053
  "pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md": "031811e8c907d1cec6d3e5704ccef7f65afc19f471ef09dff7773152be17aa3d",
1053
- "pipeline/skills/shared/external/swift-testing/SKILL.md": "71bcab71b1d26f04220561c347ded36920784cdaec85fb3e303405359c99e2de",
1054
- "pipeline/skills/shared/external/swift-testing/evals/evals.json": "8a67db61d6033eb27e1076c663b623d165d2b889f458ed70df01a2a5c85991a8",
1055
- "pipeline/skills/shared/external/swift-testing/references/testing-advanced.md": "2bf4dd059c2a432b1e70a4034b27ea72df1f88d9f3eacaa018bc2c0b5a262859",
1054
+ "pipeline/skills/shared/external/swift-testing/SKILL.md": "bed2911b41450d88b77cc913648ea421d99d7c167fb49f4c8bcf54b580952c29",
1055
+ "pipeline/skills/shared/external/swift-testing/evals/evals.json": "751ba02be426e6a4768c28b8c7454c017ec55f5d27a28145133049b0c2ded7b1",
1056
+ "pipeline/skills/shared/external/swift-testing/references/testing-advanced.md": "e7cf2dee756db76a727e5e39a8f76553e2a263c1d5ad3d23d504cf91e5b9ef71",
1056
1057
  "pipeline/skills/shared/external/swift-testing/references/testing-patterns.md": "ba2fec0625430c19bbdfabbad4c6e886714d0d83c151c19344dfa58fc016bb87",
1057
1058
  "pipeline/skills/shared/external/swiftdata-pro/SKILL.md": "a5782c558a8127e11555549d2c850c9430b357b36f3d728646163e3409f05144",
1058
1059
  "pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md": "2acd659218e5409eb2682fd082345b1586fd81b6aefdbc2fe0c82a2ba0a12ce7",
@@ -1060,7 +1061,7 @@
1060
1061
  "pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md": "4b3c8d3692df5b7ec1136736d3a077014ebd20a8f1637e9f90f20dbd6317c49c",
1061
1062
  "pipeline/skills/shared/external/swiftdata-pro/references/indexing.md": "909167e538461bf517f8fc6b00bfe70d1c8ea19b12a4749088823c275de52a82",
1062
1063
  "pipeline/skills/shared/external/swiftdata-pro/references/predicates.md": "623c3195fccdec0ec95c0291223ced7491025b04e59c0b4f4fe5ffd23eb1019b",
1063
- "pipeline/skills/shared/external/swiftdata/SKILL.md": "65518d8167b0ec9ed61608731aa9e7877124e21433cb64f230b9a8da792ceff8",
1064
+ "pipeline/skills/shared/external/swiftdata/SKILL.md": "5fa27f7d9c0997acc5959ad811aa4b49ccbd34d62b5237556e1ffaa650447163",
1064
1065
  "pipeline/skills/shared/external/swiftdata/evals/evals.json": "12115e5248fdae6b4fe479c169ffb6e7ea63b8022f962e40a0bd1e642e085b25",
1065
1066
  "pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md": "c5a5ccacb0f627775f99cefd3d92729a500bc00a4626b73b8a045887e471deaa",
1066
1067
  "pipeline/skills/shared/external/swiftdata/references/indexing.md": "b643d107fac00e22db7c7e068e1270a3bd90c86babcc138ac5286205f571cfd4",
@@ -1105,11 +1106,11 @@
1105
1106
  "pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md": "f2f3f3031e059d676e3439dfff8d5c62fcbb0746c925c3b8cc4e70a26f4c7781",
1106
1107
  "pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md": "bbcaeda80b6c052a521a63880f0f2f6ddabc589d4c65455b4286a26b4cce4808",
1107
1108
  "pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md": "088ea5bb59aa5069daa46ccd08fbda09eef66304d0107794fbbe8fdbe6ed120a",
1108
- "pipeline/skills/shared/external/swiftui-navigation/SKILL.md": "a40a53957bd01be79ff2f692f639fbf618c29da9b98d5f1150618bafd458825d",
1109
+ "pipeline/skills/shared/external/swiftui-navigation/SKILL.md": "422a6c0b680d422af731474a9b03d141ef04e1f16359ce25a3ba22780f2bf1c2",
1109
1110
  "pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md": "4a764acf5c3418e461c11d5817606a0bce943a34aed45f365d399a91b9769e78",
1110
- "pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md": "a23de35a3a79073227c23263dac997197e4e87abc1db911a03c46f9eaeb81430",
1111
+ "pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md": "791fb1ba0e9a0dff9e4462d7eb20f06363b7c38d26efc7c247706b133b851e45",
1111
1112
  "pipeline/skills/shared/external/swiftui-navigation/references/sheets.md": "5368db1cea7bc2d21a423a650d2ae23e80d9be4f6dd524fe5b823f1d1a1522bf",
1112
- "pipeline/skills/shared/external/swiftui-navigation/references/tabview.md": "6d16b2386da5e9a9bb99daa32648f5d654ebb2288e6200d6ec4de3637e7d8b0a",
1113
+ "pipeline/skills/shared/external/swiftui-navigation/references/tabview.md": "d7f8d77966a051562a1f725819f5364642a6c72ecbf5a4071ed6e2b9956ec423",
1113
1114
  "pipeline/skills/shared/external/swiftui-patterns/SKILL.md": "35c710faa4ff459f6349fcbc422bc53d4cad4c485b2b592e4fb96414778777f6",
1114
1115
  "pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md": "91d11d813faea5f4db8a1ade7fa1b4bb8bab537dce5724acc7c673010dfd57cd",
1115
1116
  "pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md": "33f42f119baafba86cb8d80feb757e785e6ba6f8e284627dcdd4e5cc6c041e1c",
@@ -1189,13 +1190,13 @@
1189
1190
  "pipeline/skills/shared/external/vision-framework/references/vision-requests.md": "c124b2b8359fd391a93a130ab9c32f9e2bfd7cd2153df89f05a66178f7223eb8",
1190
1191
  "pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md": "ba88bb588d0e896c851e3aa6bb3b7b20606d2d1c715e01656a3e0f54900ef5f8",
1191
1192
  "pipeline/skills/shared/external/vue-composition/SKILL.md": "429115ba7c4fdecd134e9ea546840d6341312d348f359a8bf35690cd113c1201",
1192
- "pipeline/skills/shared/external/weatherkit/SKILL.md": "cafc8e7c7ec3ee6107be992086d5ba3280ef524b5177e5069b8525914b272811",
1193
+ "pipeline/skills/shared/external/weatherkit/SKILL.md": "db8a11fc9c572c6d9754c031ad97a868c5d0e6748855d90b72a2aeb44e2d4255",
1193
1194
  "pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md": "81a54949c6abde31019100f85876c69488e5bf80deb77ddbc8504955a87a82a3",
1194
1195
  "pipeline/skills/shared/external/web-accessibility/SKILL.md": "a1cd782292982a3c37fd8d1eedaae85f860886f492b2666b73735c6261025594",
1195
1196
  "pipeline/skills/shared/external/web-performance/SKILL.md": "b9983bb39f9a65daad5aca4fb97c88ecbd7c0639b39023dc5c7c6784c4c1c868",
1196
1197
  "pipeline/skills/shared/external/web-testing/SKILL.md": "3120db537a687adfbf396e500f4e146880e4b1a00ab339f85ab526853c947447",
1197
- "pipeline/skills/shared/external/widgetkit/SKILL.md": "e00e47ad977c7775e6c83bcaee68546325cb1b7eb38d208d6fe01ca88090eb77",
1198
- "pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md": "1be49d6cdd7167f7d311a29bed06decd45f492e64e8f399f2c5b7a8c9e464dff",
1198
+ "pipeline/skills/shared/external/widgetkit/SKILL.md": "d4bce1c362e57616b252304414cfd01354586c7ed0be6c22f61efcc0980e26b0",
1199
+ "pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md": "b04ca376ecc86ab17a9a6e86c081b6c7720cb6c614c091ec0ef1d41ba2d30a16",
1199
1200
  "pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md": "3554d7b310fadfb1afd48793d01f08d91e47a596af0001bd575b61e21e29c19f",
1200
1201
  "pipeline/skills/shared/external/xcode-build-benchmark/references/benchmark-artifacts.md": "8087ebebff618af462200af9a49f825281ea039feaa7c5d5e3dbc49afe425798",
1201
1202
  "pipeline/skills/shared/external/xcode-build-benchmark/references/benchmarking-workflow.md": "036c6b7de76974dd6648d0edc64cf6d950b079a3a2e509b61138dba560518c9d",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.8.0",
3
+ "version": "20.8.1",
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/eval-guard-robustness.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/gen-skills-index.mjs --check && 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",
@@ -22,8 +22,9 @@ const CERTAIN = RULES.filter((r) => r.certain);
22
22
  /** @param {string} text */
23
23
  export function redact(text) {
24
24
  if (typeof text !== "string" || !text) return text;
25
- // Invisible characters are removed first: they change nothing a reader sees,
26
- // and a token split by one would otherwise slip past every rule.
25
+ // Invisible characters are removed first, joiners included, so a token split
26
+ // by one cannot slip past the rules. The logged line loses them too: an emoji
27
+ // sequence joined by U+200D prints as its separate parts.
27
28
  let out = stripInvisible(text);
28
29
  for (const rule of CERTAIN) {
29
30
  const re = new RegExp(
@@ -100,6 +100,18 @@ for (const k of order) {
100
100
  md += `\n`;
101
101
  }
102
102
 
103
- writeFileSync(join(SKILLS_ROOT, "README.md"), md);
103
+ const target = join(SKILLS_ROOT, "README.md");
104
+ if (process.argv.includes("--check")) {
105
+ const current = existsSync(target) ? readFileSync(target, "utf8") : "";
106
+ if (current !== md) {
107
+ console.error(
108
+ "gen-skills-index: pipeline/skills/shared/README.md is stale - run node pipeline/scripts/gen-skills-index.mjs",
109
+ );
110
+ process.exit(1);
111
+ }
112
+ console.log("gen-skills-index: README.md is current");
113
+ process.exit(0);
114
+ }
115
+ writeFileSync(target, md);
104
116
  const filledCategories = Object.values(buckets).filter((b) => b.length).length;
105
117
  console.log(`wrote ${total} skills (${breakdown}) across ${filledCategories} categories`);
@@ -176,6 +176,10 @@ scan_file() {
176
176
 
177
177
  # A token written with an invisible character or a look-alike letter: scan a
178
178
  # folded copy too. Only non-ASCII content pays for the node call.
179
+ if printf '%s' "$content" | LC_ALL=C grep -q '[^ -~[:space:]]' 2>/dev/null \
180
+ && { ! command -v node >/dev/null 2>&1 || [ ! -f "$PRE_COMMIT_DIR/../lib/normalize-text.mjs" ]; }; then
181
+ echo "pre-commit-check: node or lib/normalize-text.mjs unavailable - non-ASCII content scanned without look-alike folding" >&2
182
+ fi
179
183
  if printf '%s' "$content" | LC_ALL=C grep -q '[^ -~[:space:]]' 2>/dev/null \
180
184
  && command -v node >/dev/null 2>&1 \
181
185
  && [ -f "$PRE_COMMIT_DIR/../lib/normalize-text.mjs" ]; then