Skip to content

Commit 463d8d0

Browse files
committed
docs(types): point the spec-side any pin at its upstream issue
The three symbols the ledger cannot burn down — NavigationItem, JoinNode, FormField — are blocked on the spec exporting them as `any`. Filed as objectstack#4171 (4 of the spec's 2240 exported types), so the inverted pin and the burn-down instructions name where the fix lives instead of just saying "upstream". Comments only; no behaviour change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvv6qysks2dRLaGfpTdgEy
1 parent 13ac15d commit 463d8d0

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

packages/types/src/__tests__/spec-derived-unions.test.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,13 @@ const _windowFunctionCovers = null as unknown as SpecWindow satisfies WindowFunc
149149
*
150150
* `NavigationItem`, `JoinNode` and `FormField` collide with a spec export whose
151151
* own declaration resolves to `any` (the spec annotates the recursive schemas
152-
* behind them as `z.ZodType<any>`). Binding objectui's local interface to the
153-
* spec would replace a precise, documented shape with `any` — a type-safety
154-
* regression wearing a burn-down's clothes. So they stay in the ledger with
155-
* their local declarations intact, which is the right answer for as long as the
156-
* spec cannot describe them.
152+
* behind them as `z.ZodType<any>`, and `z.infer` of that is `any`). Binding
153+
* objectui's local interface to the spec would replace a precise, documented
154+
* shape with `any` — a type-safety regression wearing a burn-down's clothes. So
155+
* they stay in the ledger with their local declarations intact, which is the
156+
* right answer for as long as the spec cannot describe them.
157+
*
158+
* Filed upstream as objectstack#4171 (4 of the spec's 2240 exported types).
157159
*
158160
* Mutual assignability CANNOT distinguish this case on its own: `any` answers
159161
* every `extends` question affirmatively, so a naive probe reports these three

scripts/check-spec-symbol-derivation.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ const ALLOW = {
113113
// 2. The SPEC export resolves to `any` (`NavigationItem`, `JoinNode`,
114114
// `FormField`). Re-exporting these REPLACES a precise local interface with
115115
// `any` — a type-safety regression wearing a burn-down's clothes. These
116-
// cannot be burned down here at all; the fix belongs upstream in the spec.
116+
// cannot be burned down here at all; the fix belongs upstream in the spec,
117+
// filed as objectstack#4171. `spec-derived-unions.test.ts` carries an
118+
// inverted pin that fails the day the spec types one of them properly.
117119
// Detect: the same `0 extends (1 & Spec)` probe.
118120
// 3. The local declaration carries `[key: string]: any` (`FormField`,
119121
// `AppSchema`, `PageSchema`, `ThemeSchema`, …) — the objectstack#4075

0 commit comments

Comments
 (0)