Skip to content

finding(types,docs): AppComponentSchema.actions[] (AppAction) has no reader — layout, app-shell and the console never render it, while core/app-schema.mdx "Global Actions" teaches it as the app's global toolbar buttons #7469

Description

@os-project-manager

Surfaced while executing #7344 (the per-key consumer measurement for AppActionSchema.onClick), measured on origin/main d88e20f55. Filed unassigned; observation class (dead declared surface), not a defect card — triage decides.

What was measured

packages/types/src/app.ts declares AppComponentSchema.actions?: AppAction[] ("Global Actions (User Profile, Settings, etc)"), and packages/types/src/zod/app.zod.ts mirrors it as AppActionSchema (type: 'button' | 'dropdown' | 'user', label, icon, avatar, description, items, shortcut, variant, size).

  • Zero references to AppAction outside packages/types (git grep -nE "\bAppAction\b" -- packages apps examples ':!packages/types', docs and changelogs excluded).
  • Every consumer of AppComponentSchema / AppSchema (12 files: layout/src/AppShell.tsx, AppSchemaRenderer.tsx, NavigationRenderer.tsx, app-shell UnifiedSidebar.tsx, useNavActionDispatch.ts, the metadata-admin AppPreview.tsx / AppNavCanvas.tsx / clientValidation.ts, studio-design/*, console AppManagementPage.tsx) reads navigation, areas, layout, theme — none reads .actions. Control on the same files: AppSchemaRenderer.tsx reads navigation 25 times.
  • The only .actions readers in app-shell are objectDef.actions (server-declared OBJECT actions — DeclaredActionsBar, ObjectView, InterfaceListPage) and notification.actions; header-bar.tsx's schema.actions is HeaderBarSchema, a different declaration.

So a value authored under actions[] on an app node is parsed, kept, and rendered by nothing.

Why it matters

content/docs/core/app-schema.mdx ("Global Actions") documents the array as "global toolbar buttons" with a typed const crm: AppComponentSchema example that carries one — an author copying the page gets a green parse and no button. PR #7468 (#7344) retired the array's onClick member (the handler-expression string dialect, #6182 ruling) and edited that page's AppAction row and example line only as far as two gates forced; the rest of the section still teaches the array.

Same class as the liveness findings under ADR-0049 enforce-or-remove (declared but unenforced, zero readers). Not part of #7344's population (that card is the handler keys, not the container).

Options for triage (not a recommendation — this is a finding)

Dedupe: MCP search_issues (REST search is 403 on this session) for "AppComponentSchema actions AppAction global toolbar actions no reader app-shell layout dead declared key" → 28 results, none about this container (nearest: #4841 app-shell schema-path slots, #7437 inert action:button bag, #4418 action renderers vs ActionSchema); control query on the #6182 title wording hit #6182 / #7344 / #5927.

Refs: #7344 · PR #7468 · #6182 · #4895 (the retirement route precedent) · ADR-0049.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanefindingpm:queuepm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatchpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions