Skip to content

fix(app-shell,cli,plugin-designer): one authority for Diagnostic, DiagnosticLevel and ConfirmDialogState (objectui#6349, batch 6) - #12057

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-6349-batch6-diagnostic-confirm
Oct 9, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-6349-batch6-diagnostic-confirm

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Refs #6349 (batch 6)

Clause-②: yes

Batch 6 of the one-authority burn-down, on claim 6080168957 (seat domain:ui#3, session https://claude.ai/code/session_01CGZy1BGCjdN5cXqL9cnvB8). Three rows of KNOWN_COLLISIONS converge. Each row was two or three meanings behind one name, and each converges by renaming the sites that no package entry publishes. Types and comments only: no runtime behaviour changes, and no emitted JavaScript changes.

This PR has no closing keyword. The card stays open for later batches.

What each row was (measured on base 3fd86251)

Diagnostic: three meanings.

site members meaning built entry
packages/sdui-parser/src/types.ts severity, code, message, start?, tag? a parser finding exported at the root; read through it by @object-ui/components' page.tsx and 17 test files (single-line import clauses; control SchemaElement: 20)
packages/app-shell/.../simulator/flow-sim-types.ts level, nodeId?, edge?, message, cycle? a flow structural-check finding not exported, and reached by no root export
packages/cli/src/commands/doctor.ts level, message, id an objectui doctor check result not exported (the entry exports serve and init only)

The three share only message. sdui-parser keeps the name. The flow site becomes FlowSimDiagnostic; the doctor site becomes DoctorDiagnostic.

DiagnosticLevel: two meanings. The flow site is 'error' | 'warning', a severity. The doctor site is 'ok' | 'warn' | 'error', a check verdict with an ok arm. They share only 'error'. Neither is exported. The flow designer's keeps the name: flow-problems.ts puts it on structural, server and expression problems alike, so it is the designer's general level, not the simulator's. The doctor's becomes DoctorDiagnosticLevel.

ConfirmDialogState: two meanings. app-shell's (ActionConfirmDialog.tsx) has open, message, options? and resolve?. It is the data the action-confirm dialog renders, with the promise's resolver. The designer's (useConfirmDialog.ts) has isOpen, title, message, confirm, onConfirm and onCancel. It is a hook result. They share only message. Neither built entry exports the name. The designer's becomes DesignerConfirmDialogState, following DesignerHistoryState. That rename touches 2 files (the declaration and the hooks/index.ts re-export), where the app-shell side would touch 4.

Why renames and not a re-point. By batch 3's rule, only a dependency-legal direction may re-point. Neither app-shell nor cli depends on @object-ui/sdui-parser. app-shell does reach plugin-designer as a peer, but the designer's shape means something else. So the remedy is the card's rename branch, under the batch 5 amendment 6078948754: two meanings, so rename the narrower side; and a site no built entry reaches publishes nothing.

Published surface, base vs head

One TypeScript program per tree over each package's built root entry (exports["."].types), with dist rebuilt for each tree:

  • Exported name sets. app-shell 258 = 258, cli 2 = 2, sdui-parser 41 = 41, plugin-designer 38 = 38. That is 0 diff lines for every package. plugin-chatbot has 93 names at head.

  • Structural reach. A walker follows every root export through members, signatures, type arguments and unions. It reaches the designer interface only as the return type of useConfirmDialog, which cannot be named from the entry. It reaches no flow-sim site and no doctor site. The walker is lit: it reaches 152 app-shell types that are not exported, ObjectActionConfig (through useObjectActions) among them.

  • Emitted output. Base and head dist differ only in declaration files and maps:

    • plugin-designer: hooks/useConfirmDialog.d.ts, hooks/index.d.ts;
    • app-shell: flow-sim-types.d.ts, flow-sim-validate.d.ts;
    • plugin-chatbot: chatMessageAdapter.d.ts, a JSDoc change;
    • cli: cli.js.map, whose sourcesContent changed.

    No .js file differs in any of the five packages. So no first-load bytes move.

Riders (comment-only)

  • AiChatPage.tsx: the import comment no longer calls ChatbotEnhancedMessage "a deprecated alias" and no longer tells new code to spell ChatMessage. It now says what batch 5 made true: ChatbotEnhancedMessage is the runtime contract's one name, and the plugin root publishes no ChatMessage.
  • useObjectChat.ts and chatMessageAdapter.ts: ChatbotEnhanced.ChatMessage is now ChatbotEnhancedMessage.
  • The ledger's note above the Filter rows now records that objectui#7561 and objectui#9306 are no longer open. It records that ruling 5857342228 (objectui#9306, letter A) landed as objectui#10823, so components derives both types from @object-ui/types, keeping operator and value as named extensions. The rows stay until a batch measures a rename against that ruling. The rows themselves are untouched.

Changesets

file grade why
6349-batch6-plugin-designer.md minor A type name inside its published declarations moves (useConfirmDialog now returns DesignerConfirmDialogState). Breaking-change note: nothing breaks, because the old name was never importable from the entry.
6349-batch6-app-shell.md patch Internal rename and a comment. The entry exports neither name.
6349-batch6-cli.md patch Internal rename. The entry exports serve and init only.
6349-batch6-plugin-chatbot.md patch Doc comments only.

The grades follow the claim's criterion: minor where a published shape widens or a name moves. ⛔ No major.

Gates

All gates were read at head 078743319. Heavy runs went through os-verify-lock.

  • pnpm exec vitest run scripts/__tests__/one-authority-per-exported-name-6273.test.ts: exit 0, Tests 11 passed (11).
  • pnpm exec vitest run --maxWorkers=2 over the gate, packages/cli/, packages/plugin-designer/, packages/plugin-chatbot/ and the 44 app-shell test files that import a changed module (the flow previews and simulator, and console/ai): exit 0, Test Files 176 passed (176), Tests 1956 passed (1956).
  • 9 more test files that read a touched file's text or name the gate file (in types, app-shell, i18n and core): exit 0, Test Files 9 passed (9), Tests 134 passed (134).
  • pnpm --filter @object-ui/PKG type-check for cli, sdui-parser, plugin-designer, plugin-chatbot and app-shell, with dist rebuilt and the script name echoed: each exit 0, 0 error TS lines. cli's tsc --noEmit lists doctor.test.ts (checked with --listFiles).
  • pnpm type-check:scripts: exit 0.
  • Other gates, each exit 0:
    • check:control-bytes, check:test-path-roots, check:changeset-claims and check:pending-changeset-literals;
    • check:new-line-citations, which reports 0 new;
    • check-changeset-no-major;
    • check-changeset-presence, which reads 10 source files of 4 released packages and 4 changesets.
  • pnpm exec eslint on the 11 touched TS files: 0 errors, and none of its warnings falls on a changed line.
  • The governed-queue guard reads NOT GOVERNED over 15 paths.
  • git merge-tree against main 55e90fd3 is clean.

Not run locally:

  • The full app-shell suite. CI runs it.
  • The type-checks of components, layout, plugin-dashboard, the console and schema-catalog. They name Diagnostic only through @object-ui/sdui-parser, whose source this PR does not touch and whose dist is byte-identical.
  • check:readme-exports. No export changed.
  • The i18n and doc-snippet gates. No locale pack or docs page changed.

Reverse verification

Every leg went through ablation-replace in wrap mode. Predictions were written before any leg ran. Each leg was restored with blob equal to HEAD and an empty git diff HEAD.

leg mutation result (as predicted)
S1 ConfirmDialogState row put back Tests 1 failed / 10 passed, no longer collides at: lists both files
S2 Diagnostic row put back same verdict; lists all three files
S3 DiagnosticLevel row put back same verdict; lists both files
F1 designer hooks/index.ts aliases DesignerConfirmDialogState as ConfirmDialogState ConfirmDialogState — a NEW colliding name: ActionConfirmDialog.tsx (interface declaration) and hooks/index.ts (aliasing re-export)
F2 flow-sim declares Diagnostic again Diagnostic — a NEW colliding name: flow-sim-types.ts and sdui-parser/src/types.ts
F3 doctor declares DiagnosticLevel again DiagnosticLevel — a NEW colliding name: doctor.ts and flow-sim-types.ts
control unmutated Tests 11 passed (11)

The first S1 to S3 run was a no-op, and ablation-replace refused it. That run's replacements re-inserted the anchor line, so the anchor count did not drop. The tool restored each file and exited non-zero before running the gate. The legs were re-run with anchors that the mutation replaces, and the readings above are from that re-run.

Acceptance notes

  • The flow designer's DiagnosticLevel is not renamed. Only the doctor's is. The reason is above: the flow level types server and expression problems too.
  • JSDoc on the renamed declarations. FlowSimDiagnostic, DoctorDiagnostic and DesignerConfirmDialogState each gain a short doc comment. It says why the type is not spelled with the general name, so the next author does not restore it.
  • Two lines beyond the riders' named ones, in the same comment blocks. chatMessageAdapter.ts's lead-in now reads "Two chat-message types meet", where it said "Two ChatMessage types meet". The first line of useObjectChat.ts's comment now says "the runtime ChatbotEnhancedMessage".
  • A correction to batch 5's note. That note said the stale AiChatPage.tsx sentence ships in app-shell's built JS. The base dist does not show that: AiChatPage.js holds 0 hits of "deprecated alias" or "should spell". The comment sits on a type-only import specifier, which tsc elides, so this rider is source-only.
  • hooks/index.ts is still unreachable. packages/plugin-designer/src/hooks/index.ts has 0 importers, as batch 5 noted. This PR only renames its re-export.
  • One vocabulary, two names. The flow designer's DiagnosticLevel and sdui-parser's Severity are both 'error' | 'warning' under different names. That is not a collision under the gate. It is noted here and not filed.

Generated by Claude Code

…gnosticLevel and ConfirmDialogState (objectui#6349, batch 6)

Three ledger rows, each two or three meanings behind one name, converge by
renaming the sites that no package entry publishes:

- Diagnostic: @object-ui/sdui-parser keeps the name (published at its root
  and read through it). The flow designer's structural-check finding becomes
  FlowSimDiagnostic; the doctor command's check result becomes
  DoctorDiagnostic.
- DiagnosticLevel: the flow designer's 'error' | 'warning' keeps the name
  (its structural, server and expression problems all carry it); the
  doctor's 'ok' | 'warn' | 'error' becomes DoctorDiagnosticLevel.
- ConfirmDialogState: app-shell's dialog data keeps the name; the
  designer's hook result becomes DesignerConfirmDialogState.

The three rows leave KNOWN_COLLISIONS. Comment riders: the chat page's
import comment and two plugin-chatbot comments name ChatbotEnhancedMessage
as batch 5 left it, and the ledger's note above the Filter rows records
ruling 5857342228 as landed in objectui#10823. Types and comments only.

Claude-Session: https://claude.ai/code/session_01CGZy1BGCjdN5cXqL9cnvB8
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 289 chunks) 3164.2 KB 3204.6 KB
Main entry chunk (gzip) 72.7 KB 350 KB
Entry file index-Oi91MhQa.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) 19.52KB 7.19KB
app-shell (runtime-config.js) 22.59KB 7.89KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
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.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
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) 41.19KB 11.12KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
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.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 587.83KB 141.44KB
core (index.js) 10.00KB 3.96KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 240.39KB 67.09KB
fields (index.js) 268.74KB 68.04KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
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.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 41.50KB 11.82KB
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.86KB 5.00KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.52KB 2.26KB
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.04KB 3.92KB
plugin-calendar (index.js) 53.43KB 15.54KB
plugin-charts (index.js) 84.71KB 23.25KB
plugin-chatbot (index.js) 201.52KB 47.99KB
plugin-dashboard (index.js) 144.20KB 38.95KB
plugin-designer (index.js) 233.53KB 49.80KB
plugin-detail (index.js) 248.57KB 65.47KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 177.11KB 45.88KB
plugin-gantt (index.js) 179.17KB 45.07KB
plugin-grid (index.js) 249.62KB 69.16KB
plugin-kanban (index.js) 52.77KB 16.56KB
plugin-list (index.js) 120.51KB 30.42KB
plugin-map (index.js) 27.24KB 9.03KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 39.06KB 11.80KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 92.12KB 23.31KB
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.81KB 3.58KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
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 (node-slots.js) 7.18KB 2.34KB
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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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: 0787433192c30b506f3c4b09c337bc5d59e0b0ce
Local-runs: none

Inputs: card objectui#6349 (body and all 24 comments, through the batch 6 claim 6080168957 and the dev report 6080839326); PR objectui#12057 (body, the 15-file list, and the net diff against main at the head: merge base 3fd86251, +134/−56); and the 43 check-runs on the head: 40 success, 3 skipped (dependabot, Test (coverage), the coverage-shard matrix placeholder), 0 failure. Every reading below beyond those is a gh api read of the head's tree; nothing was built, run or re-run.

① Derived judgments

Each batch row converged by the card's rename branch ("where the two shapes really are different things, rename one"), and every public-surface change the diff implies was checked against the head's export maps and entries.

  • Diagnostic (three sites, three meanings sharing only message) — right. packages/sdui-parser/src/types.ts keeps the name and is untouched. The flow site becomes FlowSimDiagnostic, and its two importers (flow-problems.ts, flow-sim-validate.ts) follow; the doctor site becomes DoctorDiagnostic, and its one test importer follows. Neither renamed site is publishable: @object-ui/app-shell's exports map has . and ./styles.css only, and its src/index.ts (528 lines) has no export * and no export from previews/simulator/* or flow-problems; @object-ui/cli's exports map has . only, and its src/index.ts exports exactly serve and init. No importable name moves. The PR's dependency sentence is also right: neither app-shell nor cli lists @object-ui/sdui-parser, and app-shell reaches plugin-designer as a peer only, so no re-point was dependency-legal that would not also have changed a consumer's shape.
  • DiagnosticLevel (two sites, two vocabularies) — right. The flow designer's 'error' | 'warning' keeps the name, since flow-problems.ts types structural, server and expression problems with it; the doctor's 'ok' | 'warn' | 'error' becomes DoctorDiagnosticLevel. Unpublished on both sides (the same entries as above).
  • ConfirmDialogState (two sites, two meanings sharing only message) — right. app-shell's (ActionConfirmDialog.tsx: open, options, the promise's resolve) keeps the name and is untouched. The designer's hook result becomes DesignerConfirmDialogState, following DesignerHistoryState, and hooks/index.ts re-exports the new name. @object-ui/plugin-designer's exports map has . only, and src/index.tsx exports useConfirmDialog (line 50) but never ConfirmDialogState, with no export *: the old name was never importable, and hooks/index.ts is unreachable from outside the package. The only published change is the type name inside useConfirmDialog's declaration; the members are unchanged.
  • Ledger — right. KNOWN_COLLISIONS has 22 rows at the merge base and 19 at the head; the set difference is exactly ConfirmDialogState, Diagnostic, DiagnosticLevel, with no row added. The Filter rows, FilterBuilderOperator and CalendarEvent are present and untouched at the head, as the claim requires. The rewritten comment above the Filter rows is accurate: objectui#7561 and objectui#9306 read closed, PR objectui#10823 reads merged (fb91ac9b0), matching this card's record 5858391677; and the gate's green at head with both rows present confirms the comment's own claim that the two names still carry two declarations each.
  • Riders — right, comment-only. AiChatPage.tsx no longer calls ChatbotEnhancedMessage a deprecated alias nor tells new code to spell ChatMessage; useObjectChat.ts and chatMessageAdapter.ts name ChatbotEnhancedMessage. Consistent with batch 5's landing (6080141964: the plugin root has 0 export lines naming ChatMessage).
  • Accept-set — right. The gate verdicts settle it: Type Check, Test (shard 1/8) through (8/8), Test (dist pins), Lint, README Export Check, Doc Snippet Type Check, Bundle Analysis, Build & E2E and Governed Surface Queue Guard all read success on the head. So no importer of a renamed name was left behind, and no new colliding name was introduced (the one-authority gate fails in both directions and ran in the shards).
  • Fences — held. All 15 files sit on the claim's surface: the three site files, their importers, the test beside doctor.ts, the ledger, the three named riders and four changesets. Nothing under packages/fields/**, plugin-detail/src/DetailSection.tsx, the app-shell index, apps/console/src/services/**, cli/src/utils/known-schema-types.ts, components/src/ui/** or packages/i18n/**. The two surviving authorities (packages/sdui-parser, ActionConfirmDialog.tsx) are untouched.
  • PR shape — right. Draft; first line Refs #6349 (batch 6); no closing keyword anywhere in the body; Clause-②: yes at line start; one commit.

② Semver level

  • The PR's Clause-②: yes line is right: a root-exported declaration of @object-ui/plugin-designer (useConfirmDialog's return type) changes its named type, so the published declarations move even though no importable name does. A no would have under-declared.
  • .changeset/6349-batch6-plugin-designer.md minor with a breaking-change note — right by the claim's own criterion (6080168957: minor where a published shape widens or a name moves). The note is accurate: the root never exported ConfirmDialogState (verified above), and the hook's result keeps the same members.
  • .changeset/6349-batch6-app-shell.md, 6349-batch6-cli.md and 6349-batch6-plugin-chatbot.md patch — right: each package's built entry publishes neither the old nor the new name (verified above), and chatbot's change is comments only. A changeset is still owed, because check-changeset-presence counts changed source files of released packages.
  • No major — right (objectui AGENTS.md §9; Changeset Bump Policy, Changeset Declaration and Changeset Fixed Group Check all read success on the head).

③ Boundary flags

  • open_questions[0] (changeset grade, A or B) — answered: A. The claim grades per package, and three of the four packages move nothing on their published surface; B would grade a comment-only change minor. Not blocking: the fixed group's released version is the same either way. The seat ratifies A in its ACCEPT; no maintainer decision is needed.
  • Flow DiagnosticLevel kept, doctor's renamed — accepted (reason in ①; the gate's green at head proves exactly one declaration remains).
  • JSDoc on the three renamed declarations, and two rider lines beyond the named ones — accepted: comment-only, in claim files, in the same blocks the riders name.
  • Not run locally (full app-shell suite; type-checks of components, layout, plugin-dashboard, console and schema-catalog; check:readme-exports; the i18n and doc-snippet gates) — covered by the head's check-runs: all eight Test shards, Type Check, README Export Check and Doc Snippet Type Check read success, and no locale pack or docs page is in the file list.
  • First ablation run refused and re-run — accepted: the dev cites only the re-run, and the gate's CI verdict is the gate of record here, not the ablation.
  • Correction to batch 5's ACCEPT note (the stale AiChatPage.tsx sentence never shipped in built JS, since a type-only import specifier is elided) — escalated to the seat as a record-only correction; nothing in this PR depends on it, and it was not re-measured here.
  • hooks/index.ts still an unreachable barrel; the flow DiagnosticLevel and sdui-parser's Severity share one vocabulary under two names — noted, not filed, as the dev did; neither is a collision under the gate.
  • Tier notice 5612085492 lifted this card's contract-review-tier requirement; the seat runs the review at the ceiling because of the Clause-②: yes line, as it did for batches 4 and 5. Nothing here needs a maintainer.

Implemented-by: claude/issue-6349-batch6-diagnostic-confirm
Reviewed-by: session_01CGZy1BGCjdN5cXqL9cnvB8

VERDICT: PASS

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 9, 2026 12:49
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 9, 2026 12:49
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 9, 2026
Merged via the queue into main with commit 1f1c4b5 Oct 9, 2026
45 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-6349-batch6-diagnostic-confirm branch October 9, 2026 13:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants