Skip to content

ci(ui-merge): Type Check UI is red on every PR whose ui affected-scope is empty — type-check:vitest-setup compiles against unbuilt @object-ui/* dists after turbo built nothing (bill item 49) #25855

Closed

Description

@objectstack-fleet

Filing gate ① (CI gate false-red, reach: PR runs on main) + ④: aftercare of the cutover #25752 (pm:epic; epic PM session_01RSDL3SFtJaKzcymvCD8RsU). Part of #25677. Touches .github/workflows/ci.yml = Tier H: GOVERNED_APPROVERS review, the PR stops at draft.

谁付代价(业务筛): the maintainer wants Type Check UI in the required set (procedure #25752 step 6) and it was held back at the sitting only because of this red (ruling: add Lint UI + Build & E2E UI now, Type Check UI after the fix). Until then a spec change that breaks the Console compile is caught only by Build & E2E UI, and every workflow-only or root-only PR that touches a ui_consumers path shows a red check that means nothing.

Measured

Wanted

  1. In ci.yml type-check-ui: either build the packages tsconfig.vitest-setup.json resolves before the vitest-setup step (turbo run build --filter=@object-ui/components --filter=@object-ui/fields --filter=@object-ui/plugin-dashboard --filter=@object-ui/plugin-grid --filter=@object-ui/i18n with the turbo cache the job already restores), or make type-check:vitest-setup resolve those packages from source (paths in ui/tsconfig.vitest-setup.json) — the seat measures both and says which is cheaper per run; ⛔ do not skip the step or narrow the job's if:.
  2. The job's own gate rosters follow (check-ci-filter-parity, check-expected-skips, check-step-collectors, check-workflow-step-name-quoting); each --self-test 0.
  3. Prove it on this PR (which changes no ui/ package, so the affected-scope is empty by construction): Type Check UI green here = the fix.

Acceptance

  • Type Check UI green on this PR and on a ui/-touching PR of the same day; the derived gate list for the diff exits 0.
  • On the card: the per-run cost delta of the chosen fix (job duration before/after), so the maintainer can add the context to the required set (a separate settings step, after this merges; the registry row rides the same two-step as the step 6 card).

Size: S. Clause-②: no. Metadata-protocol: none.

Dedupe

search_issues 2026-10-26 00:29Z 「Type Check UI red empty ui affected scope type-check:vitest-setup TS2882 unbuilt @object-ui packages」: 0 hits. Bill item 49 in /mnt/project-files/d1-merge/out/5-cutover-bill-notes.md is the only record. New.

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: epic #25677 round 7 (cutover aftercare card threads; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」) 2026-10-26T00:43Z
    Session: session_01RSDL3SFtJaKzcymvCD8RsU
    Account: os-tesla
    Branch: claude/project-thread-zt7jcy (the card thread's designated branch in objectstack-ai/objectstack — the thread can push only this branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25855
    Domain: domain:devx
    Seat: epic:#25677
    Scope: the whole card — ci.yml type-check-ui builds the five packages tsconfig.vitest-setup.json resolves (components, fields, plugin-dashboard, plugin-grid, i18n) before the vitest-setup step; Tier H (draft, os-zhuang + hotlong); the gate rosters that read the job follow
    Why now: Type Check UI is red on every PR whose ui affected-scope is empty (PR B f973a4f), which keeps the context out of the required set
    Container & model: S, mode:thread (thread session session_01DoFgrZuLrgVbaH4Z7Fb3Mu; order: this card's body, FRAME.md applies), model: opus, effort: xhigh
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — epic step
    Thread-read: none
    Serial constraints cleared: #25853 touches scripts/check-required-contexts.mjs, not ci.yml; the next #25712 PRs touch ui/.github, not the root ci.yml type-check-ui job

  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 25855,
     "status": "done",
     "branch": "claude/project-thread-zt7jcy",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/25856",
     "session": "session_01DoFgrZuLrgVbaH4Z7Fb3Mu",
     "premise_still_valid": true,
     "summary": "ci.yml type-check-ui gains one unconditional step before the vitest-setup step: turbo run build --concurrency=4 for @object-ui/components, fields, plugin-dashboard, plugin-grid and i18n (52 tasks with their ^build closure). The source-paths route was not re-measured: ui/tsconfig.vitest-setup.json's own paths comment records it at 484 errors / 318 foreign files (30 with the full alias map, 24 of them noImplicitAny residue), so only the build route can be green. Job if: unchanged, no step skipped.",
     "tests": "Proof run: #25856 head aeadd97e5f, CI run 40251065567, Type Check UI job 121342966510 green in 3m18s with an empty ui affected scope ('Run type-check over the ui packages' 1 s); the new step replayed 52/52 cached in 314ms (FULL TURBO); vitest-setup step green in 5 s. Before: PR B f973a4f3fd run 40245604632 red (7m22s job, type-check step 0 s, vitest-setup red). Same-day ui-touching run: #25852 6015709368 run 40248884869 green (12m20s; type-check step 7m43s built the five), without this step; on such a run the new step is a cache replay of what the type-check step just built. Local: cold build of the five 52 tasks / 0 cached 7m07s, warm 52/52 cached 1.1 s, then pnpm --dir ui run type-check:vitest-setup exit 0 in 5 s.",
     "cost_delta": "Cache hit (the normal PR case: restore-keys fall back to main's type-check-ui cache): +0.3-1 s per run. Cache miss: the build cost the type-check step would otherwise pay for an affected scope, measured locally at 7m07s cold for the 52-task closure; it falls on runs whose restored cache lacks these outputs.",
     "gates": "dispatch-gates --commands (56) run locally at aeadd97e: 55 exit 0, pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (no full workspace build) = NOT MEASURED locally; CI Build Core runs it: success. --ran reconcile: 56 accounted, 55 run, 1 NOT-MEASURED, 0 UNRUN. Required contexts on aeadd97e: Lint & Repo Gates success, TypeScript Type Check success, Test Core 8/8 success, Build Core success, Governed Surface Queue Guard success. Advisory: Type Check UI success, Lint UI success, Build & E2E UI success; Test UI 3/16, 8/16, 9/16 failure, identical on main (run 40247794069) and not this diff's (3/16 owned by #25852, 8/16 + 9/16 by #25712 PR 2c); standing-down comment 6405840432. List: /mnt/project-files/d1-merge/out/25855-gates-ran.list",
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "0 MCP GitHub writes; MCP reads only (issue_read, get_job_logs, search_pull_requests, search_issues, subscribe_pr_activity)",
     "api_writes": "3 — relay pr_create (#25856, assignee os-tesla, label skip-changeset; governed follow-up requested os-zhuang + hotlong), post-stamped comment 6405840432 on #25856, this os-dev-report comment on #25855; plus git push",
     "deviations": "Edited in the primary clone on the thread branch instead of a dedicated worktree (single-agent container); the cold build ran outside os-verify-lock (no other agent in this container).",
     "open_questions": [],
     "out_of_scope_findings": [
      "carrier: #25852 (Test UI 3/16) and #25712 PR 2c (Test UI 8/16, 9/16) — noted, not filed"
     ]
    }

    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

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxpm:epicpriority:p1High: required for production / M2tooling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions