Skip to content

chore(release): hand-write the v1.14.0 notes - #232

Merged
Nanako0129 merged 6 commits into
mainfrom
chore/release-v1.14.0-notes
Aug 24, 2026
Merged

chore(release): hand-write the v1.14.0 notes#232
Nanako0129 merged 6 commits into
mainfrom
chore/release-v1.14.0-notes

Conversation

@Nanako0129

Copy link
Copy Markdown
Owner

Hand-written notes for v1.14.0, in both override files, so release_notes.sh ships them verbatim and DeepSeek is skipped on both surfaces.

Why written rather than generated

83 commits since v1.13.3, and the great majority are review-round fixes to code that never shipped. A generated changelog would tell a user "stop two cards stating a terminal answer they had not yet asked" about two cards they have never seen. The four merged PRs contain three user-facing features and five fixes worth naming; the rest is internal to work that lands whole in this release.

Skipping generation also removes a drift this repo has hit before: the two prompts are independent and non-deterministic, so the Sparkle text and the GitHub body could describe the same release differently — and a previous release had its predecessor's fix re-claimed. A verbatim override cannot do either.

The Thanks: line and GitHub's New Contributors / Full Changelog tail are still appended by the script, so no contributor credit is lost by overriding the body.

What the release contains

Quota lens (#227) window card, past windows, equivalence, weekday heatmap, Overview summary, trend indicator, hideable cards
Model-scoped windows (#231) a "Fable only" allowance now counts only that model, across chart, history and estimate
Extra Claude scan roots (#230) CLAUDE_CONFIG_DIR-isolated directories registered in Settings
Fixes popover reopens no longer risk the oauth/usage rate limit; stale-account usage after a credential-target change (#223); the running cycle out of past windows; excluded ≠ unclassified; a missing count no longer renders as a measured 0

Claims

Every item is limited to what the diff supports. The cold-start note is real rather than cautionary: the snapshot envelope now records the scan roots that produced it and its schema moved 1 → 2, so the first launch after updating restores nothing and rebuilds.

No previous release's fix is re-claimed.

Both override files, so `release_notes.sh` ships them verbatim and DeepSeek is
skipped on both surfaces. That is the point of writing them rather than
generating them for this release.

83 commits since v1.13.3, and the great majority are review-round fixes to code
that never shipped — a generated changelog would list "stop two cards stating a
terminal answer they had not yet asked" to a user who has never seen either
card. The four merged PRs contain three user-facing features and five fixes
worth naming; everything else is internal to work that lands whole in this
release.

Skipping generation also removes the drift this repo has hit before: the two
prompts are independent and non-deterministic, so the Sparkle text and the
GitHub body could describe the same release differently, and a previous release
had its predecessor's fix re-claimed. A verbatim override cannot do either.

The "Thanks:" line and GitHub's New Contributors / Full Changelog tail are still
appended by the script, so nothing about contributor credit is lost by
overriding the body.

Content is limited to what the diff supports. The cold-start note is real: the
snapshot envelope now records the scan roots that produced it and its schema
moved 1 to 2, so the first launch after updating restores nothing.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d2f97ba221

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread release-notes.override.md Outdated
Comment thread release-notes.override.txt Outdated
The release grew from one merged PR plus the lens to four, so the notes now
cover #233, #234 and #235 alongside what was already written.

Three additions carry weight beyond describing a change.

**#234's downgrade consequence leads the "before you update" section**, ahead
of the cold-start note. Upgrading loses nothing — the migration exists so a
version bump does not reset everyone's history, and it preserves every sample.
Downgrading afterwards does: an older build cannot read schema 4, quarantines
the file, and starts from nothing. The distinction that matters to a reader is
that usage totals survive because they are recomputed from logs, while pace
readings are observations taken over time and cannot be. Weeks of them are what
lets a window say "Historically" instead of falling back to an average.

The laziness is stated for the same reason a silent behaviour always is: the
conversion happens on the next write the app had its own reason to make, so a
file still reading `"schemaVersion": 3` after updating is normal. Without that
sentence it reads as a migration that did not run, and someone reports it.

**#235's token-expiry limit is written as a deliberate trade-off**, not omitted
and not softened. An additional account whose token expires is not refreshed in
place; the card says so and asks the user to run `claude` under that config
directory. The refresh path reloads, validates and saves against the main
configuration directory throughout, so routing an additional account through it
would overwrite the main account's stored credential and log the user out of
it. A limit that is not named in the notes is reported as a bug, and the reader
cannot tell a chosen failure from an unnoticed one.

**#233 is described by what the user paid**, not by the mechanism: an ordinary
launch rebuilt caches it already had. The measurement that says this is not the
cold-start regression belongs in the PR, not in notes written for users.

Both files stay overrides, so `release_notes.sh` ships them verbatim and
DeepSeek is skipped on both surfaces — the two prompts are independent and
non-deterministic, and a release this size is the wrong one to let them
describe differently.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: df449e3ef4

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread release-notes.override.md Outdated
Comment thread release-notes.override.md
The note said downgrading "loses your quota pace history". That overstates what
happens, and a release note that overstates a consequence is as much a defect as
one that hides it — a user who reads it decides against updating for a reason
that is not true.

An older build cannot read schema 4, so it moves the file to a
`.corrupt-<timestamp>.json` copy beside it and starts accumulating from nothing.
The pace cards go back to learning, which is visible and unwelcome. But the copy
holds the COMPLETE history and the data is recoverable — that path was walked
losslessly on a real store during this cycle, which is how the overstatement was
noticed.

So the accurate framing is "set aside", with "nothing is deleted" said
explicitly rather than left to be inferred from the absence of a stronger word.
What is genuinely irreversible about a schema mismatch is nobody noticing it,
and a quarantine is the opposite of that: it is loud, it leaves an artifact, and
the pace card announces the reset. That is worth preferring over a quieter
scheme, and it was nearly traded away for one.

The upgrade claim gains its evidence: every sample preserved, verified against a
real store of 32 series and 3,117 samples, which without the migration is
quarantined outright. Both halves of that came from running it rather than
reading it.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4f5f3c1299

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread release-notes.override.md
Two factual errors in hand-written notes, both caught by review, both of the
kind that generation would not have made and hand-writing invites.

The equivalence estimate was described as the value of ONE percent of the
allowance. It is ten: `WindowEquivalence` normalizes per tenth and every row
renders "10% of quota ~ …" (`WindowEquivalence.swift:99`, `:112`, `:115`,
`:124`). A headline metric wrong by a factor of ten, in both override forms,
which ship verbatim.

"Past windows" and "Window history" were written as one card. They are two.
`QuotaHistoryStripCard` is Past windows — the all-agent view, one row per quota
window, a strip of cycle bars, no expansion. `QuotaHistoryCard` is Window
history — the open subscription's recent cycles, each expandable to a per-model
breakdown. The note attributed the expansion to the wrong surface and told the
reader to look where it is not, which is worse than omitting it.

"every recorded reset cycle" is also dropped. The list is bounded, and "every"
is a promise the card does not keep.

Both errors are about what the app IS rather than about what changed, which is
the class hand-written notes are worst at: the changes were fresh and the
surfaces were assumed. Writing them from the diff and not from the running app
is what produced both.
@Nanako0129

Copy link
Copy Markdown
Owner Author

Sync: two more PRs merged into main after this one was opened — user-facing content for the notes to consider before tagging.

#234 — the quota-pace store's on-disk schema moved 3 → 4 (lazy, in-place upgrade; adds an unused plan field for a later feature). No visible UI change and no cold start — the store file itself stays byte-identical until a transaction that had its own reason to write, so this is not another "rebuilds once" note.

#235 — a second Claude account registered via the Settings root added in #230 (already in your notes) now gets its own quota card, symmetric with the primary: pace, duration estimate and historical trend, not just a percentage. Previously the extra account's usage folded into totals with no card of its own. The tightest-window summary line and the Overview history/heatmap controls also now name which account they're showing when two exist.

Both are additive to what's already drafted, not corrections to it — nothing in the current text needs walking back.

…xception

#233 grew during review. The note described only its scan-cache half.

Registering the Claude directories also dropped the quota throttle and woke
every sleeping poller, unconditionally and on every launch — so the cost was
not only rebuilding a cache but spending provider requests against an endpoint
that rate-limits. Both halves are now gated on the registered set actually
differing, and the note says so.

The exception is stated rather than omitted. The first registration after a
launch still refreshes the quota cards even when the user's list is unchanged,
because the engine starts each run with nothing registered — a real change from
its point of view, and skipping it could leave the menu bar showing a reading
taken before the extra account was known. A note that claimed the work happens
"only when something changed" would be wrong about launch, which is the case
users will actually observe.

Also drops "scan-root list" for "your Claude directories": the internal name
described the payload, not the thing the reader configured.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 571345700d

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread release-notes.override.md Outdated
The note said Overview cards can be hidden individually. `OverviewCard.toggleable`
excludes `.chart`, and the Settings copy already tells users so — the note
promised an action the app refuses for one of six cards.

Qualified rather than deleted, and with the reason, because the exclusion is a
design decision worth a reader knowing: Overview is what every hidden lens falls
back to (`AppView.effective`), so a fallback that can be emptied leaves nowhere
to land.

Third factual error in these notes found by review, all of the same kind — about
what the app IS rather than what changed. Written from the diff instead of from
the running app.
@Nanako0129
Nanako0129 merged commit 2a06241 into main Aug 24, 2026
1 check passed
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