NeonDiff v1.0.3
v1.0.3
- Release type: stable Mac startup-stability patch
- Release source SHA: to be stamped by
refs/tags/v1.0.3 - Previous stable release:
v1.0.2 - Tracking issues / source PR:
#484,#503,#505,#506 - Package artifact:
neondiff@1.0.3after publish - Rollback baseline:
v1.0.2
Purpose
Publish the Keychain startup-stability fix without changing NeonDiff's public
1.0 launch boundary. The native Mac app remains the advanced product surface;
the local HTML dashboard remains a browser preview and setup surface rather than
an embedded replacement for the native UI.
Included Changes
- Stop desktop model initialization from decrypting stored GitHub login or
expiration values. - Use metadata-only Keychain presence queries with
kSecUseAuthenticationUISkip, including legacy ACL-protected items, without
constructing aLocalAuthenticationcontext during startup. - Preserve interactive Keychain reads for explicit user actions and source
compatibility for existing secret-store conformers. - Share the detached dashboard argument contract with the displayed command so
both paths explicitly use--operator false. - Pin the Swift PR and unsigned desktop-release workflows to macOS 15, compile
the broad and Keychain check targets there, and keep Security-linked helper
execution in the local visible-smoke lane. - Preserve the advanced native SwiftUI onboarding/provider experience; no
WebView or embedded-browser takeover is included.
Required Gates
- Focused validation:
NODE_OPTIONS=--experimental-sqlite npx vitest run tests/desktop-keychain-startup.test.ts tests/desktop-release-pipeline.test.ts tests/swift-ci-velocity.test.ts tests/public-release-readiness.test.ts tests/release-status.test.ts tests/checkout-issuance-smoke.test.ts --pool=forks --maxWorkers=1swift run --package-path apps/neondiff-desktop NeonDiffDesktopKeychainChecksswift run --package-path apps/neondiff-desktop NeonDiffDesktopCoreSmokenpm run buildnode scripts/check-public-claims.mjsnode scripts/check-secret-scan.mjsgit diff --check
- macOS 15 release workflow proof:
- License API proof:
docs/evidence/v1.0.3-license-api-healthz.jsondocs/evidence/v1.0.3-license-checkout-issuance-unauthenticated.jsondocs/evidence/v1.0.3-license-checkout-issuance-authenticated.json
- Desktop startup proof:
docs/evidence/v1.0.3-desktop-startup-smoke.json
- Release-status public manifest gate:
npx tsx src/cli.ts release-status --expected-head "$(git rev-parse HEAD)" --public-release-manifest docs/public-release-manifest.json --expected-public-version v1.0.3
- npm publication governance:
- the tag must be annotated and reachable from protected
main - the declared pre-metadata candidate must be an ancestor of the tag
- a stable package is rejected from a prerelease-marked GitHub Release
- manual retries must resolve the matching existing non-prerelease GitHub Release
- new packages publish under a quarantine dist-tag; registry integrity, shasum, and
gitHeadmust match the reviewed tag and dry-run pack before promotion tolatest
- the tag must be annotated and reachable from protected
Before publication, release_candidate and source_checkout describe the
candidate honestly. The manifest gate validates release metadata and proofs; it
does not claim npm or GitHub publication. After the public registry, GitHub
Release, and installed-package smoke pass, a separate post-release state stamp
updates main to published without moving refs/tags/v1.0.3.
Caveats
- This release does not ship signed/notarized desktop artifacts, Sparkle
appcast, or auto-update proof. Those remain tracked by#116and#449. - The macOS 15 hosted workflow proves compilation, bundle shape, and unsigned
artifact packaging. Visible startup behavior is proven only for the named
local unsigned bundle. - This release does not claim browser/native dashboard parity, full native
desktop maturity, customer-ready installation, or calibrated review accuracy.
Rollback
Published npm versions and release tags are immutable provenance. Rollback does
not delete or rewrite v1.0.3, and it never resets a maintainer's main
checkout. Instead:
- Move the public install channel back to the verified
1.0.2package. - Reinstall
1.0.2on affected daemon/dashboard hosts. - Restart each host's configured daemon and dashboard process using its own
launchd label and config path. - Mark the GitHub
v1.0.3release as not latest and add an incident note that
points users tov1.0.2.
npm dist-tag add neondiff@1.0.2 latest
npm install -g neondiff@1.0.2
gh release edit v1.0.3 \
--repo electricsheephq/evaos-code-review-bot-neondiff \
--latest=falseThe host-specific restart is intentionally not hard-coded here: operators must
use the launchd label and configuration selected during that installation, for
example neondiff daemon start --launchd-label <label> --dry-run false --confirm true after
the package downgrade. Browser dashboard sessions are restarted from the newly
installed neondiff@1.0.2 binary.
The manifest's rollback fields remain source-checkout revert references to
satisfy the canonical governance gate. They may be used only in an isolated
recovery checkout, never against protected main; the npm/install commands
above are the public operator rollback.