Skip to content

feat(update): add per-release runtime notice dismissal - #332

Merged
abruption merged 3 commits into
mainfrom
feat/294-runtime-notice-dismissal
Oct 23, 2026
Merged

abruption merged 3 commits into
mainfrom
feat/294-runtime-notice-dismissal

Conversation

@abruption

Copy link
Copy Markdown
Owner

Summary

Adds an explicit, local preference for dismissing the automatic runtime notice for one stable release (#294):

  • update --dismiss-runtime-notice VERSION and update --clear-runtime-notice-dismissal are offline preference operations, mutually exclusive with checking and all remote/SSH options. They never install, fetch, approve or mark a release current.
  • Only the exact normalized version is hidden. Later release notices remain eligible. Explicit local checks retain actual availability/outdated/package-manager information and expose the preference separately. Skill notices, remote comparisons and the global opt-out are unchanged.
  • The dedicated schema-v1 file is separate from the update cache. Strict bounded JSON, private ownership/modes, no-follow directory-relative I/O, a stable bounded lock and atomic fsynced replacement protect the preference. Invalid/future files suppress nothing and are not silently overwritten by either operation. A post-replacement durability failure reports that the preference may have changed.
  • Initial support is macOS/Linux. Windows rejects the per-version write before POSIX storage access, while normal updates/checks/global opt-out remain unchanged.
  • Updates the four CLI reference locales and regenerates the dependency-free standalone artifact. No skill source, global preference, runtime version, release or operations change.

Refs #294

Validation

  • Python 3.9 isolated environment: 61 focused update/preference tests OK (one native owner-policy skip); 65 documentation tests OK.
  • Final Python 3.13 extras suite with -X dev -W error::ResourceWarning: 1,355 tests OK (20 skips). The initial pre-review candidate also passed 1,352 tests; the final run includes the added review regressions and reviewed translation corrections.
  • Generator check and git diff --check pass. Tests require the actual generated standalone artifact, not a source fallback.

The approved local temp volume ignores ownership. Controlled-metadata fixtures use actual directory-relative I/O, inode checks, locks, fsync and atomic replacement; they are not native permission certification. The unmocked positive test skips on unsafe real ancestors and is intended to execute on an owner-enforcing Linux CI filesystem. No internal-disk permission-test exception or volume/global permission change was used.

Independent review

Before PR publication, independent-cli-review ran Claude Code 2.1.308 (requested/observed model claude-opus-5-5) and Codex CLI 0.163.0 (isolated default; actual model not exposed) in parallel with identical read-only, frozen, self-contained source/test/document excerpts. Both completed with exit 0; Claude reported no error, Codex completed its turn with zero command-execution events, and the input remained unchanged (SHA-256 5cad25dcb2732491872345adaf0858914c960210a1a40e0a0baaa222da004718). No runtime execution by the reviewers is claimed.

Root-verified corrections: inode-bound cleanup on temporary validation failure, inherited setgid-compatible private mode checks, unambiguous check wording, removal of test source fallbacks, real-CLI remote-check advisory/result separation, and an inherited four-locale correction that newer remote runtimes are not downgraded. The original input overclaimed that an actual remote CLI check never reads the caller's local preference; this was a wording error, not a remote comparison defect. The intended local ambient advisory reads once and does not hide remote versions/results. Narrow corrections were separately source-audited and regression-tested; no claim that the two CLIs re-reviewed the final corrected revision. CLI agreement is not proof of correctness.

Limits

  • This hides an advisory only, not a security finding or update availability. The selected version need not exist or be trusted.
  • No native agent, SSH account, live update, installer, deployment or package publication was exercised.
  • No automatic repair of malformed preferences and no Windows per-version persistence in this change.

Translation quality review

At the user's request, Antigravity CLI 1.4.5 explicitly selected the available gemini-3.8-flash-medium model with medium effort, plan mode, sandbox and a five-minute limit. The task-local runner omitted permission bypasses; one fresh read-only review completed with exit 0 and structured output (149.536 seconds). The input contained the complete changed Updating section in English/Korean/Japanese/Simplified Chinese, with commands and surrounding context (20,196 bytes, SHA-256 c3e614fbbc308019f200239b1abd412dd5b42ccf49d0509c9dc5028b0dcd8dd3). The model selector is recorded; an independent backend identity is not exposed by the result.

Codex checked suggestions against the English source and applied precise fallback/ACL wording, invalid/future-schema file subjects, Japanese cache-write wording, and the Chinese newer-version distinction. Flags, code blocks, paths, numbers and behavioral limits remain unchanged. This is static linguistic/semantic QA, not native execution, CI evidence, security certification or native-speaker field testing. Final local docs checks are recorded separately.

@abruption abruption added this to the v1.3.0 milestone Oct 23, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-23T01:36:06.945775Z 13ece10 PR opened
🔒 Security Review 🔄 Running since 2026-10-23T01:31:37.860408Z 13ece10 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@abruption

Copy link
Copy Markdown
Owner Author

CI follow-up at 3deadee: canonicalize only the isolated test fixture root, so macOS /var aliases do not prevent positive fixtures from exercising the preference logic. The production no-follow guard is unchanged. A real ancestor-symlink regression still refuses reads/writes without effects, while the explicitly resolved fixture succeeds. A synthetic alias reproduces the original unsafe-versus-missing failure signature; the historical runner path itself was not printed, so that exact path is not asserted. Python 3.9 and 3.13: 62 focused preference/update tests OK each (one existing permission-enforcement skip on the approved external test volume). No runtime, documentation, version or permission relaxation. New-head CI is pending.

@abruption

Copy link
Copy Markdown
Owner Author

Exact-head CI verification: 3deadee now has 28/28 successful checks, including both previously failing macOS Python jobs and the release gate. The macOS Python 3.9 log explicitly reports test_native_private_path_when_filesystem_enforces_metadata and test_temporary_root_alias_refuses_while_resolved_fixture_succeeds as OK (not skipped). This supplies real runner owner/mode-path evidence separate from the locally controlled-metadata fixtures; it does not prove ACL audit, arbitrary filesystem support or all deployment environments.

@abruption
abruption merged commit 8be3da4 into main Oct 23, 2026
28 checks passed
@abruption
abruption deleted the feat/294-runtime-notice-dismissal branch October 23, 2026 05:10
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.

1 participant