131 lines
6.9 KiB
Markdown
131 lines
6.9 KiB
Markdown
# Task: Fix Makelore updater diagnostics and release checks
|
|
|
|
## Identity
|
|
|
|
- Task ID: 20260813-makelore-updater-client-7d3a9c
|
|
- Mode: Feature
|
|
- Branch: main
|
|
- Worktree: D:\Datas\OthersProjects\makelore
|
|
- Base commit: a03043d048826609cb4f8cb7d782bde93e0e77f4
|
|
- Owner: codex
|
|
- Status: Ready for integration
|
|
|
|
## Scope
|
|
|
|
- Correlate the packaged Windows updater failure with the Works Square stable
|
|
feed and current platform/architecture resolution.
|
|
- Normalize the known missing stable-feed failure into a concise actionable
|
|
renderer-facing message while retaining raw diagnostic logging.
|
|
- Add focused updater regression coverage without changing download, install,
|
|
channel, or credential ownership behavior.
|
|
- Remove the duplicate renderer presentation shown by the installed `v1.0.0`
|
|
settings screenshot and keep raw stack diagnostics out of the ordinary user
|
|
surface while retaining them in Main-process logs.
|
|
|
|
## Intent And Constraints
|
|
|
|
- Electron Main remains the sole owner of update feed selection and
|
|
electron-updater integration.
|
|
- A missing stable updater artifact remains an error/release-readiness problem;
|
|
it must not be mislabeled as "already latest".
|
|
- Unexpected errors must retain their original messages, and no installer-role
|
|
or cross-architecture fallback may be introduced.
|
|
- Production recovery requires a separately published updater artifact; client
|
|
messaging alone does not repair the update chain.
|
|
- The currently installed `v1.0.0` is evidence of the old packaged behavior;
|
|
source changes do not affect it until a new client is built and installed.
|
|
|
|
## Outcome
|
|
|
|
- Confirmed the packaged Windows client resolves the supported stable target to
|
|
`https://square.nianxx.cn/api/app-updates/windows/x64` and that its local log
|
|
contains the reported `latest.yml` `HttpError: 404`. The corresponding public
|
|
feed currently returns the intentional server-side not-available response.
|
|
- Added a narrow renderer-facing normalization for missing Works Square stable
|
|
manifests on both Windows (`latest.yml`) and macOS (`latest-mac.yml`). The
|
|
concise Chinese message identifies an unpublished platform package and points
|
|
to retry/website download without misreporting the client as up to date.
|
|
- Raw errors remain logged, emitted, and rethrown; updater status remains
|
|
`error`; prerelease OSS feeds and unrelated errors are unchanged.
|
|
- Confirmed the screenshot's duplicated output came from one Zustand `error`
|
|
value rendered both in the status row and a second error-details card. The
|
|
settings page now renders one concise message, hides technical stacks and
|
|
URLs behind the existing generic failure copy, and keeps the retry action.
|
|
- De-duplicated the Main-process `error` event plus rejected-promise path by
|
|
per-invocation check tokens. Concurrent callers sharing one electron-updater
|
|
error now produce one renderer error status, while raw logging/rethrow and
|
|
later independent retries remain intact.
|
|
- Hardened the settings boundary so only concise Chinese user-facing prose is
|
|
shown directly. Raw English diagnostics, stacks, URLs, paths, error codes and
|
|
structured payloads fall back to the localized generic failure message.
|
|
- Confirmed the installed `v1.0.0` `app.asar` predates these source changes.
|
|
Built an isolated unsigned `v2.0.0` `win-unpacked` artifact under the user's
|
|
temporary directory without replacing the installed application or the
|
|
repository's existing `release/` output.
|
|
- No release was published. Current evidence shows website installer `0.9.2`,
|
|
installed client `1.0.0`, source version `2.0.0`, and unsigned local Windows
|
|
artifacts, so production recovery still requires release-owner action.
|
|
|
|
## Verification
|
|
|
|
- Regression tests were observed red before each Windows/macOS normalization
|
|
change and green afterward.
|
|
- `pnpm exec vitest run tests/unit/app-updater.test.ts
|
|
tests/unit/update-settings.test.tsx tests/unit/update-store.test.ts
|
|
tests/unit/sidebar-update-button.test.tsx`: initially `30 passed` across four
|
|
files; the final rerun after review fixes is recorded below.
|
|
- `pnpm exec eslint electron/main/updater.ts
|
|
src/components/settings/UpdateSettings.tsx
|
|
tests/unit/app-updater.test.ts tests/unit/update-settings.test.tsx`: exit
|
|
`0`, no findings.
|
|
- `pnpm run typecheck`: exit `0`.
|
|
- `pnpm run build:vite`: exit `0`; the production Main bundle contains the
|
|
normalized Chinese message.
|
|
- Isolated `electron-builder --dir` packaging: exit `0`; extracted `app.asar`
|
|
reports version `2.0.0`, contains the Main normalization and renderer
|
|
sanitizer, and no longer contains the `updates.errorDetails` render key.
|
|
- `pnpm test`: updater-related tests pass, but the full suite remains red with
|
|
three failures outside the changed updater scope: missing `.opencode/agent`
|
|
in `youth-plain-language-skill.test.ts`, plus two
|
|
`opencode-manager.test.ts` timing/generation failures. Focused reruns
|
|
reproduced the missing-directory failure and one generation failure; no
|
|
base-commit run was performed, so they are recorded without attributing their
|
|
origin to this task.
|
|
- Read-only Authenticode checks report `NotSigned` for the available local
|
|
Windows artifacts, including the isolated artifact; none were installed or
|
|
uploaded.
|
|
- Initial independent read-only review: FAIL with two medium findings covering
|
|
concurrent duplicate suppression and denylist-only renderer sanitization.
|
|
Both findings were corrected with focused regression tests before final
|
|
review.
|
|
- Final focused rerun after those corrections: 4 files / 37 tests passed;
|
|
typecheck, scoped ESLint, `build:vite`, `git diff --check`, and
|
|
`check_doc_drift.py --task-id 20260813-makelore-updater-client-7d3a9c` all
|
|
passed.
|
|
- Final independent read-only review: PASS with no remaining implementation,
|
|
architecture, or test-coverage finding.
|
|
|
|
## Follow-ups
|
|
|
|
- Align the authoritative release version, generate final signed/notarized
|
|
platform artifacts, publish them to Works Square as updater-role records, and
|
|
execute discover/download/restart/install smoke tests from older packages.
|
|
- Add a release job that publishes signed stable outputs to Works Square rather
|
|
than only the legacy OSS channel, with inactive-first verification and an
|
|
explicit activation policy.
|
|
- Harden the stable Windows signing job by verifying Authenticode status and
|
|
expected publisher after SignPath. Enabling publisher pinning in new clients
|
|
requires a staged rollout after the stable feed always serves signed packages.
|
|
- Repair the missing `.opencode/agent` fixture and independently diagnose the
|
|
two existing opencode-manager concurrency failures before treating the full
|
|
test suite as a release gate.
|
|
|
|
## Promotion Candidates
|
|
|
|
- After live proof, promote the stable-feed error behavior and release pipeline
|
|
requirements to canonical updater/release documentation; keep the external
|
|
release gate open until then.
|
|
- Consider promoting the UI contract that ordinary updater errors are concise,
|
|
non-duplicated, and free of raw stack/URL details; technical diagnostics stay
|
|
in Main logs.
|