@1aboveio/skills 1.0.7 → 1.0.9

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 (224) hide show
  1. package/.codex-plugin/plugin.json +13 -0
  2. package/.codex-plugin/resources.json +1827 -0
  3. package/README.md +22 -0
  4. package/package.json +9 -2
  5. package/skills/app-dev/airflow/SKILL.md +1 -1
  6. package/skills/app-dev/airflow/release-check.mjs +3 -1
  7. package/skills/app-dev/android-foundation/SKILL.md +92 -34
  8. package/skills/app-dev/android-foundation/assets/android-ci-job.yml +13 -7
  9. package/skills/app-dev/android-foundation/references/ci.md +23 -13
  10. package/skills/app-dev/android-foundation/references/delivery-focus.md +29 -0
  11. package/skills/app-dev/android-foundation/references/diagnosis.md +136 -0
  12. package/skills/app-dev/android-foundation/references/gotchas.md +20 -11
  13. package/skills/app-dev/android-foundation/references/setup.md +15 -6
  14. package/skills/app-dev/android-foundation/release-check.mjs +3 -1
  15. package/skills/app-dev/android-foundation/scripts/device-run.sh +148 -42
  16. package/skills/app-dev/app-debug/SKILL.md +1 -1
  17. package/skills/app-dev/app-debug/release-check.mjs +3 -1
  18. package/skills/app-dev/better-auth/SKILL.md +1 -1
  19. package/skills/app-dev/better-auth/release-check.mjs +3 -1
  20. package/skills/app-dev/data-catalog/SKILL.md +1 -1
  21. package/skills/app-dev/data-catalog/release-check.mjs +3 -1
  22. package/skills/app-dev/data-quality/SKILL.md +1 -1
  23. package/skills/app-dev/data-quality/release-check.mjs +3 -1
  24. package/skills/app-dev/ios-foundation/SKILL.md +1 -1
  25. package/skills/app-dev/ios-foundation/release-check.mjs +3 -1
  26. package/skills/app-dev/monorepo/SKILL.md +1 -1
  27. package/skills/app-dev/monorepo/release-check.mjs +3 -1
  28. package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
  29. package/skills/app-dev/nextjs-fullstack/release-check.mjs +3 -1
  30. package/skills/app-dev/prisma-setup/SKILL.md +1 -1
  31. package/skills/app-dev/prisma-setup/release-check.mjs +3 -1
  32. package/skills/app-dev/pyspark/SKILL.md +1 -1
  33. package/skills/app-dev/pyspark/release-check.mjs +3 -1
  34. package/skills/app-dev/python-backend/SKILL.md +1 -1
  35. package/skills/app-dev/python-backend/release-check.mjs +3 -1
  36. package/skills/app-dev/shadcn/SKILL.md +1 -1
  37. package/skills/app-dev/shadcn/release-check.mjs +3 -1
  38. package/skills/app-dev/zod-v4/SKILL.md +1 -1
  39. package/skills/app-dev/zod-v4/release-check.mjs +3 -1
  40. package/skills/cicd/cloud-build/SKILL.md +1 -1
  41. package/skills/cicd/cloud-build/release-check.mjs +3 -1
  42. package/skills/cicd/cloud-debug/SKILL.md +1 -1
  43. package/skills/cicd/cloud-debug/release-check.mjs +3 -1
  44. package/skills/cicd/cloud-deploy/SKILL.md +1 -1
  45. package/skills/cicd/cloud-deploy/release-check.mjs +3 -1
  46. package/skills/cicd/docker/SKILL.md +1 -1
  47. package/skills/cicd/docker/release-check.mjs +3 -1
  48. package/skills/cicd/github-actions/SKILL.md +1 -1
  49. package/skills/cicd/github-actions/release-check.mjs +3 -1
  50. package/skills/cicd/github-flow/SKILL.md +1 -1
  51. package/skills/cicd/github-flow/release-check.mjs +3 -1
  52. package/skills/cicd/google-cloud/SKILL.md +1 -1
  53. package/skills/cicd/google-cloud/release-check.mjs +3 -1
  54. package/skills/cicd/mergify/SKILL.md +1 -1
  55. package/skills/cicd/mergify/release-check.mjs +3 -1
  56. package/skills/cicd/podman/SKILL.md +1 -1
  57. package/skills/cicd/podman/release-check.mjs +3 -1
  58. package/skills/content/article-review/SKILL.md +1 -1
  59. package/skills/content/article-review/release-check.mjs +3 -1
  60. package/skills/content/article-to-image/SKILL.md +1 -1
  61. package/skills/content/article-to-image/release-check.mjs +3 -1
  62. package/skills/content/flowchart-svg/SKILL.md +1 -1
  63. package/skills/content/flowchart-svg/release-check.mjs +3 -1
  64. package/skills/content/image-gen/SKILL.md +1 -1
  65. package/skills/content/image-gen/release-check.mjs +3 -1
  66. package/skills/content/mermaid/SKILL.md +1 -1
  67. package/skills/content/mermaid/release-check.mjs +3 -1
  68. package/skills/content/wechat-article-writer/SKILL.md +1 -1
  69. package/skills/content/wechat-article-writer/release-check.mjs +3 -1
  70. package/skills/content/wechat-publisher/SKILL.md +1 -1
  71. package/skills/content/wechat-publisher/release-check.mjs +3 -1
  72. package/skills/content/wechat-search/SKILL.md +1 -1
  73. package/skills/content/wechat-search/release-check.mjs +3 -1
  74. package/skills/content/xai-search/SKILL.md +88 -13
  75. package/skills/content/xai-search/release-check.mjs +3 -1
  76. package/skills/content/xai-search/scripts/xai_search.sh +125 -149
  77. package/skills/core/distill-writing/SKILL.md +1 -1
  78. package/skills/core/distill-writing/release-check.mjs +3 -1
  79. package/skills/core/doc-to-md/SKILL.md +1 -1
  80. package/skills/core/doc-to-md/release-check.mjs +3 -1
  81. package/skills/core/editorial-review/SKILL.md +1 -1
  82. package/skills/core/editorial-review/release-check.mjs +3 -1
  83. package/skills/core/house-style/SKILL.md +1 -1
  84. package/skills/core/house-style/release-check.mjs +3 -1
  85. package/skills/core/plain-language/SKILL.md +1 -1
  86. package/skills/core/plain-language/release-check.mjs +3 -1
  87. package/skills/core/polish-cn/SKILL.md +1 -1
  88. package/skills/core/polish-cn/release-check.mjs +3 -1
  89. package/skills/core/reg-parser/SKILL.md +1 -1
  90. package/skills/core/reg-parser/release-check.mjs +3 -1
  91. package/skills/core/terminology/SKILL.md +1 -1
  92. package/skills/core/terminology/release-check.mjs +3 -1
  93. package/skills/core/write-doc/SKILL.md +1 -1
  94. package/skills/core/write-doc/release-check.mjs +3 -1
  95. package/skills/engineering/better-review/SKILL.md +1 -1
  96. package/skills/engineering/better-review/release-check.mjs +3 -1
  97. package/skills/engineering/contributing/SKILL.md +1 -1
  98. package/skills/engineering/contributing/release-check.mjs +3 -1
  99. package/skills/engineering/e2e-test/SKILL.md +1 -1
  100. package/skills/engineering/e2e-test/release-check.mjs +3 -1
  101. package/skills/engineering/engineering-runtime/SKILL.md +1 -1
  102. package/skills/engineering/engineering-runtime/coherence/workflow.json +13 -13
  103. package/skills/engineering/engineering-runtime/release-check.mjs +3 -1
  104. package/skills/engineering/engineering-runtime/scripts/installation-resolver.mjs +191 -0
  105. package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +51 -10
  106. package/skills/engineering/ensure-coverage/SKILL.md +1 -1
  107. package/skills/engineering/ensure-coverage/release-check.mjs +3 -1
  108. package/skills/engineering/golden-path/SKILL.md +1 -1
  109. package/skills/engineering/golden-path/release-check.mjs +3 -1
  110. package/skills/engineering/harness-runtime/SKILL.md +1 -1
  111. package/skills/engineering/harness-runtime/release-check.mjs +3 -1
  112. package/skills/engineering/resolve-issues/SKILL.md +11 -20
  113. package/skills/engineering/resolve-issues/references/delivery-progress.md +63 -0
  114. package/skills/engineering/resolve-issues/references/expire.md +24 -11
  115. package/skills/engineering/resolve-issues/references/implementation.md +9 -1
  116. package/skills/engineering/resolve-issues/references/preflight.md +7 -0
  117. package/skills/engineering/resolve-issues/references/shared-modules.md +27 -0
  118. package/skills/engineering/resolve-issues/references/task-plan.md +12 -5
  119. package/skills/engineering/resolve-issues/release-check.mjs +3 -1
  120. package/skills/engineering/resolve-issues/scripts/active-installation.mjs +32 -0
  121. package/skills/engineering/resolve-issues/scripts/install-hooks.mjs +3 -0
  122. package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +17 -1
  123. package/skills/engineering/resolve-release/SKILL.md +1 -1
  124. package/skills/engineering/resolve-release/release-check.mjs +3 -1
  125. package/skills/engineering/rush-issues/SKILL.md +5 -2
  126. package/skills/engineering/rush-issues/release-check.mjs +3 -1
  127. package/skills/engineering/rush-release/SKILL.md +1 -1
  128. package/skills/engineering/rush-release/release-check.mjs +3 -1
  129. package/skills/engineering/test-quality/SKILL.md +1 -1
  130. package/skills/engineering/test-quality/release-check.mjs +3 -1
  131. package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
  132. package/skills/risk-compliance/compliance-audit/release-check.mjs +3 -1
  133. package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
  134. package/skills/risk-compliance/contract-compare/release-check.mjs +3 -1
  135. package/skills/risk-compliance/contract-review/SKILL.md +1 -1
  136. package/skills/risk-compliance/contract-review/release-check.mjs +3 -1
  137. package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
  138. package/skills/risk-compliance/doc-authenticity/release-check.mjs +3 -1
  139. package/skills/risk-compliance/fraud-analysis/SKILL.md +1 -1
  140. package/skills/risk-compliance/fraud-analysis/release-check.mjs +3 -1
  141. package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
  142. package/skills/risk-compliance/payment-analysis/release-check.mjs +3 -1
  143. package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
  144. package/skills/risk-compliance/similar-domain/release-check.mjs +3 -1
  145. package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
  146. package/skills/risk-compliance/tld-detection/release-check.mjs +3 -1
  147. package/skills/app-dev/android-foundation/scripts/device-run.test.mjs +0 -172
  148. package/skills/app-dev/data-catalog/scripts/data-catalog.test.mjs +0 -36
  149. package/skills/app-dev/data-quality/scripts/data-quality.test.mjs +0 -12
  150. package/skills/cicd/github-actions/scripts/ci-run-audit.test.mjs +0 -637
  151. package/skills/cicd/github-flow/scripts/flow.test.mjs +0 -114
  152. package/skills/cicd/github-flow/scripts/persist-conventions.test.mjs +0 -108
  153. package/skills/cicd/mergify/scripts/audit.test.mjs +0 -201
  154. package/skills/cicd/mergify/scripts/entrypoints.test.mjs +0 -106
  155. package/skills/cicd/mergify/scripts/pr-620-mergify-comments.fixture.json +0 -30
  156. package/skills/cicd/mergify/scripts/stack-push.test.mjs +0 -233
  157. package/skills/cicd/mergify/scripts/watch-pr-delivery.test.mjs +0 -1826
  158. package/skills/content/image-gen/scripts/credentials.test.mjs +0 -212
  159. package/skills/content/image-gen/scripts/options.test.mjs +0 -245
  160. package/skills/content/xai-search/tests/smoke_test.sh +0 -36
  161. package/skills/core/polish-cn/scripts/polish-cn.test.mjs +0 -244
  162. package/skills/core/reg-parser/scripts/reg-parser.test.mjs +0 -165
  163. package/skills/engineering/better-review/scripts/pr-context.test.mjs +0 -168
  164. package/skills/engineering/better-review/scripts/rereview-scope.test.mjs +0 -587
  165. package/skills/engineering/better-review/scripts/scan-diff.test.mjs +0 -414
  166. package/skills/engineering/better-review/scripts/vendor-sync.test.mjs +0 -96
  167. package/skills/engineering/contributing/scripts/persist-conventions.test.mjs +0 -118
  168. package/skills/engineering/e2e-test/scripts/presentation-checks.test.mjs +0 -106
  169. package/skills/engineering/e2e-test/scripts/presentation-perceivability.test.mjs +0 -117
  170. package/skills/engineering/e2e-test/scripts/presentation-reachability.test.mjs +0 -69
  171. package/skills/engineering/e2e-test/scripts/presentation-render-health.test.mjs +0 -98
  172. package/skills/engineering/e2e-test/scripts/presentation-sweep.test.mjs +0 -71
  173. package/skills/engineering/e2e-test/scripts/presentation-temporal.test.mjs +0 -59
  174. package/skills/engineering/e2e-test/scripts/project-route-manifest.test.mjs +0 -76
  175. package/skills/engineering/engineering-runtime/engineering-runtime.test.mjs +0 -68
  176. package/skills/engineering/engineering-runtime/scripts/invocation-policy.test.mjs +0 -95
  177. package/skills/engineering/engineering-runtime/scripts/main-module.test.mjs +0 -288
  178. package/skills/engineering/engineering-runtime/scripts/required-check-plan.test.mjs +0 -96
  179. package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.test.mjs +0 -96
  180. package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.test.mjs +0 -47
  181. package/skills/engineering/ensure-coverage/scripts/ci-audit.test.mjs +0 -86
  182. package/skills/engineering/ensure-coverage/scripts/coverage-ledger.test.mjs +0 -447
  183. package/skills/engineering/ensure-coverage/scripts/design-parity.test.mjs +0 -552
  184. package/skills/engineering/ensure-coverage/scripts/lint-tests.test.mjs +0 -289
  185. package/skills/engineering/ensure-coverage/scripts/mock-policy-config.test.mjs +0 -119
  186. package/skills/engineering/golden-path/scripts/golden-path.test.mjs +0 -1457
  187. package/skills/engineering/harness-runtime/discover-models.test.mjs +0 -363
  188. package/skills/engineering/harness-runtime/harness-runtime.test.mjs +0 -967
  189. package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +0 -829
  190. package/skills/engineering/harness-runtime/model-catalog.test.mjs +0 -366
  191. package/skills/engineering/resolve-issues/scripts/cleanup-runs.test.mjs +0 -280
  192. package/skills/engineering/resolve-issues/scripts/dropbox.test.mjs +0 -346
  193. package/skills/engineering/resolve-issues/scripts/findings-reuse.test.mjs +0 -88
  194. package/skills/engineering/resolve-issues/scripts/github-reviews.test.mjs +0 -264
  195. package/skills/engineering/resolve-issues/scripts/install-hooks.test.mjs +0 -79
  196. package/skills/engineering/resolve-issues/scripts/issue-tree.test.mjs +0 -107
  197. package/skills/engineering/resolve-issues/scripts/manual-invocation.test.mjs +0 -14
  198. package/skills/engineering/resolve-issues/scripts/next-actions-capacity.test.mjs +0 -149
  199. package/skills/engineering/resolve-issues/scripts/next-actions.test.mjs +0 -915
  200. package/skills/engineering/resolve-issues/scripts/plan-sync.test.mjs +0 -156
  201. package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +0 -448
  202. package/skills/engineering/resolve-issues/scripts/ready-check.test.mjs +0 -217
  203. package/skills/engineering/resolve-issues/scripts/rehydrate.test.mjs +0 -91
  204. package/skills/engineering/resolve-issues/scripts/review-verdict.test.mjs +0 -1060
  205. package/skills/engineering/resolve-issues/scripts/size-check.test.mjs +0 -458
  206. package/skills/engineering/resolve-release/scripts/apply.test.mjs +0 -99
  207. package/skills/engineering/resolve-release/scripts/dark-flags.test.mjs +0 -100
  208. package/skills/engineering/resolve-release/scripts/flow.test.mjs +0 -340
  209. package/skills/engineering/resolve-release/scripts/green-head.test.mjs +0 -101
  210. package/skills/engineering/resolve-release/scripts/npm-version-absence.test.mjs +0 -426
  211. package/skills/engineering/resolve-release/scripts/plan-npm.test.mjs +0 -659
  212. package/skills/engineering/resolve-release/scripts/plan-toml-boundary.test.mjs +0 -317
  213. package/skills/engineering/resolve-release/scripts/plan-uv.test.mjs +0 -291
  214. package/skills/engineering/resolve-release/scripts/plan.test.mjs +0 -428
  215. package/skills/engineering/test-quality/scripts/lint-tests.test.mjs +0 -591
  216. package/skills/engineering/test-quality/scripts/mock-policy-config.test.mjs +0 -119
  217. package/skills/engineering/test-quality/scripts/persist-conventions.test.mjs +0 -104
  218. package/skills/risk-compliance/compliance-audit/scripts/compliance-audit.test.mjs +0 -14
  219. package/skills/risk-compliance/doc-authenticity/manual-invocation.test.mjs +0 -12
  220. package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.test.mjs +0 -212
  221. package/skills/risk-compliance/tld-detection/scripts/detect_ladders.test.mjs +0 -14
  222. package/skills/risk-compliance/tld-detection/scripts/detect_streams.test.mjs +0 -14
  223. package/skills/risk-compliance/tld-detection/tests/test_detect_ladders.py +0 -134
  224. package/skills/risk-compliance/tld-detection/tests/test_detect_streams.py +0 -520
@@ -2,7 +2,7 @@
2
2
  name: ensure-coverage
3
3
  description: "Define or audit behavior-first test criteria — ACs, required test levels, mock/integration/E2E policy — across three axes: breadth (Coverage Ledger), depth (over-mocking), presentation (perceivability of browser surfaces). NOT judging whether a single test is any good (test-quality), authoring browser tests (e2e-test), reviewing a PR (better-review), or delivering issues (resolve-issues)."
4
4
  disable-model-invocation: true
5
- release-version: 0.43.0
5
+ release-version: 0.44.0
6
6
  ---
7
7
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
8
8
  # Ensure Coverage
@@ -2,7 +2,7 @@
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const DAY_MS = 24 * 60 * 60 * 1000;
@@ -46,6 +46,8 @@ function writeCache(path, value) {
46
46
 
47
47
  function main(now = Date.now()) {
48
48
  if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const bundle = readJson(join(resolve(here, '../../..'), 'package.json'));
50
+ if (bundle.name === '@1aboveio/skills' && bundle.nativeCodex?.schemaVersion === 1) return;
49
51
  const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
52
  const name = frontmatterValue(skill, 'name');
51
53
  const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
@@ -3,7 +3,7 @@ name: golden-path
3
3
  description: "Golden-path E2E: the short list of user journeys whose failure blocks a release, kept in a repo as one contract (golden-paths.json) with a generated GOLDEN_PATHS.md and a generated GitHub Actions workflow, and run against a local build or a deployed URL for an ALIVE/DEAD verdict. Use to set golden paths up in a repo ('init golden paths', 'add golden-path CI'), to migrate an older smoke.manifest.json or a hand-built smoke setup ('audit', 'migrate smoke'), to add, change, or remove a golden path, to ask 'is the build alive?' or run them before a PR or release, or when a change touches a flow listed in GOLDEN_PATHS.md. NOT for writing the Playwright specs themselves (e2e-test), deciding what a change must prove (ensure-coverage), or general workflow YAML (github-actions)."
4
4
  dependencies:
5
5
  - e2e-test
6
- release-version: 0.43.0
6
+ release-version: 0.44.0
7
7
  ---
8
8
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
9
9
  # Golden path
@@ -2,7 +2,7 @@
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const DAY_MS = 24 * 60 * 60 * 1000;
@@ -46,6 +46,8 @@ function writeCache(path, value) {
46
46
 
47
47
  function main(now = Date.now()) {
48
48
  if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const bundle = readJson(join(resolve(here, '../../..'), 'package.json'));
50
+ if (bundle.name === '@1aboveio/skills' && bundle.nativeCodex?.schemaVersion === 1) return;
49
51
  const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
52
  const name = frontmatterValue(skill, 'name');
51
53
  const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
@@ -3,7 +3,7 @@ name: harness-runtime
3
3
  description: Internal import-only library shared by first-party engineering packages. Not a workflow skill; never select or invoke it as a user capability.
4
4
  disable-model-invocation: true
5
5
  user-invocable: false
6
- release-version: 0.43.0
6
+ release-version: 0.44.0
7
7
  ---
8
8
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
9
9
  # Harness Runtime
@@ -2,7 +2,7 @@
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const DAY_MS = 24 * 60 * 60 * 1000;
@@ -46,6 +46,8 @@ function writeCache(path, value) {
46
46
 
47
47
  function main(now = Date.now()) {
48
48
  if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const bundle = readJson(join(resolve(here, '../../..'), 'package.json'));
50
+ if (bundle.name === '@1aboveio/skills' && bundle.nativeCodex?.schemaVersion === 1) return;
49
51
  const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
52
  const name = frontmatterValue(skill, 'name');
51
53
  const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
@@ -8,7 +8,7 @@ dependencies:
8
8
  - better-review
9
9
  - golden-path
10
10
  - harness-runtime
11
- release-version: 0.43.0
11
+ release-version: 0.44.0
12
12
  ---
13
13
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
14
14
  # Resolve issues
@@ -78,7 +78,7 @@ ships sooner at the same bar.
78
78
  `/rush-issues` runs this workflow with every answer defaulted ([shortcut mode](references/preflight.md#shortcut-mode)).
79
79
 
80
80
  **Bounds:** the harness times and stops workers · retry while cycles reach new lows; 2 without one,
81
- then [expire.md](references/expire.md) (a fix cycle progresses only on a new low; a resume, when it adds work the PR needs; diagnostics and records never) · workers within [live host capacity](references/implementation.md#live-capacity), one local emulator, queued for device-only work
81
+ then [expire.md](references/expire.md) (fixes and resumes progress through verified checkpoint advances or fewer established failures; added work, diagnostics and records alone do not reset counts) · workers within [live host capacity](references/implementation.md#live-capacity), one local emulator, queued for device-only work
82
82
  and non-CI emulator proof ([scheduling](references/implementation.md#scheduling); CI confirms, never debugs) · one PR per issue · every runnable unit in one run, in dependency order · blocking review hands back
83
83
  after 2 fix rounds without a new low of open P0/P1 path rows; no fixed round cap.
84
84
 
@@ -150,26 +150,17 @@ Read each procedure right before its stage; never substitute your own.
150
150
  steps are only the read-only warehouse canary (never blocks) and the isolated, run-owned resources
151
151
  [preflight.md](references/preflight.md#never-block-on-the-human) allows.
152
152
 
153
+ ## Delivery progress
154
+
155
+ Before briefing or continuing a unit, read [delivery-progress.md](references/delivery-progress.md).
156
+ Keep one existing acceptance checkpoint per unit, preserve failure history, justify new
157
+ infrastructure, and report verified behavior. Full acceptance and required CI still apply.
158
+
153
159
  ## Every brief contains
154
160
 
155
- - the source and criteria, as a file already in the run directory
156
- - the plan's `standingOrders`, verbatim, and the decisions that answer this unit's questions
157
- - absolute run, workspace, and findings paths; for implementers, the unit's
158
- findings entry and its parents' `contracts`
159
- - model id, effort, and a required read-back
160
- - an absolute skill path when the stage invokes a leaf skill; for validating, the unit's `proof.suite` `skill` (read it first) and `local`, when set
161
- - the outcome and validation, with no prescribed method or evidence format
162
- - the [Goal](#goal) and [Principles](#principles), verbatim (a reviewer gets review.md's two rules instead)
163
- - the result path, `<run>/results/<unit>-<label>.json` (`<label>`: kind and attempt, e.g. `fix-2`), with `unit` and `decisionNeeded` (null or a choice)
164
- - at the deadline: stop starting work, commit, and report
165
- - environment rules: write only inside the workspace (and the findings directory for the explorer),
166
- with tool caches and temp files there (`TMPDIR`, `npm_config_cache`, `UV_CACHE_DIR`); use the machine's
167
- installed JDK, Android SDK, system images, and browsers (`JAVA_HOME`, `ANDROID_HOME`) where they fit,
168
- or the repo's pinned Playwright image where the runner has no browser (`github-actions` runners.md);
169
- edit with the harness's tools, never a shell `apply_patch`
170
-
171
- Treat a missing or unreadable result as an incomplete stage: resume a dead
172
- spawn once in the same workspace, never with a success claim.
161
+ Use the full [brief checklist](references/delivery-progress.md#every-brief-contains),
162
+ including the Goal and Principles verbatim, checkpoint history and result contract.
163
+ Treat a missing or unreadable result as incomplete; resume a dead spawn once in its workspace.
173
164
 
174
165
  ## Workflow
175
166
 
@@ -0,0 +1,63 @@
1
+ # Delivery progress
2
+
3
+ For each active unit, name **one immediate acceptance checkpoint** from its existing
4
+ criteria: the next observable behavior or contract to prove. A narrow checkpoint guides
5
+ the next action; it does not replace the unit's full acceptance or required CI. Independent
6
+ units keep their own checkpoints and continue in parallel within actual resource limits.
7
+
8
+ - **Preserve an existing working baseline.** Keep its source/artifact identity, relevant
9
+ environment and passing result as a comparison. Reuse it while those inputs remain
10
+ valid; do not create a new baseline campaign when none exists or treat an old artifact
11
+ as acceptance of the candidate. Keep only what the repo's ownership/retention rules allow.
12
+ - **Debug the smallest failing behavior first.** Name the failing command and the
13
+ observation that would distinguish the remaining causes. Run the relevant host,
14
+ integration or device check before another broad acceptance cycle. After a correction,
15
+ run affected checks and the required delivery checks, not extra assurance work.
16
+ - **Justify infrastructure before adding it.** State which existing criterion requires
17
+ it, why the current path cannot provide that proof, and the smallest alternative.
18
+ Record the choice in the existing decision/note, within current authorization. Routine
19
+ choices need no new approval; shared-resource changes and changes to the acceptance
20
+ bar retain their existing authorization rules. A failed screen alone does not justify
21
+ a new service, transport layer or test platform.
22
+ - **Continue on evidence, not activity.** A handoff identifies what changed at the
23
+ checkpoint: a reproduction, a discriminating observation, a verified correction or
24
+ a concrete blocker, and the next test. A new worker, commit, diagnostic helper, test
25
+ count or green unrelated check is not delivery progress. Useful diagnostic evidence
26
+ can justify a bounded experiment; it does not reset acceptance/non-convergence counts.
27
+ - **Reassess repeated failure at the same checkpoint.** Carry prior evidence and
28
+ no-progress history across worker/model changes and new infrastructure. Follow
29
+ [expiry](expire.md); do not restart the same approach with a fresh brief or
30
+ count newly invented setup milestones as progress. Replan around a smaller case or a
31
+ different distinguishing test, keeping the original criteria and truthful blockers.
32
+ - **Report delivered behavior first.** Use existing plan notes/results to state criteria
33
+ completed and the current checkpoint. When available, include time to reproduction,
34
+ time to verified correction and full CI runs spent on this change. Do not invent
35
+ missing timings or create a separate reporting system to collect them.
36
+
37
+ These rules apply to briefs and coordinator decisions; they add no plan schema, check,
38
+ issue or automatic scheduler gate. They do not waive required validation.
39
+
40
+ ## Every brief contains
41
+
42
+ - the source and criteria, as a file already in the run directory
43
+ - the plan's `standingOrders`, verbatim, and the decisions that answer this unit's questions
44
+ - absolute run, workspace, and findings paths; for implementers, the unit's
45
+ findings entry and its parents' `contracts`
46
+ - model id, effort, and a required read-back
47
+ - an absolute skill path when the stage invokes a leaf skill; for validating, the unit's `proof.suite` `skill` (read it first) and `local`, when set
48
+ - the outcome and validation, with no prescribed method or evidence format
49
+ - the [immediate acceptance checkpoint](#delivery-progress), existing baseline (or none),
50
+ and, for a continuation, the last result, remaining uncertainty and next distinguishing
51
+ test; retain the same checkpoint/history when changing workers
52
+ - the [Goal](../SKILL.md#goal) and [Principles](../SKILL.md#principles), verbatim (a reviewer gets review.md's two rules instead)
53
+ - the result path, `<run>/results/<unit>-<label>.json` (`<label>`: kind and attempt, e.g. `fix-2`), with `unit` and `decisionNeeded` (null or a choice)
54
+ - at the deadline: stop starting work, commit, and report
55
+ - environment rules: write only inside the workspace (and the findings directory for the explorer),
56
+ with tool caches and temp files there (`TMPDIR`, `npm_config_cache`, `UV_CACHE_DIR`); use the machine's
57
+ installed JDK, Android SDK, system images, and browsers (`JAVA_HOME`, `ANDROID_HOME`) where they fit,
58
+ or the repo's pinned Playwright image where the runner has no browser (`github-actions` runners.md);
59
+ edit with the harness's tools, never a shell `apply_patch`
60
+
61
+ Treat a missing or unreadable result as an incomplete stage: resume a dead
62
+ spawn once in the same workspace, never with a success claim.
63
+
@@ -9,10 +9,12 @@ commit alone is not progress. Lows only fall, so the loop always ends.
9
9
  Example: CI fails 5 tests, then 3, then 3, then 3: expire after the fourth
10
10
  cycle. 3, 2, 3, 2 expires too: the second 2 is no new low. 5, 4, 3, 2, 1
11
11
  never expires. A failing journey run, local or dispatched, counts as one
12
- failing check, so count its furthest checkpoint instead (the last step its
13
- log reports passing): login, store, charge, charge, charge expires;
14
- login, store, charge, receipt keeps going. Checkpoints are finite, so this
15
- loop ends too.
12
+ failing check, so count its furthest **existing acceptance checkpoint** instead
13
+ (the last relevant step its log reports passing): login, store, charge, charge,
14
+ charge expires; login, store, charge, receipt keeps going. Extra instrumentation,
15
+ new infrastructure milestones or renaming a checkpoint do not extend this sequence.
16
+ Carry the comparison history across worker/model changes and retries; a genuinely
17
+ changed requirement needs an explicit scope decision, not an implicit reset.
16
18
 
17
19
  | Scope | Count that must reach a new low | Expire after |
18
20
  |---|---|---|
@@ -21,9 +23,17 @@ loop ends too.
21
23
  | Warehouse canary | distinct errors | 2 attempts without progress; record a follow-up, never block |
22
24
  | Review | open P0/P1 path rows | `review-verdict.mjs` verdict `handback` ([review.md](review.md#fix-loop)) |
23
25
  | CI and merge | failing checks and tests; a failing journey run (local or `gh workflow run`) is one check, so it progresses when it passes a checkpoint no earlier run of the attempt passed | 2 fix-and-watch cycles without progress |
24
- | Any worker the harness reports stuck, late, or at its ceiling | none: a resume [progresses](#retry-by-failure-mode) when it adds work the unit's PR needs (product code, tests, CI config, a fix of what blocks it) or meets another acceptance criterion; diagnostics and records alone are not progress | 2 resumes in a row that add neither |
26
+ | Any worker the harness reports stuck, late, or at its ceiling | a resume progresses when its verified result advances the existing checkpoint or reduces the established failure count; added product/test/CI code without that result is not progress, and diagnostics alone do not reset the count | 2 resumes in a row without such progress |
25
27
 
26
- Leave timing to the harness; never stop a worker still making progress.
28
+ Use [Delivery progress](../SKILL.md#delivery-progress) to choose the next bounded
29
+ experiment before applying this ladder. Reproducing a failure or collecting a missing
30
+ observation can be useful without advancing acceptance. Record that distinction; do
31
+ not count logs, helper code or a changed worker as a new low. On repeated non-convergence,
32
+ reassess the approach and preserve unpassed criteria rather than creating another setup
33
+ chain. Existing retry/block/replan rules below still apply.
34
+
35
+ Leave timing to the harness for worker lifetimes. Bound individual test/subprocess waits
36
+ explicitly with cleanup time; an outstanding tool call or heartbeat is not progress.
27
37
 
28
38
  ### Retry by failure mode
29
39
 
@@ -102,8 +112,9 @@ hours.
102
112
  wakes the run at the printed time.
103
113
  - `check-worker` means the worker changed no workspace file for
104
114
  `--quiet-minutes` (45 by default): read its latest output. Stuck: stop it
105
- and take the `timeout-task` response. Still working (a long test run with
106
- live output): let it run.
115
+ and take the `timeout-task` response. A long test with advancing test/phase results
116
+ inside its declared command deadline may continue. Repeated heartbeats, unchanged
117
+ logs or an unbounded child wait are not that evidence.
107
118
  - A watcher that ends with nothing new (a queue `STALLED` with no failing
108
119
  check) is a wait: restart it and report it in one line, or not at all.
109
120
 
@@ -202,14 +213,14 @@ logs, and record one line, with the reason code, in the unit's plan row.
202
213
 
203
214
  | Failure | Response |
204
215
  |---|---|
205
- | `timeout-task` or `spawn-death` | Resume in the kept workspace: commit what is there, then finish or report. Keep resuming while each resume makes [progress](#retry-by-failure-mode); after 2 in a row that add nothing, mark the unit `blocked` (`blockedReason: timeout-task` or `spawn-death`) and hand it back. A result with `decisionNeeded` is decided first ([Decide before you defer](#decide-before-you-defer)), and the resume that carries the decision always runs. Example: a fix worker loses its model stream twice but committed a fixture each time; start a third continuation. |
216
+ | `timeout-task` or `spawn-death` | Resume in the kept workspace: commit what is there, then finish or report. Keep resuming while each resume makes [progress](#retry-by-failure-mode); after 2 in a row without verified checkpoint/failure-count progress, mark the unit `blocked` (`blockedReason: timeout-task` or `spawn-death`) and hand it back. A result with `decisionNeeded` is decided first ([Decide before you defer](#decide-before-you-defer)), and the resume that carries the decision always runs. Example: a fix worker loses its model stream after its focused regression passes; resume the remaining work with that result. Two resumes that only add fixtures without advancing the existing checkpoint trigger reassessment. |
206
217
  | Environment or infrastructure (a check cannot run: cache, emulator, runner, network, credentials) | See [Infrastructure failures](#infrastructure-failures). |
207
218
  | Implement: a fix cycle without progress | Resume with the failing command and its output as the only target, using the escalation model. 2 cycles in a row without progress: `blocked` (`blockedReason: retry-implement`), deferred on its issue. |
208
219
  | Review: `review-verdict.mjs` verdict `fix` | Follow its `action` ([review.md](review.md#fix-loop)). |
209
220
  | Review: `review-verdict.mjs` verdict `handback` (`not-converging`) | Stop fixing; mark the unit `blocked` (`blockedReason: review-handback`) and defer the PR with its open findings on its issue. |
210
221
  | Review: `review-verdict.mjs` verdict `decide`, or a worker's `decisionNeeded` | [Decide before you defer](#decide-before-you-defer). |
211
222
  | CI: a fix cycle without progress | Treat the failing check as the failing test: the next fix worker runs on the escalation model with that check as its only target. 2 cycles in a row without progress: `blocked` (`blockedReason: retry-ci`), deferred on its issue. |
212
- | Too big for one attempt | Resume in the kept workspace while each resume makes [progress](#retry-by-failure-mode); after 2 in a row that make none, draft a split in `<run>/splits/`, file it into the spec's tree, and run the slices the sync adds ([preflight.md](preflight.md#put-every-filed-issue-in-the-tree)). |
223
+ | Too big for one attempt | Resume in the kept workspace while each resume makes [progress](#retry-by-failure-mode); after 2 in a row without verified checkpoint/failure-count progress, draft a split in `<run>/splits/`, file it into the spec's tree, and run the slices the sync adds ([preflight.md](preflight.md#put-every-filed-issue-in-the-tree)). |
213
224
  | A required proof the unit has no environment for yet | The unit builds it; see [Proof stays with its unit](#proof-stays-with-its-unit). |
214
225
  | Dependency | Fix the edge; resume when runnable. |
215
226
  | A capability the unit needs is missing and no unit builds it (a shared driver, fixture, or hook) | Build it inside the first unit that needs it; units that need it later get `dependsOn` on that unit. Only when that puts the unit past the size check's line limit, file it as its own issue beside them, with `blocked_by` on the units that use it, never on their parent issue. Example: three proof units each need a device-state reader: the first builds it, the other two depend on the first. |
@@ -229,7 +240,9 @@ dependents start while the parent still proves itself; only the unit's own
229
240
  merge waits for its proof.
230
241
 
231
242
  - **No working suite or environment yet? The unit builds what its proof
232
- needs**, with access the run already has (the run's local emulator, when
243
+ needs**, after recording why the existing path cannot prove that criterion and why
244
+ the proposed addition is the smallest suitable option ([Delivery progress](../SKILL.md#delivery-progress)),
245
+ with access the run already has (the run's local emulator, when
233
246
  [its queue](implementation.md#scheduling) hands it over, a
234
247
  disposable database, a container, a tunnel hostname), counted in its
235
248
  lines like a missing prerequisite. When two or more units need the same
@@ -59,6 +59,12 @@ boundary, workspace, outcome, validation, and return contract; prescribe no
59
59
  method or evidence format. Name a leaf skill only as the findings record it
60
60
  (`proof.suite.skill`, with `local`).
61
61
 
62
+ A continuation inherits the immediate acceptance checkpoint and history from
63
+ [Delivery progress](../SKILL.md#delivery-progress). In its existing result, state what
64
+ new evidence changes the next action; if nothing changed, say so instead of relaunching
65
+ the same work. A passing setup check is not a substitute for the blocked behavior.
66
+ No additional report or result schema is required.
67
+
62
68
  Have the implementer treat findings as leads, find its own code, and report
63
69
  any `product`, `scope`, `design`, or `approval` question the explorer missed and any
64
70
  human-only proof. Report each question in the result's `decisionNeeded`
@@ -87,7 +93,9 @@ implementer in its kept workspace with the brief and its findings entry.
87
93
  options, recommendation; options are ways to proceed, and staying
88
94
  blocked is never one). Fix workers write the same file. Return
89
95
  nothing else: no artifact hashes, version inventories, screenshots,
90
- copied logs, or earlier attempts.
96
+ copied logs, or earlier attempts. For a continuation, include the current checkpoint,
97
+ outcome and relevant prior-result links in the existing integration notes; do not
98
+ duplicate the full attempt history.
91
99
 
92
100
  After 2 fix cycles without progress, or a stuck or late worker, follow
93
101
  [expire.md](expire.md). Start the next worker in the same workspace with the
@@ -45,6 +45,13 @@ sub-issues, never a checklist.
45
45
 
46
46
  ### Compaction hook
47
47
 
48
+ For a native Codex bundle, first follow [Native Codex selection](shared-modules.md#native-codex-selection).
49
+ The hook command returns `plugin-no-global-hooks` and writes nothing, even without
50
+ `--check`. Do not offer a machine-wide cached-path hook. Preserve the installation
51
+ descriptor in the plan and use the selected copy's recovery command after resume.
52
+ Native host compaction/resume still requires separate client certification.
53
+ The remaining hook instructions apply to standalone installations.
54
+
48
55
  **A compaction summary keeps the run's state and drops the skill's rules, so
49
56
  a hook makes you read the skills again after every compaction.** Check it:
50
57
 
@@ -4,6 +4,33 @@ Use the owning skill for models, review, golden paths, and the merge queue; neve
4
4
  copy its doctrine here. Resolve a leaf skill from the active skills root only
5
5
  for a stage that invokes it, and pass its absolute path.
6
6
 
7
+ ## Native Codex selection
8
+
9
+ For a native bundle invocation, run the invoked copy's
10
+ `scripts/active-installation.mjs capture` before spawning workers. Save its JSON as
11
+ `installation` in this run's task plan and as a run-local `installation.json`.
12
+ Capture reads only the executing bundle's fixed ancestor, never another cache.
13
+ A certifier passes independently verified pins as `capture <expected-pins.json>`;
14
+ ordinary capture starts from the artifact selected by Codex. Neither operation is
15
+ a signature or published-artifact certification.
16
+
17
+ Use `scripts/active-installation.mjs worker <installation.json> <canonical-name>...`
18
+ to obtain verified absolute instruction paths. Resolve other resources through
19
+ `engineering-runtime/scripts/installation-resolver.mjs resolve <installation.json>
20
+ <canonical-name> <member-relative-resource>`. Pass those paths and the unchanged
21
+ installation descriptor in worker briefs. Keep the host's observed namespaced
22
+ identity separate from the canonical catalog name; never strip arbitrary prefixes
23
+ to resolve dependencies. Missing, changed or ambiguous resources stop the affected
24
+ workflow; do not search caches, use a shared namesake, or install dependencies.
25
+ Model slots and reviewer independence still follow the policy below.
26
+
27
+ After compaction or resume, run the selected copy's `scripts/rehydrate.mjs --cwd
28
+ <project>` and read the returned instruction paths in full. It verifies the saved
29
+ installation before returning paths and reports blocked recovery on drift. Native
30
+ bundle invocations do not install global hooks. Scripted recovery alone is not
31
+ proof that a Codex surface triggers it; native host compaction/resume certification
32
+ must pass before that surface is advertised as supported.
33
+
7
34
  ## Model catalog
8
35
 
9
36
  Owner: [`harness-runtime`](../../harness-runtime/) (catalog doctrine and seed
@@ -85,7 +85,7 @@ Fleet `status`: `pending`, `in-flight`, `succeeded`, `failed`,
85
85
  | `workerKind` | `implement`, `fix`, or `review`, set with `worker`; the [live-capacity scheduler](implementation.md#live-capacity) (`next-actions.mjs`) prints `worker-kind` for any other kind or none. An infrastructure diagnosis or a test-first worker is a `fix` worker. The explorer is the `explore` fleet row's worker, never a unit's; a merge-queue watcher is not a worker |
86
86
  | `estimatedLines` | Explorer estimate |
87
87
  | `sizeCheck` | Measures, `verdict` (the size check's per-unit verdict; `stop` means held), scope and proof verdicts, split or verification path; `runWhole: true` once a recommendation to run a held unit whole is accepted |
88
- | `note` | SHA, expiry reason code, failure and the response taken, or blocker |
88
+ | `note` | SHA, expiry reason code, failure and response, or blocker; for active debugging, the immediate acceptance checkpoint, baseline/result link and next distinguishing test ([delivery progress](../SKILL.md#delivery-progress)) |
89
89
  | `pr`, `headSha`, `reviewedHead` | PR URL, current HEAD (recorded from the implementer's first pushed commit on, so the draft PR opens early), last HEAD whose verdict was `pass` (reviewed or carried) |
90
90
  | `delivery` | `building`, `opening`, `review`, `ci`, `merged`, `blocked` |
91
91
  | `reviewRound`, `fixRound` | Review-attempt/file number, and the count of blocking-fix cycles (a record, not a cap); record both from the review/verdict, never charge skips, or reviews that follow a passing one, as fixes |
@@ -102,7 +102,11 @@ Example: #1201's code is done and its PR is in review, so it is
102
102
  merge-ready PR handed back stays `in-flight` with the note "merge-ready,
103
103
  handed back"; it is never `succeeded` until the human merges it.
104
104
 
105
- Run fields: `skill` (`resolve-issues` or `rush-issues`; the scheduler and
105
+ Run fields: optional `installation` holds the explicit native installation descriptor
106
+ (one absolute root, layout, resource metadata path/digest, release identity, and
107
+ pinned external root mappings). Capture from the selected bundle and preserve it
108
+ through workers and recovery; never replace it with a newer cache or shared copy.
109
+ Other run fields: `skill` (`resolve-issues` or `rush-issues`; the scheduler and
106
110
  rehydrate read it, and `next-actions.mjs` exits 2 without it), `planRevision`, models and efforts, `targetBranch`,
107
111
  `deliveryMode` and its check, `mergeMode`, run directory, `specLocator`
108
112
  (`owner/name#N` or an issue URL; any other name turns off the issue-tree sync),
@@ -259,6 +263,9 @@ changes, unit outcomes, validation turning red or green, canary events,
259
263
  retries and escalations, newly runnable dependencies, PR open, HEAD change, or
260
264
  merge, and about every 5 minutes; skip when nothing changed.
261
265
 
262
- Final board: each unit's outcome with its scope and proof verdicts, every PR URL, SHA,
263
- and merge state, retry and escalation totals, each blocker, and the exploration
264
- path.
266
+ Final board: lead with behavior delivered and criteria still unproved, then each unit's
267
+ scope and proof verdicts, PR URL, SHA, merge state, retries, blocker and exploration path.
268
+ Use existing result timestamps and CI records, when available, for time to reproduction,
269
+ time to verified correction and full CI runs per delivered change. Mark missing data as
270
+ unknown. Worker/test counts describe activity, not acceptance; do not add a reporting
271
+ pipeline or duplicate the plan to produce these summaries.
@@ -2,7 +2,7 @@
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const DAY_MS = 24 * 60 * 60 * 1000;
@@ -46,6 +46,8 @@ function writeCache(path, value) {
46
46
 
47
47
  function main(now = Date.now()) {
48
48
  if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const bundle = readJson(join(resolve(here, '../../..'), 'package.json'));
50
+ if (bundle.name === '@1aboveio/skills' && bundle.nativeCodex?.schemaVersion === 1) return;
49
51
  const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
52
  const name = frontmatterValue(skill, 'name');
51
53
  const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { executingBundleRoot, selectInstallation, workerResources } from '../../engineering-runtime/scripts/installation-resolver.mjs';
6
+ import { isMainModule } from '../../engineering-runtime/scripts/main-module.mjs';
7
+
8
+ // Initial capture trusts the explicitly invoked native artifact's package metadata. A release
9
+ // certifier supplies independent pins; subsequent workers/recovery always reuse the captured pins.
10
+ export function captureBundleInstallation(skillDirectory, expected = null, externalRoots = {}) {
11
+ const root = executingBundleRoot(skillDirectory);
12
+ if (!root) throw new Error('The invoked skill is not in a native bundle');
13
+ const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
14
+ const pins = expected ?? pkg.nativeCodex;
15
+ if (!pins || Object.keys(pins).some((key) => !['schemaVersion', 'metadataPath', 'metadataDigest', 'releaseIdentity'].includes(key))) {
16
+ throw new Error('Expected resource pins cannot override installation selection');
17
+ }
18
+ const { metadataPath, metadataDigest, releaseIdentity } = pins;
19
+ return selectInstallation({ layout: 'bundle', root, metadataPath, metadataDigest, releaseIdentity, externalRoots });
20
+ }
21
+
22
+ if (isMainModule(import.meta.url)) {
23
+ try {
24
+ const [command, descriptor, ...names] = process.argv.slice(2);
25
+ const result = command === 'capture' ? captureBundleInstallation(dirname(dirname(fileURLToPath(import.meta.url))),
26
+ descriptor ? JSON.parse(readFileSync(descriptor, 'utf8')) : null)
27
+ : command === 'worker' ? workerResources(JSON.parse(readFileSync(descriptor, 'utf8')),
28
+ names.map((canonicalName) => ({ canonicalName }))) : null;
29
+ if (!result) throw new Error('Usage: active-installation.mjs capture [expected-pins.json] | worker <installation.json> <canonical-name>...');
30
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
31
+ } catch (error) { process.stderr.write(`${error.message}\n`); process.exitCode = 1; }
32
+ }
@@ -25,6 +25,7 @@ import { homedir } from 'node:os'
25
25
  import { dirname, join } from 'node:path'
26
26
  import { fileURLToPath } from 'node:url'
27
27
 
28
+ import { executingBundleRoot } from '../../engineering-runtime/scripts/installation-resolver.mjs'
28
29
  import { isMainModule } from '../../engineering-runtime/scripts/main-module.mjs'
29
30
 
30
31
  export const REHYDRATE = join(dirname(fileURLToPath(import.meta.url)), 'rehydrate.mjs')
@@ -85,10 +86,12 @@ function readJson(file) {
85
86
  export function run({ home = homedir(), check = false, harness } = {}) {
86
87
  const names = harness ? [harness] : Object.keys(HARNESSES)
87
88
  const out = []
89
+ const nativeBundle = executingBundleRoot(dirname(dirname(REHYDRATE)))
88
90
  for (const name of names) {
89
91
  const h = HARNESSES[name]
90
92
  if (!h) throw new InstallHooksError(`unknown harness ${name}: use claude or codex`)
91
93
  const file = join(home, h.dir, h.file)
94
+ if (nativeBundle) { out.push({ harness: name, file, status: 'plugin-no-global-hooks' }); continue }
92
95
  if (!existsSync(join(home, h.dir))) { out.push({ harness: name, file, status: 'absent' }); continue }
93
96
  const settings = readJson(file)
94
97
  if (pluginEnabled(settings, name)) { out.push({ harness: name, file, status: 'plugin' }); continue }
@@ -20,6 +20,7 @@ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'
20
20
  import { dirname, join, resolve } from 'node:path'
21
21
  import { fileURLToPath } from 'node:url'
22
22
 
23
+ import { workerResources } from '../../engineering-runtime/scripts/installation-resolver.mjs'
23
24
  import { isMainModule } from '../../engineering-runtime/scripts/main-module.mjs'
24
25
  import { RULES, SKILL_PATH } from './next-actions.mjs'
25
26
 
@@ -54,13 +55,28 @@ export function activeRuns(cwd, now = Date.now(), hours = ACTIVE_HOURS) {
54
55
  const units = (Array.isArray(plan?.units) ? plan.units : plan?.issues) ?? []
55
56
  const open = units.filter((u) => !DONE.has(u?.status)).length
56
57
  if (!open) continue
57
- runs.push({ dir: join(root, name), skill: plan.skill ?? 'resolve-issues', revision: plan.planRevision ?? null, open, mtime })
58
+ runs.push({ dir: join(root, name), skill: plan.skill ?? 'resolve-issues', revision: plan.planRevision ?? null, open, mtime,
59
+ ...(plan.installation ? { installation: plan.installation } : {}) })
58
60
  }
59
61
  return runs.sort((a, b) => b.mtime - a.mtime).map(({ mtime, ...r }) => r)
60
62
  }
61
63
 
62
64
  export function message(runs, { skillPath = SKILL_PATH, rushSkillPath = RUSH_SKILL_PATH } = {}) {
63
65
  if (!runs.length) return ''
66
+ if (runs.some((run) => run.installation)) {
67
+ return runs.map((run) => {
68
+ if (!run.installation) return message([run], { skillPath, rushSkillPath })
69
+ try {
70
+ const names = ['resolve-issues', ...(run.skill === 'rush-issues' ? ['rush-issues'] : [])]
71
+ const resources = workerResources(run.installation, names.map((canonicalName) => ({ canonicalName })))
72
+ return message([{ ...run, installation: undefined }], { skillPath: resources[0].path,
73
+ rushSkillPath: resources.find((entry) => entry.canonicalName === 'rush-issues')?.path ?? rushSkillPath })
74
+ + `\nSelected installation: ${JSON.stringify(run.installation)}\nReuse this exact root and identity for worker resources; never select another cache or a shared copy.`
75
+ } catch (error) {
76
+ return `Recovery blocked for ${run.dir}: ${error.message}. Do not use another installation or emit shared-store repair commands.`
77
+ }
78
+ }).join('\n\n')
79
+ }
64
80
  const skills = [skillPath]
65
81
  if (runs.some((r) => r.skill === 'rush-issues') && existsSync(rushSkillPath)) skills.push(rushSkillPath)
66
82
  const nextActions = join(dirname(skillPath), 'scripts', 'next-actions.mjs')
@@ -4,7 +4,7 @@ description: "Slash/explicit-only (/resolve-release). Full GitHub Flow release f
4
4
  disable-model-invocation: true
5
5
  metadata:
6
6
  workflow-role: coordinator
7
- release-version: 0.43.0
7
+ release-version: 0.44.0
8
8
  ---
9
9
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
10
10
  # Resolve release
@@ -2,7 +2,7 @@
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const DAY_MS = 24 * 60 * 60 * 1000;
@@ -46,6 +46,8 @@ function writeCache(path, value) {
46
46
 
47
47
  function main(now = Date.now()) {
48
48
  if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const bundle = readJson(join(resolve(here, '../../..'), 'package.json'));
50
+ if (bundle.name === '@1aboveio/skills' && bundle.nativeCodex?.schemaVersion === 1) return;
49
51
  const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
52
  const name = frontmatterValue(skill, 'name');
51
53
  const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
@@ -6,7 +6,7 @@ metadata:
6
6
  workflow-role: coordinator
7
7
  dependencies:
8
8
  - resolve-issues
9
- release-version: 0.43.0
9
+ release-version: 0.44.0
10
10
  ---
11
11
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
12
12
  # Rush issues (shortcut of resolve-issues)
@@ -50,7 +50,10 @@ question.
50
50
  and complete the goal
51
51
  ([done.md](../resolve-issues/references/done.md#close-the-run)).
52
52
  3. Everything else — run rules, stages, scripts, review, CI and merge, and the
53
- done criteria — applies exactly as `resolve-issues` states it.
53
+ done criteria — applies exactly as `resolve-issues` states it. In particular,
54
+ [Delivery progress](../resolve-issues/SKILL.md#delivery-progress) applies in shortcut
55
+ mode too: keep one immediate checkpoint per active unit, justify infrastructure and
56
+ reassess repeated non-convergence. More worker activity is not a reason to reset it.
54
57
  The shared [task-plan checkpoints](../resolve-issues/references/task-plan.md#checkpoints)
55
58
  apply too: on Pi, bind or reload through `update_plan` with the absolute
56
59
  workflow path and persisted revision (no event means read-only), then
@@ -2,7 +2,7 @@
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const DAY_MS = 24 * 60 * 60 * 1000;
@@ -46,6 +46,8 @@ function writeCache(path, value) {
46
46
 
47
47
  function main(now = Date.now()) {
48
48
  if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const bundle = readJson(join(resolve(here, '../../..'), 'package.json'));
50
+ if (bundle.name === '@1aboveio/skills' && bundle.nativeCodex?.schemaVersion === 1) return;
49
51
  const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
52
  const name = frontmatterValue(skill, 'name');
51
53
  const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
@@ -6,7 +6,7 @@ metadata:
6
6
  workflow-role: coordinator
7
7
  dependencies:
8
8
  - resolve-release
9
- release-version: 0.43.0
9
+ release-version: 0.44.0
10
10
  ---
11
11
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
12
12
  # Rush release (shortcut of resolve-release)
@@ -2,7 +2,7 @@
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const DAY_MS = 24 * 60 * 60 * 1000;
@@ -46,6 +46,8 @@ function writeCache(path, value) {
46
46
 
47
47
  function main(now = Date.now()) {
48
48
  if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const bundle = readJson(join(resolve(here, '../../..'), 'package.json'));
50
+ if (bundle.name === '@1aboveio/skills' && bundle.nativeCodex?.schemaVersion === 1) return;
49
51
  const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
52
  const name = frontmatterValue(skill, 'name');
51
53
  const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: test-quality
3
3
  description: "Seven principles for tests that catch real bugs, and an audit that reports weak, redundant, and not-coverage tests without fixing them. Use when writing, changing, or reviewing tests, or when asked whether tests are useful, redundant, over-mocked, flaky, only assert static text, or test config files, or asked to make a slow test suite faster without losing coverage, or when the user asks to write the testing conventions into a repo's CONTRIBUTING.md. NOT defining what a spec must prove (ensure-coverage) or authoring browser tests (e2e-test)."
4
- release-version: 0.43.0
4
+ release-version: 0.44.0
5
5
  ---
6
6
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
7
7
  # Test Quality