Repository navigation
Expand file tree
/
Copy pathcliff.toml
More file actions
154 lines (150 loc) · 10.2 KB
/
Copy pathcliff.toml
File metadata and controls
154 lines (150 loc) · 10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# git-cliff configuration — generates CHANGELOG.md and GitHub Release notes
# from Conventional Commits. Output follows the Keep a Changelog format.
#
# Local: git-cliff --tag "v$(cat VERSION)" -o CHANGELOG.md (rewrite full file)
# git-cliff --latest --strip header (just newest release, for release notes)
# CI: orhun/git-cliff-action in .github/workflows/release.yml
#
# PR numbers like "(#123)" already live in the commit subjects and GitHub
# auto-links them in CHANGELOG.md and Release notes, so no token/remote
# integration is needed here. Curate contributor shout-outs by hand for
# notable releases.
[changelog]
header = """
# Changelog
All notable changes to this project are documented here.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
"""
body = """
{% if version %}\
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
{% else %}\
## [Unreleased]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits %}\
- {{ commit.message | split(pat="\n") | first | upper_first | trim }}
{% endfor %}\
{% endfor %}\n
"""
footer = """
{% for release in releases -%}
{% if release.version -%}
{% if release.previous.version -%}
[{{ release.version | trim_start_matches(pat="v") }}]: https://github.com/fujibee/agmsg/compare/{{ release.previous.version }}...{{ release.version }}
{% else -%}
[{{ release.version | trim_start_matches(pat="v") }}]: https://github.com/fujibee/agmsg/releases/tag/{{ release.version }}
{% endif -%}
{% endif -%}
{% endfor %}
"""
trim = true
[git]
conventional_commits = true
# Don't auto-drop non-conventional commits — some notable community PRs were
# squash-merged with their PR title as-is (no `feat:`/`fix:` prefix). Instead we
# classify explicitly below and the catch-all rule skips everything unmatched,
# so the log stays curated rather than flooded with merges/initial commits.
filter_unconventional = false
split_commits = false
# Conventional types → Keep a Changelog sections. The `<!-- N -->` prefixes only
# drive section ordering; `striptags` removes them from the rendered heading.
commit_parsers = [
{ message = "^Merge", skip = true },
{ message = "^release", skip = true },
{ message = "^(chore|ci|build|test|style)", skip = true },
# App-only changes after 1.5.0 ship in the desktop app release (app 0.5.0),
# not in the npm package. Named one by one: older app-scoped entries already
# in the changelog must keep appearing if the file is ever regenerated.
{ message = "^fix\\(app\\): bound the sidebar's team list so it scrolls", skip = true },
{ message = "^feat\\(app\\): allow Option-drag native text selection", skip = true },
{ message = "^fix\\(app\\): About shows the core actually running", skip = true },
{ message = "^fix\\(app\\): build the spawn prompt from each type's own", skip = true },
{ message = "^fix\\(app\\): open a clicked agent in the tab being viewed", skip = true },
{ message = "^fix\\(app\\): keep a renamed team's open tabs", skip = true },
# After 1.5.1: app and site changes ship outside the npm package (the next
# app release and the project site), not in the CLI.
{ message = "^fix\\(app\\): bundle SKILL.md and the other files the installer reads", skip = true },
{ message = "^fix\\(app\\): keep the sidebar user block and settings gear", skip = true },
{ message = "^fix\\(app\\): emit each message once when events and legacy rows", skip = true },
{ message = "^fix\\(site\\): bump Astro for GHSA-26w7-cxv4-gfx2", skip = true },
# After 1.7.1: app-only changes ship in the next app release, not the CLI.
{ message = "^feat\\(app\\): agents.spawn takes an effort the chosen model offers", skip = true },
{ message = "^feat\\(app\\): tell add-ons the app's language", skip = true },
{ message = "^feat\\(app\\): agents.models lists the model choices", skip = true },
{ message = "^fix\\(app\\): treat an installed release candidate as older", skip = true },
{ message = "^feat", group = "<!-- 0 -->Added" },
{ message = "^fix", group = "<!-- 1 -->Fixed" },
{ message = "^perf", group = "<!-- 2 -->Performance" },
{ message = "^refactor", group = "<!-- 3 -->Changed" },
{ message = "^docs", group = "<!-- 4 -->Documentation" },
{ message = "^revert", group = "<!-- 5 -->Reverted" },
# Headline community PRs merged with non-conventional squash subjects:
{ message = "(?i)native windows", group = "<!-- 0 -->Added" },
{ message = "(?i)powershell launcher", group = "<!-- 0 -->Added" },
{ message = "(?i)sandboxed bash tool", group = "<!-- 1 -->Fixed" },
{ message = "^Role-to-session affinity", group = "<!-- 0 -->Added" },
{ message = "^Stop ancestor project resolution", group = "<!-- 1 -->Fixed" },
{ message = "^Fix Codex monitor multi-identity delivery", group = "<!-- 1 -->Fixed" },
{ message = "^Isolate Codex monitor bridges by role", group = "<!-- 0 -->Added" },
{ message = "^Allow launcher-reserved bridge PID", group = "<!-- 1 -->Fixed" },
{ message = "^Stop telling every agent that key rotate", group = "<!-- 1 -->Fixed" },
{ message = "^Naming is an invariant every entry point re-asserts", group = "<!-- 0 -->Added" },
{ message = "^spawn: launch codex through the bundled monitor shim", group = "<!-- 1 -->Fixed" },
{ message = "^Remove internal handles from the published tree", group = "<!-- 3 -->Changed" },
{ message = "^sync-cipher: tolerate unknown message fields on receive", group = "<!-- 1 -->Fixed" },
{ message = "^codex: one app-server per seat, never shared", group = "<!-- 1 -->Fixed" },
{ message = "^plain driver: an agent-native substitute for peek/poke with no pane", group = "<!-- 0 -->Added" },
# 1.6.0 agmsgd beta: squash subjects without a conventional prefix.
{ message = "^agmsgd beta: skeleton", group = "<!-- 0 -->Added" },
{ message = "^Add Codex queue delivery and seat status", group = "<!-- 0 -->Added" },
{ message = "^Add daemon beta switching and recovery guidance", group = "<!-- 0 -->Added" },
{ message = "^Allow Windows Codex queue from the measured minimum release", group = "<!-- 0 -->Added" },
# 1.6.0 fixes merged to main with a component prefix instead of a conventional one.
{ message = "^sync-autostart: remove the two temp files once the slow child finishes", group = "<!-- 1 -->Fixed" },
{ message = "^lock: leave no window between taking a registry lock and recording its holder", group = "<!-- 1 -->Fixed" },
# 1.4.0's jev work was squashed with a "jev:" subject rather than a
# Conventional prefix, so the catch-all below would drop it — including the
# second provider, the most user-visible jev change in the release. Same
# remedy as the community-PR lines above.
{ message = "^jev: add TypeSafe as a second provider", group = "<!-- 0 -->Added" },
{ message = "^jev: report each question's own confidence", group = "<!-- 1 -->Fixed" },
{ message = "^jev: promote batching multiple questions", group = "<!-- 4 -->Documentation" },
{ message = "^jev: fix tool.conf comments", group = "<!-- 4 -->Documentation" },
{ message = "^jev, ext-tool README", group = "<!-- 4 -->Documentation" },
# Everything else (merges, initial commit, misc) is intentionally dropped.
{ message = "^codex: read the session name from session_index.jsonl", group = "<!-- 1 -->Fixed" },
{ message = "^codex: report when a Codex config is missing this install's writable_roots", group = "<!-- 0 -->Added" },
# 1.7.2: core changes squashed without a Conventional prefix.
{ message = "^sync: carry a message body to the other machine as the same bytes", group = "<!-- 1 -->Fixed" },
{ message = "^sync: one row the wire cannot carry no longer stops the rest of the push", group = "<!-- 1 -->Fixed" },
{ message = "^CR strip only where sqlite3 emits CRLF", group = "<!-- 1 -->Fixed" },
{ message = "^daemon: make an enabled intent recoverable beyond the installer", group = "<!-- 1 -->Fixed" },
{ message = "^Fix #774 sync-autostart", group = "<!-- 1 -->Fixed" },
{ message = "^Delivery paths: a message body with invalid UTF-8 no longer stops anything", group = "<!-- 1 -->Fixed" },
{ message = "^Keep an install's runtime state outside the directory Codex watches", group = "<!-- 3 -->Changed" },
{ message = "^down-notice\\.sh: JSON-escape backslash and double quote", group = "<!-- 1 -->Fixed" },
{ message = "^codex bridge launcher: stop starting a bridge that only ever ends at once", group = "<!-- 1 -->Fixed" },
{ message = "^systemd: stop agmsgd's restart burst cap from giving up permanently", group = "<!-- 1 -->Fixed" },
{ message = "^agmsgd: an unreadable pid check is unknown", group = "<!-- 1 -->Fixed" },
{ message = "^codex: never publish a bare unix:// app-server address", group = "<!-- 1 -->Fixed" },
{ message = "^agmsgd: keep seat state in memory, not in install\\.db", group = "<!-- 3 -->Changed" },
{ message = "^codex bridge: date every log record", group = "<!-- 3 -->Changed" },
{ message = "^Codex SessionStart: do not start the direct bridge while agmsgd delivers", group = "<!-- 1 -->Fixed" },
{ message = "^agmsgd: find a live Claude Code seat again when its recorded socket is gone", group = "<!-- 1 -->Fixed" },
{ message = "^Do not report a never-bound local team as connected but not syncing", group = "<!-- 1 -->Fixed" },
{ message = "^install --update: stop a running agmsgd and confirm it is gone", group = "<!-- 1 -->Fixed" },
{ message = "^Add a shared record for a component that is down or degraded", group = "<!-- 0 -->Added" },
# 1.7.3: core changes squashed without a Conventional prefix.
{ message = "^daemon state: do not offer an old start refusal as the reason", group = "<!-- 1 -->Fixed" },
{ message = "^install\\.sh / uninstall\\.sh: name the real location when AGMSG_INSTALL_HOME is set", group = "<!-- 1 -->Fixed" },
{ message = "^Remove sync_quarantine rows that only repeat a stored message", group = "<!-- 1 -->Fixed" },
{ message = ".*", skip = true },
]
protect_breaking_commits = true
filter_commits = true
tag_pattern = "v[0-9]*"
topo_order = false
sort_commits = "newest"