feat: attribution and backfill #1

Merged
rcsheets merged 2 commits from feat/attribution-and-backfill into main 2026-08-09 06:13:44 +00:00
Owner
No description provided.
Two additions that go together, because both are about a changelog that
has drifted from the releases it describes.

Attribution. Each generated entry now carries an HTML comment naming the
model, the request id, the endpoint and the date -- invisible where the
file is rendered, greppable in the source. The model is read from the
response rather than the request, because a routing alias hides the
checkpoint that actually answered, and which one wrote an entry is the
point of recording it. The request id is the standard `.id`, so it still
populates when something other than the usual engine answers -- exactly
when knowing is most useful, since its prefix names the component.

It rides out of summarize_with_inference on the first line: everything
there runs inside a command substitution, whose variable assignments are
lost to the caller. summarize_range peels it back off before wrapping
and validation, then re-attaches it as the head of the body -- so
replace_section_body carries it and re-stubbing drops it with the prose,
with no special handling in either writer.

Backfill. A release whose changelog commit never landed leaves no trace:
the file skips a version, which is not a STUB entry and is invisible
until something looks for it. missing_versions finds those, enstubbify
--missing creates sections for them, and backfill --limit converts them
a few at a time. mode: backfill in the action runs the two phases in
order -- stubbing is cheap and needs no inference, so it completes even
when the endpoint is down, and only the summarizing phase is bounded.

The limit defaults to 1, so a daily schedule clears a backlog of N over
N days. Short runs, and the first entries can be read before the rest
are written, which matters when the endpoint is a service still under
active change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This repo had no workflows, so its tags were placed by hand -- the one
thing the projects consuming it never do. The version now comes from the
conventional commits since the last vX.Y.Z, same rule they use.

The part specific to being an action repo is the alias. Callers
reference changelog-action@v1, which is a tag rather than a branch, so
merging to main changes nothing for them until v1 moves. Tagging only
vX.Y.Z would leave every consumer on the old code with no sign that
anything had shipped, so the job pushes the exact version and then
force-moves the alias onto it. A failure there fails the job: a new
vX.Y.Z beside a stale vN is a release nobody receives, which should be
loud rather than a green run that changed nothing.

Runs on the shared [dind, trusted] pool, this forge's arrangement for a
repo without its own runner pool.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
rcsheets deleted branch feat/attribution-and-backfill 2026-08-09 06:13:44 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
brooktrails/changelog-action!1
No description provided.