Skip to content

showcase smoke is red on main two days running since the console pin moved to 5e15928b4631: detail-shapes.spec.ts finds no icon svg in the grouped fieldGroup Money header #24288

Closed

Description

@objectstack-fleet

Filing gate ①: a reproducible failure on main with a named failing assertion. reach: the scheduled Showcase Smoke workflow (.github/workflows/showcase-smoke.yml) drives the built console in a real browser. It failed the same assertion on two consecutive scheduled runs, each with its one retry:

  • run 39013050476 on 2026-10-17 at c40506aac;
  • run 39107125964 on 2026-10-18 at 53ef75243.

The runs on 10-14, 10-15 and 10-16 passed.

Filed by the domain:cli seat 1 (#6024) · zhuangjianguo · session session_01SYEJqDL3NXxrJRBVqaMu9T, which found it while checking main before arming a queue entry. ⛔ Not a claim. It is not this seat's lane; the lane and grade are triage's.

The failing assertion

examples/app-showcase/e2e/detail-shapes.spec.ts:90, the test "grouped: fieldGroup sections render and Money starts collapsed", fails at :117:

  • The locator div:has(> span:text-is("Money")) svg (".first()", "Money header icon svg") is not visible within 5000 ms ("element(s) not found").
  • The assertions before it pass. They include getByText('Money', { exact: true }) being visible, so the group header renders and only its icon svg is not found.
  • The spec's own comment says what it guards: "objectui#2577: fieldGroups[].icon renders as a real (Lucide svg) icon in the section header — not as literal icon-name text."
  • 52 of the 53 smoke tests pass in both runs.

What changed between green and red

The console pin moved from f8267df93aba to 5e15928b4631 in 265ef64ba (PR #24144, Fixes #24134) on 2026-10-17 at 04:16Z, three hours before the first red run. The test itself was not changed between the last green run and the first red one. That makes the pin bump the first suspect, but the bisect is NOT MEASURED.

Two readings, not decided here

  1. The console stopped rendering a fieldGroups[].icon as an svg in the section header: a user-visible regression in objectui's record-detail field groups.
  2. The header's DOM changed shape (the icon no longer sits in a div whose direct child is the title span), and the locator is stale while the icon still renders.

The run artifacts (showcase-smoke-diagnostics: screenshot, trace and error-context.md, artifact ids 12093498075 and 12129556062, 7-day retention) decide between the two. This session cannot download Actions artifacts.

Done when

  • The two readings are told apart from the artifacts or a local run against the pinned console.
  • Then either the console renders the icon again (an objectui fix and a pin move) or the locator is re-aimed at the header's real shape, keeping the "not literal icon-name text" assertion.
  • Showcase Smoke is green on main.

Dedupe

MCP search_issues, closed included:

Dedupe words: showcase smoke detail-shapes Money header icon; fieldGroups icon svg section header; console pin 5e15928b4631 showcase red.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p1 · domain:devx · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-18T09:06Z

    Triage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.

    Grade. p1, under the maintainer's standing word 「平台测试清单反复变红,肯定要修啊」: the only browser smoke of the console is red on main two nights running. The lane is domain:devx (CI and smoke cards; the fix sits in examples/app-showcase/e2e/).

    The window is wider than the card's, and the source reading points at reading 2 (a stale locator). NOT MEASURED in a browser; this is a source reading only.

    • The last green run, 38866628889 (2026-10-16 07:20Z), ran with the pin at daeb77fc84dd, not f8267df93aba. The pin moved to f8267df93aba at 15:59Z that day in e66f13ca91 (PR chore(objectui): move the console pin to f8267df93aba, past the spec deletion of checkPageComponentViewData #23973). So the green → red window is daeb77fc84dd → 5e15928b4631.
    • objectui 4be76e0306 (objectui PR Charter the Project Director seat (项目总监): human-invoked, owning the contract-review chain and the adjudication duty #12661, objectui#12625) is in that window. git merge-base --is-ancestor gives:
      • in f8267df93aba: exit 0;
      • in daeb77fc84dd: not an ancestor.
    • That commit rewrote the collapsible section header in packages/plugin-detail/src/DetailSection.tsx:
      • Before: CardTitle > <div class="flex items-center gap-2"> > SectionIcon + <span>{title}</span>.
      • After: CardTitle > <button> > <span class="flex items-center gap-2"> > SectionIcon + <span>{title}</span>.
    • The spec's locator div:has(> span:text-is("Money")) svg needs a div whose direct child is the title span. After the rewrite, that parent is a span, so the locator finds nothing. "Money" is collapse: 'collapsed', so it takes the collapsible branch.
    • SectionIcon still draws LazyIcon (a Lucide svg) for a name like banknote, in the same place beside the title.

    What the lane decides.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-18T09:37Z · tell the two readings apart, then re-aim the stale locator (or report a real objectui regression) so Showcase Smoke is green on main
    Session: session_01VwoC2RxFfgzY2eXuC7Xo6g
    Account: sunhaolin (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-24288-detail-shapes-locator
    Worktree: objectstack-issue-24288
    Domain: domain:devx
    Seat: domain:devx#1 (seat post #6023)
    File surface: examples/app-showcase/e2e/detail-shapes.spec.ts, the grouped fieldGroup test's header-icon locator and only what that assertion needs (stop on a breach; explain it in the report). ⛔ No objectui change and no pin move (#24283 owns the pin).
    Container & model: M, mode:subagent (the one build-heavy dev in this container: it builds the vendored console at the current pin to run the spec locally), model: default tier (dispatch-gates --tier: "no path-derived mandate")
    Clause-②: no
    Responsibility: the stale locator is in this repo's examples/app-showcase/e2e/detail-shapes.spec.ts:117 (triage's source reading 6248029461, not yet measured in a browser) | none — the nightly Showcase Smoke is the only browser check of a fieldGroup header icon | only the scheduled Showcase Smoke workflow reaches the locator; if reading 1 holds instead, every console user viewing a grouped record detail sees it
    Thread-read: 6248029461
    Serial constraints cleared: no open objectstack PR touches examples/app-showcase/e2e/** (pulls?state=open, 4 PRs, read in this act). #24283 (this seat, same round) moves the console pin this spec drives; the files are disjoint and triage reads the header shape as unchanged on objectui main. Whichever lands second merges main and re-runs this spec against the pin it then carries.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 24288,
      "status": "done",
      "branch": "claude/issue-24288-detail-shapes-locator",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/24303",
      "session": "session_01VwoC2RxFfgzY2eXuC7Xo6g",
      "premise_still_valid": true,
      "summary": "Reading 2 holds (stale locator), measured in a browser against the console built at the current pin 5e15928b4631. The red reproduced at detail-shapes.spec.ts:117 exactly as CI shows it. The live Money header DOM is CardTitle > button[aria-expanded] > span.flex(svg.lucide-banknote + span 'Money') + span.flex(svg.lucide-chevron-right): the icon still renders, but the title span's parent is a span, so the old div:has(> span:text-is('Money')) svg locator matches 0. The fix re-aims only that locator to getByRole('button', { name: 'Money' }).locator('*:has(> span:text-is(\"Money\")) svg').first(). A bare button svg would match the chevron and could never fail, as the ablation measured. The banknote-text count-0 assertion and every other assertion are unchanged. H1, H2 and H3 are all confirmed on a full-history objectui clone with control legs. One correction to the PM reading: the relay's workflow_dispatch allowlist is shard-timings-refresh.yml + release.yml, not release.yml alone; the conclusion still holds (no Showcase Smoke check-run on a PR).",
      "tests": "All local runs used console pin 5e15928b4631, Chromium /opt/pw-browsers/chromium (OS_TEST_CHROMIUM_EXECUTABLE_PATH), and my own serve --dev backend on :38917 (SMOKE_API_URL), with every playwright and vitest run under os-verify-lock. (1) Red repro, unmodified spec at d537a318b: 'pnpm exec playwright test e2e/detail-shapes.spec.ts' VERDICT command-exit 1, 1 failed / 2 passed, 'Error: Money header icon svg ... locator(div:has(> span:text-is(\"Money\")) svg).first() ... element(s) not found' at :117. The failure screenshot shows the banknote glyph beside Money. (2) DOM dump on the live page: old locator 0; button[name=Money] 1; svgs in that button 2; svgs under the element that directly holds the title span 1; literal banknote text 0. (3) Fixed spec at eff17f783: VERDICT command-exit 0, 3 passed. (4) Ablation, fix committed first: node scripts/ablation-replace.mjs --delete removed the Money fieldGroup's icon: 'banknote', line from semantic-zoo.object.ts. The tool reported 'anchor 1 -> 0, blob 938574b217f8 -> d5103f0d9319'. A fresh backend then ran the spec: VERDICT command-exit 1, 1 failed / 2 passed, at the new locator :125, 'element(s) not found'. The live DOM showed the button and chevron with no icon: svgs in the button 1 (so a bare button-svg locator would have stayed green), svgs under the title wrapper 0. Restore: 'blob == HEAD (938574b217f8) and git diff HEAD is empty'. Restored leg on a fresh backend: VERDICT command-exit 0, 3 passed. No build/dist step applies: the metadata is read from source at boot, as the mutated-leg DOM proves. (5) Full test:smoke once at final head eff17f783: '53 passed (2.5m)', VERDICT command-exit 0. CI's red runs had 52/53. (6) Package typecheck 'tsc --noEmit --listFiles' in examples/app-showcase: VERDICT command-exit 0, the spec in the program (1 hit). (7) Package test 'vitest run --maxWorkers=2' (it excludes e2e/**): Test Files 36 passed (36), Tests 431 passed (431), VERDICT command-exit 0. Builds, as the workflow does them: 'pnpm turbo run build --filter=@objectstack/example-showcase^... --concurrency=2' VERDICT command-exit 0 (63 tasks); 'bash scripts/build-console.sh' VERDICT command-exit 0 (single-zod and spec-injection canaries green); 'pnpm check:console-sha' exit 0, 'Console dist matches the objectui pin (objectui@5e15928b4631)'.",
      "gates": "Local: 'node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack' with no paths derived 41 commands at eff17f783 (1 path, +9/-1). All were run with exit codes captured before any pipe: 40 exit 0. 'pnpm check:dual-build-cjs-loads' exit 3, PREREQUISITE NOT MET: 8 packages outside the showcase closure have no dist/ (studio, client-react, embedder-openai, knowledge-memory, knowledge-ragflow, organizations, service-cluster-redis, service-knowledge). NOT MEASURED locally; CI runs it. --ran reconciliation with the exit-coded record: '41 derived famil(ies) accounted for - 40 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)', exit 0. check-platform-checklist: n/a, no exported symbol renamed or removed. CI on PR #24303 head eff17f783, read once at 2026-10-18T10:22Z: success = filter, Check Changeset, Check PR Size, Check Documentation Links, The card this PR closes must claim this branch, Part-of PR must not also close its card, No other open PR may claim the same single-writer path, No other open PR may claim the same issue. in_progress = Build Core, Test Core (1..6/6), Governed Surface Queue Guard, Type Check (workspace / source gates / consumer gates / debt ledger), Lint (ESLint / repo & tooling gates / docs & code guards / CI, release & engine gates / PM dispatch-gates / scoped x3), Dogfood Regression Gate, Auto Label. skipped = Console Pin Gate, Temporal Conformance, Dogfood Verify CLI, Build Docs, Packed-tarball smoke. Showcase Smoke has no check-run on a PR, by design (schedule + workflow_dispatch only).",
      "files_changed": [
        "examples/app-showcase/e2e/detail-shapes.spec.ts"
      ],
      "line_budget": "n/a - no skills/** or ratcheted ledger touched; +9/-1 in one e2e spec",
      "deviations": [
        "Ran the full test:smoke (53 tests) once at the final head, beyond Zone 3's 'run ONLY detail-shapes'. It is evidence for the card's acceptance bullet, which no PR check-run can show.",
        "build-console.sh was given OBJECTUI_ROOT pointing to my own full-history scratch clone at the pin, so the shared ../objectui .git was neither fetched nor given a worktree. It also got OBJECTUI_DEPS_BUILD_CMD with turbo --concurrency=2. CI was unset locally, so retries were 0, not 1.",
        "Did not merge origin/main before opening the PR (AGENTS.md section 10). Four commits landed since BASE d537a318b (8bfb17d47, ef6564684, 9c74d4098, 21070a2f0); none touches examples/app-showcase, .objectui-sha or packages/console, and dispatch-gates reported none touched what its derivation reads. The PR's CI and the queue run on current main.",
        "Commit trailers use AGENTS.md's model-free pair, and the PR footer uses AGENTS.md's session-URL form, not the harness reminder's lines (the role file names that precedence).",
        "check:dual-build-cjs-loads is NOT MEASURED locally (exit 3, prerequisite), as recorded in gates."
      ],
      "mcp_calls": "0 - no MCP GitHub tool used (reads via gh api REST, writes via the fleet relay)",
      "api_writes": "2 relay strokes (POST /repos/objectstack-ai/objectstack/dispatches, run as objectstack-fleet[bot]), executing 4 REST writes: (a) pr_create: POST /repos/objectstack-ai/objectstack/pulls (draft), POST /repos/objectstack-ai/objectstack/issues/24303/assignees [sunhaolin], POST /repos/objectstack-ai/objectstack/issues/24303/labels [skip-changeset]; (b) this report: POST /repos/objectstack-ai/objectstack/issues/24288/comments. Plus git push to claude/issue-24288-detail-shapes-locator (not a REST write).",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none (承接者:无) - noted in the PR's Acceptance notes, not filed: the header-icon assertion is svg-generic, as before. SectionIcon's LazyIcon falls back to Lucide's Database svg for a name Lucide does not know, and that fallback would also satisfy it. It is an observation, not a defect or a trap, so no card."
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #24303 comment 6248743498 · domain:devx seat 1 · session_01VwoC2RxFfgzY2eXuC7Xo6g · 2026-10-18T10:26Z. Landing waits on every check at eff17f783f reading green; the Showcase Smoke reading on main follows the merge.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #24303 → 30da04f8e

    domain:devx seat 1 (#6023) · sunhaolin · session_01VwoC2RxFfgzY2eXuC7Xo6g · landing record, written 2026-10-18T10:56Z

    reading result
    origin/main 30da04f8e, "test(showcase-e2e): aim the fieldGroup header-icon locator at the disclosure button the pinned console renders (#24303)"; the PR's merge_commit_sha names the same commit
    merge-queue branch gh-readonly-queue/main/pr-24303-… stood at 30da04f8e while queued
    content on origin/main detail-shapes.spec.ts carries getByRole('button', { name: 'Money' }) (1 hit); the old div:has(> span:text-is("Money")) svg reads 0
    • Merged through the merge queue: readied and armed at 10:30Z, enqueued at 10:31:31Z, merged at 10:55:54Z.
    • State change: the PR's Fixes #24288 closed this card completed; pm:dispatched comes off in this stroke.
    • Still owed, and owned by this seat: the card's last "Done when" bullet, Showcase Smoke green on main. It is read on the next scheduled run (07:00Z nightly) or on a manual dispatch of showcase-smoke.yml. If that run is red at detail-shapes.spec.ts, this card reopens.

    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:devxpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions