Repository navigation
feat(update): support explicit per-release notice dismissal #294
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or requestpriority:P3Deferred convenience or long-term work.Deferred convenience or long-term work.
Milestone
Description
Motivation
Priority: P3 convenience enhancement. Users can suppress all update notices, but cannot explicitly dismiss only a reviewed release while continuing to see later releases.
Baseline: Python v1.1.0, commit 8ca77cf.
Existing behaviour and duplicates
- update --check already reports current/latest without replacing the program (No way to see which machines are running an old version, or to update in place #16/feat: surface cached client update notices in command responses #67).
- --no-update-notice and SESSION_PEER_NO_UPDATE_NOTICE already suppress notices, including skill notices.
- updates.py:update_notices_disabled, prepare_client_update and prepare_skill_updates implement those paths.
- feat(update): notify about outdated or incompatible session-peer skill installs (notice-only) #167 handles notice-only skill compatibility and respects the owning installer.
Do not reimplement these features. No all-state issue/PR specifically covers per-release dismissal.
Proposed behaviour
Specify an explicit local preference operation to dismiss one strictly validated stable runtime version and to clear that dismissal. Option spelling is not frozen; avoid ambiguous update --skip that could look like an update action. Later versions remain eligible for a notice.
Acceptance criteria
- Dismissal is explicit and applies only to the selected release and notice category, not all future runtime/skill releases.
- Keep preference state separate from authoritative latest-version/cache facts, with bounded owner-only storage, safe atomic writes and strict validation.
- Preserve current global flag/environment opt-out and their precedence; do not refresh/fetch on every send or per SSH destination.
- An explicit update --check remains truthful and shows actual version availability regardless of dismissed ambient notices; dismissal never authorizes installation, downgrades or weakens immutable artifact verification.
- Do not claim a dismissed version is safe/current or suppress genuine compatibility errors. Expose dismissal clearly and document how to clear it.
- Keep package/skill-manager ownership, normal JSON/exit semantics and delivery outcomes unchanged.
- Cover dismissed current release, later release, cleared preference, malformed/unreadable preferences, offline cache, global opt-out, concurrent writes and multi-host operation.
Release-note retrieval and skill synchronization are outside this issue. No runtime implementation, installation or publication is included.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestpriority:P3Deferred convenience or long-term work.Deferred convenience or long-term work.
Activity
abruption commentedon Oct 23, 2026
Implementation plan: explicit per-release runtime notice preference
Add
update --dismiss-runtime-notice VERSIONandupdate --clear-runtime-notice-dismissal, mutually exclusive with each other and--check. Preference operations are local only: reject host/SSH routing and identity options before advisory preparation or command execution. A strictly bounded ASCII stable version (optional v prefix normalized) can be selected offline; selecting it does not assert that it exists, is safe/current, or should be installed.Keep one selected runtime version in an independent owner-only configuration file:
$XDG_CONFIG_HOME/session-peer/update-notices.json, otherwise~/.config/session-peer/update-notices.json. Schema 1 contains only runtime.dismissedVersion (a normalized stable string or null). Do not change update cache/latest facts, skill preferences, package/skill-manager ownership or artifact verification. Mac/Linux first; explicit operations refuse on Windows until ACL-aware storage is validated. Existing Windows update/check/global opt-out behavior remains.Use bounded no-follow regular-file reads, strict duplicate/unknown-field rejection, safe owner/type/permission checks and private directory-relative atomic writes under a bounded stable lock. Never chmod unsafe existing user data, follow a symlink/FIFO, silently fall back from an unsafe configured path, or repair invalid state during an ambient read. Invalid/unreadable/unsafe preferences suppress nothing and do not change delivery outcomes. Cooperative concurrent writes are serialized; interrupted pre-replace writes preserve the previous complete state.
Filter only the invoking client's ambient runtime notice, once after the existing fresh-cache/newer-version checks. A later release still appears; clearing restores notices. Existing global flag/environment opt-out takes precedence. No per-host preference reads, new network fetch, install, update or automatic retry. Skill notices and real compatibility errors remain unchanged.
Local explicit
update --checkremains factual about current/latest/outdated, with separate preference metadata; a dismissed notice never becomes “up to date.” Remote checks retain their existing remote-version comparison contract and do not manage remote preferences. Preference management emits normal update JSON/exit conventions with updated:false and no guessed latest version.Validate strict versions, dismiss/newer/clear, malformed and unsafe paths/files, atomic failure/concurrency/lock timeout, cached/offline behavior, global opt-out, truthful managed/standalone checks and multi-host isolation. Fixtures must use isolated state only, not the user's actual preferences. Run independent Claude Code + Codex CLI review before creating the PR. No merge, release, tag, publishing or operations change.
abruption commentedon Oct 26, 2026
v1.3.0 release closeout — 2026-10-26
Closing as completed for the owner-approved release scope, following the owner's milestone cleanup instruction. The original proposal/checklist is retained as history; this is not a blanket assertion of every platform or broader research guarantee.
Explicit offline dismissal/clear of one runtime version's ambient notice is published on Mac/Linux. Later releases, truthful explicit checks, skill notices, global opt-out precedence, private atomic preference storage and multi-host isolation are preserved.
Evidence: merged PR #332; published v1.3.0 scope, source
938630063b69bf6e0ae69d4b11e2095c30f289f4; successful publication and artifact/install verification. Static source/test-definition recheck today: tests/core/test_update_notice_dismissal.py; tests/core/test_update_preferences.py. Two read-only subagent audits independently reviewed the split issue groups; no new mandatory closure blocker was found. No new tests/live experiments or deployment were performed during this closeout.Remaining boundaries: Windows per-version preference writes remain excluded pending ACL-aware support; existing Windows update/check/global opt-out is unchanged. Dismissal does not establish version safety, existence or currentness and never installs anything.
Retain the closed issue in v1.3.0 as the release record. Optional excluded expansions are not automatically promised for another release.