Skip to content

Type-axis remediation worklist: 51 packages resolve a workspace dep's declarations through dist, per check:type-source-resolution's landing registry #8249

Description

@hotlong

Filed by the agent that landed check:type-source-resolution (PR #8248 for #8180), as that card's declared follow-up. Not worked here — the gate's scope was explicitly the finite audited list, not fixing entries.

What this tracks

KNOWN_DIST_RESOLVED_TYPE_IMPORTS in scripts/check-type-source-resolution.mjs is the measured state of the repo on the day the gate landed: 51 of 76 packages with a tsconfig.json, 222 package-dependency pairs, 25 clean. Each listed package's tsc program imports a workspace package whose declarations resolve under dist/, with no paths rule pointing at source — so every type verdict in it, including whatever typecheck reports, is currently a function of build state.

The registry is shrink-only and audited for set equality in both directions, so this list cannot grow behind anyone's back and an entry that stops being needed fails the gate and names itself for deletion. Remediating a package is therefore a self-closing change: add the rules, delete (or narrow) the entry, gate goes green.

Why one card per package, cut from here

Remediation is not free and it is not uniform, which is why it is per-package rather than one repo-wide diff. Putting a dependency's source into a consumer's program makes tsc check that source under the consumer'scompilerOptions. Measured on packages/qa/downstream-contract, the one package already remediated on this axis (#8021): 2 TS2591 (spec source needs types: ["node"]) and 247 TS6059 from a rootDir that emits nothing under noEmit and is still enforced. Both were config consequences, not spec bugs, and both had to be resolved in that package's own tsconfig.json.

So each package's error classes have to be measured on that package before its change can be scoped — which is the work of its own card, and why cutting 51 cards up front would produce 51 content-free duplicates of the table below. Cut a card when a package is picked up, carrying that package's measured error classes; #8104 is the runtime-axis precedent for the shape.

A repo-wide remediation diff is also the wrong shape for a second reason: it would collide with every in-flight lane in a shared merge queue.

The two rules, and the spelling that must never be used

"paths": {
"@objectstack/spec": ["../../spec/src/index.ts"],
"@objectstack/spec/*": ["../../spec/src/*/index.ts"]
}

Both rules are load-bearing and they fail independently — measured: with the subpath rule kept and only the bare-entry rule deleted, tsc stayed clean while src/stack.ts's defineStack types came from dist.

⛔ Never collapse them into @objectstack/spec* — star not preceded by a separator. That key matches the bare name, every namespace and every prefix-sharing sibling package, folding all of it onto one target. Unlike the Vite-side trap it does not crash: the target re-exports most of the surface, so the program type-checks against the wrong module and stays green. The gate refuses that spelling outright.

The list

packagedeps resolving through dist/count
@objectstack/dogfood@objectstack/cli, @objectstack/connector-mcp, @objectstack/connector-openapi, @objectstack/connector-rest, @objectstack/core, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/mcp, @objectstack/metadata, @objectstack/metadata-core, @objectstack/objectql, @objectstack/platform-objects, @objectstack/plugin-audit, @objectstack/plugin-auth, @objectstack/plugin-email, @objectstack/plugin-security, @objectstack/plugin-webhooks, @objectstack/service-analytics, @objectstack/service-messaging, @objectstack/service-storage, @objectstack/spec, @objectstack/types, @objectstack/verify23
@objectstack/example-showcase@objectstack/cloud-connection, @objectstack/connector-mcp, @objectstack/connector-openapi, @objectstack/connector-rest, @objectstack/connector-slack, @objectstack/core, @objectstack/driver-sql, @objectstack/formula, @objectstack/objectql, @objectstack/plugin-approvals, @objectstack/runtime, @objectstack/service-automation, @objectstack/service-datasource, @objectstack/service-messaging, @objectstack/spec15
@objectstack/runtime@objectstack/core, @objectstack/driver-sql, @objectstack/metadata, @objectstack/metadata-core, @objectstack/metadata-protocol, @objectstack/objectql, @objectstack/observability, @objectstack/plugin-auth, @objectstack/plugin-security, @objectstack/rest, @objectstack/service-cluster, @objectstack/service-datasource, @objectstack/spec, @objectstack/types14
@objectstack/verify@objectstack/objectql, @objectstack/platform-objects, @objectstack/plugin-auth, @objectstack/plugin-hono-server, @objectstack/plugin-security, @objectstack/plugin-sharing, @objectstack/rest, @objectstack/runtime, @objectstack/service-analytics, @objectstack/service-automation, @objectstack/service-datasource, @objectstack/service-settings, @objectstack/spec, @objectstack/types14
@objectstack/example-todo@objectstack/core, @objectstack/driver-sqlite-wasm, @objectstack/mcp, @objectstack/objectql, @objectstack/runtime, @objectstack/service-automation, @objectstack/spec, @objectstack/trigger-record-change8
@objectstack/rest@objectstack/core, @objectstack/metadata-core, @objectstack/objectql, @objectstack/observability, @objectstack/platform-objects, @objectstack/service-package, @objectstack/spec, @objectstack/types8
@objectstack/metadata-protocol@objectstack/core, @objectstack/formula, @objectstack/lint, @objectstack/metadata, @objectstack/metadata-core, @objectstack/spec, @objectstack/types7
@objectstack/objectql@objectstack/core, @objectstack/formula, @objectstack/metadata, @objectstack/metadata-core, @objectstack/metadata-protocol, @objectstack/spec, @objectstack/types7
@objectstack/plugin-email@objectstack/core, @objectstack/formula, @objectstack/objectql, @objectstack/platform-objects, @objectstack/service-queue, @objectstack/service-settings, @objectstack/spec7
@objectstack/plugin-sharing@objectstack/core, @objectstack/formula, @objectstack/metadata-core, @objectstack/objectql, @objectstack/platform-objects, @objectstack/spec, @objectstack/types7
@objectstack/metadata@objectstack/core, @objectstack/driver-sqlite-wasm, @objectstack/metadata-core, @objectstack/metadata-fs, @objectstack/spec, @objectstack/types6
@objectstack/driver-sql@objectstack/core, @objectstack/formula, @objectstack/observability, @objectstack/spec, @objectstack/types5
@objectstack/plugin-auth@objectstack/core, @objectstack/platform-objects, @objectstack/rest, @objectstack/spec, @objectstack/types5
@objectstack/plugin-reports@objectstack/core, @objectstack/driver-sql, @objectstack/objectql, @objectstack/platform-objects, @objectstack/spec5
@objectstack/plugin-security@objectstack/core, @objectstack/formula, @objectstack/metadata-core, @objectstack/platform-objects, @objectstack/spec5
@objectstack/driver-sqlite-wasm@objectstack/core, @objectstack/driver-sql, @objectstack/formula, @objectstack/spec4
@objectstack/driver-turso@objectstack/core, @objectstack/driver-sql, @objectstack/spec, @objectstack/verify4
@objectstack/mcp@objectstack/core, @objectstack/formula, @objectstack/spec, @objectstack/types4
@objectstack/plugin-approvals@objectstack/core, @objectstack/formula, @objectstack/spec, @objectstack/types4
@objectstack/plugin-hono-server@objectstack/core, @objectstack/observability, @objectstack/spec, @objectstack/types4
@objectstack/connector-slack@objectstack/core, @objectstack/service-automation, @objectstack/spec3
@objectstack/driver-memory@objectstack/core, @objectstack/spec, @objectstack/types3
@objectstack/driver-mongodb@objectstack/core, @objectstack/spec, @objectstack/types3
@objectstack/example-crm@objectstack/driver-sql, @objectstack/objectql, @objectstack/spec3
@objectstack/example-embed-objectql@objectstack/driver-memory, @objectstack/objectql, @objectstack/spec3
@objectstack/hono@objectstack/plugin-hono-server, @objectstack/runtime, @objectstack/types3
@objectstack/lint@objectstack/formula, @objectstack/sdui-parser, @objectstack/spec3
@objectstack/plugin-audit@objectstack/core, @objectstack/objectql, @objectstack/spec3
@objectstack/plugin-pinyin-search@objectstack/core, @objectstack/objectql, @objectstack/types3
@objectstack/service-sms@objectstack/core, @objectstack/plugin-auth, @objectstack/spec3
@objectstack/trigger-schedule@objectstack/core, @objectstack/service-automation, @objectstack/spec3
@objectstack/client@objectstack/core, @objectstack/spec2
@objectstack/client-react@objectstack/client, @objectstack/spec2
@objectstack/connector-mcp@objectstack/core, @objectstack/spec2
@objectstack/connector-openapi@objectstack/core, @objectstack/spec2
@objectstack/connector-rest@objectstack/core, @objectstack/spec2
@objectstack/core@objectstack/metadata-core, @objectstack/spec2
@objectstack/knowledge-memory@objectstack/core, @objectstack/spec2
@objectstack/knowledge-ragflow@objectstack/core, @objectstack/spec2
@objectstack/platform-objects@objectstack/metadata-core, @objectstack/spec2
@objectstack/setup@objectstack/platform-objects, @objectstack/spec2
@objectstack/studio@objectstack/platform-objects, @objectstack/spec2
@objectstack/trigger-api@objectstack/core, @objectstack/spec2
@objectstack/trigger-record-change@objectstack/core, @objectstack/spec2
@objectstack/account@objectstack/platform-objects1
@objectstack/embedder-openai@objectstack/spec1
@objectstack/formula@objectstack/spec1
@objectstack/http-conformance@objectstack/core1
@objectstack/metadata-core@objectstack/spec1
@objectstack/metadata-fs@objectstack/metadata-core1
@objectstack/types@objectstack/spec1

Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions