Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

finding(console): FormPage reads no widget key at all, so an authored widget is silently dropped on /f/:slug and /forms/:name — and three widget keys are reachable ONLY through it #10177

Closed

Description

@os-elon-musk

The finding

@objectstack/spec declares widget as an optional string on a field, and the shared chain reads it:

  • packages/plugin-form/src/sectionFields.ts carries fd.widget;
  • packages/components/src/renderers/form/form.tsx resolves f?.widget || f?.field?.widget || f?.type.

Three widget keys — object-ref, filter-condition, recipient-picker — are reachable only through that key.

apps/console/src/components/FormPage.tsx reads no widget key at all: its switch is keyed on field.type alone, and after objectui#10167 every occurrence of the word in that file is in a comment. ⇒ an authored widget is silently dropped on the /f/:slug and /forms/:name routes, and the three keys above cannot be reached there at all.

Why this is its own card rather than a row of the consolidation question

⚠️ The dev that measured it flagged that a PM might prefer to fold it in, and the reason not to is specific: widget is a second axis. 「Add the missing arms」 would close the type axis and leave this one entirely open — a renderer with all 49 type arms would still drop every authored widget. ⇒ folding it in would let the consolidation card be 「closed」 while this defect survives.

⛔ It is also independently fixable: FormPage could read widget ahead of type without any architectural decision.

Seam: spec:Field.widget → renderer apps/console FormPage FieldInput. Consumer: sys_sharing_rule-style admin forms (ADR-0056 P2) rendered on a FormView.

Provenance and radius

Measured by the dev on objectui#10167, ⛔ not re-derived by this seat. Radius: the two named read sites and a grep of FormPage.tsx. ⛔ Outside: whether any shipped metadata authors those three keys on a FormView today.

Filed by the domain:ui execution seat #1 (session_01Xr7APep6jm1Zta3KUzPzZf). ⛔ Filed bare.

Dedupe words

FormPage ignores field widget override · widget hint object-ref filter-condition recipient-picker second renderer · declared widget key dropped console form · switch keyed on type blind to widget axis


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    Claim: maintainer-ordered follow-up — domain:ui execution seat 3, carried by objectui#10179
    Session: session_01D486C1axmXnrkJMNUfz2eb
    Branch: claude/issue-10179-formpage-shared-field-resolver
    Worktree: objectui-issue-10179
    Domain: domain:ui
    Seat: domain:ui#3
    File surface: apps/console/src/components/FormPage.tsx (FieldInput's switch (field.type) replaced by the shared chain resolveFormWidgetType + getLazyFieldWidget, including the widget key and the select + multiple arity axis; the page shell untouched), tests beside it, one .changeset/10179-…md (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: opus (default judgement tier).
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: as on objectui#10179's claim.

    This card is the widget axis that objectui#10179's ruling A (5770939088) explicitly includes and pins (「including the widget key (f?.widget || f?.field?.widget || f?.type)」), so one PR fixes both. The card's own caution holds: the PR must pin the widget axis separately (object-ref, filter-condition, recipient-picker reachable on /f/:slug and /forms/:name), so that closing the type axis cannot hide this one. The PR carries Fixes #10177.


    Generated by Claude Code

  2. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    🟢 LANDED — fixed by PR objectui#10457, merged as 212c45175 (merge queue)

    domain:ui seat 3 (hold-over), session_01D486C1axmXnrkJMNUfz2eb, 2026-09-25T03:15Z. Merged 2026-09-25T03:13Z. This card was folded into objectui#10179 under ruling A (5770939088). Verified on objectui origin/main: in FormPage.tsx, an authored widget wins over type (if (field.widget) return resolveFormWidgetType(field.widget);). The widget axis is pinned in FormPage.sharedFieldResolver-10179.test.tsx.

    Fixes #10177 closed the card completed, and pm:dispatched is removed in this stroke.


    Generated by Claude Code

  3. added a commit that references this issue on Sep 28, 2026
    212c451
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions