Repository navigation
Type-axis remediation worklist: 51 packages resolve a workspace dep's declarations through dist, per check:type-source-resolution's landing registry #8249
Description
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's compilerOptions. 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
| package | deps 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/verify |
23 |
@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/spec |
15 |
@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/types |
14 |
@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/types |
14 |
@objectstack/example-todo |
@objectstack/core, @objectstack/driver-sqlite-wasm, @objectstack/mcp, @objectstack/objectql, @objectstack/runtime, @objectstack/service-automation, @objectstack/spec, @objectstack/trigger-record-change |
8 |
@objectstack/rest |
@objectstack/core, @objectstack/metadata-core, @objectstack/objectql, @objectstack/observability, @objectstack/platform-objects, @objectstack/service-package, @objectstack/spec, @objectstack/types |
8 |
@objectstack/metadata-protocol |
@objectstack/core, @objectstack/formula, @objectstack/lint, @objectstack/metadata, @objectstack/metadata-core, @objectstack/spec, @objectstack/types |
7 |
@objectstack/objectql |
@objectstack/core, @objectstack/formula, @objectstack/metadata, @objectstack/metadata-core, @objectstack/metadata-protocol, @objectstack/spec, @objectstack/types |
7 |
@objectstack/plugin-email |
@objectstack/core, @objectstack/formula, @objectstack/objectql, @objectstack/platform-objects, @objectstack/service-queue, @objectstack/service-settings, @objectstack/spec |
7 |
@objectstack/plugin-sharing |
@objectstack/core, @objectstack/formula, @objectstack/metadata-core, @objectstack/objectql, @objectstack/platform-objects, @objectstack/spec, @objectstack/types |
7 |
@objectstack/metadata |
@objectstack/core, @objectstack/driver-sqlite-wasm, @objectstack/metadata-core, @objectstack/metadata-fs, @objectstack/spec, @objectstack/types |
6 |
@objectstack/driver-sql |
@objectstack/core, @objectstack/formula, @objectstack/observability, @objectstack/spec, @objectstack/types |
5 |
@objectstack/plugin-auth |
@objectstack/core, @objectstack/platform-objects, @objectstack/rest, @objectstack/spec, @objectstack/types |
5 |
@objectstack/plugin-reports |
@objectstack/core, @objectstack/driver-sql, @objectstack/objectql, @objectstack/platform-objects, @objectstack/spec |
5 |
@objectstack/plugin-security |
@objectstack/core, @objectstack/formula, @objectstack/metadata-core, @objectstack/platform-objects, @objectstack/spec |
5 |
@objectstack/driver-sqlite-wasm |
@objectstack/core, @objectstack/driver-sql, @objectstack/formula, @objectstack/spec |
4 |
@objectstack/driver-turso |
@objectstack/core, @objectstack/driver-sql, @objectstack/spec, @objectstack/verify |
4 |
@objectstack/mcp |
@objectstack/core, @objectstack/formula, @objectstack/spec, @objectstack/types |
4 |
@objectstack/plugin-approvals |
@objectstack/core, @objectstack/formula, @objectstack/spec, @objectstack/types |
4 |
@objectstack/plugin-hono-server |
@objectstack/core, @objectstack/observability, @objectstack/spec, @objectstack/types |
4 |
@objectstack/connector-slack |
@objectstack/core, @objectstack/service-automation, @objectstack/spec |
3 |
@objectstack/driver-memory |
@objectstack/core, @objectstack/spec, @objectstack/types |
3 |
@objectstack/driver-mongodb |
@objectstack/core, @objectstack/spec, @objectstack/types |
3 |
@objectstack/example-crm |
@objectstack/driver-sql, @objectstack/objectql, @objectstack/spec |
3 |
@objectstack/example-embed-objectql |
@objectstack/driver-memory, @objectstack/objectql, @objectstack/spec |
3 |
@objectstack/hono |
@objectstack/plugin-hono-server, @objectstack/runtime, @objectstack/types |
3 |
@objectstack/lint |
@objectstack/formula, @objectstack/sdui-parser, @objectstack/spec |
3 |
@objectstack/plugin-audit |
@objectstack/core, @objectstack/objectql, @objectstack/spec |
3 |
@objectstack/plugin-pinyin-search |
@objectstack/core, @objectstack/objectql, @objectstack/types |
3 |
@objectstack/service-sms |
@objectstack/core, @objectstack/plugin-auth, @objectstack/spec |
3 |
@objectstack/trigger-schedule |
@objectstack/core, @objectstack/service-automation, @objectstack/spec |
3 |
@objectstack/client |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/client-react |
@objectstack/client, @objectstack/spec |
2 |
@objectstack/connector-mcp |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/connector-openapi |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/connector-rest |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/core |
@objectstack/metadata-core, @objectstack/spec |
2 |
@objectstack/knowledge-memory |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/knowledge-ragflow |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/platform-objects |
@objectstack/metadata-core, @objectstack/spec |
2 |
@objectstack/setup |
@objectstack/platform-objects, @objectstack/spec |
2 |
@objectstack/studio |
@objectstack/platform-objects, @objectstack/spec |
2 |
@objectstack/trigger-api |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/trigger-record-change |
@objectstack/core, @objectstack/spec |
2 |
@objectstack/account |
@objectstack/platform-objects |
1 |
@objectstack/embedder-openai |
@objectstack/spec |
1 |
@objectstack/formula |
@objectstack/spec |
1 |
@objectstack/http-conformance |
@objectstack/core |
1 |
@objectstack/metadata-core |
@objectstack/spec |
1 |
@objectstack/metadata-fs |
@objectstack/metadata-core |
1 |
@objectstack/types |
@objectstack/spec |
1 |
Generated by Claude Code
Activity
hotlong commentedon Aug 12, 2026
Triage: labeled
tracking+domain:devx, type Task — 本评论来自分诊座位 Routine.Rationale: this is a coordination node, not a dispatchable card. The card itself says remediation is per-package and each package's error classes must be measured before its change can be scoped — so the dispatchable unit is the per-package card cut at pickup (with
#8104as the shape precedent), not this worklist. That matches the existing type-axis tracker #7849 exactly (tracking+domain:devx, coordination only, never dispatched). The gate script lives inscripts/(devx lane); per-package remediation cards, when cut, land in the lane that owns the package being remediated, carrying that package's measured error classes.Dedup checked: #8180 is the (delivered) gate card, #4311 tracks the separate typecheck-coverage axis, #7849 the vitest-config axis — no duplicate of this worklist.
Generated by Claude Code
fix(cli): the published entry resolves its commands from dist/, whate…