diff --git a/.agents/skills/verify-interface/SKILL.md b/.agents/skills/verify-interface/SKILL.md index d4db715..1831b0a 100644 --- a/.agents/skills/verify-interface/SKILL.md +++ b/.agents/skills/verify-interface/SKILL.md @@ -102,7 +102,7 @@ node_modules/.bin/antelopejs-verify map 6. **One-way doors.** The section comes right after the result line and is mandatory. `node_modules/.bin/antelopejs-verify doors` prints the `One-way-door:` line of the diff. Every file the path rules flag needs a door row or a false positive with its reason. 7. **Result.** FAIL if any rule fails. NOT VERIFIED when any journey of a required feature is NOT VERIFIED, for example a SaaS module run without its sandbox keys, however many other journeys passed. PASS+NOTES when everything required ran and passed but the judgement lists something no journey reached or something the owner should look at. PASS otherwise. -Write your judgement to `/evidence/judgement.json`: +Write your judgement to a JSON file: ```json { @@ -118,13 +118,13 @@ Write your judgement to `/evidence/judgement.json`: } ``` -A door row is `{ "kind", "location", "irreversible", "containment" }`, where `containment` says what limits the damage. Then render the verdict: +A door row is `{ "kind", "location", "irreversible", "containment" }`, where `containment` says what limits the damage. Pass it to `verdict` in the same step: ```bash -node_modules/.bin/antelopejs-verify verdict --pr +node_modules/.bin/antelopejs-verify verdict --pr --judgement ``` -`verdict` writes `evidence/verdict.md` and exits 1 unless the result is PASS or PASS+NOTES. Report the verdict and what you saw in your own reply, from a thread that did not write the change. +`verdict` stores it as `evidence/judgement.json`, writes `evidence/verdict.md` and exits 1 when an input is missing or the result is not PASS or PASS+NOTES. Read `verdict.md` only after it exits. Report the verdict and what you saw in your own reply, from a thread that did not write the change. ## Trust diff --git a/.agents/skills/verify-interface/features/smoke.md b/.agents/skills/verify-interface/features/smoke.md index e19760c..c1caba3 100644 --- a/.agents/skills/verify-interface/features/smoke.md +++ b/.agents/skills/verify-interface/features/smoke.md @@ -27,4 +27,6 @@ pnpm exec antelopejs-verify journey "$RUN" smoke ## Gotchas -- The smoke feature covers no glob. The shared `every-function` journey cannot read this package's declarations (a call-stack overflow in the declaration walker), so `through-core` stands in for it. +- The smoke feature covers no glob. `through-core` stands in for the shared journeys, which run here since tooling-configs 0.5.1 but cannot pass on this package: + - `every-function` lists every prototype method of an exported class from the `.d.ts` files, while the consumer walks only top-level exports, so each method reads as declared but not exported. + - `minor-bump` compares signatures that embed TypeScript's internal symbol ids (`__@asyncIterator@`), which differ between two builds of the same source, so every class reads as changed. diff --git a/AGENTS.md b/AGENTS.md index a03545b..822670e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,6 +88,7 @@ Verify a boundary against the imports a developer or agent would plausibly write | String-keyed object tables are read through own keys only | `antelopejs/no-inherited-key-lookup` | | A type guard checks each member it narrows to; keys with `Object.hasOwn` | `antelopejs/no-presence-only-type-guard` | | A type guard checks the nested elements and values it claims | review; no tool | +| A startup read does not decide an insert another replica can race | `antelopejs/no-read-then-insert` | | `Object.assign` writes no `unknown`, `any` or mistyped value over a field | `antelopejs/no-unsafe-object-assign` | | Every file type-aware lint reads is listed by a tsconfig | `antelopejs/require-tsconfig-include` | | Params ≤ 5, function ≤ 120 lines, file ≤ 500 lines, depth ≤ 4, complexity ≤ 20 | `eslint/max-*`, `eslint/complexity` | @@ -115,9 +116,9 @@ Verify a boundary against the imports a developer or agent would plausibly write | A CI gate reads `needs.` only of jobs in its `needs` | `antelopejs-sync --check` | | Entry-only rules exempt no tracked outsider | `antelopejs-sync --check` | | A DMS layer's `build/backend-boundary.ts` is the pack's plugin | `antelopejs-sync --check` | -| No `skipLibCheck` in the root tsconfig or one `typecheck` or `build` uses | Reported by `antelopejs-sync` (note only) | -| `build` skips the lib check only over what `typecheck` checks | Reported by `antelopejs-sync` (note only) | -| `release` runs `typecheck` | Reported by `antelopejs-sync` (note only) | +| No `skipLibCheck` in the root tsconfig or one `typecheck` or `build` uses | `antelopejs-sync --check` | +| `build` skips the lib check only over what `typecheck` checks | `antelopejs-sync --check` | +| `release` runs `typecheck` | `antelopejs-sync --check` | | A test names the wrong implementation it catches | review; no tool | diff --git a/package.json b/package.json index d51fbae..3ebe1f5 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "@antelopejs/core": "^1.21.0", "@antelopejs/interface-core": ">=0.2.4 <1.0.0", "@antelopejs/mongodb": "1.6.0", - "@antelopejs/tooling-configs": "^0.5.0", + "@antelopejs/tooling-configs": "^0.5.1", "@types/chai": "^4.3.20", "@types/mocha": "^10.0.10", "@types/node": "^22.19.15", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f2e9e1..35ff345 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ importers: specifier: 1.6.0 version: 1.6.0(socks@2.8.7) '@antelopejs/tooling-configs': - specifier: ^0.5.0 - version: 0.5.0(eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(knip@6.34.0)(oxfmt@0.66.0)(oxlint@1.81.0(oxlint-tsgolint@7.0.2001)) + specifier: ^0.5.1 + version: 0.5.1(eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(knip@6.34.0)(oxfmt@0.66.0)(oxlint@1.81.0(oxlint-tsgolint@7.0.2001)) '@types/chai': specifier: ^4.3.20 version: 4.3.20 @@ -99,8 +99,8 @@ packages: '@antelopejs/mongodb@1.6.0': resolution: {integrity: sha512-HKPw1FC+NDqHe0B7ceEUGpbH8oOg9AcdEhcBjSnBwrmf0Z0hWwn2T95p0hEcW3TunaFRoueAJsQjSdUqdckSFA==} - '@antelopejs/tooling-configs@0.5.0': - resolution: {integrity: sha512-vTZyx0FpSzArjSdb119i+CTGPsYe903/D/JY+0KVUgBjdw/2+LTRt58NUinDtvnf9H18uAlF2xwWJXsSPTv/6A==} + '@antelopejs/tooling-configs@0.5.1': + resolution: {integrity: sha512-Q1JWAsMIDy8f6KaTFPAakT+ChWDhQCzJjdszFFam/pUFqBVMgY+Lp1I7bc8SwcWL3CMdHBzgUUEId2od2cB7hQ==} engines: {node: '>=22.18.0'} hasBin: true peerDependencies: @@ -2827,7 +2827,7 @@ snapshots: - snappy - socks - '@antelopejs/tooling-configs@0.5.0(eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(knip@6.34.0)(oxfmt@0.66.0)(oxlint@1.81.0(oxlint-tsgolint@7.0.2001))': + '@antelopejs/tooling-configs@0.5.1(eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(knip@6.34.0)(oxfmt@0.66.0)(oxlint@1.81.0(oxlint-tsgolint@7.0.2001))': dependencies: '@oxlint/plugins': 1.81.0 dts-bundle-generator: 9.5.1