@1aboveio/skills 0.19.3 → 0.20.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 (197) hide show
  1. package/README.md +9 -4
  2. package/package.json +1 -1
  3. package/runtime/skills/distribution/generated/recipes.json +54 -48
  4. package/runtime/skills/distribution/scripts/bundles.mjs +113 -7
  5. package/runtime/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -6
  6. package/runtime/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +3 -36
  7. package/skills/cicd-pipeline/mergify/SKILL.md +1 -1
  8. package/skills/engineering/engineering-runtime/coherence/workflow.json +14 -83
  9. package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -6
  10. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +3 -36
  11. package/skills/engineering/smoke/SKILL.md +1 -1
  12. package/skills/payment/payment-analysis/SKILL.md +5 -3
  13. package/skills/payment/tld-detection/SKILL.md +163 -0
  14. package/skills/payment/tld-detection/agents/openai.yaml +9 -0
  15. package/skills/payment/tld-detection/evals/evals.json +107 -0
  16. package/skills/payment/tld-detection/references/clean.md +51 -0
  17. package/skills/payment/tld-detection/references/clustering.md +219 -0
  18. package/skills/payment/tld-detection/references/decision.md +85 -0
  19. package/skills/payment/tld-detection/references/report-template.md +169 -0
  20. package/skills/payment/tld-detection/references/terminology.md +69 -0
  21. package/skills/payment/tld-detection/references/workflow.md +78 -0
  22. package/skills/payment/tld-detection/scripts/detect_ladders.py +390 -0
  23. package/skills/payment/tld-detection/tests/test_detect_ladders.py +132 -0
  24. package/skills/engineering/resolve-issues/SKILL.md +0 -168
  25. package/skills/engineering/resolve-issues/agents/openai.yaml +0 -9
  26. package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +0 -499
  27. package/skills/engineering/resolve-issues/references/breaker.md +0 -82
  28. package/skills/engineering/resolve-issues/references/deliverables.md +0 -27
  29. package/skills/engineering/resolve-issues/references/delivery.md +0 -108
  30. package/skills/engineering/resolve-issues/references/evidence-lane.md +0 -21
  31. package/skills/engineering/resolve-issues/references/exact-head-ci.md +0 -287
  32. package/skills/engineering/resolve-issues/references/fan-out.md +0 -33
  33. package/skills/engineering/resolve-issues/references/finalization.md +0 -68
  34. package/skills/engineering/resolve-issues/references/guarantees.md +0 -10
  35. package/skills/engineering/resolve-issues/references/high-risk.md +0 -29
  36. package/skills/engineering/resolve-issues/references/incidents/848/README.md +0 -156
  37. package/skills/engineering/resolve-issues/references/intake.md +0 -86
  38. package/skills/engineering/resolve-issues/references/integration-gate.md +0 -53
  39. package/skills/engineering/resolve-issues/references/interference.md +0 -87
  40. package/skills/engineering/resolve-issues/references/loop.md +0 -134
  41. package/skills/engineering/resolve-issues/references/model-catalog.md +0 -9
  42. package/skills/engineering/resolve-issues/references/postmortem.md +0 -27
  43. package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +0 -41
  44. package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +0 -48
  45. package/skills/engineering/resolve-issues/references/pre-flight.md +0 -41
  46. package/skills/engineering/resolve-issues/references/regression-checklist.md +0 -26
  47. package/skills/engineering/resolve-issues/references/run-state.md +0 -288
  48. package/skills/engineering/resolve-issues/references/sandboxed-testing.md +0 -48
  49. package/skills/engineering/resolve-issues/references/spawn-contract.md +0 -96
  50. package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +0 -40
  51. package/skills/engineering/resolve-issues/references/why.md +0 -653
  52. package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +0 -49
  53. package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +0 -721
  54. package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +0 -962
  55. package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +0 -220
  56. package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +0 -420
  57. package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +0 -256
  58. package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +0 -168
  59. package/skills/engineering/resolve-issues/scripts/discover-models.mjs +0 -9
  60. package/skills/engineering/resolve-issues/scripts/doctrine.mjs +0 -62
  61. package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +0 -191
  62. package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +0 -413
  63. package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +0 -332
  64. package/skills/engineering/resolve-issues/scripts/finalize.mjs +0 -488
  65. package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +0 -3307
  66. package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +0 -16
  67. package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +0 -51
  68. package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +0 -17
  69. package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +0 -166
  70. package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +0 -92
  71. package/skills/engineering/resolve-issues/scripts/guide-index.mjs +0 -73
  72. package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +0 -159
  73. package/skills/engineering/resolve-issues/scripts/interference.mjs +0 -427
  74. package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +0 -9
  75. package/skills/engineering/resolve-issues/scripts/next-operations.mjs +0 -419
  76. package/skills/engineering/resolve-issues/scripts/postmortem.mjs +0 -909
  77. package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +0 -345
  78. package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +0 -415
  79. package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +0 -697
  80. package/skills/engineering/resolve-issues/scripts/report.mjs +0 -494
  81. package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +0 -172
  82. package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +0 -79
  83. package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +0 -334
  84. package/skills/engineering/resolve-issues/scripts/run-state.mjs +0 -4792
  85. package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +0 -395
  86. package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +0 -290
  87. package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +0 -170
  88. package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +0 -293
  89. package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +0 -197
  90. package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +0 -127
  91. package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +0 -893
  92. package/skills/engineering/resolve-issues/scripts/workspaces.mjs +0 -829
  93. package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +0 -290
  94. package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +0 -80
  95. package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +0 -102
  96. package/skills/engineering/resolve-release/LICENSE +0 -3
  97. package/skills/engineering/resolve-release/SKILL.md +0 -113
  98. package/skills/engineering/resolve-release/agents/openai.yaml +0 -9
  99. package/skills/engineering/resolve-release/references/assembly.md +0 -137
  100. package/skills/engineering/resolve-release/references/auto-when-green.md +0 -56
  101. package/skills/engineering/resolve-release/references/candidate.md +0 -167
  102. package/skills/engineering/resolve-release/references/exposure.md +0 -178
  103. package/skills/engineering/resolve-release/references/handoff.md +0 -24
  104. package/skills/engineering/resolve-release/references/postmortem.md +0 -230
  105. package/skills/engineering/resolve-release/references/preflight.md +0 -208
  106. package/skills/engineering/resolve-release/references/principles.md +0 -94
  107. package/skills/engineering/resolve-release/references/regression-checklist.md +0 -36
  108. package/skills/engineering/resolve-release/references/related-skills.md +0 -13
  109. package/skills/engineering/resolve-release/references/routing.md +0 -149
  110. package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +0 -285
  111. package/skills/engineering/resolve-release/references/versioning.md +0 -202
  112. package/skills/engineering/resolve-release/references/why.md +0 -53
  113. package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +0 -389
  114. package/skills/engineering/resolve-release/scripts/build-changes.mjs +0 -209
  115. package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +0 -407
  116. package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +0 -904
  117. package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +0 -81
  118. package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +0 -612
  119. package/skills/engineering/resolve-release/scripts/close-attempt.mjs +0 -135
  120. package/skills/engineering/resolve-release/scripts/closeout-release.mjs +0 -161
  121. package/skills/engineering/resolve-release/scripts/doctrine.mjs +0 -106
  122. package/skills/engineering/resolve-release/scripts/durable-processing.mjs +0 -522
  123. package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +0 -659
  124. package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +0 -1014
  125. package/skills/engineering/resolve-release/scripts/finalize-release.mjs +0 -526
  126. package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +0 -169
  127. package/skills/engineering/resolve-release/scripts/green-gate.mjs +0 -599
  128. package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +0 -752
  129. package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +0 -56
  130. package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +0 -1538
  131. package/skills/engineering/resolve-release/scripts/postmortem.mjs +0 -381
  132. package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +0 -510
  133. package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +0 -326
  134. package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +0 -272
  135. package/skills/engineering/resolve-release/scripts/report.mjs +0 -417
  136. package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +0 -114
  137. package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +0 -238
  138. package/skills/engineering/resolve-release/scripts/review-packet.mjs +0 -503
  139. package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +0 -263
  140. package/skills/engineering/resolve-release/scripts/version-assert.mjs +0 -339
  141. package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +0 -485
  142. package/skills/engineering/resolve-release/scripts/version.mjs +0 -1199
  143. package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +0 -449
  144. package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +0 -21
  145. package/skills/engineering/resolve-release/vendor/README.md +0 -60
  146. package/skills/engineering/resolve-release/vendor/acorn.mjs +0 -6233
  147. package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +0 -21
  148. package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +0 -341
  149. package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +0 -70
  150. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +0 -2
  151. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +0 -1
  152. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +0 -7
  153. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +0 -1
  154. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +0 -2033
  155. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +0 -2033
  156. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +0 -7
  157. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +0 -1
  158. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +0 -2
  159. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +0 -1
  160. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +0 -2
  161. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +0 -1
  162. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +0 -2
  163. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +0 -1
  164. package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +0 -49
  165. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +0 -21
  166. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +0 -5
  167. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +0 -549
  168. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +0 -549
  169. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +0 -2
  170. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +0 -1
  171. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +0 -2
  172. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +0 -1
  173. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +0 -36
  174. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +0 -47
  175. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +0 -82
  176. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +0 -11
  177. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +0 -22
  178. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +0 -21
  179. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +0 -21
  180. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +0 -11
  181. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +0 -11
  182. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +0 -25
  183. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
  184. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +0 -85
  185. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +0 -85
  186. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +0 -2
  187. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +0 -1
  188. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +0 -2
  189. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +0 -1
  190. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +0 -20
  191. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +0 -20
  192. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +0 -2
  193. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +0 -1
  194. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +0 -2
  195. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +0 -1
  196. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +0 -61
  197. /package/skills/{engineering/resolve-issues → payment/tld-detection}/LICENSE +0 -0
package/README.md CHANGED
@@ -65,11 +65,11 @@ planned same-named skill. The coordinator still owns group and new-member consen
65
65
 
66
66
  ## Groups in this package
67
67
 
68
- - `engineering-workflow` — Engineering Workflow: e2e-test, ensure-coverage, implement-and-pr, rush-issues, resolve-issues, rush-release, resolve-release, review-pr, smoke, engineering-runtime
68
+ - `engineering-workflow` — Engineering Workflow: e2e-test, ensure-coverage, implement-and-pr, rush-issues, rush-release, review-pr, smoke, engineering-runtime
69
69
  - `delivery-infrastructure` — Delivery Infrastructure: cloud-build, cloud-debug, cloud-deploy, docker, google-cloud, mergify, podman
70
70
  - `backend` — Backend: app-debug, python-backend
71
71
  - `data-science` — Data Science: airflow, pyspark
72
- - `payment` — Payment: fraud-analysis, payment-analysis
72
+ - `payment` — Payment: fraud-analysis, payment-analysis, tld-detection
73
73
  - `fullstack` — Fullstack: better-auth, monorepo, nextjs-fullstack, prisma-setup, shadcn, zod-v4
74
74
 
75
75
  Internal dependencies, installed with the groups above and not selectable on their own: `harness-runtime`.
@@ -97,6 +97,11 @@ non-interactively.
97
97
  Declined skills are never uninstalled by the coordinator and stay out of the remembered acceptance,
98
98
  so the next update asks again.
99
99
 
100
+ When a release archives a previously accepted skill, `update` asks before removing that installed
101
+ copy. The default is No; `--yes` accepts archival non-interactively. Removal is performed by the
102
+ same pinned native Skills CLI, only after the declared replacement is installed or already current.
103
+ Declined or failed archival remains in selection memory so a later update offers it again.
104
+
100
105
  Install and update are best-effort per skill: they continue after a single skill failure, summarize
101
106
  every skill as succeeded, unchanged, declined, or failed, and exit non-zero if anything failed. There
102
107
  is no rollback or transactional group update; the native CLI remains the sole filesystem write
@@ -117,7 +122,7 @@ owns — copy the command for the group you want to remove:
117
122
 
118
123
  ```
119
124
  # Engineering Workflow
120
- npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues resolve-issues rush-release resolve-release review-pr smoke engineering-runtime
125
+ npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime
121
126
  # Delivery Infrastructure
122
127
  npx skills@1.5.22 remove --global --agent universal claude-code --skill cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman
123
128
  # Backend
@@ -125,7 +130,7 @@ npx skills@1.5.22 remove --global --agent universal claude-code --skill app-debu
125
130
  # Data Science
126
131
  npx skills@1.5.22 remove --global --agent universal claude-code --skill airflow pyspark
127
132
  # Payment
128
- npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis
133
+ npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis tld-detection
129
134
  # Fullstack
130
135
  npx skills@1.5.22 remove --global --agent universal claude-code --skill better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4
131
136
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1aboveio/skills",
3
- "version": "0.19.3",
3
+ "version": "0.20.1",
4
4
  "description": "Install the 1AboveIO first-party skill groups through the native Skills CLI.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -3,12 +3,28 @@
3
3
  "generatedFrom": "skills/distribution/manifest.json",
4
4
  "renderTarget": "public-npm",
5
5
  "lifecycleAuthority": "native-skills-cli",
6
+ "archives": [
7
+ {
8
+ "installName": "resolve-issues",
9
+ "formerGroupId": "engineering-workflow",
10
+ "archivedIn": "0.20.0",
11
+ "replacement": "rush-issues",
12
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill resolve-issues"
13
+ },
14
+ {
15
+ "installName": "resolve-release",
16
+ "formerGroupId": "engineering-workflow",
17
+ "archivedIn": "0.20.0",
18
+ "replacement": "rush-release",
19
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill resolve-release"
20
+ }
21
+ ],
6
22
  "sources": [
7
23
  {
8
24
  "id": "first-party",
9
25
  "type": "first-party",
10
26
  "package": "@1aboveio/skills",
11
- "version": "0.19.3",
27
+ "version": "0.20.1",
12
28
  "updatePolicy": "pinned-npm-version",
13
29
  "members": [
14
30
  {
@@ -35,24 +51,12 @@
35
51
  "role": "skill",
36
52
  "licenseResponsibility": "1aboveio-mit"
37
53
  },
38
- {
39
- "installName": "resolve-issues",
40
- "path": "skills/engineering/resolve-issues",
41
- "role": "skill",
42
- "licenseResponsibility": "1aboveio-mit"
43
- },
44
54
  {
45
55
  "installName": "rush-release",
46
56
  "path": "skills/engineering/rush-release",
47
57
  "role": "skill",
48
58
  "licenseResponsibility": "1aboveio-mit"
49
59
  },
50
- {
51
- "installName": "resolve-release",
52
- "path": "skills/engineering/resolve-release",
53
- "role": "skill",
54
- "licenseResponsibility": "1aboveio-mit"
55
- },
56
60
  {
57
61
  "installName": "review-pr",
58
62
  "path": "skills/engineering/review-pr",
@@ -149,6 +153,12 @@
149
153
  "role": "skill",
150
154
  "licenseResponsibility": "1aboveio-mit"
151
155
  },
156
+ {
157
+ "installName": "tld-detection",
158
+ "path": "skills/payment/tld-detection",
159
+ "role": "skill",
160
+ "licenseResponsibility": "1aboveio-mit"
161
+ },
152
162
  {
153
163
  "installName": "better-auth",
154
164
  "path": "skills/fullstack/better-auth",
@@ -208,7 +218,7 @@
208
218
  "sourceId": "first-party",
209
219
  "sourceType": "first-party",
210
220
  "package": "@1aboveio/skills",
211
- "version": "0.19.3",
221
+ "version": "0.20.1",
212
222
  "installPath": null,
213
223
  "members": [
214
224
  "harness-runtime",
@@ -216,9 +226,7 @@
216
226
  "ensure-coverage",
217
227
  "implement-and-pr",
218
228
  "rush-issues",
219
- "resolve-issues",
220
229
  "rush-release",
221
- "resolve-release",
222
230
  "review-pr",
223
231
  "smoke",
224
232
  "engineering-runtime"
@@ -226,7 +234,7 @@
226
234
  "commands": [
227
235
  {
228
236
  "transport": "local",
229
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues resolve-issues rush-release resolve-release review-pr smoke engineering-runtime && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
237
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
230
238
  }
231
239
  ],
232
240
  "onFailure": {
@@ -244,7 +252,7 @@
244
252
  "sourceId": "first-party",
245
253
  "sourceType": "first-party",
246
254
  "package": "@1aboveio/skills",
247
- "version": "0.19.3",
255
+ "version": "0.20.1",
248
256
  "installPath": null,
249
257
  "members": [
250
258
  "harness-runtime",
@@ -252,9 +260,7 @@
252
260
  "ensure-coverage",
253
261
  "implement-and-pr",
254
262
  "rush-issues",
255
- "resolve-issues",
256
263
  "rush-release",
257
- "resolve-release",
258
264
  "review-pr",
259
265
  "smoke",
260
266
  "engineering-runtime"
@@ -262,7 +268,7 @@
262
268
  "commands": [
263
269
  {
264
270
  "transport": "local",
265
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues resolve-issues rush-release resolve-release review-pr smoke engineering-runtime && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
271
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
266
272
  }
267
273
  ],
268
274
  "onFailure": {
@@ -273,7 +279,7 @@
273
279
  ]
274
280
  },
275
281
  "uninstall": {
276
- "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues resolve-issues rush-release resolve-release review-pr smoke engineering-runtime",
282
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime",
277
283
  "removesDependencies": false
278
284
  }
279
285
  },
@@ -290,7 +296,7 @@
290
296
  "sourceId": "first-party",
291
297
  "sourceType": "first-party",
292
298
  "package": "@1aboveio/skills",
293
- "version": "0.19.3",
299
+ "version": "0.20.1",
294
300
  "installPath": null,
295
301
  "members": [
296
302
  "harness-runtime",
@@ -323,7 +329,7 @@
323
329
  "sourceId": "first-party",
324
330
  "sourceType": "first-party",
325
331
  "package": "@1aboveio/skills",
326
- "version": "0.19.3",
332
+ "version": "0.20.1",
327
333
  "installPath": null,
328
334
  "members": [
329
335
  "harness-runtime",
@@ -366,7 +372,7 @@
366
372
  "sourceId": "first-party",
367
373
  "sourceType": "first-party",
368
374
  "package": "@1aboveio/skills",
369
- "version": "0.19.3",
375
+ "version": "0.20.1",
370
376
  "installPath": null,
371
377
  "members": [
372
378
  "harness-runtime",
@@ -394,7 +400,7 @@
394
400
  "sourceId": "first-party",
395
401
  "sourceType": "first-party",
396
402
  "package": "@1aboveio/skills",
397
- "version": "0.19.3",
403
+ "version": "0.20.1",
398
404
  "installPath": null,
399
405
  "members": [
400
406
  "harness-runtime",
@@ -432,7 +438,7 @@
432
438
  "sourceId": "first-party",
433
439
  "sourceType": "first-party",
434
440
  "package": "@1aboveio/skills",
435
- "version": "0.19.3",
441
+ "version": "0.20.1",
436
442
  "installPath": null,
437
443
  "members": [
438
444
  "harness-runtime",
@@ -460,7 +466,7 @@
460
466
  "sourceId": "first-party",
461
467
  "sourceType": "first-party",
462
468
  "package": "@1aboveio/skills",
463
- "version": "0.19.3",
469
+ "version": "0.20.1",
464
470
  "installPath": null,
465
471
  "members": [
466
472
  "harness-runtime",
@@ -498,17 +504,18 @@
498
504
  "sourceId": "first-party",
499
505
  "sourceType": "first-party",
500
506
  "package": "@1aboveio/skills",
501
- "version": "0.19.3",
507
+ "version": "0.20.1",
502
508
  "installPath": null,
503
509
  "members": [
504
510
  "harness-runtime",
505
511
  "fraud-analysis",
506
- "payment-analysis"
512
+ "payment-analysis",
513
+ "tld-detection"
507
514
  ],
508
515
  "commands": [
509
516
  {
510
517
  "transport": "local",
511
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis"
518
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis tld-detection"
512
519
  }
513
520
  ],
514
521
  "onFailure": {
@@ -526,17 +533,18 @@
526
533
  "sourceId": "first-party",
527
534
  "sourceType": "first-party",
528
535
  "package": "@1aboveio/skills",
529
- "version": "0.19.3",
536
+ "version": "0.20.1",
530
537
  "installPath": null,
531
538
  "members": [
532
539
  "harness-runtime",
533
540
  "fraud-analysis",
534
- "payment-analysis"
541
+ "payment-analysis",
542
+ "tld-detection"
535
543
  ],
536
544
  "commands": [
537
545
  {
538
546
  "transport": "local",
539
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis"
547
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis tld-detection"
540
548
  }
541
549
  ],
542
550
  "onFailure": {
@@ -547,7 +555,7 @@
547
555
  ]
548
556
  },
549
557
  "uninstall": {
550
- "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis",
558
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis tld-detection",
551
559
  "removesDependencies": false
552
560
  }
553
561
  },
@@ -564,7 +572,7 @@
564
572
  "sourceId": "first-party",
565
573
  "sourceType": "first-party",
566
574
  "package": "@1aboveio/skills",
567
- "version": "0.19.3",
575
+ "version": "0.20.1",
568
576
  "installPath": null,
569
577
  "members": [
570
578
  "harness-runtime",
@@ -596,7 +604,7 @@
596
604
  "sourceId": "first-party",
597
605
  "sourceType": "first-party",
598
606
  "package": "@1aboveio/skills",
599
- "version": "0.19.3",
607
+ "version": "0.20.1",
600
608
  "installPath": null,
601
609
  "members": [
602
610
  "harness-runtime",
@@ -636,7 +644,7 @@
636
644
  "sourceId": "first-party",
637
645
  "sourceType": "first-party",
638
646
  "package": "@1aboveio/skills",
639
- "version": "0.19.3",
647
+ "version": "0.20.1",
640
648
  "installPath": null,
641
649
  "members": [
642
650
  "harness-runtime"
@@ -662,7 +670,7 @@
662
670
  "sourceId": "first-party",
663
671
  "sourceType": "first-party",
664
672
  "package": "@1aboveio/skills",
665
- "version": "0.19.3",
673
+ "version": "0.20.1",
666
674
  "installPath": null,
667
675
  "members": [
668
676
  "harness-runtime"
@@ -694,7 +702,7 @@
694
702
  "sourceId": "first-party",
695
703
  "sourceType": "first-party",
696
704
  "package": "@1aboveio/skills",
697
- "version": "0.19.3",
705
+ "version": "0.20.1",
698
706
  "installPath": null,
699
707
  "members": [
700
708
  "harness-runtime",
@@ -702,9 +710,7 @@
702
710
  "ensure-coverage",
703
711
  "implement-and-pr",
704
712
  "rush-issues",
705
- "resolve-issues",
706
713
  "rush-release",
707
- "resolve-release",
708
714
  "review-pr",
709
715
  "smoke",
710
716
  "engineering-runtime",
@@ -721,6 +727,7 @@
721
727
  "pyspark",
722
728
  "fraud-analysis",
723
729
  "payment-analysis",
730
+ "tld-detection",
724
731
  "better-auth",
725
732
  "monorepo",
726
733
  "nextjs-fullstack",
@@ -731,7 +738,7 @@
731
738
  "commands": [
732
739
  {
733
740
  "transport": "local",
734
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues resolve-issues rush-release resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
741
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
735
742
  }
736
743
  ],
737
744
  "onFailure": {
@@ -749,7 +756,7 @@
749
756
  "sourceId": "first-party",
750
757
  "sourceType": "first-party",
751
758
  "package": "@1aboveio/skills",
752
- "version": "0.19.3",
759
+ "version": "0.20.1",
753
760
  "installPath": null,
754
761
  "members": [
755
762
  "harness-runtime",
@@ -757,9 +764,7 @@
757
764
  "ensure-coverage",
758
765
  "implement-and-pr",
759
766
  "rush-issues",
760
- "resolve-issues",
761
767
  "rush-release",
762
- "resolve-release",
763
768
  "review-pr",
764
769
  "smoke",
765
770
  "engineering-runtime",
@@ -776,6 +781,7 @@
776
781
  "pyspark",
777
782
  "fraud-analysis",
778
783
  "payment-analysis",
784
+ "tld-detection",
779
785
  "better-auth",
780
786
  "monorepo",
781
787
  "nextjs-fullstack",
@@ -786,7 +792,7 @@
786
792
  "commands": [
787
793
  {
788
794
  "transport": "local",
789
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues resolve-issues rush-release resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
795
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
790
796
  }
791
797
  ],
792
798
  "onFailure": {
@@ -797,7 +803,7 @@
797
803
  ]
798
804
  },
799
805
  "uninstall": {
800
- "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues resolve-issues rush-release resolve-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 harness-runtime"
806
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 harness-runtime"
801
807
  }
802
808
  }
803
809
  }
@@ -204,6 +204,20 @@ export function newMemberCandidates(action, groupIds, priorState, transport = {}
204
204
  return candidates;
205
205
  }
206
206
 
207
+ // Archived members are offered only to users who previously accepted them in the same group.
208
+ // This keeps retirement explicit and prevents a release from treating filesystem presence as
209
+ // consent. A successful removal drops the old acceptance; a decline or failure preserves it so a
210
+ // later update offers the archive again.
211
+ export function archivedMemberCandidates(action, groupIds, priorState, transport = {}) {
212
+ if (action !== 'update' || !priorState) return [];
213
+ const recipes = readRecipes(resolveBundleTransport(transport).recipesPath);
214
+ const selected = new Set(groupIds);
215
+ const acceptedByGroup = new Map(priorState.groups
216
+ .map((group) => [group.id, new Set(group.acceptedMembers)]));
217
+ return (recipes.archives ?? []).filter((archive) => selected.has(archive.formerGroupId)
218
+ && acceptedByGroup.get(archive.formerGroupId)?.has(archive.installName));
219
+ }
220
+
207
221
  // Prior acceptance for the new-member consent delta on explicit selections (picker, --group,
208
222
  // --all). ABSENT memory is tolerated — a first-time selection needs no delta — but CORRUPT memory
209
223
  // fails closed with the same clear error as the no-arg replay: guessing acceptance from a file we
@@ -574,7 +588,8 @@ install without --group/--all opens the interactive picker; update without them
574
588
  remembered selection (\${XDG_STATE_HOME:-~/.local/state}/1aboveio-skills/selection.json).
575
589
  When a remembered group's current recipe declares members you have not accepted yet, each new skill
576
590
  is offered individually and defaults to No; --yes accepts them all, --dry-run lists them without
577
- prompting. TDD implicit model invocation is enabled by default; --disable-tdd makes TDD explicit-only,
591
+ prompting. Retired accepted skills are likewise kept by default; --yes archives them through the
592
+ native Skills CLI after their replacement is current. TDD implicit model invocation is enabled by default; --disable-tdd makes TDD explicit-only,
578
593
  and --enable-tdd restores implicit invocation. --manual-tdd remains a compatibility alias for
579
594
  --disable-tdd.
580
595
  `;
@@ -749,6 +764,63 @@ async function consentNewMembers(candidates, { yes, stdin, stdout, stderr }) {
749
764
  return declined;
750
765
  }
751
766
 
767
+ async function consentArchivedMembers(candidates, { yes, stdin, stdout, stderr }) {
768
+ const declined = new Set();
769
+ if (yes) {
770
+ for (const candidate of candidates) stdout.write(`Accepting archive of retired skill "${candidate.installName}" (--yes)\n`);
771
+ return declined;
772
+ }
773
+ if (!stdin.isTTY) {
774
+ for (const candidate of candidates) {
775
+ stderr.write(`Keeping retired skill "${candidate.installName}": no interactive terminal (default No; re-run with --yes to archive)\n`);
776
+ declined.add(candidate.installName);
777
+ }
778
+ return declined;
779
+ }
780
+ const prompter = createLinePrompter({ stdin, stdout });
781
+ for (const candidate of candidates) {
782
+ const answer = await prompter.ask(
783
+ `Archive retired skill "${candidate.installName}" (replaced by ${candidate.replacement})? [y/N] `,
784
+ );
785
+ if (/^y(es)?$/i.test(answer)) stdout.write(`Archiving ${candidate.installName}\n`);
786
+ else {
787
+ stdout.write(`Keeping ${candidate.installName}\n`);
788
+ declined.add(candidate.installName);
789
+ }
790
+ }
791
+ return declined;
792
+ }
793
+
794
+ function runArchiveCommands(candidates, readyMembers, {
795
+ execute = (command) => spawnSync('/bin/bash', ['-lc', command], { stdio: 'inherit' }),
796
+ skillsRoot,
797
+ stdout = process.stdout,
798
+ stderr = process.stderr,
799
+ } = {}) {
800
+ const succeeded = [];
801
+ const failed = [];
802
+ for (const candidate of candidates) {
803
+ if (!readyMembers.has(candidate.replacement)) {
804
+ stderr.write(`Keeping ${candidate.installName}: replacement ${candidate.replacement} was not installed or current\n`);
805
+ failed.push({ candidate, status: 1 });
806
+ continue;
807
+ }
808
+ if (!statSync(join(skillsRoot, candidate.installName), { throwIfNoEntry: false })) {
809
+ stdout.write(`Retired skill ${candidate.installName} is already absent.\n`);
810
+ succeeded.push(candidate);
811
+ continue;
812
+ }
813
+ stdout.write(`\nArchiving ${candidate.installName} (replaced by ${candidate.replacement})...\n`);
814
+ const result = execute(`${candidate.command} --yes`);
815
+ if (result.status === 0) succeeded.push(candidate);
816
+ else {
817
+ stderr.write(`Failed to archive retired skill ${candidate.installName}; it remains installed.\n`);
818
+ failed.push({ candidate, status: Number.isInteger(result.status) ? result.status : 1 });
819
+ }
820
+ }
821
+ return { succeeded, failed };
822
+ }
823
+
752
824
  function selectionIncludesTdd(groupIds, catalog) {
753
825
  const selected = new Set(groupIds);
754
826
  return catalog.some((bundle) => selected.has(bundle.id) && bundle.members.includes('tdd'))
@@ -822,6 +894,20 @@ export async function runCli(args, {
822
894
  } else if (candidates.length > 0) {
823
895
  declined = await consentNewMembers(candidates, { yes: parsed.yes, stdin, stdout, stderr });
824
896
  }
897
+ const archiveCandidates = archivedMemberCandidates(parsed.action, groupIds, priorState, transport);
898
+ let declinedArchives = new Set();
899
+ if (archiveCandidates.length > 0 && parsed.dryRun) {
900
+ for (const candidate of archiveCandidates) {
901
+ stdout.write(`Retired skill "${candidate.installName}" (replaced by ${candidate.replacement}) — would prompt to archive (default: No); --yes accepts archival\n`);
902
+ }
903
+ } else if (archiveCandidates.length > 0) {
904
+ declinedArchives = await consentArchivedMembers(archiveCandidates, {
905
+ yes: parsed.yes,
906
+ stdin,
907
+ stdout,
908
+ stderr,
909
+ });
910
+ }
825
911
  // Digest skip (#1127): `update` classifies the accepted members against the installed tree and
826
912
  // omits the digest-equal ones from the native add. `install` never skips — it is an explicit
827
913
  // request to install/replace the selected members. Declined new members (#1128) are excluded
@@ -849,7 +935,9 @@ export async function runCli(args, {
849
935
  for (const planned of commands) {
850
936
  stdout.write(`\n${planned.groupName} / ${planned.sourceId} / ${planned.member}\n${planned.command}\n`);
851
937
  }
852
- if (buckets && commands.length === 0) stdout.write('Nothing to do: every accepted skill is already up to date.\n');
938
+ if (buckets && commands.length === 0 && archiveCandidates.length === 0) {
939
+ stdout.write('Nothing to do: every accepted skill is already up to date.\n');
940
+ }
853
941
  return 0;
854
942
  }
855
943
  if (commands.length === 0 && buckets) {
@@ -865,6 +953,15 @@ export async function runCli(args, {
865
953
  stdout,
866
954
  stderr,
867
955
  });
956
+ const readyMembers = new Set([
957
+ ...succeeded.map((planned) => planned.member),
958
+ ...(buckets?.unchanged.map((entry) => entry.member) ?? []),
959
+ ]);
960
+ const archives = runArchiveCommands(
961
+ archiveCandidates.filter((candidate) => !declinedArchives.has(candidate.installName)),
962
+ readyMembers,
963
+ { execute, skillsRoot, stdout, stderr },
964
+ );
868
965
  printRunSummary(stdout, {
869
966
  succeeded,
870
967
  failed,
@@ -875,10 +972,7 @@ export async function runCli(args, {
875
972
  // native add or were already digest-equal. A group with no recordable member is omitted from
876
973
  // the written set, and a run with no recordable member at all leaves prior memory untouched;
877
974
  // a decline never becomes remembered acceptance.
878
- const succeededMembers = [
879
- ...succeeded.map((planned) => planned.member),
880
- ...(buckets?.unchanged.map((entry) => entry.member) ?? []),
881
- ];
975
+ const succeededMembers = [...readyMembers];
882
976
  if (succeededMembers.length > 0) {
883
977
  const renderTarget = declaredRenderTarget(transport);
884
978
  const selection = selectionForRun(parsed.action, groupIds, {
@@ -889,10 +983,22 @@ export async function runCli(args, {
889
983
  tddImplicitInvocation: enableTdd,
890
984
  });
891
985
  if (selection.groups.length > 0) {
986
+ const retainedArchives = new Set([
987
+ ...declinedArchives,
988
+ ...archives.failed.map((entry) => entry.candidate.installName),
989
+ ]);
990
+ for (const archive of archiveCandidates) {
991
+ if (!retainedArchives.has(archive.installName)) continue;
992
+ const group = selection.groups.find((candidate) => candidate.id === archive.formerGroupId);
993
+ if (group && !group.acceptedMembers.includes(archive.installName)) {
994
+ group.acceptedMembers.push(archive.installName);
995
+ }
996
+ }
892
997
  writeSelectionState(selection, env);
893
998
  }
894
999
  }
895
- return failed.length > 0 ? failed[0].status : 0;
1000
+ if (failed.length > 0) return failed[0].status;
1001
+ return archives.failed.length > 0 ? archives.failed[0].status : 0;
896
1002
  } catch (error) {
897
1003
  stderr.write(`${error.message}\n`);
898
1004
  return 2;
@@ -288,7 +288,7 @@ function validateManifest(manifest) {
288
288
  add('digest-algorithm-invalid', 'engineering-runtime', 'The coherence digest algorithm is missing or unsupported.');
289
289
  }
290
290
  if (JSON.stringify(manifest.ownedMembers) !== JSON.stringify(WORKFLOW_OWNED_MEMBERS)) {
291
- add('owned-census-invalid', 'engineering-runtime', 'The exact ten-member Workflow ownership census is missing or malformed.');
291
+ add('owned-census-invalid', 'engineering-runtime', 'The exact eight-member Workflow ownership census is missing or malformed.');
292
292
  }
293
293
  if (JSON.stringify(manifest.dependencies) !== JSON.stringify([
294
294
  { groupId: 'matt-pocock-toolkit', members: MATT_DEPENDENCY_MEMBERS },
@@ -297,11 +297,9 @@ function validateManifest(manifest) {
297
297
  add('dependency-census-invalid', 'engineering-runtime', 'The exact Matt and harness runtime dependency census is missing or malformed.');
298
298
  }
299
299
  if (!exactContract(manifest.dependencyClosures, WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES)) {
300
- const names = new Set(Array.isArray(manifest.dependencyClosures)
301
- ? manifest.dependencyClosures.map((closure) => closure?.invokedSkill)
302
- : []);
303
- const member = WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES.find((closure) => !names.has(closure.invokedSkill))?.invokedSkill
304
- ?? 'resolve-issues';
300
+ const actual = Array.isArray(manifest.dependencyClosures) ? manifest.dependencyClosures : [];
301
+ const member = WORKFLOW_TRUSTED_DEPENDENCY_CLOSURES.find((closure, index) =>
302
+ !isDeepStrictEqual(actual[index], closure))?.invokedSkill ?? 'engineering-runtime';
305
303
  add('dependency-closure-invalid', member, 'The invoked-skill dependency closure is missing, weakened, reordered or malformed.');
306
304
  }
307
305