Repository navigation
feat(types)!: retire the eight Phase 3.5 validation types (objectui#10719) - #10759
objectstack-fleet[bot] merged 6 commits into
Conversation
…0719) AdvancedValidationSchema, AdvancedValidationRule, ValidationRuleType, ValidationFunction, AsyncValidationFunction, ValidationContext, AdvancedValidationResult and AdvancedValidationError leave data-protocol.ts and the @object-ui/types root barrel, with the "Phase 3.5 ... Complete Validation Engine" banner and docblocks. They typed only @object-ui/core's ValidationEngine, retired by objectui#7659; nothing reads them now. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW
…time and source (objectui#10719) Sixteen @ts-expect-error probes (the eight names through the root barrel and through data-protocol) with lit controls, plus a source read of both files. The objectui#7659 Object.keys leg is absent on purpose: the eight were export type, so it reads the same before and after. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW
…s for the Phase 3.5 retirement (objectui#10719) A minor changeset with a BREAKING banner for @object-ui/types. The four pending changesets that name the retired types get a dated in-body note, on the objectui#8522 -> objectui#7742 precedent. plugin-form.mdx stops listing AdvancedValidationRule and ValidationRuleType as near-spellings. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW
…s own tree scan forbids (objectui#10719) Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW
|
changeset-claim-re-read
|
✅ 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
|
Contract reviewServed-tier: ① Derived judgmentsPublic-surface changes, enumerated (three, nothing more).
Readers, re-measured.
Loud for a TS consumer. Yes. A named import of any of the eight from The pin: can it fail? Yes, on both legs.
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
…vate regex pair (objectui#10719) check-hand-rolled-comment-mask named this pin's reexported() as a private comment projection outside DEBT. The export-list reader now strips comments with the shared scripts/js-comment-mask.mjs stripComments (it reports a set of names, never a line or an offset), imported the way the sibling pins in packages/types/src/__tests__ import it. No DEBT entry; the assertions and their lit controls are unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW
…lidation-types Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW
✅ 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
|
|
Contract review ABSENT at the new head
Generated by Claude Code |
Contract reviewServed-tier: ① Derived judgmentsScope of this record: the hop
② Semver levelUnchanged from 5853372594: ③ Boundary flags
Implemented-by: VERDICT: PASS Rendered at tier by the director seat (summon #30 续) on the fetched head, adopting 5853372594 for the unchanged increment. Not a governed path; the landing pre-checks are met on this head (fresh PASS, CI green, no conflict), so Generated by Claude Code |
Fixes #10719
Clause-②: yes — eight public type exports of
@object-ui/typesare removedWhat this is
This PR executes the ruling that objectui#10719 inherits: maintainer ruling A on objectui#7659 (comment 5548579814, decision batch #40 item 4, ADR-0049 enforce-or-remove), carried to the type half of the same vocabulary by triage comment 5851687727.
AdvancedValidationSchema,AdvancedValidationRule,ValidationRuleType,ValidationFunction,AsyncValidationFunction,ValidationContext,AdvancedValidationResultandAdvancedValidationErrortyped only@object-ui/core'sValidationEngine, which PR objectui#10709 retired. They leavedata-protocol.tsand the package root, and the "Phase 3.5 … Complete Validation Engine" banner and their docblocks go with them.minor, per this repository's version-alignment convention.Stop condition: measured, not triggered
The ruling stops this change if any of the eight has a live reader. None was found.
packagesappsexamplescontentskills, BASE01700dcd7git grep -c -wper name, CHANGELOGs excludedpackages/types/src/data-protocol.ts,packages/types/src/index.ts, or theplugin-form.mdxnear-spelling list (a doc, which moves with the retirement). The lit controlFieldValidationRulesanswers in 12 files.git grep -wof all eight, outside the two home filesplugin-form.mdx, and twoscripts/__tests__files. In those two, the names are string fixtures and comments, not type readers.origin/maine2c4e12git grep -wof all eight@object-ui/types..d.tsof the BASE builddist/index.d.tsanddist/data-protocol.d.tsname any of them. The family's only references are to each other.packages/types/package.jsonexportsdata-protocolis not a subpath; the root.is the only door.Changes
packages/types/src/data-protocol.ts//retirement note in their place. Declaration emit strips the note: 0 hits in the rebuiltdist/data-protocol.d.ts. The module header'sValidationSchemanow readsobject-level validation rules, because that header ships in the.d.ts.packages/types/src/index.tspackages/types/src/__tests__/phase35-validation-types-retired-10719.test.ts.changeset/10719-retire-phase35-validation-types.md'@object-ui/types': minor, a BREAKING banner, the replacement, and the NOT MEASURED line for out-of-repo consumers..changeset/9909-machine-locale-sweep.md,.changeset/7659-retire-validation-engine.md,.changeset/6349-types-internal-name-collisions-batch-2.md,.changeset/7357-retire-field-metadata-depends-on.mdcontent/docs/plugins/plugin-form.mdxAdvancedValidationRuleandValidationRuleType. The pinned sentence "There is noValidationRuletype in this repository" stays.The pin, and where it departs from the objectui#7659 shape
@ts-expect-errorprobes: each of the eight, once throughimport('../index.js')and once throughimport('../data-protocol.js'). Three lit controls resolve through the same spellings with no directive. The file is compiled bytsconfig.test.jsonundertype-check;tsc -p tsconfig.test.json --listFilesconfirms it is in the program.noUnusedLocalsis off, so each directive's only possible diagnostic is the missing export.data-protocol.tsandindex.tsare read as text, through a declaration matcher and an export-list parser that strips comments first. Both carry lit controls:ObjectValidationRule,FilterFieldConfigandFieldValidationRules.Object.keys(entry). All eight wereexport type. On the BASE build, where the names were still exported, the runtime namespace of@object-ui/typescarried none of them, whiledist/index.d.tsanddist/data-protocol.d.tsstill did. That leg reads the same before and after, so it cannot fail. The runtime half is therefore a source read, following the objectui#8800 and objectui#7519 pins in the same directory.Reverse verification. The pin was committed at
cf364fe91, then both source files were restored from BASE01700dcd7with the pin kept:tsc -p tsconfig.test.json: exit 2, exactly 16 × TS2578 "Unused '@ts-expect-error' directive", 0 other errors.vitest runof the pin: exit 1, 2 of 2 failed, with "data-protocol.ts declares a retired Phase 3.5 validation type again." and "@object-ui/types re-exports a retired Phase 3.5 validation type again (objectui#10719)."git checkout HEAD -- PATHSin a trap. Both files' blob hashes equal the HEAD blobs, andgit diff HEADis 0 bytes.Gates, final head
c68bc62abExit codes are captured before any pipe. Heavy runs went through the shared verify lock.
pnpm --filter '@object-ui/core^...' build(the closure is@object-ui/types): exit 0. The rebuiltdist/index.d.tsanddist/data-protocol.d.tscarry 0 of the eight.pnpm --filter @object-ui/types type-check: exit 0.pnpm --filter @object-ui/core type-check: exit 0.pnpm exec vitest run packages/types/: exit 0, 243 of 243 files, 5288 tests.pnpm exec vitest run packages/core/: exit 0, 173 of 173 files, 3504 tests.pnpm exec vitest runover the 54scripts/__tests__files that readcontent/docs,.changeset/or the types exports (derived bygit grep -l): exit 0, 54 of 54 files, 2589 tests.node scripts/check-changeset-presence.mjs0 ·check-changeset-no-major.mjs0 ·check-changeset-overwrite.mjs0 (report-only) ·check-changeset-fixed.mjs0 ·pnpm check:changeset-claims0 (report-only) ·check:pending-changeset-literals0 ·check:new-line-citations0 ("0 new citation(s)") ·check:control-bytes0 ·check:spec-symbols0 ·check:test-path-roots0 ·type-check:coverage0 ·check:doc-types0 ·check-doc-links.mjs0 ·check:doc-fences0 ·check:doc-example-ids0.node scripts/check-governed-queue-guard.mjs --teston all nine paths: exit 0, "NOT GOVERNED".Consumer direction.
@object-ui/coreis a downstream consumer of@object-ui/typesand read the family before objectui#7659; its reading is green above. No other package imports any of the eight (see the census above), so the downstream sweep is that tree-scoped absence census, not a rebuilt consumer closure.ESLint, narrowed to the three touched
.tsfiles. The population comes from ESLint's own config:--print-configresolves for all three. The file count comes from--format json: 3 files. On invariance,eslint.config.jsenables no type-aware linting (noproject,projectServiceorTypeChecked), so the diff cannot move a verdict in any untouched file. In CI shape (inline config honoured): exit 0, with 0 errors and 36 warnings, all pre-existingno-explicit-anyindata-protocol.ts. Under--no-inline-config: exit 1, on one error inindex.ts. That error is the deliberateeslint-disable no-restricted-importsblock around theSpecFormFieldalias. The BASE bytes of the same path give the same error (the control), so it predates this change.Not run locally, with reason:
@objectstack/spec), and the spec-derived object-level rule types beside them are byte-unchanged. CI runs it.pnpm check:readme-exports. It needs every package built, andpackages/types/README.mdnames none of the eight (see the census), so no README-named export can go missing. CI runs it.scripts/__tests__suite,pnpm lintandpnpm check. These are CI-owned.Acceptance notes
check-changeset-claims(report-only) asked for a re-read of three pending paragraphs that name a touched file:6051-gantt-flat-config-declared-keys.md(theGanttConfigexports),6237-wizard-step-config-split.md(the tabbed-form support row) anduniqueness-deprecation-jsdoc-4765.md(the JSDoc onUniquenessValidation). Each is about a member this diff does not touch, and each stays true. The 4765 body'sdist/data-protocol.d.tsbyte figures describe that change's own delta; they are historical and are not re-addressed.check-changeset-overwrite(report-only) lists the four dated notes as modifications of pre-existing changesets. They are its case 2: prose-only, with every declared package name kept.scripts/__tests__/check-doc-component-types.test.tskeeps'export interface AdvancedValidationRule {}'and"export type ValidationRuleType = 'required';"as negative fixtures for its bare-ValidationRulematcher. The comment above them says every negative "is a spelling this repository really writes, cited where it lives", and they carry trailing cross-file line addresses intodata-protocol.ts. After this change neither spelling is written anywhere, and the addresses point at deleted lines. The test stays green, because the fixtures are strings and remain valid negatives. The file is outside this claim's file surface, so it is not edited here. Carrier: none named.scripts/__tests__/one-authority-per-exported-name-6273.test.tsmentions data-protocol'sValidationFunctionin a past-tense note ("sat here"). It is still true as history and is untouched.packages/types/src/index.ts, at theApp*exports (a different region). Whichever of the two lands second mergesmain.packages/core/src/validation/index.tsstill opens with "Phase 3.5: Validation module". That is core's live module (relabelled by objectui#10709), not this family, and it is untouched.Dev run for seat
domain:spec#1, sessionhttps://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW.Generated by Claude Code