Repository navigation
test(types): state spec 18's optional select-option kind as a deliberate widening in the tier-1 convergence pins - #12735
Merged
objectstack-fleet[bot] merged 2 commits intoOct 16, 2026
Conversation
…ate widening in the tier-1 convergence pins The faces derive the spec's keys by reference, so spec 18's optional SelectOptionSchema.kind (objectstack#23846) arrived on both. The four set -difference pins now name it through a key read off the spec's own type, so they hold against the installed spec and objectstack main's alike; PRE_CONVERGENCE_* is untouched and kind is not Omitted from either face. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXsEfmHv5KzaBT66eSH7dZ
…ing nothing Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXsEfmHv5KzaBT66eSH7dZ
This was referenced Oct 16, 2026
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
Author
席位核对 · ACCEPT ·
|
objectstack-fleet
Bot
deleted the
claude/issue-12711-select-option-kind
branch
October 16, 2026 17:06
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #12711
Clause-②: no
What
@objectstack/spec18 adds an optionalkind('open' | 'won' | 'lost') toSelectOptionSchema(objectstack#23846). Both objectui select-option faces derive the spec's keys by reference, so both now carry it. That turned four tier-1 convergence pins inselect-option-tier1-convergence-7014.test.tsfalse (TS2344) against objectstackmain's spec, which is the next red row of the hourly Spec Shape Gate.The pins now state
kindas a deliberate optional widening:SpecKindKeyis the Extract of'kind'from the keys of the spec's ownSelectOptiontype. It is'kind'where the spec declares it andneverwhere it does not, read off the spec's type rather than a version check. So the pins hold against both the installed18.0.0-next.2(nokind; this repo's Type Check uses it) and objectstackmain's spec (the Spec Shape Gate uses it).'description' | SpecKindKey, and the object-metadata face exactly'default' | SpecKindKey. The kept-every-member pins drop the same keys before comparing against the historical records. The two set-difference pins are renamed…GainedOnlyDescriptionAndKindand…GainedOnlyDefaultAndKind.kindis optional on both faces, and it is the spec's own member by reference.kindonly when the spec shape has it. A new test asserts thatkindis either an optional spec key (absent stays absent, and an undeclared category is refused) or refused by name (unrecognized_keys). Any other new spec key still breaks the comparison.rejectsUndeclaredKeyOnFormFace/acceptsEveryDeclaredKeyOnFormFacewere re-read.weightis still refused withkindon the face. The accepting literals don't writekind, because on the installed spec it would be an excess property; the docblock says so, and the optional pins cover acceptance.Not done, per the card: no
as any, thePRE_CONVERGENCE_*records are byte-unchanged, andkindis not Omitted from either face. The test docblock explains why the form face keepskindeven though the spec's form-view options leave it out (the open question in the report).Changeset: one empty-frontmatter changeset.
check-changeset-presencehas no carve-out forsrc/__tests__/and was red without one.Evidence
The main line is objectstack main
2054a0888c, withpackages/specbuilt, packed and injected byspec-shape-gate.mjs inject(the gate's own recipe). The installed line is18.0.0-next.2.tsc -p tsconfig.test.jsonweightdescriptionkindmade required on the form faceEvery ablation was restored by
git checkout HEAD --. Each time, the restored blob equalled HEAD blob 3b00710 andgit diff HEADwas empty. The install was restored andpnpm-lock.yamlis unchanged (sha256 check OK).Local gates on the installed line (the test bytes are identical to head e6b6093):
pnpm --filter @object-ui/types type-check0;packages/types/src/__tests__0 (384 files, 10357 tests);check:changeset-claims0,changeset:check0,check:test-path-roots0,check:spec-symbols0;check-changeset-presence0 at e6b6093.NOT MEASURED: on the main line, which branch the new runtime
kindtest took. The type-side probe proves the main spec type declareskind.Acceptance notes
kind: the spec's FormSelectOptionSchema leaves out bothkindanddefault. objectui's form face has carrieddefaultsince before the convergence, and its zod twin spreads the same spec shape. Whether to narrow the face is a separate face change, reported as an open question and not built here.kind(Targets 2–4 of objectstack#23809).Provenance: built by the cloud session
session_01EXsEfmHv5KzaBT66eSH7dZ(claim6219215288) and opened by thedomain:uiseat 1 PM (session_011K9g23W67dy2zwnyzaoB6o) from that session's final message, because a cloud session cannot open a PR from its container. The seat replaced the dev's own footer line with this line.Generated by Claude Code