Repository navigation
[Bug]: private-steward-scope mobile steps skip the Goal drawer, turning the required merge gate red on main #6795
Description
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
a54c030ee (main), introduced by 122436f67 (#6780).
Host or runtime surface
Not host-specific
LoopX area
Build, packaging, installer, or CI
Problem
The required checks job (a dependency of merge-gate) is red on main, and every PR whose core tests run inherits the failure. chat-bundle-browser (2) and dashboard-browser (2) both run the personal-workspace acceptance catalog (packaged and development UI); in private-steward-scope, #6780 added two post-reload steps after page.setViewportSize({width: 390, height: 844}). At phone widths Goal navigation is a closed off-canvas drawer, so the 设置 (Settings) button is not in the DOM until 打开 Goal 导航 (Open Goal navigation) is clicked. The new steps call settings() immediately, so Playwright waits 30 s and times out.
checks requires both lanes, and the active protect main ruleset requires merge-gate (the only other required status is Sign-off), so the gate that is supposed to protect every merge is red for every core-tests PR until this is fixed; the new mobile private-ingress acceptance coverage also never actually runs.
Impact scale: 2 required acceptance lanes (3 shards each) are red because shard 2 fails deterministically; merge-gate is 1 of only 2 required status checks in the branch ruleset; 39 PRs were open at filing time. Reproduced 2/2 locally, so this is not a flake.
Minimal reproduction
On a54c030ee (or any later main):
uv run --extra test python scripts/chat_bundle.py build --install
cd apps/presentation/dashboard
npm ci --ignore-scripts
./node_modules/.bin/playwright install chromium
LOOPX_PERSONAL_WORKSPACE_PACKAGED=1 \
LOOPX_PERSONAL_WORKSPACE_SCENARIO=private-steward-scope \
LOOPX_PLAYWRIGHT_PACKAGE="$PWD/node_modules/playwright" \
node ../../../examples/personal-workspace-browser-smoke.mjsThe same failure appears in the CI commands for chat-bundle-browser (2) and dashboard-browser (2).
Expected behavior
The scenario opens the mobile Goal navigation drawer before clicking Settings, then completes the gap / unavailable / verified readbacks; both required acceptance lanes pass.
Actual behavior
Both lanes time out at the first new mobile settings() call, which is the step at private-steward-scope.mjs:77 on current main. A debug probe on main at 390 px showed the visible controls start with 打开 Goal 导航, and no read-only notice is present, so this is the closed mobile drawer rather than a source or permission state.
Sanitized diagnostics
scenario-start=private-steward-scope
scenario-end=private-steward-scope duration_ms=34266
locator.click: Timeout 30000ms exceeded.
Call log:
- waiting for getByRole('button', { name: '设置', exact: true })
at settings (examples/personal-workspace-browser/private-steward-scope.mjs:38:67)
at Object.run (examples/personal-workspace-browser/private-steward-scope.mjs:77:90)
CI evidence: main run 39105810886 — chat-bundle-browser (2) job 117611797897 and dashboard-browser (2) job 117611797885 both fail on the same scenario and step.
Additional context
#6780 (122436f67) added the new mobile reload steps. The same settings() sequence already worked at desktop widths; only the post-reload mobile path is missing the drawer step. The fix is to open the drawer when .personal-mobile-menu is visible, matching the pattern already used by blocked-notice-settings.mjs, goal-deletion.mjs, monitor-readback.mjs, and typed-actions.mjs. I will send that focused PR.
This report was identified and reproduced by an AI agent operating under the operator's constraints; the commands and outputs above were run by the model agent.
Activity
test(workspace): open the mobile Goal drawer before the private stewa…