Repository navigation
Commit bbc9dc3
feat(types): name InputShorthandSchema and UiCalendarSchema on the root barrel (objectui#9406) (#9525)
Fixes #9406
Implements decision batch #133 item 2, letter (a) (maintainer
2026-09-14, recorded on the card). Nothing here is a judgement call of
this branch's: the ruling names the file, the act, the bump level and
the pin.
## The exact published delta
Two names join **one** list: the root barrel
`packages/types/src/index.ts`, on its existing `export type { ... } from
'./form.js';` clause, from the module `packages/types/src/form.ts`.
| name | declared in | was on `@object-ui/types/form` | was on
`@object-ui/types/zod` | root `@object-ui/types` |
|---|---|---|---|---|
| `InputShorthandSchema` | `form.ts` | yes | yes (objectui#9067 / PR
#9405) | **added here** |
| `UiCalendarSchema` | `form.ts` | yes | yes (objectui#9067 / PR #9405)
| **added here** |
**No other export moves.** Measured on the published artifact rather
than asserted: `packages/types` was built at the branch point and at
this head, and `dist/index.d.ts` differs by exactly one line, which
differs by exactly these two names inserted between `CalendarSchema,`
and `FieldValidationRules,`. Nothing else in that file changed, in
either direction.
The dispatch cautioned that this package's emit is not byte-reproducible
(measured on PR objectui#9517), so the comparison carries a
**same-source control**: two consecutive clean builds of byte-identical
source, compared before any normalisation. For `dist/index.d.ts` on this
tree they came back **byte-identical** (raw differing lines 0, sorted
differing lines 0), so the delta above is a reading and not emit noise.
Reported as measured: the instability that card saw on another emitted
file did not appear on this one, which the control establishes rather
than assumes.
The source diff is **one additive hunk**, 16 insertions and 0 deletions
on `index.ts` — two names and the comment that says why they are there.
The comment does not reach the published artifact (the emitted clause is
one comma-joined line), so the published surface change is exactly the
two names.
## Why it mattered more than a missing name
From the root entry point the compiler did not merely fail, it
**suggested a different component**. Reproduced live on this branch by
removing the two lines again and running the package's own `tsc -p
tsconfig.test.json`:
```
error TS2724: '"../index"' has no exported member named 'InputShorthandSchema'. Did you mean 'InputOTPSchema'?
error TS2724: '"../index"' has no exported member named 'UiCalendarSchema'. Did you mean 'CalendarSchema'?
```
`ui:calendar` and `calendar` resolve to different renderers, and
`InputOTPSchema` is not an input at all. An author who accepts the
suggestion writes an import that compiles and means something else.
## The pin derives the gap; it does not assert a pair
`packages/types/src/__tests__/form-barrel-mirror-9406.test.ts`. On every
run it reads `form.ts`'s own export list and the root barrel's
`./form.js` re-export list, and the verdict is the **set difference** —
so the declaration that lands in `form.ts` next month and is forgotten
fails it. A pin asserting "these two names are present" would have
passed that day, which is this class reopening a third time.
- Names deliberately left off carry a **ledger row with the reason**
(`ABSENT_BY_DECISION`), names nobody has ruled on carry one saying so
(`ABSENT_PENDING_DECISION`) — the two-ledger shape
`arm-named-export-8784.test.ts` settled for the zod barrel.
- **Rows cannot rot:** a row whose name `form.ts` no longer declares, or
which has since reached the barrel, fails the file and asks to be
deleted.
- Both populations carry controls, so a dark instrument fails instead of
passing: exactly one `./form.js` clause, the barrel list is a subset of
what the module declares, the four names the card measured all read
non-zero, and a star re-export from either module under the pin fails
rather than silently shortening the denominator.
- `SemanticElementSchema` / `HtmlElementSchema` are recorded as the
ruling asked, with the reason and the ruling that made them so
(objectui#9067, decision batch #121 item 5), and **checked** — they are
declared in `layout.ts`, not `form.ts`, so they sit outside this pin's
population by construction, and the block fails the day either reaches
the root barrel. They are not added here.
## One finding, ledgered and reported rather than repaired
Running the derived pin over this list surfaced two more names in the
same state: **`CommandItem` and `CommandGroup`** (the element types of
`CommandSchema.groups` and of its `items`), reachable only through the
`/form` subpath while `CommandSchema` sits on the root list. That is
objectui#7697's shape exactly. The ruling authorises exactly two names
and says "additive, no other line moves", so they are ledgered as
**undecided** with the reason and handed to the dispatching seat for
their own card. This PR does not move them.
1 parent 5b673b8 commit bbc9dc3
3 files changed
Lines changed: 459 additions & 0 deletions
File tree
- .changeset
- packages/types/src
- __tests__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
0 commit comments