Uh oh!
There was an error while loading. Please reload this page.
fix(driver-memory,plugin-hono-server): put both objectstack.config.ts manifests inside a tsc program and import ObjectStackManifest from /kernel - #14387
Conversation
… manifests inside a tsc program and import ObjectStackManifest from /kernel
Both in-repo manifest authoring sites imported `ObjectStackManifest` from
`@objectstack/spec/system`, an entry that does not export it, and neither file
was read by any tsc program: `tsconfig.json` selects `src/**/*` in both
packages and the manifests sit at the package root, so the glob cannot match
them. `pnpm --filter ... typecheck` exited 0 with a wrong import in the file.
Two moves per package:
1. `import type { ObjectStackManifest } from '@objectstack/spec/kernel'` --
the real home of the type (`kernel/manifest.zod.ts`, re-exported by
`kernel/index.ts`). It is a type alias only (`export type ... = z.input<...>`),
so the import is type-only and nothing published changes.
2. A sibling `tsconfig.typecheck.json` per package -- `noEmit: true`,
`rootDir: "."`, `include: ["objectstack.config.ts"]` -- named by the
package's `typecheck` script. Measured: adding the file to the EMITTING
`tsconfig.json` raises TS6059 in both packages, under `--noEmit` too, so the
sibling shape (`packages/objectql/tsconfig.scripts.json`,
`packages/plugins/plugin-auth/tsconfig.examples.json`) is the right one --
it neutralises `rootDir` without putting the manifest in front of the emit.
The tsc half of the `retiredKey()` double channel (ADR-0049, #11332/#10724/
#4914) now reaches the only two places in this repo where a plugin manifest is
authored in TypeScript.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68📓 Docs Drift Check
What this run could not see
Coarse fallback — 11 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
os-musk
commented
Sep 2, 2026
Enqueue provenance ( Generated by Claude Code |
Fixes#13284
Both in-repo package-level manifest authoring sites imported
ObjectStackManifestfrom@objectstack/spec/system, an entry that does not export it, and neither file was read by any tsc program.tsconfig.jsonselectssrc/**/*in both packages and the manifests sit at the package root, so the glob cannot match them:pnpm --filter ... typecheckexited 0 with a wrong import sitting on line 3. Both halves of the triage ruling are here — the import is corrected, and each file is now inside a program, so the next wrong key or wrong import fails at author time.Half 1 — the import
ObjectStackManifestis declared inpackages/spec/src/kernel/manifest.zod.ts:667and re-exported only bypackages/spec/src/kernel/index.ts:23.packages/spec/src/system/index.tshas zero occurrences of the name. Both files now read:import type, not a value import: the declaration isexport type ObjectStackManifest = ...(az.inputalias), so there is no runtime binding to move. No spec change — the type already ships from/kernel, so the dispatch's clause ② does not fire.Half 2 — the program, and the TS6059 measurement that chose its shape
Measured, not assumed (the prior seat's note, now a reading). Adding
objectstack.config.tstoincludewhile the emittingtsconfig.jsonkeepsrootDir: "./src":It fires in both packages, and it fires under
--noEmit— so thetypecheckscript's own flag does not sidestep it.Route (a) chosen: a sibling typecheck-only program per package.
rootDirwas NOT widened, so route (b)'s dist comparison does not apply — and there is a direct reading in its place:tsc --listFileson the build program (tsconfig.json) reports 0 occurrences ofobjectstack.config.tsin both packages, before and after. The emitting program is byte-for-byte the same set of files it was;tsupstill buildssrc/index.tsonly, andfilespublishesdist+ README + CHANGELOG, which the manifest was never part of.Each new
tsconfig.typecheck.jsonisextends: "./tsconfig.json"+noEmit: true+rootDir: "."+include: ["objectstack.config.ts"], named by the package'stypecheckscript. That is the repo's established shape for source outsidesrc/**, and its headers say why in the same words:packages/objectql/tsconfig.scripts.json,packages/plugins/plugin-auth/tsconfig.examples.json,packages/plugins/plugin-approvals/tsconfig.scripts.json. Strictness is inherited and nothing is relaxed.Proof the program actually reads the file (a green typecheck over an unread file is the defect being fixed, so the reading is not optional) —
tsc --listFiles -p tsconfig.typecheck.json:objectstack.config.tsspec/dist/kernel/index.d.tsresolveddriver-memoryplugin-hono-serverReverse verification — both directions, both packages
Run from the committed state, one mutation at a time, each mutation proved on disk by counting the injected and the removed text before tsc runs, each restore proved by
git diff HEADempty and agit hash-objectmatch against the HEAD blob, with an absolute-pathtrapon EXIT/INT/TERM.Direction 1 — re-author the old
/systemspelling. Expected red, and red:Direction 2 — author a retired manifest key (
capabilities, converted to aretiredKey()tombstone by the ADR-0049 retirements). Expected red against the tombstone, and red:The negative control is the base tree itself: on
origin/main@d62f990a, with the wrong/systemimport present in both files,pnpm --filter @objectstack/driver-memory typecheckandpnpm --filter @objectstack/plugin-hono-server typecheckboth exited 0. That is the blindness, measured here rather than inherited. The tsc half of theretiredKey()double channel now reaches both sites.No ablation
distpreflight is quoted because none applies: every leg above istscreading source directly through the new program, and no leg mutated a package whose build output another leg read.No unrelated errors surfaced
Widening a program is the risky half, and the triage was explicit that pre-existing errors here belong to #4311 rather than to this card. Nothing surfaced: both new programs are green on their first run, with zero errors to report, absorb or suppress. Both packages' full
typecheck(build program + new program),buildandtestare green —driver-memory38 files / 1025 tests,plugin-hono-server20 files / 225 tests,check-dts-emitted1/1 for each.Targeted in-flight re-check (triage condition 2), re-run at implementation time
24 open PRs. Each PR's changed-file list computed locally from its head branch against
merge-base(origin/main, head)and intersected with the six-file surface plus bothtsconfig.json:objectstack.config.ts, eithertsconfig.json, or anytsconfig.*.jsonin these packages.domain:clicards name either package, so the cross-lane designation holds by measurement.package.jsonfiles, all repo automation that touches every package manifest in the monorepo: chore(deps)(deps-dev): Bump the development-dependencies group across 1 directory with 15 updates #14065 and chore(deps)(deps): Bump the production-dependencies group across 1 directory with 17 updates #13956 (dependabot dependency-group bumps) and chore: version packages #11336 (changeset-release/main, 811 files). Their hunks on these two files aredevDependencies/dependencies/versiononly — not one line inscripts, which is the only region this PR edits. Recorded, not treated as the designation's stop: the stop exists to keep two cards off the same region, and no card is in flight on it.Changeset
skip-changeset, applied at PR open and read back.ObjectStackManifestis a type alias with no runtime binding, so half 1 moves no emitted byte; the two new tsconfig files and the twoscripts.typecheckstrings are dev-only; and neitherobjectstack.config.tsis in either package'sfileswhitelist or intsup's entry, so nothing a consumer can resolve changes. There is no version for anyone to adopt.Scope
Fenced to the six files the claim comment declared. One finding filed rather than absorbed, unassigned: #14386 —
check:type-check-coverage's source-layer observation returnsfalseatdepth === 0, so package-root source is invisible to the ratchet by construction (which is why this card's two files were green in two gates at once), and three more package-rootobjectstack.config.tsmanifest sites are outside every tsc program:plugin-auth,plugin-security,service-i18n. That also corrects the card's framing that these two were the only such sites in the repo — there are five.🤖 Generated with Claude Code
https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
Generated by Claude Code