Repository navigation
ci(live-e2e): boot the workspace backend and run the live lane as the required Live E2E UI job - #27212
Conversation
The live lane's start-backend.sh now runs this tree's own built @objectstack/cli on the checked-out examples/app-showcase: HEAD console against HEAD backend. backend.env declares the app directory and no published version; the tag resolve, npm install and vitest override retire with the pin. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QSeKYoUcDM1MUzjdaCjt6U
…quired context A ci.yml job builds the workspace backend's closure and the Console (VITE_BASE_PATH=/), boots the backend through start-backend.sh, serves vite preview with the /api proxy and runs test:e2e:live:ci with --retries 0, gated as Build & E2E UI is. Its name joins REQUIRED_CONTEXTS and the two instruction surfaces that state the set; the Chromium-provisioning pin reads the new job too. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QSeKYoUcDM1MUzjdaCjt6U
…ve-e2e-workspace-backend
The runner context is not available in a job-level env:, so ci.yml did not validate and the CI workflow never started. The two steps that run the backend scripts now carry LIVE_BACKEND_DIR themselves. actionlint reports nothing on the result and the runner-context error on the previous head. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QSeKYoUcDM1MUzjdaCjt6U
Contract reviewServed-tier: Rendered by a contract-review subagent at CONTRACT_REVIEW_TIER (session ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Must-fix: none. Head check-runs at this reading: 61 check-runs — 52 success, 8 skipped (the opt-in and full-battery contexts, plus Implemented-by: VERDICT: PASS Generated by Claude Code |
The advisory-checks section of multi-agent-discipline.md, which AGENTS.md links to, still said nine; the filter job's comment said four ui jobs read its outputs. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QSeKYoUcDM1MUzjdaCjt6U
Contract reviewServed-tier: Delta review on the findings-only commit above the reviewed head ① Derived judgmentsThe delta is one commit touching two files, 4 insertions and 3 deletions, every changed line a ② Semver levelUnchanged: ③ Boundary flagsShould-fix 1 and 2 of record 6467449484 are closed by this commit. Should-fix 3 (pin the ④ Design judgment
Must-fix: none. Should-fix: none new; (3) from the prior record remains a follow-up. Runs on this head: a Implemented-by: VERDICT: PASS Generated by Claude Code |
席位核对 — Tier H · awaiting approval · domain:devx#2 · head
|
Fixes #27154
Clause-②: no
Metadata-protocol: none
维护者速读
@objectstack/cli启动examples/app-showcase后端(HEAD console 对 HEAD backend),已发布版本钉退役;ci.yml新增Live E2E UIjob,并登记进REQUIRED_CONTEXTS。ui/的 PR 全红(e2e: the MSW test in console-rendering.spec passes when the worker is absent (it is absent), and 18 of 22 live specs run nowhere in CI — delete the vacuous test and make the four live specs count #25914 实测 18.1.0 下 0/5);裁决 6464191239 字母 D 第 2 步要求改为工作区后端后再升为 required。.github/workflows/ci.yml、AGENTS.md);回滚 = 还原本 PR(job、注册行、两处名单文字、两个脚本)。新 job 超时上限 40 分钟由一次本地冷跑推得,首批 CI 数据后需复核。ui/e2e/live/ci/start-backend.sh(prepare 只校验构建产物、不再拉包)→ci.yml的live-e2e-uijob →scripts/check-required-contexts.mjs新注册行。Live E2E UI应为绿色,日志 “Run the live e2e specs” 一步显示5 passed。main的 ruleset 里把Live E2E UI勾为 required(席位做不了)。What changes
ui/e2e/live/ci/start-backend.shboots the WORKSPACE backend: this tree's built@objectstack/cli(throughexamples/app-showcase/node_modules/.bin/objectstack) runsobjectstack dev --seed-admin --fresh -p $LIVE_BACKEND_PORTfrom the checked-out showcase. Same default port (4010), same seeded sign-in readiness poll (300 s), same pid file, sostop-backend.shis unchanged and its PID contract holds.prepareno longer resolves a release tag, sparse-checks-out a release ornpm installs published tarballs; it checks the build prerequisite (the app's config, the installed CLI bin,packages/cli/dist/index.js) and refuses by name with the build command when one is missing. The vitest override and the stamp retire with the install.ui/e2e/live/ci/backend.envdeclaresLIVE_BACKEND_APP=examples/app-showcaseand no published pin; its comment records whyOBJECTSTACK_VERSIONretired..github/workflows/ci.ymladdslive-e2e-ui/Live E2E UI: install, build the CLI + showcase closure and the seven packages the Console builds against,vite buildthe Console withVITE_BASE_PATH=/, provision Chromium throughensure-chromium-ready.sh, boot the backend, servevite previewon :5190 withDEV_PROXY_TARGET=http://localhost:4010, and runpnpm --dir ui run test:e2e:live:ci --retries 0. Triggers: the workflow's existingpull_requestandmerge_group(plus push/schedule, as every job in the file).if:is Build & E2E UI's condition verbatim (ui_tree,ui || ui_consumers, with!cancelled()). Nocontinue-on-error, no retry wrapper, no spec edited or skipped. Caches are restore-only (pnpm store, Build Core's turbo seed, the Playwright browsers Build & E2E UI saves).scripts/check-required-contexts.mjs: aREQUIRED_CONTEXTSrow forci.yml:live-e2e-ui → 'Live E2E UI', and the name added to the twostatesTheSetinstruction surfaces'mustName;AGENTS.md(nine → ten contexts) and.claude/skills/pm-dispatch/references/platform-readings.md(九个 → 十个) name it.ui/scripts/__tests__/ensure-chromium-ready.test.tsreads the new job as a second Chromium provisioner (its comment saidlive-e2e.yml"comes back here with that port");helpers/root-ci.tsexports the job id asUI_LIVE_E2E_JOB, outsideUI_JOBS.docs/agents/multi-agent-discipline.md(advisory checks ride through) now counts ten required contexts, and theci.ymlfilterjob comment counts five* UIjobs (Type Check UI, Test UI, Lint UI, Build & E2E UI and Live E2E UI).Tests
Measured before wiring, on the workspace boot, at commit
7a48258d(the re-shaped scripts; base2f96d874). Setup:pnpm install --frozen-lockfile; turbo build of the CLI + showcase closure and the seven Console packages (65/65 tasks, 384 s cold under the shared-box lock);VITE_BASE_PATH=/ vite buildofui/apps/console(119 s);start-backend.shexit 0, ready in 19 s (@objectstack/cli 18.2.0workspace);vite preview --port 5190withDEV_PROXY_TARGET=http://localhost:4010;LIVE_API_URL=http://localhost:4010,LIVE_APP_URL=http://localhost:5190; one backend for all five runs, as one CI job boots once.5/5 runs green, 5/5 tests per run; Playwright's own totals 24.1 s / 20.5 s / 20.7 s / 21.2 s / 19.9 s. Wall times are shared-box seconds. Teardown:
stop-backend.shstopped the recorded pid; the preview processes I started were stopped by pid.Derived gates (
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat191e9d5e, after mergingorigin/main): 87 commands, each exit captured before any pipe. 85 exit 0, includingpnpm check:required-contexts(listsci.yml:live-e2e-ui → 'Live E2E UI'),check:workflow-status-functions,check:stall-guard-budget,check:pm-expected-skips,check:aggregator-roster,check:bash32-floor,check:ci-filter-parity,check:pm-skill-ratchet, andpnpm --dir ui exec vitest run scripts/(175 files passed, 2 skipped; 5020 tests passed). Two did not measure the diff:check:dual-build-cjs-loadsexit 3 (PREREQUISITE NOT MET: no fullpnpm buildhere) andcheck:dts-closureexit 1, which named onlyui/apps/console/plugin.d.ts, missing from thedist/my barevite buildleft behind; with that ignored directory removed it exits 0 (233/233 declaration files present).--ranwith exit codes: 87 derived, 86 run, 1 NOT-MEASURED (the exit 3). No package changes, so no changeset (skip-changeset).On head
3f0b396f(the text patch round):CIpull_request run 40678137074;Live E2E UI(job 122782123641) concluded success in 87 s of job wall time (Console build 11 s, backend boot 10 s, specs 18 s).Acceptance notes
Live E2E UIto themainruleset's required status checks, in the same sitting as the merge (TheESLintrequired context carries ~54check:*gates, so every one of their failures mis-routes its own diagnosis — and the rename needs a Settings change no agent seat can make #9325 two-step). Until then--verify-required-setreports the row in direction A (pinned, not required), report-only.timeout-minutes: 40is derived from one cold local run (≈730 s ⇒ max(36.5, 27.2) ⇒ 40, the rule above Lint UI), since the job has no CI population yet; the derivation sits beside the job and asks to be re-derived from the first population. Follow-up: [devx] Live E2E UI follow-ups: pin its timeout ceiling from the first CI population, and retire the stale backend-pin header in saved-view-filter.spec.ts #27228 (re-derive from at least 20 CI runs and pin it inturbo-cache-save-bound.test.ts).ui/and the sevenui_consumerspackages (for examplepackages/runtime) skips this job, so a backend regression that breaks the live specs surfaces on the nextuiPR or onmain's push run. Recorded, not widened.ui/e2e/live/saved-view-filter.spec.tsstill describes the retiredOBJECTSTACK_VERSIONpin. Follow-up: [devx] Live E2E UI follow-ups: pin its timeout ceiling from the first CI population, and retire the stale backend-pin header in saved-view-filter.spec.ts #27228.vite previewruns in the background for the rest of the job and is reaped by the runner at job end; the backend is stopped bystop-backend.shunderif: always().Verification
Read this PR's
Live E2E UIcheck: steps "Boot the workspace backend" (endsready: seeded sign-in answered on :4010) and "Run the live e2e specs" (ends5 passed).Generated by Claude Code