fix(release): prepare v4.10.1 candidate - #357
Open
kevintseng wants to merge 5 commits into
Open
kevintseng wants to merge 5 commits into
kevintseng wants to merge 5 commits into
Conversation
Replace stale lock-file recovery with the existing SQLite driver to prevent concurrent recoverers from stealing an active capture lock. Use cryptographic fixture identifiers and exercise unresolved HEAD with real Git state so the regression check also reaches Windows. Refs #321
Keep registry failure details collapsed while showing retry guidance. Distinguish failed first checks and unpublished local versions in doctor, and translate the optional channel registration reminder by message code.
Route GitHub prereleases through the existing npm publisher to next, verify latest remains unchanged, and read back the selected channel. Document trial observation and promotion of the same package artifact.
Show loading or unknown until the update policy is read, and give reload guidance when the request fails or returns an invalid shape.
kevintseng
marked this pull request as ready for review
September 14, 2026 11:14
kevintseng
enabled auto-merge
September 14, 2026 11:14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Quiet Git commits are captured from repository state, and deleting a session observation stays effective across later Stop captures and untrusted imports. This prepares v4.10.1 with isolated core journeys, stricter cleanup receipts, coherent version metadata, and the concise release plan. Update-check failures show recovery guidance; doctor distinguishes failed first checks and unpublished local versions; the optional missing-channel reminder follows the selected Dashboard language. Settings load failures show an unknown policy with reload guidance instead of falsely showing automatic updates as off.
The existing publisher now sends GitHub prereleases to npm
next. The release script checks thatlateststays unchanged, and post-release checks support the selected tag. CONTRIBUTING documents at least one working day of trial observation and separately authorized promotion of the same artifact. The plugin marketplace followsmain, so npm tag separation does not isolate plugin users after merging.Refs #321, #346
Verification
Candidate commit:
3c3fba06605b7099cc86d27ef82a62724d4845b2.Receipt tree:
8a225ce59600150e9e9260998f7a49a65a4a84b4.npm run verifyexited 0 on this tree: build, release checks, isolated tests (3873 passed, 9 skipped), packaged installation/MCP smoke, and packaged Dashboard E2E.The seven-file prerelease delta also passed 101 focused tests. Independent integration review retains the exact unchanged proposal's controlled wrong-tag, premature-promotion, missing-stable-tag, unavailable-registry and precondition-refusal evidence; it does not establish actual publication. Earlier bounded packed-browser replays cover retry guidance, collapsed technical details, the Traditional Chinese missing-channel reminder, and permission-denied repair followed by successful retry and persisted settings/cache readback. Those earlier executions retain their original candidate identities and do not substitute for final whole-UI review.
The Settings read-failure correction passed 54 focused tests and an independent replay of 172 related component tests. Independent browser replay verified the actual empty-config default, read failures, malformed responses, all 11 live language changes, reload recovery, and API/file readbacks with fixture cleanup. The two review-discovered default/locale regressions fail on the preceding candidate and pass on this tree. This bounded correction review does not close the remaining whole-UI release review.
Remaining release gates
8d049c2b, with model-visible intake and stopped-recipient failure. These executions retain that revision; they are not default-trust, installed Claude capture-hook, or Desktop proof. The final release command requires matching-candidate receipts.nextinstallation and upgrade whilelatestremains stable.This remains a draft release candidate. CI passed on
8d049c2b; new-head CI and final release review are pending. No release or promotion is performed by this PR update. The npm channel change is confined to the existing publisher; SDLC configuration and workflows are unchanged.Coverage
Base:
72cb3e5337a2d23f157dee5c3eb934223d7ac5d3. Suite-level checks do not establish per-file runtime coverage. Final release review and simplification reconciliation remain open..claude-plugin/marketplace.jsonnpm run verifyexit=0; suite-level.claude-plugin/plugin.jsonnpm run verifyexit=0; suite-level.codex-plugin/plugin.jsonnpm run verifyexit=0; suite-level.github/workflows/publish-npm.ymlnpm run verifyexit=0; suite-levelCHANGELOG.mdnpm run verifyexit=0; suite-levelCODEMAP.mdnpm run verifyexit=0; suite-levelCONTRIBUTING.mdnpm run verifyexit=0; suite-leveldashboard/dist/index.htmlnpm run verifyexit=0; suite-leveldashboard/src/components/SettingsTab.tsxnpm run verifyexit=0; suite-leveldashboard/src/lib/i18n.tsnpm run verifyexit=0; suite-leveldist/core/capture-liveness.d.tsnpm run verifyexit=0; suite-leveldist/core/capture-liveness.d.ts.mapnpm run verifyexit=0; suite-leveldist/core/capture-liveness.jsnpm run verifyexit=0; suite-leveldist/core/capture-liveness.js.mapnpm run verifyexit=0; suite-leveldist/core/doctor.d.ts.mapnpm run verifyexit=0; suite-leveldist/core/doctor.jsnpm run verifyexit=0; suite-leveldist/core/doctor.js.mapnpm run verifyexit=0; suite-leveldist/core/serializer.d.ts.mapnpm run verifyexit=0; suite-leveldist/core/serializer.jsnpm run verifyexit=0; suite-leveldist/core/serializer.js.mapnpm run verifyexit=0; suite-leveldist/knowledge-graph.d.ts.mapnpm run verifyexit=0; suite-leveldist/knowledge-graph.jsnpm run verifyexit=0; suite-leveldist/knowledge-graph.js.mapnpm run verifyexit=0; suite-leveldist/mcp/THIRD_PARTY_NOTICES.txtnpm run verifyexit=0; suite-leveldist/mcp/server.jsnpm run verifyexit=0; suite-leveldist/mcp/server.js.mapnpm run verifyexit=0; suite-leveldist/skills-manifest.jsonnpm run verifyexit=0; suite-leveldist/transports/cli/cli.jsnpm run verifyexit=0; suite-leveldist/transports/cli/cli.js.mapnpm run verifyexit=0; suite-leveldocs/ARCHITECTURE.mdnpm run verifyexit=0; suite-leveldocs/api/API_REFERENCE.mdnpm run verifyexit=0; suite-leveldocs/plans/release-v4.10.1.mdnpm run verifyexit=0; suite-leveldocs/platforms/agent-messaging.mdnpm run verifyexit=0; suite-leveldocs/postmortems/2026-09-14-observation-forget.mdnpm run verifyexit=0; suite-leveldocs/postmortems/2026-09-14-quiet-commit-capture.mdnpm run verifyexit=0; suite-levelherdr-plugin.tomlnpm run verifyexit=0; suite-levelpackage-lock.jsonnpm run verifyexit=0; suite-levelpackage.jsonnpm run verifyexit=0; suite-levelscripts/audit/baseline.jsonnpm run verifyexit=0; suite-levelscripts/audit/memory-invariants.mjsnpm run verifyexit=0; suite-levelscripts/check-generated-mirror.mjsnpm run verifyexit=0; suite-levelscripts/finish-release.mjsnpm run verifyexit=0; suite-levelscripts/hooks/_generated/capture-liveness.jsnpm run verifyexit=0; suite-levelscripts/hooks/_shared.jsnpm run verifyexit=0; suite-levelscripts/hooks/post-commit.jsnpm run verifyexit=0; suite-levelscripts/lib/isolated-env.mjsnpm run verifyexit=0; suite-levelscripts/lib/live-journey-contract.mjsnpm run verifyexit=0; suite-levelscripts/lib/release-preconditions.mjsnpm run verifyexit=0; suite-levelscripts/mcp-doc-contract.jsonnpm run verifyexit=0; suite-levelscripts/qa/core-live-journeys.mjsnpm run verifyexit=0; suite-levelscripts/qa/live-journey.mjsnpm run verifyexit=0; suite-levelscripts/qa/post-release.mjsnpm run verifyexit=0; suite-levelscripts/qa/pre-release.mjsnpm run verifyexit=0; suite-levelscripts/smoke-packed-upgrade.mjsnpm run verifyexit=0; suite-levelsrc/core/capture-liveness.tsnpm run verifyexit=0; suite-levelsrc/core/doctor.tsnpm run verifyexit=0; suite-levelsrc/core/serializer.tsnpm run verifyexit=0; suite-levelsrc/knowledge-graph.tsnpm run verifyexit=0; suite-leveltests/audit/memory-invariants.test.tsnpm run verifyexit=0; suite-leveltests/core/doctor.test.tsnpm run verifyexit=0; suite-leveltests/core/export-import.test.tsnpm run verifyexit=0; suite-leveltests/dashboard/SettingsTab-toggle-errors.test.tsxnpm run verifyexit=0; suite-leveltests/dashboard/doctor-banner-i18n.test.tsxnpm run verifyexit=0; suite-leveltests/hooks/hook-outcomes.test.tsnpm run verifyexit=0; suite-leveltests/hooks/post-commit.test.tsnpm run verifyexit=0; suite-leveltests/hooks/session-summary.test.tsnpm run verifyexit=0; suite-leveltests/qa-post-release.test.tsnpm run verifyexit=0; suite-leveltests/qa/core-live-journeys.test.tsnpm run verifyexit=0; suite-leveltests/qa/live-journey.test.tsnpm run verifyexit=0; suite-leveltests/release-preconditions.test.tsnpm run verifyexit=0; suite-leveltests/release-scripts-safety.test.tsnpm run verifyexit=0; suite-level