Skip to content

feat(global-settings): short update notice that says what an update adds (v2.8.0) - #808

Merged
WilcoLouwerse merged 7 commits into
mainfrom
feat/global-settings-update-summary
Oct 5, 2026
Merged

WilcoLouwerse merged 7 commits into
mainfrom
feat/global-settings-update-summary

Conversation

@WilcoLouwerse

@WilcoLouwerse WilcoLouwerse commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The UPDATE REQUIRED notice comes back in every new session until the update is done, and Claude rendered it in full each time. It also named the versions but not what changed in them.

  • Short notice at session start. It shows the header, the installed and latest version, what the update adds, a one-line reminder that unlocking takes sudo chattr -i plus chmod u+w and relocking takes sudo chattr +i, and that the user can ask how to update or for the details of the changes. There are no command blocks.
  • Full form on request. Asking how to update shows steps 1 to 4, with each command in its own block and both relock options with their trade-off. After the update Claude always shows the relock step, even if the full form was never asked for. The relock rules are unchanged; they are now shared between the update and repair notices. The FILES OUT OF SYNC notice keeps its full form.
  • "What this update adds". New global-settings/CHANGELOG.md (not installed) has one sentence per version. The notice shows the sentence for each version after the installed one, newest first, at most five, and counts the rest. A version without an entry is listed as such. If CHANGELOG.md can't be fetched, the block says so and the update still works.
  • Details on request. When the user asks about the changes, Claude looks up the commit that set VERSION to each listed version, reads its message, changed files and pull request, and links that PR (or the commit if no PR merged it). The notice includes the gh api and git log commands for this.
  • Complete changelog, 1.0.0 to 2.8.0, each entry dated the day the version reached main (## X.Y.Z — YYYY-MM-DD). 1.0.0 to 1.3.0 come from the archived claude-code-config repository. 1.2.1, 1.5.1 and 2.0.0 reached main together with the next version, and their entries say so. Numbers main never carried (1.5.0, 1.5.2, 1.5.3, 2.4.3) get a ### entry with a note on where their changes went; the notice reads only ## headings, so it does not list them. The 2.7.3 entry belongs to fix(global-settings): a hard deny beats every prompt; git aliases that push need the phrase (v2.7.3) #813, which is still open; it is dated 2026-10-02 like 2.8.0.
  • Bump rule: every VERSION bump needs a dated CHANGELOG.md entry. The tests fail on a missing entry, on a heading without a date, and on dates out of order. VERSION → 2.8.0.

The notice is printed by the installed hook. The short form and the changes block therefore first appear when someone on v2.8.0 or later updates to a newer version, not on the update to 2.8.0 itself.

Example (session start)

GLOBAL CLAUDE SETTINGS: UPDATE REQUIRED
Installed: v2.8.0 ❌ (outdated). Latest: v2.8.1 ✅ (on origin/main)
What this update adds:
  v2.8.1 — <one sentence from CHANGELOG.md>
Unlocking takes two commands, sudo chattr -i and chmod u+w. Afterwards you must re-apply sudo chattr +i.
Ask me how to update for the full steps, or for more details about what these changes do.

Test plan

  • test-check-settings-version.sh: 114 passed, 0 failed (new: dated headings newest first with a bad-file control, short form, full form on request, relock after the update, repair keeps the full form, pending range, order, cap, missing entry, missing file, lookup commands)
  • test-block-write-commands.sh: 7630 / 7630; test-block-polling.sh: 29 / 29 (both files unchanged)
  • Negative control: the changes-block tests run against the origin/main hook give 16 failures
  • ShellCheck (shellcheck.yml, CI only; not installed locally): the first run flagged SC2028 and SC2319, fixed in 02fafed
  • After merge: the next version bump shows the short notice on a 2.8.0 install

🤖 Generated with Claude Code

WilcoLouwerse and others added 2 commits October 2, 2026 10:48
…uest (v2.8.0)

The UPDATE REQUIRED notice named the versions but not what changed, so
deciding whether to go through the unlock/relock cycle now meant opening
the repository.

global-settings/CHANGELOG.md holds one sentence per version. It is not
installed. When an update is pending, check-settings-version.sh fetches it
from the same source as VERSION and shows a "What this update adds" block
under the version lines: one sentence for every version after the
installed one, newest first, at most five, with the rest counted. A
version without an entry is listed as such, and an unreachable
CHANGELOG.md is reported without affecting the update.

The notice tells the user they can ask for more details. Claude is told to
relay the block as is and, only when asked, look up the commit that set
VERSION to each listed version, read its message, changed files and pull
request, and link that pull request (or the commit). The notice carries
the gh api and git log commands for the repository the version came from.

Backfilled entries for 2.5.0 to 2.7.2. The README's bump rule now requires
a CHANGELOG.md entry with every VERSION bump; the tests fail without one.

Tests: 16 new checks in test-check-settings-version.sh (git-fetch and
GitHub paths, pending-range selection, cap, missing entry, missing file).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ngelog

The UPDATE REQUIRED notice comes back in every new session until the
update is done, and Claude rendered it in full each time: the unlock
commands, the phrase, both relock options with their trade-off. It now
shows a short form at session start: header, installed and latest
version, what the update adds, a one-line reminder that unlocking takes
sudo chattr -i plus chmod u+w and relocking sudo chattr +i, and that the
user can ask how to update or for the details of the changes.

Asking how to update brings the full steps 1 to 4 with every command in
its own block. After the update Claude always shows the relock step with
both options, whether or not the full form was shown. The relock rules
are unchanged and now shared between the update and repair notices; the
FILES OUT OF SYNC notice keeps its full form.

CHANGELOG.md now covers every released version, 1.0.0 to 2.8.0. 1.0.0 to
1.3.0 come from the archived claude-code-config repository; branch-only
numbers (1.5.0, 1.5.2, 1.5.3, 2.4.3) were never released and have no
entry.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@WilcoLouwerse WilcoLouwerse changed the title feat(global-settings): say what an update adds, and explain it on request (v2.8.0) feat(global-settings): short update notice that says what an update adds (v2.8.0) Oct 2, 2026
WilcoLouwerse and others added 4 commits October 2, 2026 11:39
…-summary change

SC2028 on the gh api lookup line (printf instead of echo, same output)
and SC2319 on a $? that followed a [[ ]] condition in the tests.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…released numbers

Each heading now carries the date the version reached main
(`## X.Y.Z — YYYY-MM-DD`); for 1.0.0 to 1.3.0 that is the main of
claude-code-config. 1.2.1, 1.5.1 and 2.0.0 reached main together with the
next version, and their entries say so.

1.5.0, 1.5.2, 1.5.3 and 2.4.3 get a `###` entry with a note on where their
changes went. The update notice reads only `##` headings, so it does not
list them. The README bump rule names the dated heading.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every `## X.Y.Z` heading in CHANGELOG.md must carry a date
(`— YYYY-MM-DD`, month 01-12, day 01-31), and the dates may not rise going
down the file. A fixed bad file proves the check catches a missing date, an
impossible month and a date out of order. The README bump rule says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

The update notice is now short at session start and says in one sentence what each pending version adds. Ask Claude how to update for the full steps, or for the details of the changes with links to the pull requests.

## 2.7.3 — 2026-10-02

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Concern — The 2.7.3 entry makes #808 depend on #813 merging first

This changelog carries a ## 2.7.3 entry for #813, which is still open (main is at 2.7.2; VERSION here goes to 2.8.0, and this PR does not touch block-write-commands.sh). If #808 merges first, a 2.7.2 install updating to 2.8.0 gets this sentence in its update notice for a hard-deny change it does not receive, and #813 would then set VERSION back to 2.7.3, below the installed 2.8.0. The PR body says the entry belongs to #813 but not that #813 has to merge first. Fix: state the merge order in the body (merge #813, then update this branch). If #808 has to go first, move this entry to #813 and have #813 bump to 2.8.1.

Verification: git show origin/main:global-settings/VERSION → 2.7.2; gh pr view 813 -R ConductionNL/.github --json state,files → OPEN, bumps VERSION to 2.7.3 and changes block-write-commands.sh; this PR's file list has no block-write-commands.sh.

@WilcoLouwerse WilcoLouwerse left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: APPROVE (Standard) — self-review posted as COMMENT (GitHub blocks self-APPROVE)

The notice code is sound: a failed CHANGELOG fetch cannot hang or fail session start, the version order is numeric and the dated headings parse. One concern on the merge order with #813.

🟡 Concerns (1)

Reviewed at: 17ecdf7 — the head moved three times during this review (c930f8a, b5924df, 17ecdf7).
Tests: bash global-settings/tests/test-check-settings-version.sh → 114 passed, 0 failed on 17ecdf7 (run in this review).
CI: Shared-workflow guard and Install from published location are green on 17ecdf7; the required Package invariants check was still running when this verdict was posted. Its run on c930f8a was cancelled by concurrency in favour of the newer push, not by a failure.

…update-summary

# Conflicts:
#	global-settings/VERSION
@WilcoLouwerse
WilcoLouwerse merged commit be99c5a into main Oct 5, 2026
48 checks passed
@WilcoLouwerse
WilcoLouwerse deleted the feat/global-settings-update-summary branch October 5, 2026 08:04
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