fix(proxy): recover lifecycle and retire the legacy dashboard - #16
fix(proxy): recover lifecycle and retire the legacy dashboard#16DingDingChae wants to merge 4 commits into
Conversation
OpenCodex used to flip the OPEN sign while the kitchen was unplugged: restart could stop successfully and never replace the proxy, service metadata could impersonate liveness, and automatic launchers pinned a busy preference. Make stop/restart fail closed, preserve supervisor ownership, require stable identity health, auto-hop safely, and leave foreign listeners alone. Replace the legacy dashboard with the Material 3 shell, add credential-safe manual remote connection, back every new surface with authenticated management and headless CLI parity, harden exports and local-machine gates, and make updater version resolution abort before lifecycle changes. The old bundle has now been shown the door instead of being allowed to haunt the lobby. 以前個 proxy 掛住『營業中』牌,但廚房連電都未插:restart 可以停完就收工、service 紙牌又扮到好似真係在線。依家 stop/restart 會查清身份同健康先收貨,自動啟動撞 port 會醒目轉枱,仲唔會趕走隔籬街坊。 舊 GUI 今次真係執包袱,Material 3 正式接更;手動 remote IP、管理認證、CLI 對等、安全 export 同 updater 閘門一齊補齊。隻舊 bundle 再想扮鬼嚇人,都已經冇門口畀佢入。
🔐 Maintainer review request / 維護者審核請求Important
GitHub rejected formal review requests for @Ingwannu, @Wibias, and @lidge-jun with HTTP 422: “Reviews may only be requested from collaborators.” The repository permission endpoint currently reports each listed maintainer at
請列於 |
Keep success diagnostics off stdout so npm pack --json remains valid machine-readable JSON, and normalize the macOS temporary-directory expectation to the canonical path returned by the package lookup. The pack manifest no longer trips over a cheerful sentence, and /var stops pretending it has never heard of /private/var.\n\n將成功訊息搬離 stdout,令 npm pack --json 保持真正可讀嘅 JSON;macOS 臨時目錄測試亦跟返 package lookup 嘅 canonical path。pack manifest 唔再俾一句開心提示撞爛,而 /var 亦唔使再扮唔識 /private/var。
React Doctor's changed-file fallback runs a full scan when a pull request contains no React files, so packaging-only changes were reported with unrelated findings and the check turned red. Limit the pull-request trigger to gui/** while retaining the full-tree health scan for pushes to main.\n\n冇改 GUI 嘅 packaging PR 俾 React Doctor 當成全餐,無辜食到一大堆 unrelated findings;而家 PR 只喺 gui/** 變動時開餐,main push 仍然照做 full scan。
🧪 CI-gate correction pushedCommit e9344f72 scopes the React Doctor pull-request trigger to gui/**. The previous run 31276738715 had no GUI files in its change set, but the action's empty-file fallback performed an unrelated GUI scan and exited with SCAN_STATUS=1. The full-tree scan remains enabled for pushes to main. Local verification: bun test --isolate tests/ci-workflows.test.ts — 64 tests, 662 assertions; git diff --check passed. The new React Doctor run 31278350443 and the cross-platform run 31278350304 are still running. This comment does not claim green CI or security approval. |
❌ React Doctor verification — 2026-08-08T17:15:00-04:00\n\nRun 31278350443 completed failure at commit �9344f72: the action finished with SCAN_STATUS=1 against the PR's genuinely GUI-heavy diff. The job log exposes no React Doctor finding text—only the failing exit and the Node 20 deprecation annotation—so I am not inventing a diagnosis from an opaque report. The workflow path filter is present and the action did receive directory: gui, scope: changed, and base c0ad57a; this remains a red required check until the findings are inspectable and addressed or a maintainer accepts a scoped policy change.\n\nLocal �un test --isolate tests/ci-workflows.test.ts remains green (64 tests, 662 assertions). The cross-platform run 31278350304 is still running. No merge or security-review claim is made.\n\nCantonese: React Doctor 個結果真係紅咗,但工作紀錄冇列出實際發現,只見 SCAN_STATUS=1;我唔會靠估亂修,等可以睇到報告先處理。 |
Count committed renders from an effect so the test harness no longer mutates a ref during render, and make the Windows report gate fail only on errors while retaining warnings.\n\n個測試唔好喺 render 時自己整亂自己,依家等 commit 完先計數;warning 留返做報告,真正 error 先令 workflow 停低。
🧱 Maintainer and security review still required
The 🧱 仍需維護者及安全審核
|
Fresh merge preflight — 2026-08-08T23:00:35-04:00main is verified at commit f80d001 (f80d001), and the current Windows CI, React Doctor, artifact, and release runs are green. A fresh git merge-tree --write-tree origin/main 225c2cc reports 74 conflicts across runtime, docs, GUI, and tests, including content, add/add, and modify/delete cases. This PR targets dev and changes authentication, process lifecycle, packaging, CSP, pairing, export, and release behavior. MAINTAINERS.md requires explicit security review and at least one maintainer approval. No accepted approval is present, so I am preserving the branch and not resolving by choosing one side or merging without that review. 廣東話:main 而家係綠燈,但呢個 PR 同 main 有 74 個真衝突,仲涉及安全同發布路徑;未有正式 maintainer security review 同批准,我唔會亂揀一邊硬合併。 |
Summary
This is the integrated repair for the “started but offline” lifecycle regression, automatic fallback ports, manual remote dashboard connection, and complete retirement of the legacy dashboard.
The change is intentionally broad: the current
devline did not contain the previously released startup repair lineage or the current Material 3 shell. Porting only one call site would leave service ownership, health correlation, packaging identity, remote authentication, and stale GUI delivery inconsistent.Rolling investigation and milestone evidence: Discussion #7.
What changed
Security review required
Important
This PR changes authentication, credential handling, local process launch/install boundaries, package/update behavior, CSP/static serving, pairing, export redaction, and dependency-backed GUI packaging. It requires explicit maintainer security review before merge.
Review focus:
POST /api/host/pair/claimis unauthenticated.Verification
Real distributable smoke
npm pack: 466 files, SHA-2565c9740a0e1ee92585a488548cb4115506444ebe6ef2c613080b7e2feeb78cfc6.2.7.41, source hashsha256:71f63d1de518623462c0f4c23d73edb154c8782b44503379008400fe241234c6.54749; automatic ensure started on54889and left the foreign PID alive.ocx host status --jsonhad already been verified against the live fallback in the preceding package smoke; configured preference remained unchanged.54897.Visible baseline
This is the genuine old bundle from the affected installation:
A genuine post-repair capture is still pending because the mandated cheap headless capture provider is unavailable in the current agent session. No substitute browser or mock is being presented as proof.
Go transition
This is not a GUI-only exception. The lifecycle, management API, liveness, service, CLI, and security contracts need a
dev2-gocounterpart. Aneeds-go-porttracking issue will name the mergeddevsource commit if the native port cannot land in the same merge session.Review checklist
dev.dev2-goport landed or aneeds-go-portissue records the exact merged source commit.