T-PAUA-eopt-lands-in-the-shared-base
State: closed/done · Impact: high · Complexity: small
Once no package on the bar reports an error under the flag, it moves into
presets/base.json and the local declarations disappear. That closes the last
gap between the shared bar and the root tsconfig.json, which has had the flag
on all along — and it means a new package inherits it instead of choosing.
| Location | Role today |
|---|---|
packages/ts/tsconfig/presets/base.json | Documents the flag as the deliberate remaining gap, with the measured per-package cost and the instruction to re-measure rather than quote |
packages/ts/agent-plugin/tsconfig.json | Declares the flag locally — ahead of the bar |
packages/ts/dashboard-client/tsconfig.json | Declares it locally |
packages/ts/flowline/tsconfig.json | Declares it locally |
tsconfig.json | The substrate config; has the flag, and its distance from the preset is the visible measure of the remaining gap |
Proposed
Section titled “Proposed”presets/base.json sets exactOptionalPropertyTypes: true. Every local
declaration is deleted — the three that were ahead of the bar, plus the nine
added by T-77KU-eopt-clear-the-cheap-six and
T-8O1A-eopt-clear-obsidian-and-agent-call. The root tsconfig.json drops
its own copy, inheriting it like everything else.
The ratchet paragraph in base.json is replaced by a line recording that the
flag was taken, so the next reader does not go looking for a gap that closed.
Approach
Section titled “Approach”- Confirm the precondition: add the flag to
presets/base.jsonand check the full graph reports zero errors. If any package still fails, it belongs to one of the two clearing tasks, not here. - Set it in
presets/base.jsonand delete every local declaration. - Delete it from the root
tsconfig.jsontoo, and shorten the comment there — the “how far ahead of the bar the substrate is” note gets smaller. - Rewrite the ratchet paragraph in
base.json: what it cost, when it was taken, and that the gap it described is closed. - Verify with
tsc --showConfigthat the resolved config of every consumer is unchanged except for gaining the flag.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
packages/ts/tsconfig/presets/base.json | modify | set the flag; replace the ratchet note |
tsconfig.json | modify | drop the now-inherited flag |
12 package tsconfig.json | modify | drop the local declaration: the three that were ahead of the bar (agent-plugin, dashboard-client, flowline) plus the nine added by the two clearing tasks (agent-call, json-canvas-core, json-canvas-vue, node-tree, obsidian-bases, obsidian-editor, obsidian-md, panes, vault-contracts) |
packages/ts/json-canvas-core/src/model/executor.test.ts | modify | two casts, so the package’s own check passes — see below |
Four of the twelve carried the flag as their only compilerOptions entry, so
the block goes with it: agent-plugin, node-tree, obsidian-bases, panes
are left as an extends and an include.
Acceptance criteria
Section titled “Acceptance criteria”- AC-1:
presets/base.jsonsets the flag and notsconfig.jsonin the repo declares it locally. - AC-2:
moon run :checkis green across the affected graph. - AC-3:
tsc --showConfigfor every consumer differs from before only by the flag. - AC-4: The ratchet paragraph no longer describes an open gap.
Out of scope
Section titled “Out of scope”- The ~23 configs not on the shared bar; they adopt the bar separately and will inherit the flag when they do.
Found on the way
Section titled “Found on the way”json-canvas-core:check was already failing on main before this task started.
#1740 added two tests constructing
{ text: undefined } and { color: undefined } while the package had the flag
set locally. Both deliberately exercise the untyped-caller path, so they take
the as unknown as UpdateNodeOperation cast the sibling test in the same file
already uses, with the same reason. Fixed here rather than filed: the flag
becoming repo-wide is what would otherwise carry a red check into every
package.
Dependencies
Section titled “Dependencies”Discovery context
Section titled “Discovery context”The closing move of the ratchet raised in review on #1644.
Depends on
Section titled “Depends on”T-77KU-eopt-clear-the-cheap-six, T-8O1A-eopt-clear-obsidian-and-agent-call