Skip to content

feat(update): support explicit per-release notice dismissal #294

Closed

Description

@abruption

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

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.

Activity

  1. added this to the v1.3.0 milestone on Oct 13, 2026
  2. abruption commented on Oct 23, 2026

    @abruption
    OwnerAuthor

    Implementation plan: explicit per-release runtime notice preference

    Add update --dismiss-runtime-notice VERSION and update --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 --check remains 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.

  3. abruption commented on Oct 26, 2026

    @abruption
    OwnerAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriority:P3Deferred convenience or long-term work.

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions