Found by the published-README export gate built for #9532 (piece 2). That card's rewrite half covers five service packages; these five findings sit outside it and are nobody's card yet.
Every one was hand-verified against the built .d.ts, and each is a claim a reader acts on in the first ten lines of the page.
| File | Line | Claim | Measured reality |
|---|
packages/drivers/driver-sql/README.md | 137 | import type { IDriver } from '@objectstack/spec' | IDriver is not on spec's root entry — it is exported from @objectstack/spec/contracts. Wrong subpath. |
packages/mcp/README.md | 395 | import { DriverSql } from '@objectstack/driver-sql' | The real export is SqlDriver. DriverSql has never existed — and the next line calls DriverSql.configure({...}) on it. |
packages/mcp/README.md | 40 | MCPServerPlugin.configure({...}) | MCPServerPluginis a real exported class (packages/mcp/src/plugin.ts:96), but it has no static configure. |
packages/objectql/README.md | 66 | SchemaRegistry.registerObject(taskDef, ...) | registerObject is an instance method (used everywhere as engine.registry.registerObject(...)). The README calls it on the class. |
packages/spec/README.md | 69 | import { MCPServerConfigSchema } from '@objectstack/spec/ai' | @objectstack/spec/ai exports MCPServerRefSchema. There is no MCPServerConfigSchema. |
All five packages are published with README.md in their files array and private unset, so these are the pages npm renders. The last one is the protocol package's own front page.
Why the two .configure rows are the interesting ones
MCPServerPlugin.configure and SchemaRegistry.registerObject are the shape the import half of a checker cannot see: the import line resolves fine, and only the call site is fabricated. They are also the shape a careless rewrite of #9532's five READMEs would leave behind — renaming the class to a real export makes the import green while .configure(...) stays invented. Measured directly: substituting the real AnalyticsServicePlugin into service-analytics' README turns the import finding into a AnalyticsServicePlugin.configure call-site finding, not into silence.
Disposition
Each of the five is recorded in scripts/published-readme-exports.baseline.json with the measured real symbol, so the fix is not a re-derivation. ⚠️ That baseline is reconciled in both directions: whoever fixes one of these must delete its entry in the same PR, or the gate fails on the stale entry.
Refs: #9532 (the gate, and the five service READMEs) · #9517 (the first instance) · PR #9531.
Found by the published-README export gate built for #9532 (piece 2). That card's rewrite half covers five service packages; these five findings sit outside it and are nobody's card yet.
Every one was hand-verified against the built
.d.ts, and each is a claim a reader acts on in the first ten lines of the page.packages/drivers/driver-sql/README.mdimport type { IDriver } from '@objectstack/spec'IDriveris not on spec's root entry — it is exported from@objectstack/spec/contracts. Wrong subpath.packages/mcp/README.mdimport { DriverSql } from '@objectstack/driver-sql'SqlDriver.DriverSqlhas never existed — and the next line callsDriverSql.configure({...})on it.packages/mcp/README.mdMCPServerPlugin.configure({...})MCPServerPluginis a real exported class (packages/mcp/src/plugin.ts:96), but it has no staticconfigure.packages/objectql/README.mdSchemaRegistry.registerObject(taskDef, ...)registerObjectis an instance method (used everywhere asengine.registry.registerObject(...)). The README calls it on the class.packages/spec/README.mdimport { MCPServerConfigSchema } from '@objectstack/spec/ai'@objectstack/spec/aiexportsMCPServerRefSchema. There is noMCPServerConfigSchema.All five packages are published with
README.mdin theirfilesarray andprivateunset, so these are the pages npm renders. The last one is the protocol package's own front page.Why the two
.configurerows are the interesting onesMCPServerPlugin.configureandSchemaRegistry.registerObjectare the shape the import half of a checker cannot see: the import line resolves fine, and only the call site is fabricated. They are also the shape a careless rewrite of #9532's five READMEs would leave behind — renaming the class to a real export makes the import green while.configure(...)stays invented. Measured directly: substituting the realAnalyticsServicePlugininto service-analytics' README turns the import finding into aAnalyticsServicePlugin.configurecall-site finding, not into silence.Disposition
Each of the five is recorded in⚠️ That baseline is reconciled in both directions: whoever fixes one of these must delete its entry in the same PR, or the gate fails on the stale entry.
scripts/published-readme-exports.baseline.jsonwith the measured real symbol, so the fix is not a re-derivation.Refs: #9532 (the gate, and the five service READMEs) · #9517 (the first instance) · PR #9531.