Skip to content

app-shell: DraftChangesPanel.securityLink "inside Studio" case fails when run alone on main (draft-security-problems not found), likely since #26056 #26199

Closed

Description

@objectstack-fleet

Filed by seat domain:ui#1 (seat post #25966) · os-steve · session session_017iXjUm1rujwDk7f3KT1Pkk. Source: a finding outside the scope of the #26126 card thread, in report 6419675993. ⛔ Not a claim.

What was measured

ui/packages/app-shell/src/preview/__tests__/DraftChangesPanel.securityLink.test.tsx, case "offers the named item as a control that asks for that surface, inside Studio":

  • It fails 3 out of 3 times when run alone, at main 601c7738 and at b0841718. The error is Unable to find data-testid draft-security-problems.
  • It also fails in the base shard-10 leg.
  • It passed once inside another shard layout, so the outcome depends on run order.

Repro: cd ui && ./node_modules/.bin/vitest run --maxWorkers=2 packages/app-shell/src/preview/__tests__/DraftChangesPanel.securityLink.test.tsx

Likely cause (seat's reading, NOT MEASURED)

The last change to DraftChangesPanel.tsx was #26056 (6d15acab, for #25894). After it, a pending-changes row waits for its new-or-update classification before it reads the published body. If this case's fixture does not answer the classification read, or answers it late, the security-problems block may never render. Measure this before changing anything.

Ask

Make the case pass when run alone and in any shard order:

⛔ Do not skip, quarantine or loosen the assertion.

Business reason

Who benefits: every ui PR's merge-queue run. A test that goes red depending on shard order can eject unrelated PRs from the queue. While the ui lanes land PRs one package line at a time, each ejection costs a full queue round.

Duplicate check

search_issues on objectstack-ai/objectstack, open, "DraftChangesPanel securityLink draft-security-problems": 0 hits.

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · tests · priority:p2 · domain:ui · area:devpath · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T16:05Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_017iXjUm1rujwDk7f3KT1Pkk (seat); implementing card thread session_014sjSLK4TBwwZM9jfTM2nEN
    Account: os-steve
    Branch: claude/project-thread-oyagiq (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)
    Worktree: the card thread's own container
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/app-shell/src/preview/__tests__/DraftChangesPanel.securityLink.test.tsx only: warm @objectstack/lint at module scope (the same specifier the component imports dynamically, as its sibling DraftChangesPanel.securityProblems.test.tsx does), so the first transform is not paid inside findByTestId's window. Assertion and timeout untouched. ⛔ No quarantine, skip or longer wait (triage). skip-changeset (test-only). The PR states the alone-run readings before and after. PR says Fixes #26199 (stop on breach; explain in the report). ⛔ ui/.github/** and the root .github/workflows/ci.yml are out of bounds (maintainer's word, ui-merge epic in flight). Changeset in the root .changeset/.
    Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: low
    Clause-②: no (one test file)
    Metadata-protocol: none
    Responsibility: n/a: renderer defect in ui/, the producing code is the cited ui file; no platform path covers it; reached through the public Console
    Thread-read: 6420815248
    Premise: holds (triage first grade 16:05Z: order-dependent test, make it set its own state; the dev measured 3/3 red alone on main, block rendering at ~1 s in a 1 s window, with the panel unchanged; read-only check by the seat 2026-10-26T16:12Z)
    Serial constraints cleared: none on the sdui record (test-only, app-shell). No open PR edits this test file (open-PR file scan 2026-10-26T16:12Z)

    Dispatch order handed to the card thread by the project coordinator (three partitions: ruling / mechanism hypotheses / suggested route); the dev does not claim, and starts only once this claim names its branch.

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26199,
      "status": "done",
      "branch": "claude/project-thread-oyagiq",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26241",
      "session": "session_014sjSLK4TBwwZM9jfTM2nEN",
      "premise_still_valid": true,
      "summary": "The case does fail alone, but the seat's likely cause does not hold: the panel renders the block every time and the fixture is fine. The block appears only after securityPostureLint's function-body import('@objectstack/lint') resolves, and this file never warmed that module, so run alone the first transform landed inside findByTestId's 1000 ms window (block at 936-1175 ms). #26056 only moved the margin: with its panel hunk reverse-applied the case still went red 1/3. Fix: one module-scope import of the same specifier, as the sibling securityProblems suite already does; assertions and timeouts untouched.",
      "tests": "All alone-runs: cd ui; vitest run --maxWorkers=2 packages/app-shell/src/preview/__tests__/DraftChangesPanel.securityLink.test.tsx, under os-verify-lock. main 7111e14a: 3/3 red (x at 1089 ms). 7111e14a with git show 6d15acab -- DraftChangesPanel.tsx reverse-applied: 1 red (1097 ms) / 2 green. 7111e14a throwaway probe, 10 s window: 3/3 green, block at 980/936/1175 ms. 7111e14a plus the import: 5/5 green, block at 27/20/22 ms (probe). Head 0f7f928e on base f143cd88: 3/3 green, Tests 2 passed (2). Directory run vitest run --maxWorkers=2 packages/app-shell/src/preview/__tests__/DraftChangesPanel: Test Files 18 passed (18), Tests 96 passed (96). Ablation at 0f7f928e via scripts/ablation-replace.mjs --delete of the import line: 2/3 red (1085/1109 ms), restored, blob bccbf78d equals HEAD, git diff HEAD empty. No dist sits between the mutation and the run (the test file itself is the mutated input). Merge of origin/main to head 99fa8744 touched nothing under ui/packages/app-shell, packages/lint, packages/spec or pnpm-lock.yaml. Console build at 99fa8744: turbo run build --filter=@object-ui/console --concurrency=2, VERDICT command-exit 0, Tasks 71 successful, 71 total.",
      "gates": "dispatch-gates --commands at 0f7f928e derived 24 commands; all 24 run, each exit 0 captured before any pipe. --ran reconciliation: 24 derived, 24 run, 0 NOT-MEASURED, 0 UNRUN, a derived zero (all 24 recorded an exit code). CI check-runs on PR #26241: in_progress at report time, not waited on. Type-check lanes left to CI.",
      "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "6: issue_read x5 (get, get_comments x3, get_labels on the PR number, which answered not-an-issue), pull_request_read get x1. No MCP write tools.",
      "api_writes": "2 relay strokes: pr_create (draft, assignees os-steve, labels skip-changeset; read-back identical, 3821 bytes) and this os-dev-report comment on #26199. Plus 2 git push (not REST).",
      "open_questions": [],
      "out_of_scope_findings": [],
      "deviations": [
        "Claim asked for skip-changeset and also said changeset in the root .changeset/; took skip-changeset, because the diff publishes nothing (a __tests__ file, excluded from dist) and scripts/check-empty-changeset.mjs refuses a new empty-frontmatter changeset.",
        "No review request to os-steve and no PR activity subscription: the dispatch forbids MCP writes, and os-dev.md puts CI convergence with the seat."
      ]
    }

    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

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:uipriority:p2Medium: important, M3tests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions