Skip to content

fix(release): prepare v4.10.1 candidate - #357

Open
kevintseng wants to merge 5 commits into
mainfrom
release/v4.10.1
Open

kevintseng wants to merge 5 commits into
mainfrom
release/v4.10.1

Conversation

@kevintseng

@kevintseng kevintseng commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

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 that latest stays 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 follows main, so npm tag separation does not isolate plugin users after merging.

Refs #321, #346

Verification

Candidate commit: 3c3fba06605b7099cc86d27ef82a62724d4845b2.
Receipt tree: 8a225ce59600150e9e9260998f7a49a65a4a84b4.

npm run verify exited 0 on this tree: build, release checks, isolated tests (3873 passed, 9 skipped), packaged installation/MCP smoke, and packaged Dashboard E2E.

[verify] tree 8a225ce59600150e9e9260998f7a49a65a4a84b4 (full)
[verify] GREEN. Receipt for tree 8a225ce59600 written to .verify/receipt.json.

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

  • Complete independent whole-UI review on the final clean candidate.
  • Reconcile release-candidate host evidence: real Codex CLI and owner-operated Claude development-channel journeys passed on 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.
  • Obtain merge and trial-publication authorization, then verify public next installation and upgrade while latest remains stable.
  • Observe at least one working day with capture liveness, then obtain promotion authorization and repeat default-consumer readback.

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.

Surface QA Review Simplification
.claude-plugin/marketplace.json npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
.claude-plugin/plugin.json npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
.codex-plugin/plugin.json npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
.github/workflows/publish-npm.yml npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
CHANGELOG.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
CODEMAP.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
CONTRIBUTING.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
dashboard/dist/index.html npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dashboard/src/components/SettingsTab.tsx npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
dashboard/src/lib/i18n.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
dist/core/capture-liveness.d.ts npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/capture-liveness.d.ts.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/capture-liveness.js npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/capture-liveness.js.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/doctor.d.ts.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/doctor.js npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/doctor.js.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/serializer.d.ts.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/serializer.js npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/core/serializer.js.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/knowledge-graph.d.ts.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/knowledge-graph.js npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/knowledge-graph.js.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/mcp/THIRD_PARTY_NOTICES.txt npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/mcp/server.js npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/mcp/server.js.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/skills-manifest.json npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/transports/cli/cli.js npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
dist/transports/cli/cli.js.map npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
docs/ARCHITECTURE.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
docs/api/API_REFERENCE.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
docs/plans/release-v4.10.1.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
docs/platforms/agent-messaging.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
docs/postmortems/2026-09-14-observation-forget.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
docs/postmortems/2026-09-14-quiet-commit-capture.md npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
herdr-plugin.toml npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
package-lock.json npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
package.json npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/audit/baseline.json npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/audit/memory-invariants.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/check-generated-mirror.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/finish-release.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/hooks/_generated/capture-liveness.js npm run verify exit=0; suite-level Final release reconciliation pending Generated from source
scripts/hooks/_shared.js npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/hooks/post-commit.js npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/lib/isolated-env.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/lib/live-journey-contract.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/lib/release-preconditions.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/mcp-doc-contract.json npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/qa/core-live-journeys.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/qa/live-journey.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/qa/post-release.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/qa/pre-release.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
scripts/smoke-packed-upgrade.mjs npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
src/core/capture-liveness.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
src/core/doctor.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
src/core/serializer.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
src/knowledge-graph.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/audit/memory-invariants.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/core/doctor.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/core/export-import.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/dashboard/SettingsTab-toggle-errors.test.tsx npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/dashboard/doctor-banner-i18n.test.tsx npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/hooks/hook-outcomes.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/hooks/post-commit.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/hooks/session-summary.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/qa-post-release.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/qa/core-live-journeys.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/qa/live-journey.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/release-preconditions.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending
tests/release-scripts-safety.test.ts npm run verify exit=0; suite-level Final release reconciliation pending Final reconciliation pending

Preserve observation-level forget across Stop and untrusted imports,
capture quiet commits, and exercise core memory and upgrade journeys
with isolated state and explicit cleanup evidence.

Align version metadata, generated artifacts, and release documentation.

Refs #321, #346
Comment thread scripts/hooks/post-commit.js Fixed
Comment thread scripts/qa/core-live-journeys.mjs Fixed
Comment thread scripts/qa/core-live-journeys.mjs Fixed
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
kevintseng marked this pull request as ready for review September 14, 2026 11:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants