Repository navigation
Description
Impact
The Release Artifacts workflow's build job fails in "Exercise the installed page in a real browser" on recent upstream heads after #8003. The failure skips upload-release and publish-pypi, so maintainers cannot produce release uploads or PyPI artifacts from main. Four recent Release Artifacts runs show the same 30-second timeout, and the scenario fails deterministically after the second sequential research-analysis read was introduced.
Preflight
- I searched existing issues and discussions for this behavior.
- This report is not an unpatched security vulnerability.
- The report and attachments contain no credentials or private/internal material.
Issue origin
Observed or reproduced in a real environment.
LoopX version or commit
Current main at ed2e45913 (the regression entered with merge 2087f540b / #8003). Failing Release Artifacts runs were observed at e726033d, 5ea23c98, 32fba350, and dee5bef2.
Host or runtime surface
Not host-specific (release CI browser smoke).
LoopX area
Build, packaging, installer, or CI.
Problem
#8003 added a second research-analysis read when a pack has no result: readAnalysisSnapshot first reads the language-scoped pack, then reads the original pack without output_language (apps/presentation/dashboard/src/features/personal-workspace/goal-research-analysis.tsx:51-54). The packaged-browser fixture in examples/personal-workspace-browser/research-route-reading.mjs creates a pending promise for each loading-state research-analysis GET, but releaseLoading retains only the last resolver. With #8003's second read, one request stays blocked after the loading state is released. The analysis button remains disabled and the scenario times out.
Minimal reproduction
cd apps/presentation/dashboard
npm install
npm run build:chat
cd ../..
LOOPX_PERSONAL_WORKSPACE_PACKAGED=1 \
LOOPX_PERSONAL_WORKSPACE_SCENARIO=research-route-reading \
node examples/personal-workspace-browser-smoke.mjsThe command uses the packaged dashboard bundle and the repository's synthetic browser fixture.
Expected behavior
The research-route-reading scenario completes for every language, width, and route state. In the loading state it proves the action is disabled, then releases the state and proves the action becomes enabled.
Actual behavior
The scenario hangs in the loading state and exits after the 30-second locator timeout:
locator.waitFor: Timeout 30000ms exceeded.
waiting for locator('.research-history').locator('.research-analysis-entry-actions > button:not(:disabled)') to be visible
Sanitized diagnostics
Failed Release Artifacts runs (public CI):
- https://github.com/loopx-project/loopx/actions/runs/41796031610
- https://github.com/loopx-project/loopx/actions/runs/41796375377
- https://github.com/loopx-project/loopx/actions/runs/41805576936
- https://github.com/loopx-project/loopx/actions/runs/41806118415
The failing job is build; upload-release and publish-pypi are skipped after it fails. The same browser scenario passes locally when both loading reads share one releasable gate.
Additional context
This is a follow-up to merged #8003. The issue is a test-harness regression, not a product behavior change: the production read path and fixture data are unchanged.
Importance
- Impact scale: release-blocking CI failure in the
Release Artifactsworkflow; four recent release runs fail at the same step, and downstream publish jobs are skipped. - Affected parties: release maintainers and downstream users waiting for GitHub release uploads or PyPI artifacts.
- Persistence: deterministic reproduction at multiple heads after fix(workspace): ground research reading in real benchmark state #8003, not a one-off flake.
- Maintainer priority: release packaging is a required maintainer workflow; this prevents a deliverable release rather than adding optional polish.
- Evidence: public run links above, the exact selector timeout, and the local before/after reproduction.
Activity
coordination: record agent-a5b2 issue loopx-project#8032 and PR loopx…
LIHUA919 commentedon Nov 8, 2026
Verified resolved on current main: the regression was fixed by
f04ec308f(2026-11-04, "fix(smoke): release original analysis reads after loading") which releases the original-analysis read after loading, and theRelease Artifactsworkflow has since completedsuccess(2026-11-08 02:53 run on24ca29f4e; the only non-green runs after the fix were cancelled supersessions). Release uploads and PyPI artifacts are producible from main again. Looks closeable — leaving that to a maintainer.