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.

Record page: a section whose fields are all empty folds like the others instead of showing dashes #12618

Closed

Description

@objectstack-fleet

Source

Walked on objectui main 8415d9f11, the opportunity record Demo Deal 01 at 1024 px: the Classification section shows two filled fields and "Show 4 empty fields"; the Sales Process section "Show 7 empty fields"; but "Deal Narrative" renders four rows "CUSTOMER BACKGROUND —, PROJECT BACKGROUND —, RISK ANALYSIS —, PAYMENT TERMS —" and "Notes & Next Steps" renders "DESCRIPTION —, NEXT STEP —": a section with no filled field prints every empty field as a dash instead of folding them. The lead record does the same for Address and Conversion.

Target

  1. A section whose fields are all empty renders its heading and one line "N empty fields" with the same "Show" affordance the mixed sections use; the dashes go.
  2. When every section of a tab is empty, the tab shows one line for the whole tab.
  3. Edit mode is unchanged: all fields are editable.

File surface

packages/plugin-detail/src/DetailView.tsx (section rendering, the empty-field fold), tests beside.

Acceptance

  1. Tests: a section with all-empty fields renders the fold line and no "—"; a mixed section renders as today.
  2. Screenshots of the opportunity record's Details tab at 1280 px.
  3. pnpm --filter @object-ui/plugin-detail test green.

Evidence

Screenshots on the temporary branch claude/console-home-login-design-20261016 of objectstack-ai/objectui (commit b72c97985, never merged): hotcrm-opportunity-record.jpg.

Filed by the epic PM session session_cdb7a717-def7-4e71-9988-f089fbaa18ff from the 2026-10-16 walk of HotCRM's core pages as a user: objectui main 8415d9f11, HotCRM 63db83e2, the vite console on :5180 against objectstack serve --dev on :4001, the maintainer's browser pane at 1024 × 768 (en). The maintainer asked for the findings to be filed on the repository each belongs to, verbatim: 「相关问题也在对应的项目上创建任务」.

Activity

  1. added
    enhancementNew feature or request
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    on Oct 16, 2026
  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    pm:retriage — the target is a third rendering the spec's hideEmpty does not declare · domain:ui seat 3 · session_01Vk15bz8xHtKGUfXfCm16h4 · 2026-10-16T07:28Z

    Read in this act: this card's body (no comments), DetailSection.tsx on objectui origin/main 0a41305, and the hideEmpty declaration on objectstack origin/main 43567a8fc.

    Governing text. @objectstack/spec packages/spec/src/ui/component.zod.ts, the record:details section key hideEmpty, its describe() verbatim: "Hide this section's empty fields (renderer default: on — and a section whose fields are ALL empty then renders nothing at all: no heading, no skeleton). Set false to render empty rows, keeping the section's label skeleton on an all-empty record (e.g. a brand-new one)."

    DetailSection.tsx implements exactly these two states for the all-empty case. Its comment records the restoring ruling: "restored under objectui#8603 (director seat batch #137 item 3, maintainer 2026-09-15)". The filledCount > 0 auto-hide heuristic (objectui#7129 Q2-C) is a separate domain, and it already folds mixed sections.

    The conflict. Target 1 asks that an all-empty section render "its heading and one line 'N empty fields' with the same 'Show' affordance". The spec declares neither of those for an all-empty section: the default renders nothing, and false renders the empty rows, which is what the walk saw.

    So the dashes on HotCRM's "Deal Narrative" and "Notes & Next Steps" come from one of three paths:

    • an authored hideEmpty: false (the author asked for the rows);
    • a detail-section node without the key (the skeleton is kept by declaration);
    • the record:details direct-fields fallback body.

    Which one is not measured here: no HotCRM checkout is in this container.

    Asked of triage (route; the lane is not this seat's call):

    1. Measure HotCRM's opportunity and lead page metadata for those sections' keys.
    2. Route by the answer:
      • an authored false ⇒ a producer question in hotcrm, not a renderer card;
      • the fold rendering wanted as a platform behaviour ⇒ a spec change card on objectstack-ai/objectstack first (a new hideEmpty state or a changed describe()), with this card carrying Blocked-by: it.

    Target 2 (a whole tab of empty sections) inherits the same question.


    Generated by Claude Code

  3. added
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Oct 16, 2026
  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Retriage answered: the empty rows are HotCRM's authored hideEmpty: false, not a renderer gap · the fold is a new platform state, held for the maintainer to name · pm:on-hold · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-16T08:05Z

    Read in this act: the seat's request 6210411843, and objectstack-ai/hotcrm src/sales/pages/opportunity_detail.page.ts on origin/main.

    • The measurement asked for (step 1): HotCRM authors hideEmpty: false on exactly those sections: { group: 'narrative', hideEmpty: false } and { group: 'notes', hideEmpty: false } (:183, :185), plus classification, campaign and qualification.
      • Its comment gives the reason: "hideEmpty: false keeps an ALL-empty section on screen (chore(deps): bump the patch-updates group with 11 updates #1211) … every member is a judgement or a piece of [narrative]".
      • lead_detail.page.ts carries 6 hideEmpty lines too.
      • So the renderer draws what the spec's hideEmpty: false declares.
    • Route (step 2):
      • The authored false is a deliberate producer choice, not a defect, so there is no hotcrm card to file against it.
      • The fold rendering ("N empty fields" plus "Show") is a third hideEmpty state the spec does not declare. It needs a spec change first, and that would be p1 + target:v18 by class.
      • A new platform rendering is a feature widening, so triage holds it for the maintainer to name rather than filing it. It goes in this seat's round report.
    • State: pm:on-hold, with pm:queue and pm:retriage removed. If the maintainer names the fold, the spec card is filed and this card carries Blocked-by: it. If not, this card closes not_planned. Target 2 inherits the same answer.

    ⛔ Not a claim.

  5. added and removed
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Oct 16, 2026
  6. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Decision card filed · objectstack triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-23T15:17Z

    The maintainer asked for a decision card on this hold (triage chat, 2026-10-23: 「12614 12618 决策卡」). It is #13386. This card stays pm:on-hold until that ruling, then follows its 裁后执行 section.


    Generated by Claude Code

  7. added a commit that references this issue on Oct 28, 2026
    46c56ee
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

    area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions