@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.
- package/.codex-plugin/plugin.json +13 -0
- package/.codex-plugin/resources.json +1827 -0
- package/README.md +22 -0
- package/package.json +9 -2
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/airflow/release-check.mjs +3 -1
- package/skills/app-dev/android-foundation/SKILL.md +92 -34
- package/skills/app-dev/android-foundation/assets/android-ci-job.yml +13 -7
- package/skills/app-dev/android-foundation/references/ci.md +23 -13
- package/skills/app-dev/android-foundation/references/delivery-focus.md +29 -0
- package/skills/app-dev/android-foundation/references/diagnosis.md +136 -0
- package/skills/app-dev/android-foundation/references/gotchas.md +20 -11
- package/skills/app-dev/android-foundation/references/setup.md +15 -6
- package/skills/app-dev/android-foundation/release-check.mjs +3 -1
- package/skills/app-dev/android-foundation/scripts/device-run.sh +148 -42
- package/skills/app-dev/app-debug/SKILL.md +1 -1
- package/skills/app-dev/app-debug/release-check.mjs +3 -1
- package/skills/app-dev/better-auth/SKILL.md +1 -1
- package/skills/app-dev/better-auth/release-check.mjs +3 -1
- package/skills/app-dev/data-catalog/SKILL.md +1 -1
- package/skills/app-dev/data-catalog/release-check.mjs +3 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/data-quality/release-check.mjs +3 -1
- package/skills/app-dev/ios-foundation/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/release-check.mjs +3 -1
- package/skills/app-dev/monorepo/SKILL.md +1 -1
- package/skills/app-dev/monorepo/release-check.mjs +3 -1
- package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
- package/skills/app-dev/nextjs-fullstack/release-check.mjs +3 -1
- package/skills/app-dev/prisma-setup/SKILL.md +1 -1
- package/skills/app-dev/prisma-setup/release-check.mjs +3 -1
- package/skills/app-dev/pyspark/SKILL.md +1 -1
- package/skills/app-dev/pyspark/release-check.mjs +3 -1
- package/skills/app-dev/python-backend/SKILL.md +1 -1
- package/skills/app-dev/python-backend/release-check.mjs +3 -1
- package/skills/app-dev/shadcn/SKILL.md +1 -1
- package/skills/app-dev/shadcn/release-check.mjs +3 -1
- package/skills/app-dev/zod-v4/SKILL.md +1 -1
- package/skills/app-dev/zod-v4/release-check.mjs +3 -1
- package/skills/cicd/cloud-build/SKILL.md +1 -1
- package/skills/cicd/cloud-build/release-check.mjs +3 -1
- package/skills/cicd/cloud-debug/SKILL.md +1 -1
- package/skills/cicd/cloud-debug/release-check.mjs +3 -1
- package/skills/cicd/cloud-deploy/SKILL.md +1 -1
- package/skills/cicd/cloud-deploy/release-check.mjs +3 -1
- package/skills/cicd/docker/SKILL.md +1 -1
- package/skills/cicd/docker/release-check.mjs +3 -1
- package/skills/cicd/github-actions/SKILL.md +1 -1
- package/skills/cicd/github-actions/release-check.mjs +3 -1
- package/skills/cicd/github-flow/SKILL.md +1 -1
- package/skills/cicd/github-flow/release-check.mjs +3 -1
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/google-cloud/release-check.mjs +3 -1
- package/skills/cicd/mergify/SKILL.md +1 -1
- package/skills/cicd/mergify/release-check.mjs +3 -1
- package/skills/cicd/podman/SKILL.md +1 -1
- package/skills/cicd/podman/release-check.mjs +3 -1
- package/skills/content/article-review/SKILL.md +1 -1
- package/skills/content/article-review/release-check.mjs +3 -1
- package/skills/content/article-to-image/SKILL.md +1 -1
- package/skills/content/article-to-image/release-check.mjs +3 -1
- package/skills/content/flowchart-svg/SKILL.md +1 -1
- package/skills/content/flowchart-svg/release-check.mjs +3 -1
- package/skills/content/image-gen/SKILL.md +1 -1
- package/skills/content/image-gen/release-check.mjs +3 -1
- package/skills/content/mermaid/SKILL.md +1 -1
- package/skills/content/mermaid/release-check.mjs +3 -1
- package/skills/content/wechat-article-writer/SKILL.md +1 -1
- package/skills/content/wechat-article-writer/release-check.mjs +3 -1
- package/skills/content/wechat-publisher/SKILL.md +1 -1
- package/skills/content/wechat-publisher/release-check.mjs +3 -1
- package/skills/content/wechat-search/SKILL.md +1 -1
- package/skills/content/wechat-search/release-check.mjs +3 -1
- package/skills/content/xai-search/SKILL.md +88 -13
- package/skills/content/xai-search/release-check.mjs +3 -1
- package/skills/content/xai-search/scripts/xai_search.sh +125 -149
- package/skills/core/distill-writing/SKILL.md +1 -1
- package/skills/core/distill-writing/release-check.mjs +3 -1
- package/skills/core/doc-to-md/SKILL.md +1 -1
- package/skills/core/doc-to-md/release-check.mjs +3 -1
- package/skills/core/editorial-review/SKILL.md +1 -1
- package/skills/core/editorial-review/release-check.mjs +3 -1
- package/skills/core/house-style/SKILL.md +1 -1
- package/skills/core/house-style/release-check.mjs +3 -1
- package/skills/core/plain-language/SKILL.md +1 -1
- package/skills/core/plain-language/release-check.mjs +3 -1
- package/skills/core/polish-cn/SKILL.md +1 -1
- package/skills/core/polish-cn/release-check.mjs +3 -1
- package/skills/core/reg-parser/SKILL.md +1 -1
- package/skills/core/reg-parser/release-check.mjs +3 -1
- package/skills/core/terminology/SKILL.md +1 -1
- package/skills/core/terminology/release-check.mjs +3 -1
- package/skills/core/write-doc/SKILL.md +1 -1
- package/skills/core/write-doc/release-check.mjs +3 -1
- package/skills/engineering/better-review/SKILL.md +1 -1
- package/skills/engineering/better-review/release-check.mjs +3 -1
- package/skills/engineering/contributing/SKILL.md +1 -1
- package/skills/engineering/contributing/release-check.mjs +3 -1
- package/skills/engineering/e2e-test/SKILL.md +1 -1
- package/skills/engineering/e2e-test/release-check.mjs +3 -1
- package/skills/engineering/engineering-runtime/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +13 -13
- package/skills/engineering/engineering-runtime/release-check.mjs +3 -1
- package/skills/engineering/engineering-runtime/scripts/installation-resolver.mjs +191 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +51 -10
- package/skills/engineering/ensure-coverage/SKILL.md +1 -1
- package/skills/engineering/ensure-coverage/release-check.mjs +3 -1
- package/skills/engineering/golden-path/SKILL.md +1 -1
- package/skills/engineering/golden-path/release-check.mjs +3 -1
- package/skills/engineering/harness-runtime/SKILL.md +1 -1
- package/skills/engineering/harness-runtime/release-check.mjs +3 -1
- package/skills/engineering/resolve-issues/SKILL.md +11 -20
- package/skills/engineering/resolve-issues/references/delivery-progress.md +63 -0
- package/skills/engineering/resolve-issues/references/expire.md +24 -11
- package/skills/engineering/resolve-issues/references/implementation.md +9 -1
- package/skills/engineering/resolve-issues/references/preflight.md +7 -0
- package/skills/engineering/resolve-issues/references/shared-modules.md +27 -0
- package/skills/engineering/resolve-issues/references/task-plan.md +12 -5
- package/skills/engineering/resolve-issues/release-check.mjs +3 -1
- package/skills/engineering/resolve-issues/scripts/active-installation.mjs +32 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.mjs +3 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +17 -1
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- package/skills/engineering/resolve-release/release-check.mjs +3 -1
- package/skills/engineering/rush-issues/SKILL.md +5 -2
- package/skills/engineering/rush-issues/release-check.mjs +3 -1
- package/skills/engineering/rush-release/SKILL.md +1 -1
- package/skills/engineering/rush-release/release-check.mjs +3 -1
- package/skills/engineering/test-quality/SKILL.md +1 -1
- package/skills/engineering/test-quality/release-check.mjs +3 -1
- package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
- package/skills/risk-compliance/compliance-audit/release-check.mjs +3 -1
- package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
- package/skills/risk-compliance/contract-compare/release-check.mjs +3 -1
- package/skills/risk-compliance/contract-review/SKILL.md +1 -1
- package/skills/risk-compliance/contract-review/release-check.mjs +3 -1
- package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
- package/skills/risk-compliance/doc-authenticity/release-check.mjs +3 -1
- package/skills/risk-compliance/fraud-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/fraud-analysis/release-check.mjs +3 -1
- package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/payment-analysis/release-check.mjs +3 -1
- package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
- package/skills/risk-compliance/similar-domain/release-check.mjs +3 -1
- package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
- package/skills/risk-compliance/tld-detection/release-check.mjs +3 -1
- package/skills/app-dev/android-foundation/scripts/device-run.test.mjs +0 -172
- package/skills/app-dev/data-catalog/scripts/data-catalog.test.mjs +0 -36
- package/skills/app-dev/data-quality/scripts/data-quality.test.mjs +0 -12
- package/skills/cicd/github-actions/scripts/ci-run-audit.test.mjs +0 -637
- package/skills/cicd/github-flow/scripts/flow.test.mjs +0 -114
- package/skills/cicd/github-flow/scripts/persist-conventions.test.mjs +0 -108
- package/skills/cicd/mergify/scripts/audit.test.mjs +0 -201
- package/skills/cicd/mergify/scripts/entrypoints.test.mjs +0 -106
- package/skills/cicd/mergify/scripts/pr-620-mergify-comments.fixture.json +0 -30
- package/skills/cicd/mergify/scripts/stack-push.test.mjs +0 -233
- package/skills/cicd/mergify/scripts/watch-pr-delivery.test.mjs +0 -1826
- package/skills/content/image-gen/scripts/credentials.test.mjs +0 -212
- package/skills/content/image-gen/scripts/options.test.mjs +0 -245
- package/skills/content/xai-search/tests/smoke_test.sh +0 -36
- package/skills/core/polish-cn/scripts/polish-cn.test.mjs +0 -244
- package/skills/core/reg-parser/scripts/reg-parser.test.mjs +0 -165
- package/skills/engineering/better-review/scripts/pr-context.test.mjs +0 -168
- package/skills/engineering/better-review/scripts/rereview-scope.test.mjs +0 -587
- package/skills/engineering/better-review/scripts/scan-diff.test.mjs +0 -414
- package/skills/engineering/better-review/scripts/vendor-sync.test.mjs +0 -96
- package/skills/engineering/contributing/scripts/persist-conventions.test.mjs +0 -118
- package/skills/engineering/e2e-test/scripts/presentation-checks.test.mjs +0 -106
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.test.mjs +0 -117
- package/skills/engineering/e2e-test/scripts/presentation-reachability.test.mjs +0 -69
- package/skills/engineering/e2e-test/scripts/presentation-render-health.test.mjs +0 -98
- package/skills/engineering/e2e-test/scripts/presentation-sweep.test.mjs +0 -71
- package/skills/engineering/e2e-test/scripts/presentation-temporal.test.mjs +0 -59
- package/skills/engineering/e2e-test/scripts/project-route-manifest.test.mjs +0 -76
- package/skills/engineering/engineering-runtime/engineering-runtime.test.mjs +0 -68
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.test.mjs +0 -95
- package/skills/engineering/engineering-runtime/scripts/main-module.test.mjs +0 -288
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.test.mjs +0 -96
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.test.mjs +0 -96
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.test.mjs +0 -47
- package/skills/engineering/ensure-coverage/scripts/ci-audit.test.mjs +0 -86
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.test.mjs +0 -447
- package/skills/engineering/ensure-coverage/scripts/design-parity.test.mjs +0 -552
- package/skills/engineering/ensure-coverage/scripts/lint-tests.test.mjs +0 -289
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.test.mjs +0 -119
- package/skills/engineering/golden-path/scripts/golden-path.test.mjs +0 -1457
- package/skills/engineering/harness-runtime/discover-models.test.mjs +0 -363
- package/skills/engineering/harness-runtime/harness-runtime.test.mjs +0 -967
- package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +0 -829
- package/skills/engineering/harness-runtime/model-catalog.test.mjs +0 -366
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.test.mjs +0 -280
- package/skills/engineering/resolve-issues/scripts/dropbox.test.mjs +0 -346
- package/skills/engineering/resolve-issues/scripts/findings-reuse.test.mjs +0 -88
- package/skills/engineering/resolve-issues/scripts/github-reviews.test.mjs +0 -264
- package/skills/engineering/resolve-issues/scripts/install-hooks.test.mjs +0 -79
- package/skills/engineering/resolve-issues/scripts/issue-tree.test.mjs +0 -107
- package/skills/engineering/resolve-issues/scripts/manual-invocation.test.mjs +0 -14
- package/skills/engineering/resolve-issues/scripts/next-actions-capacity.test.mjs +0 -149
- package/skills/engineering/resolve-issues/scripts/next-actions.test.mjs +0 -915
- package/skills/engineering/resolve-issues/scripts/plan-sync.test.mjs +0 -156
- package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +0 -448
- package/skills/engineering/resolve-issues/scripts/ready-check.test.mjs +0 -217
- package/skills/engineering/resolve-issues/scripts/rehydrate.test.mjs +0 -91
- package/skills/engineering/resolve-issues/scripts/review-verdict.test.mjs +0 -1060
- package/skills/engineering/resolve-issues/scripts/size-check.test.mjs +0 -458
- package/skills/engineering/resolve-release/scripts/apply.test.mjs +0 -99
- package/skills/engineering/resolve-release/scripts/dark-flags.test.mjs +0 -100
- package/skills/engineering/resolve-release/scripts/flow.test.mjs +0 -340
- package/skills/engineering/resolve-release/scripts/green-head.test.mjs +0 -101
- package/skills/engineering/resolve-release/scripts/npm-version-absence.test.mjs +0 -426
- package/skills/engineering/resolve-release/scripts/plan-npm.test.mjs +0 -659
- package/skills/engineering/resolve-release/scripts/plan-toml-boundary.test.mjs +0 -317
- package/skills/engineering/resolve-release/scripts/plan-uv.test.mjs +0 -291
- package/skills/engineering/resolve-release/scripts/plan.test.mjs +0 -428
- package/skills/engineering/test-quality/scripts/lint-tests.test.mjs +0 -591
- package/skills/engineering/test-quality/scripts/mock-policy-config.test.mjs +0 -119
- package/skills/engineering/test-quality/scripts/persist-conventions.test.mjs +0 -104
- package/skills/risk-compliance/compliance-audit/scripts/compliance-audit.test.mjs +0 -14
- package/skills/risk-compliance/doc-authenticity/manual-invocation.test.mjs +0 -12
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.test.mjs +0 -212
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.test.mjs +0 -14
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.test.mjs +0 -14
- package/skills/risk-compliance/tld-detection/tests/test_detect_ladders.py +0 -134
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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) (
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
|
13
|
-
log reports passing): login, store, charge, charge,
|
|
14
|
-
login, store, charge, receipt keeps going.
|
|
15
|
-
|
|
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 |
|
|
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
|
-
|
|
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.
|
|
106
|
-
|
|
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
|
|
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
|
|
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**,
|
|
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
|
|
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:
|
|
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:
|
|
263
|
-
and
|
|
264
|
-
|
|
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.
|
|
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.
|
|
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'));
|
|
@@ -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.
|
|
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
|