Repository navigation
build(release): changelog fragments in changelog.d/ instead of one Unreleased section - #581
Merged
Merged
Conversation
…released section Every feature PR wrote its paragraph under CHANGELOG.md's "## Unreleased", the same spot, so each conflicted with every other: 56 PRs touched that section in the three days to October 18, and one PR merged main six times in five hours without catching up. A PR now adds one file under changelog.d/ instead. The release folds the fragments, oldest commit first, into the new version's section after any Unreleased text and deletes them; a change with a fragment isn't listed again by its title. Tested by .github/scripts/test_release.py, run by pre-commit when the script changes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NY27LFMbLezbvQQQeHT19a
adeelahmad
pushed a commit
that referenced
this pull request
Oct 18, 2026
The changelog paragraph moves to changelog.d/projects.md (#581). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015ZmJ29Kc4iXuyKqCRifAH5
This was referenced Oct 18, 2026
adeelahmad
pushed a commit
that referenced
this pull request
Oct 18, 2026
….d fragment, and name them in the README The release commit folds Unreleased into the version section and #581 moved new entries to changelog.d/, so the entry becomes changelog.d/timeline-social.md. The README's built line lost its reactions and comments clause in an earlier merge; it is back. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ln25ykE6uBDqx21WBU94SX
This was referenced Oct 18, 2026
adeelahmad
added a commit
that referenced
this pull request
Oct 18, 2026
* feat(timeline): emoji reactions and comments on activities
The timeline becomes a feed everyone in a namespace talks on. An opened item has a React button with a palette and shows everyone's reactions as chips; its comments open as threads with Reply, where Enter sends. A closed line sums its items' reactions and says how many comments it has. A comment on an asset's arrival is a comment on the asset, so the same thread shows on its page.
Each reaction is a reaction.added activity (noisy, by the person, with the activity as its object) and each comment a comment.added with the activity as its target, following the activity's audience, so automations and agents can act on them. Agents react and comment over MCP (react_to_activity, activity_comments, comment_on_activity) and through POST /activities/{id}/react and /activities/{id}/comments.
Reactions are one event_reaction row per person and activity, as marks are; comments reuse the comment table with an activity field. No model call is involved.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ln25ykE6uBDqx21WBU94SX
* docs(readme): list the assistant's answers about Lens itself as built
Release 0.15.0 carries #400, so the requirements check failed on main
with it still under In progress; it moves to the built list with its
checks.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ln25ykE6uBDqx21WBU94SX
* fix(chat): show a new conversation's first answer when its first load raced the stream
The page moves to /chat/{id} as a new conversation's first answer
streams. On a slow device that first load of the conversation is still
in flight when the answer ends, and the query cache folds the refetch
asked for then into the load, which predates the answer: the page showed
"No answer was saved for this question" until reloaded (the phone
clicks survey's chat-ask journey in CI). After an answer, when the
conversation read back lacks it, it is read once more.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ln25ykE6uBDqx21WBU94SX
* Revert "fix(chat): show a new conversation's first answer when its first load raced the stream"
This reverts commit 7f260ec: #582 carries
the same fix for main (refetchFresh in every chat panel, and the answer
written on a thread of its own), so this PR stays one concern.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ln25ykE6uBDqx21WBU94SX
* docs(changelog): move the reactions and comments entry to a changelog.d fragment, and name them in the README
The release commit folds Unreleased into the version section and #581 moved new entries to changelog.d/, so the
entry becomes changelog.d/timeline-social.md. The README's built line lost its reactions and comments clause in an
earlier merge; it is back.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ln25ykE6uBDqx21WBU94SX
---------
Co-authored-by: Adeel Ahmad <noreply@anthropic.com>
This was referenced Oct 18, 2026
Merged
This was referenced Oct 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Adeel · project thread
Description
Before: a pull request that wanted more than its title in the changelog wrote a paragraph under
## UnreleasedinCHANGELOG.md. Every such PR edited the same spot, so each conflicted with every other and had to mergemainagain after each merge tomain.After: the PR adds one Markdown file under
changelog.d/(named after its branch;changelog.d/README.mdsays how). The Release workflow folds the fragments into the new version's section, oldest commit first, after any Unreleased text, deletes them, and doesn't list a change with a fragment again by its title. Nothing changes for readers ofCHANGELOG.md;## Unreleasedstill works for the PRs in flight.How:
release.py cutreadschangelog.d/*.md(ordered by the commit that added each,git log --diff-filter=A), joins them into the body and unlinks them sogit commit -arecords the deletions;changes_sincecounts a fragment as "documented". Tested by.github/scripts/test_release.py(a throwaway git repo: order, deletion, Unreleased first, a fragment alone is a release, README and dotfiles stay), run by a new pre-commit hook when the script changes. CONTRIBUTING, docs/contributing.md, the workflow header and AGENTS.md say to write a fragment.Motivation and Context
Measured on
main: 56 non-release commits touchedCHANGELOG.mdbetween 2026-10-16 and 2026-10-18. On 2026-10-18 one PR (#521) mergedmainsix times in five hours because every merge touchingCHANGELOG.mdconflicted it again. With fragments, two PRs' changelog text never touches the same file.Types of changes
!in the title)Checklist:
make hookschecks it on commit).docs/accordingly.Done questions (AGENTS.md)
.envedit or manual step.## Unreleasedtext still works.Generated by Claude Code