Skip to content

fix(console): drop the dead workflow and feed catalog keys (#4303) - #5282

Merged
os-support-ai merged 1 commit into
mainfrom
claude/issue-4303-drop-dead-catalog-keys
Aug 19, 2026
Merged

fix(console): drop the dead workflow and feed catalog keys (#4303)#5282
os-support-ai merged 1 commit into
mainfrom
claude/issue-4303-drop-dead-catalog-keys

Conversation

@os-support-ai

Copy link
Copy Markdown
Collaborator

Fixes#4303

What

SERVICE_ENDPOINT_CATALOG in apps/console/src/pages/developer/hooks/useApiDiscovery.ts carried two catalog keys that name no CoreServiceName slot and therefore could never render on any host — workflow (retired upstream in objectstack#4451) and feed (never existed as a slot). Per triage's ruling (issue comment), this is dead-code removal, not a rename: both entries are deleted.

  • Removed workflow (5 endpoint declarations under /api/v1/workflow/*)
  • Removed feed (2 endpoint declarations under /api/v1/feed/*)
  • 7 endpoint declarations removed in total, matching the card's count.

No rendered behaviour changes: both groups were already unconditionally hidden by the fail-closed discoveredServices lookup (ADR-0076 D12) on every host, since neither key was ever present in /discovery's services map.

Premise re-check (objectui side, current origin/main)

Confirmed before editing: SERVICE_ENDPOINT_CATALOG still carried both workflow (5 endpoints) and feed (2 endpoints) — 7 total, matching the ruled count exactly. (The objectstack-side counter-probes were already re-run by the PM at claim time — both keys are dead there too: no registerService('workflow'), no mounted /api/v1/workflow route, no /api/v1/feed route in source.)

No server routes, discovery entries, or slot members were added — removal only, per triage's explicit prohibition on widening.

#4240 pin test — trimmed, not just left passing

#4240's tripwire test asserts every SERVICE_ENDPOINT_CATALOG key against CoreServiceName, with workflow/feed carried as a documented, exhaustive exception set citing #4303. As the card predicted, removing the two keys keeps the pin green on its own (it's a subset check) — that would have been the trap. This PR also trims the now-stale KNOWN_DEAD_NON_SLOT_KEYS exception set and its #4303 reference, so the assertion goes back to a plain "every catalog key is a canonical slot" with no carve-outs. The pin itself is untouched/still enforcing.

Verified green at three points — before the catalog edit, after the catalog edit but before the trim, and after the trim — all three runs Test Files 1 passed (1) / Tests 12 passed (12) on apps/console/src/pages/developer/hooks/useApiDiscovery.test.ts. Final confirmation re-run at this PR's head commit 23dfa0a5e:

 Test Files 4 passed (4)
Tests 35 passed (35)

(useApiDiscovery.test.ts + the other 3 developer-page suites — the 12 pin-test cases are included in the 35.)

Tests

All run from the repo root per objectui#3378 (pnpm --filter silently runs the wrong package's suite).

  • pnpm exec vitest run apps/console/src/pages/developer/hooks/useApiDiscovery.test.ts — 12/12 green, checked before the catalog edit, after the catalog edit, and after the exception-set trim.
  • pnpm exec vitest run apps/console/src/pages/developer/ — full developer-page suite, 35/35 green (re-confirmed at head 23dfa0a5e).
  • apps/console type-check (tsc --noEmit && tsc -b tsconfig.node.json --force) — green, after building the full workspace dependency closure (pnpm exec turbo run build --filter='@object-ui/console^...').
  • apps/console lint (eslint .) — 0 errors, 200 pre-existing warnings (none in the touched files beyond one pre-existing warning at an unrelated line in useApiDiscovery.ts, unchanged by this diff).
  • node scripts/check-control-bytes.mjs, node scripts/check-changeset-presence.mjs, node scripts/check-changeset-no-major.mjs — all green.

Changeset

.changeset/api-console-drop-dead-catalog-keys-4303.md (patch, @object-ui/console) — no rendered behaviour changes, but the catalog source changed so a changeset is owed per check-changeset-presence.mjs.


Generated by Claude Code

`SERVICE_ENDPOINT_CATALOG` carried two keys that name no `CoreServiceName`
slot and could therefore never render on any host: `workflow` (5 endpoints,
slot retired upstream in objectstack#4451) and `feed` (2 endpoints, never a
slot). Both were unconditionally hidden by the fail-closed `discoveredServices`
lookup (ADR-0076 D12), so this removes 7 dead endpoint declarations with no
change to rendered output.
Per triage's ruling this is dead-code removal, not a rename — neither key has
a correctly-spelled slot to move to, and no server routes/discovery
entries/slot members were added to make them resolvable.
Also trims #4240's pin test: its `KNOWN_DEAD_NON_SLOT_KEYS` exception set
(which carried `workflow`/`feed` and cited this issue) is now stale since
both keys are gone. The assertion goes back to a plain "every catalog key is
a canonical slot" with no carve-outs. The pin itself stays green both before
and after the trim — the catalog removal alone already satisfies it (subset
check), which is exactly why the exception set needed to be trimmed
separately rather than left behind.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RV6yuVCxymHYE16PL9vQkE
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)25.3 KB350 KB
Entry fileindex-C81EdGwW.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)9.83KB3.70KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)8.92KB3.41KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)29.33KB7.05KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)40.21KB10.79KB
auth (createAuthenticatedFetch.js)6.34KB2.43KB
auth (index.js)2.71KB1.22KB
auth (invitation-status.js)1.22KB0.70KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.02KB0.88KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)506.27KB113.31KB
core (index.js)4.11KB1.62KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)159.80KB44.34KB
fields (index.js)237.07KB59.46KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.42KB1.39KB
i18n (pickLocalized.js)3.69KB1.73KB
i18n (provider.js)23.13KB7.63KB
i18n (useDisplayLocale.js)2.85KB1.45KB
i18n (useObjectLabel.js)29.43KB7.15KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)39.16KB10.97KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)9.35KB3.31KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)4.42KB1.42KB
permissions (evaluator.js)5.12KB1.74KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.81KB0.83KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.62KB12.83KB
plugin-charts (index.js)64.75KB18.37KB
plugin-chatbot (index.js)181.21KB43.14KB
plugin-dashboard (index.js)128.04KB32.75KB
plugin-designer (index.js)212.39KB42.83KB
plugin-detail (index.js)241.46KB60.56KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)123.77KB30.07KB
plugin-gantt (index.js)164.10KB39.87KB
plugin-grid (index.js)198.22KB53.27KB
plugin-kanban (index.js)52.93KB14.60KB
plugin-list (index.js)111.66KB27.13KB
plugin-map (index.js)19.96KB6.56KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)42.84KB11.77KB
plugin-timeline (index.js)26.68KB7.66KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)84.34KB20.61KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.66KB3.50KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.62KB2.34KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)31.56KB10.70KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.33KB0.69KB
react (schema-input.js)1.45KB0.83KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)5.41KB2.34KB
sdui-parser (index.js)4.77KB2.16KB
sdui-parser (input-type.js)2.84KB1.40KB
sdui-parser (parse.js)10.76KB3.17KB
sdui-parser (provenance.js)3.66KB1.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)6.92KB2.40KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (dashboard-filter-alias.js)6.23KB2.74KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-retry.js)4.32KB2.02KB
types (index.js)3.08KB1.53KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

@os-support-ai
os-support-ai marked this pull request as ready for review August 19, 2026 00:51
@os-support-ai
os-support-ai added this pull request to the merge queueAug 19, 2026
Merged via the queue into main with commit 092e2baAug 19, 2026
22 checks passed
@os-support-ai
os-support-ai deleted the claude/issue-4303-drop-dead-catalog-keys branch August 19, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

2 participants

@os-support-ai@claude