Skip to content

feat(types)!: retire the eight Phase 3.5 validation types (objectui#10719) - #10759

Merged
objectstack-fleet[bot] merged 6 commits into
mainfrom
claude/issue-10719-retire-phase35-validation-types
Sep 27, 2026
Merged

objectstack-fleet[bot] merged 6 commits into
mainfrom
claude/issue-10719-retire-phase35-validation-types

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #10719
Clause-②: yes — eight public type exports of @object-ui/types are removed

What 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, AdvancedValidationResult and AdvancedValidationError typed only @object-ui/core's ValidationEngine, which PR objectui#10709 retired. They leave data-protocol.ts and the package root, and the "Phase 3.5 … Complete Validation Engine" banner and their docblocks go with them.

⚠️ This is a breaking narrowing of a published package's exports. It is scored 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.

where instrument reading
objectui packages apps examples content skills, BASE 01700dcd7 git grep -c -w per name, CHANGELOGs excluded Every hit is in packages/types/src/data-protocol.ts, packages/types/src/index.ts, or the plugin-form.mdx near-spelling list (a doc, which moves with the retirement). The lit control FieldValidationRules answers in 12 files.
objectui whole tracked tree git grep -w of all eight, outside the two home files Hits only in the four pending changesets, plugin-form.mdx, and two scripts/__tests__ files. In those two, the names are string fixtures and comments, not type readers.
objectstack origin/main e2c4e12 git grep -w of all eight 0 files. Lit control: 37 files name @object-ui/types.
type reachability the emitted .d.ts of the BASE build Only dist/index.d.ts and dist/data-protocol.d.ts name any of them. The family's only references are to each other.
subpath doors packages/types/package.json exports data-protocol is not a subpath; the root . is the only door.
out-of-repo consumers none NOT MEASURED: no consumer is named. Ruling A was taken with the same limit.

Changes

file change
packages/types/src/data-protocol.ts The Phase 3.5 banner, the eight declarations and their docblocks are deleted, with a // retirement note in their place. Declaration emit strips the note: 0 hits in the rebuilt dist/data-protocol.d.ts. The module header's ValidationSchema now reads object-level validation rules, because that header ships in the .d.ts.
packages/types/src/index.ts The eight root re-exports and their comment line are removed.
packages/types/src/__tests__/phase35-validation-types-retired-10719.test.ts New barrel-absence pin (see below).
.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.md Each gets a dated in-body note, 2026-09-27, following the objectui#8522 → objectui#7742 precedent. Frontmatter is untouched.
content/docs/plugins/plugin-form.mdx The near-spelling list drops AdvancedValidationRule and ValidationRuleType. The pinned sentence "There is no ValidationRule type in this repository" stays.

The pin, and where it departs from the objectui#7659 shape

  • Compile time. Sixteen @ts-expect-error probes: each of the eight, once through import('../index.js') and once through import('../data-protocol.js'). Three lit controls resolve through the same spellings with no directive. The file is compiled by tsconfig.test.json under type-check; tsc -p tsconfig.test.json --listFiles confirms it is in the program. noUnusedLocals is off, so each directive's only possible diagnostic is the missing export.
  • Runtime. data-protocol.ts and index.ts are read as text, through a declaration matcher and an export-list parser that strips comments first. Both carry lit controls: ObjectValidationRule, FilterFieldConfig and FieldValidationRules.
  • ⚠️ Departure, measured. The objectui#7659 pin's runtime leg is Object.keys(entry). All eight were export type. On the BASE build, where the names were still exported, the runtime namespace of @object-ui/types carried none of them, while dist/index.d.ts and dist/data-protocol.d.ts still 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 BASE 01700dcd7 with the pin kept:

  • tsc -p tsconfig.test.json: exit 2, exactly 16 × TS2578 "Unused '@ts-expect-error' directive", 0 other errors.
  • vitest run of 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)."
  • Restore: git checkout HEAD -- PATHS in a trap. Both files' blob hashes equal the HEAD blobs, and git diff HEAD is 0 bytes.

Gates, final head c68bc62ab

Exit 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 rebuilt dist/index.d.ts and dist/data-protocol.d.ts carry 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 run over the 54 scripts/__tests__ files that read content/docs, .changeset/ or the types exports (derived by git grep -l): exit 0, 54 of 54 files, 2589 tests.
  • node scripts/check-changeset-presence.mjs 0 · check-changeset-no-major.mjs 0 · check-changeset-overwrite.mjs 0 (report-only) · check-changeset-fixed.mjs 0 · pnpm check:changeset-claims 0 (report-only) · check:pending-changeset-literals 0 · check:new-line-citations 0 ("0 new citation(s)") · check:control-bytes 0 · check:spec-symbols 0 · check:test-path-roots 0 · type-check:coverage 0 · check:doc-types 0 · check-doc-links.mjs 0 · check:doc-fences 0 · check:doc-example-ids 0.
  • node scripts/check-governed-queue-guard.mjs --test on all nine paths: exit 0, "NOT GOVERNED".

Consumer direction. @object-ui/core is a downstream consumer of @object-ui/types and 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 .ts files. The population comes from ESLint's own config: --print-config resolves for all three. The file count comes from --format json: 3 files. On invariance, eslint.config.js enables no type-aware linting (no project, projectService or TypeChecked), 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-existing no-explicit-any in data-protocol.ts. Under --no-inline-config: exit 1, on one error in index.ts. That error is the deliberate eslint-disable no-restricted-imports block around the SpecFormField alias. The BASE bytes of the same path give the same error (the control), so it predates this change.

Not run locally, with reason:

  • Spec Main Shape Gate. It is owed where a touched type is spec-derived. The eight are hand-written (the removed block imports nothing from @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, and packages/types/README.md names none of the eight (see the census), so no README-named export can go missing. CI runs it.
  • The full scripts/__tests__ suite, pnpm lint and pnpm 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 (the GanttConfig exports), 6237-wizard-step-config-split.md (the tabbed-form support row) and uniqueness-deprecation-jsdoc-4765.md (the JSDoc on UniquenessValidation). Each is about a member this diff does not touch, and each stays true. The 4765 body's dist/data-protocol.d.ts byte 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.ts keeps 'export interface AdvancedValidationRule {}' and "export type ValidationRuleType = 'required';" as negative fixtures for its bare-ValidationRule matcher. 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 into data-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.ts mentions data-protocol's ValidationFunction in a past-tense note ("sat here"). It is still true as history and is untouched.
  • Out-of-repo consumers of the eight are NOT MEASURED. The changeset says so, as objectui#7659's did.
  • objectui#7469 also edits packages/types/src/index.ts, at the App* exports (a different region). Whichever of the two lands second merges main.
  • packages/core/src/validation/index.ts still 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, session https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW.


Generated by Claude Code

…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
@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 3 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/6051-gantt-flat-config-declared-keys.md

  • names packages/types/src/index.ts → packages/types/src/index.ts — edited by this change

    GanttConfig itself gains nine members and is a published type, exported by name from packages/types/src/index.ts: lockField, objectField, summaryExtent, defaultCollapsedDepth, borderColorField, dependencyTypes, timeZone, exportFileName, interactions. The entry file's diff is empty only because the export list already named the type — the widening happened at the declaration.

.changeset/6237-wizard-step-config-split.md

  • names content/docs/plugins/plugin-form.mdx → content/docs/plugins/plugin-form.mdx — edited by this change

    Documentation repair in the same stroke: the support table in the README and in content/docs/plugins/plugin-form.mdx still said formType: 'tabbed' sections drop the predicate. That stopped being true when the tabbed arm landed — the row now reads Yes, the surrounding prose no longer claims two inert arms or a diagnostic that fires for tabbed, and the wizard row stays No, which is still exactly true.

.changeset/uniqueness-deprecation-jsdoc-4765.md

  • names packages/types/src/data-protocol.ts → packages/types/src/data-protocol.ts — edited by this change

    Corrects the @deprecated prescription on UniquenessValidation in packages/types/src/data-protocol.ts, which pointed authors at spellings the platform no longer accepts (objectui#4765).

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with f308a655b (merge-base with origin/main): 4 file(s) changed outside .changeset/, read against 1571 pending declaration(s) that publish a body (2159 pending in total). · run

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3066.1 KB 3104.5 KB
Main entry chunk (gzip) 148.3 KB 350 KB
Entry file index-wXwnd1Qs.js —
Status PASS —

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

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 16.57KB 6.15KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.17KB 10.58KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.52KB 3.45KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.13KB 7.95KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 554.92KB 132.66KB
core (index.js) 9.52KB 3.79KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 223.93KB 62.31KB
fields (index.js) 259.29KB 65.64KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.40KB 12.91KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.28KB 11.09KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.01KB 3.93KB
plugin-calendar (index.js) 51.65KB 14.69KB
plugin-charts (index.js) 82.37KB 22.57KB
plugin-chatbot (index.js) 198.40KB 47.22KB
plugin-dashboard (index.js) 134.11KB 35.62KB
plugin-designer (index.js) 216.25KB 44.39KB
plugin-detail (index.js) 233.23KB 61.74KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 157.08KB 40.13KB
plugin-gantt (index.js) 169.75KB 41.96KB
plugin-grid (index.js) 218.12KB 59.72KB
plugin-kanban (index.js) 48.43KB 15.11KB
plugin-list (index.js) 114.70KB 28.42KB
plugin-map (index.js) 22.90KB 7.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.91KB 9.05KB
plugin-tree (index.js) 10.58KB 3.72KB
plugin-view (index.js) 87.83KB 22.01KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 116.21KB 38.14KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.03KB 1.86KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.78KB 2.56KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.93KB 1.49KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 17.15KB 6.32KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: c68bc62abfc88d1f5ca544fe6003e7956c38b468

① Derived judgments

Public-surface changes, enumerated (three, nothing more).

  1. The eight type re-exports leave the @object-ui/types root barrel (packages/types/src/index.ts, base :607–:614). The index.ts diff is exactly 9 removed lines: the eight names and their one // Validation Schema (Phase 3.5) comment. Running the pin's own export {…} parser over base and head index.ts gives 664 published names before and 656 after: precisely eight fewer, so no other name left the barrel.
  2. The eight declarations and the "Phase 3.5: ValidationSchema - Complete Validation Engine" banner leave packages/types/src/data-protocol.ts. The single 241-line hunk (@@ -661,241 +661,15 @@) contains only the banner, AdvancedValidationSchema, AdvancedValidationRule, ValidationRuleType, ValidationFunction, AsyncValidationFunction, ValidationContext, AdvancedValidationResult, AdvancedValidationError, and the new nine-line // retirement note. The 237 deleted lines are 235 from that hunk plus 2 from the header. No live type went with them: FieldValidationRules (index.ts:189), FieldValidationFunction (:499), ObjectValidationRule (:619) and its spec-derived variants BaseValidation…RangeValidation, DesignerValidationRule (:735) all still ship; the object-level rule section that follows the deleted block is byte-unchanged. data-protocol is not a subpath door: packages/types/package.json exports has no ./data-protocol, no subpath barrel has an export *, and the only non-test file in packages/types/src that imports from ./data-protocol.js is index.ts:637. So the root . was the one door, as the PR says.
  3. The @packageDocumentation header (data-protocol.ts:12-13) changes "ValidationSchema" to "object-level validation rules". That docblock ships in the emitted .d.ts; the new wording is accurate (the file still declares ObjectValidationRule and its variants) and carries no contract.

Readers, re-measured.

  • objectui at head, whole tracked tree, git grep -w of all eight, CHANGELOGs excluded: hits only in the five .changeset/*.md files (prose), the new pin, the retirement note itself, scripts/__tests__/check-doc-component-types.test.ts (string fixtures and a comment) and scripts/__tests__/one-authority-per-exported-name-6273.test.ts (a past-tense comment). Zero type readers. Base control: the same instrument at origin/main over packages apps examples (tests excluded) lights exactly the two home files, 17 and 8 lines. Lit control at head: FieldValidationRules answers in 14 files. origin/main has not grown a reader since the merge-base 01700dcd7 (same file list, only the base home files plus the prose sites).
  • objectstack origin/main e2c4e12: git grep -l -w of all eight gives 0 files; a substring grep (AdvancedValidation|AsyncValidationFunction|ValidationRuleType) also 0. Lit control: @object-ui/types names 37 files. Matches the PR's reading exactly.
  • Emitted .d.ts of another package: neither checkout has a dist/ (0 .d.ts under any dist), so this is derived, not read: a package's .d.ts can only carry these names if its source imports them, and no source outside packages/types/src/{data-protocol,index}.ts does, nor does any subpath barrel of @object-ui/types re-export data-protocol. Zero by construction; the dev's BASE-build measurement (only dist/index.d.ts and dist/data-protocol.d.ts) is consistent with that.
  • Out-of-repo consumers: NOT MEASURED, and every record (card, changeset, PR) says so. Same limit as ruling A.

Loud for a TS consumer. Yes. A named import of any of the eight from @object-ui/types is TS2305 (module has no exported member); the pin's import('../index.js').Name spelling gets TS2694 for the same absence. There is no silent-any path: no ambient re-declaration, no export * in the barrel.

The pin: can it fail? Yes, on both legs.

  • Compile time: 16 @ts-expect-error probes (eight through the barrel, eight through the module) plus three undirected controls. Root tsconfig.json:62 has "noUnusedLocals": false, so the only diagnostic a probe line can produce is the missing member; a returning name therefore yields TS2578 rather than being swallowed by an unused-alias error. This is the condition that keeps the directives honest, and I verified it in config rather than taking the PR's word. tsconfig.test.json includes src/**/*.test.ts and packages/types/package.json chains it from type-check; the build tsconfig.json excludes **/__tests__/** so the pin cannot emit into dist.
  • Runtime leg: the Object.keys reasoning is correct. All eight were export type, which leaves no runtime binding, so the objectui#7659 core pin's Object.keys(corePublicEntry) shape (it pins runtime values) reads identically before and after for these names; the ai-insights-retired-8800.test.ts pin in the same directory records the same reason at lines 51-57. Replacing it with a source-text read is the right call, not a weakening.
  • Reverse verification, reproduced cheaply: I ran the pin's two matchers (declares, reexported) against origin/main's data-protocol.ts and index.ts: 8 of 8 declared, 8 of 8 re-exported, controls lit; against head: 0 of 8, 0 of 8, controls lit. So the "2 vitest failures on base" claim holds. The 16 × TS2578 claim follows from the directive semantics plus noUnusedLocals: false; I did not re-run tsc (gate family). The head Type Check run is what proves the 16 probes compile today; see ③.
  • Non-blocking nit: a name re-introduced through an export * from line in the barrel would evade the text parser (it only reads export {…} lists) but not the compile-time leg, so the pin still reddens. The barrel has no export * today.

② Semver level

  • '@object-ui/types': minor with a BREAKING banner is right. objectui AGENTS.md:271: the repository's own breaking changes are scored minor with the breaking semantics stated in the body (the fixed group must not cross a major except in lockstep with objectstack); scripts/check-changeset-no-major.mjs enforces it. Head checks "Changeset Bump Policy" and "Changeset Declaration" are green.
  • Every sentence of .changeset/10719-retire-phase35-validation-types.md checks out: the eight names; "type half of ValidationEngine" and ruling A on objectui#7659 (comment 5548579814, batch Migrate studio deployment from GitHub Pages to standalone Vercel at play.objectstack.ai #40 item 4, ADR-0049); "nothing in this repository or in the ObjectStack framework reads them" (measured above); "no deprecation window" (true, none was declared); replacement: FieldValidationRules.validate exists (form.ts:1522), buildValidationRules is packages/fields/src/index.tsx:3769 in @object-ui/fields and compiles required, minLength/maxLength, min/max, pattern, plus type-implied email/url checks; the "Not affected" list is exactly the four names still in the barrel; NOT MEASURED stated.
  • The four dated notes: each is a pure insertion (+4, +4, +7, +5 lines, no deletions), leaves the original paragraph intact, follows the 41-file "Dated note, date — …" convention (e.g. 7742-kanban-arm-batch70.md:36), and is true: 9909 ("ValidationContext itself is removed … so the locale member this entry adds no longer exists"), 7659 ("those types no longer keep their shapes: all eight … are removed … on this same ruling"), 6349 ("data-protocol's ValidationFunction is removed … FieldValidationFunction stays published", index.ts:499 confirms), 7357 ("AdvancedValidationRule is removed … so its depends_on no longer exists"). Frontmatter untouched in all four; "Changeset Overwrite Report" and "Changeset Claim Re-read" green.
  • plugin-form.mdx: true. The remaining near-spellings ObjectValidationRule (data-protocol.ts) and DesignerValidationRule (designer.ts) exist and neither types validation; the sentence "There is no ValidationRule type in this repository" that check-doc-component-types.test.ts pins is kept; "Doc Component Type Check" green.

③ Boundary flags

  • scripts/__tests__/check-doc-component-types.test.ts fixture addresses: correctly deferred, not a defect of this PR. Lines 2518-2519 keep 'export interface AdvancedValidationRule {}' // …data-protocol.ts:708 and "export type ValidationRuleType = 'required';" // …data-protocol.ts:748 as negatives under a comment saying each is "a spelling this repository really writes, cited where it lives"; the docblock at :2427 is already self-dated ("when this was written"). After this PR the two spellings exist nowhere and the two addresses point at deleted lines. The fixtures are strings and remain valid negatives, so the test is green; the line-citation gate (scripts/check-new-cross-file-line-citations.mjs) counts only citations NEW relative to base and says existing ones are not its denominator, so nothing reddens. The file is outside the claim's file surface and the dev recorded it in the PR. Non-blocking, but "Carrier: none named" means it rots silently: the PM seat should attach it to a sweep card or file a two-line follow-up.
  • Check runs at head, as they stand: 42 runs, 30 success, 3 skipped (dependabot, coverage), 0 failed, 9 still in progress at the time of this review: Type Check, Test shards 1-4 and 6-8, Spec Main Shape Gate. Type Check is the run that proves the 16 compile-time probes; the dev reports pnpm --filter @object-ui/types type-check exit 0 at c68bc62ab, and my config read (noUnusedLocals: false, test project chained) supports it. Non-blocking: the PM should see Type Check and Spec Main Shape Gate conclude green before merge.
  • mergeable_state is behind (main is at 704e05b09d); git diff 01700dcd7..origin/main over all nine touched paths plus the fixture test is empty, so this is an ordinary refresh, no conflict. The objectui#7469 App* region of index.ts has not landed on main yet.
  • Commit trailers are Co-Authored-By: Claude (model-free) with the session line; the dev states this follows the os-dev definition over the harness reminder. Outside contract scope; noted only.
  • The retirement note in data-protocol.ts is a // block between two declarations; the dev measured 0 hits in the rebuilt dist/data-protocol.d.ts. packages/core/src/validation/index.ts:4 still reads "Phase 3.5: Validation module"; that is core's live module, correctly untouched.
  • PR is still a draft; that is the PM flow, not a contract matter.

Implemented-by: claude/issue-10719-retire-phase35-validation-types
Reviewed-by: session_014fWVhLzhxR8qrFsJ5o8TYW

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
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3066.3 KB 3104.5 KB
Main entry chunk (gzip) 148.3 KB 350 KB
Entry file index-DwhZEgfi.js —
Status PASS —

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

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 16.57KB 6.15KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.17KB 10.58KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.52KB 3.45KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.13KB 7.95KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 554.94KB 132.67KB
core (index.js) 9.57KB 3.81KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 223.93KB 62.31KB
fields (index.js) 259.29KB 65.64KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.40KB 12.91KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.28KB 11.09KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.01KB 3.93KB
plugin-calendar (index.js) 51.65KB 14.69KB
plugin-charts (index.js) 82.37KB 22.57KB
plugin-chatbot (index.js) 198.40KB 47.22KB
plugin-dashboard (index.js) 134.11KB 35.62KB
plugin-designer (index.js) 216.25KB 44.39KB
plugin-detail (index.js) 233.23KB 61.74KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 157.08KB 40.13KB
plugin-gantt (index.js) 169.75KB 41.96KB
plugin-grid (index.js) 218.12KB 59.72KB
plugin-kanban (index.js) 48.43KB 15.11KB
plugin-list (index.js) 114.70KB 28.42KB
plugin-map (index.js) 22.90KB 7.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.91KB 9.05KB
plugin-tree (index.js) 10.58KB 3.72KB
plugin-view (index.js) 87.83KB 22.01KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 116.21KB 38.14KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.03KB 1.86KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 7.50KB 3.05KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 6.16KB 2.71KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.93KB 1.49KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 17.15KB 6.32KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review ABSENT at the new head 717461203c, so this PR stays draft and out of the queue. domain:spec#1 @ objectui · session_014fWVhLzhxR8qrFsJ5o8TYW · 2026-09-27T07:30Z.

  • Where the PR stands. The at-tier record 5853372594 says PASS for head c68bc62ab. The patch round (card comment 5853378261, then the dev's report) moved the head to 717461203c: it fixes the red Test (shard 4/8) by routing the pin's comment stripping through scripts/js-comment-mask.mjs, and it merges main. CI at 717461203c is all green on every required context.
  • Why no record. The isolated at-tier delta re-review could not run: its model returned HTTP 429, 「reached your Fable limit」. Under the contract-review rule, a reviewer that cannot start means the review is absent. The PR carries needs:contract-review and stays draft, out of the queue. The only bypass is the maintainer reviewing it personally.
  • Next. The seat retries the delta re-review once the at-tier quota answers again. The review is ⛔ never waived, and it is ⛔ never done below tier.

Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 717461203c877c92b0d991fdcfbf6190d96ba1a1

① Derived judgments

Scope of this record: the hop c68bc62abf → 717461203c after record 5853372594 (PASS) — commit 489feaaff5 (one file, the pin phase35-validation-types-retired-10719.test.ts, +16 / −7) and merge commit 717461203c of origin/main f308a655b8, whose tree equals git merge-tree of its two parents, so it carries no hand edit. The three-dot file set is the same nine files (+256 / −248); the eight retired names, the barrel and data-protocol.ts hunks, the five changesets and plugin-form.mdx are byte-identical across the hop. The PASS record's derived judgments — the three public-surface changes and nothing more, the reader census in both repositories, loudness for a TS consumer, the pin's two legs and its ablations — are adopted here unchanged; measured first-hand by the director seat on the fetched refs. What is re-judged is the pin's one changed reader.

  1. Why the pin changed, first-hand. At c68bc62abf the Test (shard 4/8) run failed in the repository gate scripts/__tests__/check-hand-rolled-comment-mask.test.ts:147: "a reader reached 'is this span a comment' privately. Import scripts/js-comment-mask.mjs instead — maskComments when the caller reports a line or an offset, stripComments when it reports neither", naming this pin. The PASS record's ③ had noted the shards were still running at review time. So the red was the gate refusing the pin's private regex pair, not a wrong verdict on the eight names.
  2. The fix is the gate's own prescription, and it does not weaken the pin. reexported() now reads const code = stripComments(source) from scripts/js-comment-mask.mjs (stripComments, since the reader reports a set of names and never a line or an offset), imported under // @ts-expect-error because the helper is plain JS under allowJs: false, with a local (source: string) => string annotation so the call site stays typed. The helper is a string-aware scanner (its header: it tracks strings and templates, so a // inside a glob or URL literal does not open a phantom comment), which is strictly more faithful than the two regexes it replaces. The matcher after it (export {…} / export type {…} lists split on commas, X as Y publishing Y) is unchanged; declares(), the 16 @ts-expect-error probes and the three controls are untouched. Reverse verification stands: the PASS record's 8-of-8 / 0-of-8 runs of the two matchers against main and head do not depend on which stripper fed them, because no name in either list sits on a line with a string-literal //.
  3. The @ts-expect-error is consumed. Type Check is green at head, so the directive found its error (a stray directive is TS2578) and the plain-JS import is the only diagnostic on that line; the pin cannot emit into dist (build tsconfig.json excludes **/__tests__/**, per the PASS record).
  4. Mergeability and CI. git merge-tree --write-tree origin/main refs/pull/10759/head at 17b323e5ca exits 0 with no conflict. Check runs on 717461203c: 40 success, 3 skipped (dependabot, the two coverage rows), 0 red — Type Check, Spec Main Shape Gate and all eight Test shards included, which closes the PASS record's "see them conclude green before merge" note.

② Semver level

Unchanged from 5853372594: '@object-ui/types': minor with a BREAKING banner on .changeset/10719-retire-phase35-validation-types.md, the four dated notes as pure insertions, every sentence true; Changeset Bump Policy and Changeset Declaration green at head. The PR body's Clause-②: yes — eight public type exports are removed is the objectui retirement convention; the grade is minor + BREAKING under either reading.

③ Boundary flags

  • The PASS record's flag on scripts/__tests__/check-doc-component-types.test.ts:2518-2519 (two negative fixtures citing addresses this PR deletes; green, outside the card) still has "Carrier: none named". The director seat files the two-line follow-up with this record so it does not rot silently; nothing in this PR changes for it.
  • The seat's ABSENT note 5853823865 waited on at-tier quota; this record is that delta re-review, rendered by the director seat at tier, so the seat's retry is not needed.
  • Out-of-repo consumers of the eight remain NOT MEASURED, and the changeset says so.
  • NOT GOVERNED paths; Fixes #10719 closes only the intended card.

Implemented-by: claude/issue-10719-retire-phase35-validation-types
Reviewed-by: session_01AsCNgFBs8HCjwhyHQsFbx3

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 needs:contract-review comes off with this record and ready + auto-merge follow through the relay.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review September 27, 2026 13:27
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Sep 27, 2026
Merged via the queue into main with commit 97b6c21 Sep 27, 2026
45 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-10719-retire-phase35-validation-types branch September 27, 2026 13:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

2 participants