Commit Graph

19 Commits

Author SHA1 Message Date
rcourtman 0bd6e8b9d8 Point release pages at GitHub's comparison with a Source comparison section
The first beta's page listed no changes, and the full changelog file is
neither attached to nor linked from any release page, so a reader could
not look up a change the summary did not name. Add a pointer, advisory
and additive.

The renderer appends a "## Source comparison" section after Roll back: a
link to GitHub's comparison of the release tag with the stable rollback
target the workflow already passes (--rollback-target and --candidate-tag).
It is a pointer, not a list. GitHub shows at most 250 commits in a
comparison and this beta had 328 changes, so the section says larger
comparisons may omit commits and is not called a full list.

It never fails a release on its own. The helper renders nothing, and
raises nothing, for a missing or malformed tag, a base that is not a
lower stable release, a trailing newline, non-ASCII digits, or numbers
too large to convert. Bodies without the section, including every
earlier release and any frozen in-flight one, keep validating, because
the validator already permits a trailing section and is unchanged. The
post-update changelog dialog reads only recognised category headings, so
a separate heading after Roll back is ignored by it.

Every consumer of the rendered body was audited (the renderer's
validators, create-release, validate-release-assets,
recover-release-activation, the updater backend, the what's-new model and
the Go and TypeScript tests): no regression. Review of the first draft
found a crash on a 5000-digit tag, a newline that would land inside the
URL, and overclaiming contract text; all fixed and pinned by tests that
fail against the first draft. A tags/ prefix would avoid a branch that
shares a tag's name, but GitHub's web comparison URL returned 404 for it
on existing tags, so bare refs are used and the limit is recorded.

Tests run the real renderer on the v6.5.0 notes: placement after Roll
back, exact spacing, numeric ordering, ten edit and annotation cycles
with CRLF and the extra jq newline, expected-body rejection of a changed
or deleted section, and absence still validating. They fail against the
original renderer. Making the section required, and a generated
row-level inventory that proves completeness, need a declarative contract
record in the preparation snapshot and are deliberately deferred; the
contract explains why.

Contract-Neutral: Adds an advisory link to rendered release pages; no published artifact, tag, signing, install or customer contract changes.
2026-10-13 00:20:18 +01:00
pulse-triage[bot] 022b55083d Keep authored release notes compatible with safety checks
Bind stable notes to version and operator disclosures rather than obsolete prose. Support bounded grouped customer sections for v6.4.6 and later, align generation and rendering, and preserve published history and all qualification gates.

Change-source: pulse-maintainer
2026-10-01 05:28:54 +01:00
pulse-triage[bot] 9d77f09b4f Reject unscoped server updater commands in release bodies
Keep the existing signed installer fallback and require nearby Pulse helper ownership for every install and rollback example, including authored bullets. A distant community-scripts warning must not make an unsafe command publishable.

Change-source: pulse-maintainer
2026-09-30 20:28:17 +01:00
rcourtman 62c3761ee6 Preserve alert lifecycle truth and safe pinned updates
Rejected active-alert writes still reached history, firing events and
notification dispatch. Make admission explicit across detector and restore
paths so repeated suppressed observations cannot create those side effects.
Reconcile restored alerts when persisted resource policy attaches at startup,
reconcile again after native aliases become canonical, and refresh shared
state before those alerts reach clients.

Preserve occurrence identity when retained alerts re-fire, including durable
history reconstruction and delayed lifecycle replay.

Keep retained table and card components mounted when scrolling shifts the
visible window, so policy editors do not lose unsaved state. Show actual
future maintenance times and the paused-attention effect.

Keep synthetic host machine identities stable across restarts so saved
operator policy remains attached during verification.

Qualify server update and rollback instructions by helper ownership, and
stop signed installer recipes before execution if a download or signature
check fails.

Refs #2237
2026-09-24 17:43:50 +01:00
pulse-triage[bot] 505dcd571f Keep server rollback guidance executable 2026-08-29 10:15:45 +01:00
Pulse Test 354c1e6ffd feat(release): add visual changelog comparisons 2026-08-28 11:29:44 +01:00
rcourtman 1e75423116 fix(release): enforce plain changelog punctuation 2026-08-27 13:56:35 +01:00
rcourtman 9e17122713 fix(release): keep changelog synthesis model-led 2026-08-27 13:39:16 +01:00
rcourtman ff27c3881f fix(release): make changelog ranges channel-aware 2026-08-27 11:56:06 +01:00
Richard Courtman 1c76a7cbdc Enforce customer-facing release notes 2026-08-25 17:13:07 +01:00
rcourtman 4739d9af07 fix(release): reject issue references in highlights 2026-08-08 00:54:38 +01:00
rcourtman 8fd43b307b fix(release): simplify in-app highlights 2026-08-07 15:50:39 +01:00
rcourtman c9e66b2295 release: pin code-signing policy link to the release tag
The docs link drift guard (test_repo_docs_link_drift.py) fails CI because
render_release_body.py links docs/CODE_SIGNING_POLICY.md at blob/main.
Release bodies must reference the docs snapshot of the release they
describe, so the installation section now links blob/v{version}, matching
how the rest of the body pins to the version being cut. The unit test pin
follows. Also skip .claude/ in the drift guard so local runs on a shared
tree are not polluted by stale agent worktrees under .claude/worktrees
that CI never checks out.
2026-08-07 01:13:56 +01:00
Richard Courtman 25ba5fd63e docs: publish SignPath policy links 2026-08-06 17:42:08 +01:00
rcourtman 674364c749 Record v6.1.0 unsigned Windows exception 2026-07-22 15:37:48 +01:00
rcourtman 7ab605452d fix(release): fail closed on malformed release notes 2026-07-17 11:12:22 +01:00
rcourtman 0f747781fb Support private Pro archive installs 2026-05-07 09:28:38 +01:00
rcourtman fc4928e1f2 Clarify paid Pulse Pro runtime install path 2026-05-06 21:52:50 +01:00
rcourtman b19991f4ae Fix published release body rendering 2026-04-16 22:20:17 +01:00