Skip to content

chore(objectql): retire the PR-10d.1 dry-run-hash-compat probe and its scripts program - #21865

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-21853-retire-dry-run-hash-compat
Oct 5, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-21853-retire-dry-run-hash-compat

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #21853
Clause-②: no

Retires the one-time ADR-0008 PR-10d.1 compatibility probe, per triage's grade and direction on the card (comment 5991365223: retire, do not repair). PR-10d.2 finished that audit. Nothing ships the script (@objectstack/objectql's files is dist, README.md, CHANGELOG.md) and nothing runs it. Its type-blind hashSpec(body) call is therefore deleted, not corrected.

What changes

Deleted (678 lines):

  • packages/objectql/scripts/dry-run-hash-compat.ts, the probe. The directory is now gone.
  • packages/objectql/src/dry-run-hash-compat.test.ts, its test.
  • packages/objectql/tsconfig.scripts.json, and the tsc --noEmit -p tsconfig.scripts.json leg of objectql's typecheck script. With scripts/ gone, that program has no inputs: the exact deleted config (blob 28a4b91ab6), put back untracked beside the empty package, gives error TS18003: No inputs were found in config file and tsc exit 2. No placeholder file keeps it alive.
  • The two EXEMPT_FILES rows for those two files in scripts/check-error-code-casing.mjs.

Reworded (comments only), because they stated the deleted files as present:

  • packages/objectql/tsconfig.test.json. The rootDir bullet's measured example named the deleted test; the bullet now states the rule without it. The closing sentence about the sibling scripts/ program is dropped. rootDir: "." itself is kept (see Acceptance notes).
  • packages/objectql/src/datasource-def-credentials-ref.pin.ts and register-object-authored-shape.pin.ts. Both docblocks quote the package's typecheck line "stated to today's tree"; the quote now matches the new line. Neither file reaches dist (measured below).
  • scripts/check-type-check-coverage.mjs, four spots:
    • the census row dated main @ 5886ee6 is annotated "deleted since", not removed (see Deviations);
    • the AGAINST argument no longer names the file;
    • the SEEDED-AT note no longer says objectql "now has" a scripts program;
    • the "shape these eight copy" pointer no longer sends a reader to a deleted config.

The packages/objectql/CHANGELOG.md line stays: it is history.

Hypotheses measured

H1, every reference. git grep -n dry-run-hash-compat at origin/main 9f9510f gives 17 hits, 16 outside packages/objectql/CHANGELOG.md. The file lines are unchanged since dispatch at 0fe0a59.

Site Hits Disposition
the script 4 deleted
its test 1 deleted
tsconfig.scripts.json (line 4) 1 deleted with the file
tsconfig.test.json (lines 42-43) 2 reworded
check-error-code-casing.mjs (lines 85-86) 2 rows deleted
check-type-check-coverage.mjs (line 1399) 1 dated census row: annotated, kept
check-type-check-coverage.mjs (line 1428) 1 reworded to not name the file
check-type-check-coverage.mjs (lines 4154-4155) 2 stays: a measurement dated "on main @ 5886ee6"
check-type-check-coverage.mjs (lines 5740-5741) 2 stays: self-test fixture using the name as a sample string

At this PR's head the same search leaves 6 hits: the CHANGELOG line and the five kept check-type-check-coverage.mjs lines above.

Searching by the program instead of the file name found four more present-tense statements, all reworded: check-type-check-coverage.mjs about lines 1442-1444 and 1494-1495, and the two .pin.ts quotes. Thirteen sibling configs cite "the distinction #10756 drew for packages/objectql/scripts":

  • nine tsconfig.scripts.json: platform-objects, five plugins, three services;
  • plugin-auth/tsconfig.examples.json;
  • three tsconfig.typecheck.json.

That cites a decision and remains true, so they stay, as do the past-tense mentions at check-type-check-coverage.mjs lines 183 and 1378. No doc, ADR or scripts/adr-anchors/ entry names the file, the directory or the probe (searched also as hash-compat, dryRunHash and PR-10d.1).

H2, the scripts-layer program. scripts/ held only this file. It is removed the way the gates accept: the config is deleted and the typecheck leg dropped. No ledger row names it: DEBT, TEST_DEBT and UNCHECKED_SOURCE_DEBT in the coverage gate, and packages/objectql/test-typecheck-debt.json, carry no objectql scripts entry. After the change:

  • check:type-check-coverage reports "79/80 workspace packages type-checked" and "source layer: 0 directory(ies) of non-test source in 0 ledgered entr(y/ies) sit outside every tsc program";
  • check:type-check-debt reports "1 ledger entr(ies) re-measured ... 26 raw tsc error(s) total, none above its recorded number".

H3, no other importer. At this PR's head, runDryRun occurs only in the CHANGELOG line, and LegacyMetadataRow nowhere.

Changeset: the skip-changeset label

The changeset gate in pr-automation.yml exempts a PR that declares no release by this label (its route 2). It rejects a newly added empty changeset (its closed route 3), so that is not the route. Route 0 does not apply: the diff touches no .changeset/*.md.

The diff publishes nothing:

  • objectql's tsup entries are src/index.ts and src/core.ts.
  • After pnpm --filter @objectstack/objectql build, grep -rlF over dist finds 0 files for each of runDryRun, LegacyMetadataRow, dry-run-hash-compat, checksum_drift and tsconfig.scripts.json. It also finds 0 for the .pin.ts docblock text (stated to today, and the new quoted typecheck line), which is present in src.
  • Positive controls: ObjectQL hits 10 files and assertEngineDeleteDispatch 5.

The only tarball byte this touches is the dev-only scripts.typecheck string in package.json. The commit that added that leg, 3854376e3d, carried no changeset; cb954f1708, which added the same kind of leg to eight other packages, carried none either.

node scripts/check-changeset-no-major.mjs --base origin/main exits 0 ("This diff introduces no major bump"); its level axis is given this body below.

Verification (HEAD cc46841, after merging origin/main 9f9510f)

These readings were taken on a resumed run. The first run was stopped by a container restart before it reported, so none of its readings is quoted here.

  • pnpm --filter '@objectstack/objectql...' build, then pnpm --filter @objectstack/objectql typecheck, each under the verify lock: VERDICT command-exit 0 both. The typecheck output reads tsc --noEmit && pnpm check:test-typecheck, then "check:test-typecheck: OK ... 40 file(s) / 234 error(s) / 65 pinned signature(s) held". That is unchanged, because the deleted test had no ledger entry.
  • pnpm --filter @objectstack/objectql exec vitest run --project local --maxWorkers=2: Test Files 373 passed (373), Tests 7460 passed (7460), VERDICT command-exit 0.
  • Whole-workspace turbo run build --filter=!@objectstack/docs --concurrency=2: 72 successful, 72 total, VERDICT command-exit 0. It was run so that check:dual-build-cjs-loads could measure.
  • Gates:
    • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack with no paths derived 87 commands. All 87 exit 0, check:dual-build-cjs-loads included ("106 published require entry point(s) across 66 package(s) load").
    • --ran prints "✓ dispatch-gates --ran: 87 derived famil(ies) accounted for — 87 run, 0 NOT-MEASURED (a DERIVED zero — all 87 recorded an exit code and none of them is 3)".
    • The four symbol-anchor sweeps (check:adr-symbol-anchors, check:scripts-symbol-anchors, check:spec-docblock-symbol-anchors, check:adr-anchors) all exit 0. So does check:dispatcher-error-vocabulary, which was named at dispatch and is not derived now.
  • Artifact-roster block (53 commands printed outside the total): 50 exit 0. Three exit 2 as NOT WIRED without PR context: check-closing-target-claim, check-partof-closing-keyword and check-single-claim-paths. Each was rerun with this PR's context and this body; the results are in the report on the card.
  • Gate scripts edited (check-error-code-casing.mjs, check-type-check-coverage.mjs): their own suites are their --self-tests, run inside pnpm check:error-code-casing ("46 recognizer case(s) + 5 registry case(s) pass") and pnpm check:type-check-coverage, both exit 0. No *.test.* file executes either script; the 21 test files that name them do so in comments.
  • eslint, a proven narrowing rather than the repo-wide pnpm lint:
    • Population: eslint.config.mjs matches **/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}, so it lints the four changed .mjs/.ts files. The .json files are outside it.
    • Count, from --format json with --no-inline-config: 4 files, 0 errors, 0 warnings.
    • Invariance: the config never enables type-aware linting (no parserOptions.project, no projectService). No ignore list or baseline in it names a deleted path. So this diff cannot move a verdict on any untouched file.
  • pnpm check:nul-bytes: OK (10209 text files, no raw ASCII control bytes).

Deviations

  1. The ruling lists "the comment in scripts/check-type-check-coverage.mjs (about :1399)" for deletion. That line is one row of a census dated "on main @ 5886ee6", whose total (11 files) counts it. Deleting the row would make the dated total wrong, so the row is annotated "deleted since, with its directory" instead. No comment now presents the file as live.
  2. The file surface goes beyond the claim by two files and two comment spots. These are the .pin.ts docblocks and check-type-check-coverage.mjs about lines 1442-1444 and 1494-1495. Each stated the deleted typecheck leg or config as present, and this change would have made it false.

Acceptance notes

  • packages/objectql/tsconfig.test.json keeps rootDir: ".". A static scan of src now finds no import that leaves src. The six hits are string literals inside compiler-probe templates in scoped-repository-return-narrowing.test.ts. So the widening is no longer load-bearing today, but it is harmless under noEmit. Narrowing it is a separate decision and is not taken here.
  • Dated counts in comments were not touched: "299" test files in both .pin.ts docblocks, and "251" in tsconfig.test.json. src holds 374 test files after this change. Each count is a dated reading this change does not make false, so it is noted, not edited.
  • The docs-drift comment lists 3 changed files with no anchor. Read by hand: no page under content/docs, docs or apps/docs names packages/objectql/scripts, tsconfig.scripts.json or either .pin.ts file. The 17 coarse-fallback pages that mention objectql contain none of dry-run-hash, tsconfig.scripts, test-typecheck, checksum_drift or hashSpec (control: 11 of them contain the literal @objectstack/objectql).

Generated by Claude Code

claude added 2 commits October 5, 2026 09:57
…s scripts program

The one-time ADR-0008 PR-10d.1 compatibility probe finished its job when
PR-10d.2 aligned the repository; nothing ships it (objectql's `files` is
`dist` only) and nothing runs it. Delete it rather than repair its
type-blind `hashSpec(body)` call.

- delete `packages/objectql/scripts/dry-run-hash-compat.ts` and its test
  `src/dry-run-hash-compat.test.ts` (no other importer of `runDryRun`);
- `scripts/` is now empty, so `tsconfig.scripts.json` and the `typecheck`
  leg that named it go too (an empty program fails TS18003);
- drop the two EXEMPT_FILES rows in `check-error-code-casing.mjs`;
- reword the comments that stated the deleted files as present: the
  `tsconfig.test.json` rootDir note, the two `.pin.ts` docblocks quoting
  the `typecheck` line, and four spots in `check-type-check-coverage.mjs`
  (dated census rows and measurements are kept as history).

Claude-Session: https://claude.ai/code/session_017ErfyP2Rx7XWHJA27QjyUi
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the size/l label Oct 5, 2026
@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 3 changed file(s) yielded no anchor (packages/objectql/src/datasource-def-credentials-ref.pin.ts, packages/objectql/src/register-object-authored-shape.pin.ts, packages/objectql/tsconfig.scripts.json), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 3 changed file(s) yielded no anchor (packages/objectql/src/datasource-def-credentials-ref.pin.ts, packages/objectql/src/register-object-authored-shape.pin.ts, packages/objectql/tsconfig.scripts.json) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 17 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 9f9510f25e6aa65aa61ce3effb42706fabcab92e → packageMentionDocs.

@github-actions github-actions Bot added dependencies Pull requests that update a dependency file tests labels Oct 5, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 5, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

ACCEPT (seat review) — PR #21865 at head cc46841321

domain:engine#1 · session_017ErfyP2Rx7XWHJA27QjyUi · read at 2026-10-05T12:10Z. The os-dev report is the resumed run's hand-back on #21853. Judged against GitHub and the branch, not against the report.

  • Shape: draft, base main.
    • The first lines are Fixes #21853 and Clause-②: no.
    • Assignee: os-project-manager. Label skip-changeset.
  • Scope: 9 files, +29/-678. The diff matches triage's direction (5991365223): retire, do not repair.
    • Deleted: packages/objectql/scripts/dry-run-hash-compat.ts (the directory goes with it), src/dry-run-hash-compat.test.ts, and tsconfig.scripts.json.
    • packages/objectql/package.json's typecheck drops the tsc --noEmit -p tsconfig.scripts.json leg. The deleted config on the now-empty directory gives TS18003, tsc exit 2, so the leg cannot stay.
    • scripts/check-error-code-casing.mjs: the two EXEMPT_FILES rows for the deleted files are deleted.
    • Comments only: tsconfig.test.json, scripts/check-type-check-coverage.mjs, and two .pin.ts docblocks that quoted the deleted typecheck leg as present. The comment edits beyond the claim's list each reword a sentence that stated a deleted file or leg as present; no logic line moves.
    • check-type-check-coverage.mjs:1399 is one row of a dated census whose total counts it. It is annotated "deleted since", not removed. That is the right reading of the ruling.
  • Hypotheses, measured at cc46841321:
    • H1: git grep dry-run-hash-compat falls from 17 hits to 6. What remains is the CHANGELOG line, the annotated census row, a dated measurement, and a self-test sample string.
    • H2: the coverage gates accept the removed program. No DEBT, TEST_DEBT, UNCHECKED_SOURCE_DEBT or test-typecheck-debt row names it.
    • H3: runDryRun appears only in the CHANGELOG; LegacyMetadataRow nowhere. The dist grep finds none of the deleted symbols.
  • Changeset: skip-changeset is the gate's prescribed route for a change that releases nothing. @objectstack/objectql's files is dist, README.md, CHANGELOG.md, and the only tarball byte that moves is the dev-only scripts.typecheck string. Clause-②: no is right: no export or public surface moves.
  • Governed and contract: check-governed-merges --pr 21865: 0 of 9 paths hit the register, NOT governed. No packages/spec/src/** path. No contract review is owed.
  • Evidence: @objectstack/objectql typecheck exit 0, with check:test-typecheck held; vitest 373 files, 7460 tests pass; turbo run build 72 of 72 tasks. Narrowed eslint over the 4 changed .mjs/.ts files: 0 errors, 0 warnings.
  • Gates: dispatch-gates --ran: 87 of 87 exit 0, including check:type-check-coverage, check:type-check-debt and check:error-code-casing. The four symbol-anchor sweeps and the 3 PR-context guards exit 0.
  • CI at cc46841321: 42 check runs, 35 success, 7 skipped, every skip in the roster (check-expected-skips exit 0). git merge-tree against origin/main 9f9510f25e: clean.

Recorded, not filed (the PR's Acceptance notes): packages/objectql/tsconfig.test.json keeps rootDir: '.', which no src import needs today. It is harmless under noEmit.

Landing through the queue follows.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 5, 2026 12:11
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 5, 2026 12:11
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 5, 2026
Merged via the queue into main with commit eb23966 Oct 5, 2026
44 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-21853-retire-dry-run-hash-compat branch October 5, 2026 12:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file size/l skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] dry-run-hash-compat.ts hashes stored bodies type-blind, so it reports checksum_drift for every object row whose fields are not in sorted order

2 participants