Repository navigation
fix(console): Flow Runs reads the served flat flow item only, and its fixtures feed that shape - #12876
Merged
objectstack-fleet[bot] merged 2 commits intoOct 17, 2026
Conversation
… fixtures feed that shape (objectui#12829)
The flow list's `loadFlows` normalization read `name` and `label` as
`it.spec.X ?? it.X` and kept `spec: it.spec ?? it`. No server of
`meta.getItems('flow')` wraps an item in `spec`: objectstack's
`readFlattenedMetaItems` serves the definitions themselves (the
`?preview=draft` path included), and the spec types `items` as unknown.
The arm goes, with the `updatedAt ?? updated_at` read nothing renders,
and every fixture that fed the wrapped shape now feeds the served one.
The objectui#12783 pin's wrapped case now pins that a wrapped item is
not read.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
This was referenced Oct 17, 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
|
objectstack-fleet
Bot
deleted the
claude/issue-12829-flow-runs-flat-items
branch
October 17, 2026 10:54
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 #12829
Clause-②: no
What changed
The Flow Runs page's
loadFlowsnormalization now reads the served flatmeta.getItems('flow')item only:name: it?.name,label: it?.label,spec: it(the item IS the flow definition the test runner readsvariablesfrom). Theit?.spec?.X ?? it?.Xarm is gone, and so is theupdatedAt ?? updated_atread into aFlowItemmember the page never renders (the member is dropped from the type too). How the page names a flow for users is unchanged:label (name), or the bare name (PR #12828's behaviour).Every fixture that fed the
spec-wrapped shape now feeds the served one, in this same change:FlowRunsPage.test.tsxFlowRunsPage.sharedSelect-11865.test.tsxdeveloperMetadataEnvelope.contractEnvelope-6917.test.tsx(itsFLOWconstant only)consoleFaces.displayLocale-9909.test.tsx(a fifth site the card did not list; see Acceptance notes)FlowRunsPage.flattenedLabel-12783.test.tsx: its wrapped case becomes the arm-gone pin, "a spec-wrapped item is not read: it lists no flow (objectui#12829)".A
.changesetwith an empty frontmatter declares that nothing is released: no served shape reaches different behaviour.Producer census (run before any edit)
No server the console talks to serves a
spec-wrapped flow item. The readings, by symbol, on objectstackorigin/mainateda6f14b7b:GET /api/v1/meta/flow.RestServer's list route callsprotocol.getMetaItems, thenmetaReadGate.createMetaListAnswer(no reshaping of items).getMetaItemsinpackages/metadata-protocol/src/protocol.tsisreadFlattenedMetaItems(..., 'served'). Its items come fromregistry.listItems(the registered definitions themselves), thesys_metadataoverlay rows (convertStoredItemof the row'smetadatabody) andmetadataService.list, merged bymergePackageAwareOverlay. The answer is{ type, items: decorateMetadataItems(type, governed), registrations }.decorateMetadataItemonly redacts and adds_diagnostics. Nowhere is an item wrapped inspec./metalist branch (packages/runtime/src/domains/meta.ts) calls the sameprotocol.getMetaItemsandanswerMetaList.?preview=draft(ADR-0033). Same body withpreviewDrafts: draft rows are parsed from theirmetadatabody and merged flat, tagged_draft: true.@objectstack/clientmeta.getItemsfetches/meta/:typeandunwrapResponses it, with no item mapping.@objectstack/plugin-msw/MSWPluginappear in no objectui source outside docs and evals). No non-test objectui source readsit.spec.nameorit.spec.label. The onlyspec-wrapped flow items in the tree were the five test fixtures above.@objectstack/spec@18.0.0-next.2,GetMetaItemsResponseSchemadeclaresitems: z.ZodArray(z.ZodUnknown).safeParse({ type: 'flow', items: [{ spec: { name: 'x' } }, { name: 'y' }, 42] })returnstrue, so no declared contract asks forspec.Tests (at head
3b75d796ee)pnpm exec vitest run --maxWorkers=1 apps/console/src/pages/developer/ apps/console/src/pages/consoleFaces.displayLocale-9909.test.tsx packages/app-shell/src/console/__tests__/openPathObjectReaders-12811.test.ts:Test Files 19 passed (19),Tests 154 passed (154). That covers every test that namesFlowRunsPage; the 12811 suite reads the page's source.pnpm --filter @object-ui/console run type-checkafterturbo run build --filter='@object-ui/console^...': both exit 0. The console tsconfig includessrcwith no test exclusion, so the edited tests are type-checked.ablation-replace.mjsafter the fix commit. Thename/labellines were put back toit?.spec?.X ?? it?.X(anchor 1 to 0, blob0b2baeeb1ae9tobaade6ee57d6,grep -con the injected text read 1). Result:× a spec-wrapped item is not read: it lists no flow (objectui#12829),Tests 1 failed | 2 passed (3). The restore was proved by blob hash: the file is back to0b2baeeb1ae9, the HEAD blob, andgit diff HEADis empty.NOT MEASURED: the whole
apps/consolepackage directory under--maxWorkers=1. I stopped it after about 29 minutes holding the shared lock, with no file finished. CI'spnpm testruns it.Gates (exit codes)
All of these exit 0:
check:phantom-deps,check:self-import,check:unreferenced-sources,check:doc-example-readers,check:handler-key-reads,check:side-effects-array,check:element-data-source-declarationcheck:spec-symbols,check:action-forward-parity,check:designer-field-key-parity,check:icon-record-namescheck:i18n-keys,check:i18n-drift,check:i18n-designer-parity,check:control-bytes,check:new-line-citationscheck-hand-rolled-comment-mask.mjscheck-changeset-fixed.mjs,check-changeset-presence.mjs,check-changeset-claims.mjs,check-changeset-no-major.mjs,check-changeset-overwrite.mjs,check-pending-changeset-literals.mjsLint, narrowed and proved. The run was
eslint --no-inline-config --format jsonover the 6 changed.ts/.tsxfiles. The JSON reports 6 files, 0 errors and 20 warnings, allno-explicit-any/set-state-in-effectin the page's existing code. The rooteslint.config.jsdeclares noparserOptions.project, so type-aware linting is not enabled, and this diff cannot move any untouched file's verdict. The repo-widepnpm lintis CI's run.Acceptance notes
Out-of-surface fixture, fixed in place.
consoleFaces.displayLocale-9909.test.tsxis outside the claim's file surface. It rendersFlowRunsPagewith a{ spec: { name: 'sync_flow', label: 'Sync' } }fixture, so removing the arm would have left its runs-table case with no flow. It is the same defect class (a fixture in the unserved shape). The fix is the same one-line mechanical move, no other claim holds the file, and the same gate family covers it. The claim's file surface should name it.Changeset. The claim said no changeset.
check-changeset-presencedemands one for anyapps/console/srcchange, because@object-ui/consoleis in the fixed group. Following the gate's message, it is the empty-frontmatter declaration.Adds no product-specific widget, dialog, hook or string (see AGENTS.md › Product-neutral renderer)
Generated by Claude Code