Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
fc0276d
fix(release): pin conventionalcommits preset to the writer-v8-compati…
iamfj Aug 9, 2026
0c4d7b0
ci(release): exempt the one-off changelog backfill commit from the guard
iamfj Aug 9, 2026
ddceefd
chore(release): backfill changelog notes
iamfj Aug 9, 2026
6295ed9
Merge pull request #292 from linearis-oss/conductor/iamfj-fix/changel…
iamfj Aug 10, 2026
52553de
chore(deps): update dev dependencies (non-major)
renovate[bot] Aug 10, 2026
0cf88b5
Merge pull request #290 from linearis-oss/renovate/dev-dependencies-(…
iamfj Aug 10, 2026
b816d7b
chore(deps): update semantic-release monorepo
renovate[bot] Aug 10, 2026
d32aba5
Merge pull request #291 from linearis-oss/renovate/major-semantic-rel…
iamfj Aug 10, 2026
6ac9829
fix(issues): make archived issues reachable by identifier
iamfj Aug 10, 2026
2d4885e
feat(issues): return url, creator, delegate and lifecycle timestamps
iamfj Aug 10, 2026
1530903
feat(issues): add subscribe, share and remind commands
iamfj Aug 10, 2026
fb68bcf
feat(issues): add batch create and batch update
iamfj Aug 10, 2026
1c0ee8c
feat(issues): add from-branch to find an issue by its git branch
iamfj Aug 10, 2026
8c96db1
feat(issues): support team moves, subscribers and delegates
iamfj Aug 10, 2026
00bf191
feat(issues): add restore and snooze
iamfj Aug 10, 2026
2e01ad3
feat(issues): add order-by, unassigned, state-type and subscriber fil…
iamfj Aug 10, 2026
9e7cf04
feat(attachments): add disable-sync
iamfj Aug 10, 2026
c334e1f
docs: mark the issues coverage row complete
iamfj Aug 10, 2026
5a248a8
fix(issues): let a UUID pass the mixed-team batch guard
iamfj Aug 10, 2026
cd42347
fix(issues): await user lookups so failures stay JSON
iamfj Aug 10, 2026
cb14ec7
fix(issues): make --include-archived surface archived issues
iamfj Aug 10, 2026
13ed81a
feat(issues): publish a JSON Schema for batch create documents
iamfj Aug 10, 2026
67ea490
feat(issues): accept subscribers and delegate in batch create
iamfj Aug 10, 2026
f623be9
perf(issues): bound the fan-out of batch create ID resolution
iamfj Aug 10, 2026
40f40d4
docs(issues): say that --include-archived also unhides completed work
iamfj Aug 10, 2026
31634dc
fix(issues): validate batch update estimates against the team scale
iamfj Aug 10, 2026
70aafb9
feat(issues): let batch update clear a cycle or milestone
iamfj Aug 10, 2026
c8d94f1
fix(issues): validate a moved issue's estimate against its new team
iamfj Aug 10, 2026
7b04409
docs(issues): stop claiming search hides completed issues
iamfj Aug 10, 2026
634f846
fix(issues): name the flag when a relative offset overflows
iamfj Aug 10, 2026
b83ea52
fix(issues): locate the entry when a batch list is malformed
iamfj Aug 10, 2026
c716701
fix(issues): guard batch update labels across teams too
iamfj Aug 10, 2026
d5f8198
fix(issues): resolve a `me` assignee against the viewer
iamfj Aug 10, 2026
b00488b
docs(issues): attach the batch-create doc to its function
iamfj Aug 10, 2026
60b9491
feat(issues): take batch update from a JSON document too
iamfj Aug 10, 2026
b95d020
docs(readme): condense the batch schema section
iamfj Aug 10, 2026
b8e4de8
Merge pull request #293 from linearis-oss/conductor/iamfj-docs/issues…
iamfj Aug 10, 2026
54a6932
chore(release): 2026.8.0-next.1 [skip ci]
semantic-release-bot Aug 10, 2026
47b509e
feat(projects)!: drop archive in favour of delete
iamfj Aug 10, 2026
0357b2d
refactor(projects): split the command module by subgroup
iamfj Aug 10, 2026
c66da2b
feat(projects): post and manage project status updates
iamfj Aug 10, 2026
a6e1a16
feat(projects): administer the workspace project status flow
iamfj Aug 10, 2026
4bf8dcc
feat(labels): full CRUD and retire/restore for project labels
iamfj Aug 10, 2026
de351cf
feat(projects): full-text search and external sync disable
iamfj Aug 10, 2026
fcb959f
refactor(projects): apply label modes incrementally
iamfj Aug 10, 2026
4e81324
feat(projects): chronological project activity timeline
iamfj Aug 10, 2026
bdd3de0
feat(projects): manage project dependency relations
iamfj Aug 10, 2026
2e9440c
feat(projects): read one dependency and page them workspace-wide
iamfj Aug 10, 2026
6f360c7
docs: mark the projects coverage row complete
iamfj Aug 10, 2026
9f5e87a
fix(projects): anchor relation updates to the right end
iamfj Aug 10, 2026
0cd58e6
refactor(activity): share the timeline merge between activity commands
iamfj Aug 10, 2026
1e3b428
fix(projects): count archived statuses when appending
iamfj Aug 10, 2026
b143d2b
fix(milestones)!: keep a milestone lookup inside its project
iamfj Aug 10, 2026
6833231
docs: correct the resolver entries in the file catalog
iamfj Aug 10, 2026
b3886e4
fix(projects): report the relation page bound instead of a miss
iamfj Aug 10, 2026
5824b02
fix(projects): scope relation milestones on the UUID path
iamfj Aug 10, 2026
9810d79
refactor(common): pin update health to the codegen enums
iamfj Aug 10, 2026
8bdb998
docs: correct the project-label teamId rationale
iamfj Aug 10, 2026
59d5890
feat(labels): make the group and parent flags reversible
iamfj Aug 10, 2026
ed7cc89
fix(projects): reject pagination flags on per-project relations
iamfj Aug 10, 2026
30664cd
fix(projects): say where the projects went when archiving fails
iamfj Aug 10, 2026
9655f4f
docs: split the run-on search comment in the projects query
iamfj Aug 10, 2026
fe3508c
fix(projects): refuse to guess which relation a project pair means
iamfj Aug 10, 2026
d5eb26d
fix(projects): refuse a lone relation match past the page bound
iamfj Aug 10, 2026
1be4ab1
fix(projects): refuse to guess between same-named project statuses
iamfj Aug 10, 2026
d99ee89
fix(labels): scope --parent to the same team as the label
iamfj Aug 10, 2026
d94e51e
fix(projects): reject an empty relation update before resolving it
iamfj Aug 10, 2026
9ebdef7
fix(projects): bound and page the project status flow
iamfj Aug 10, 2026
1fdc5e1
refactor(projects): state the relation page bound once
iamfj Aug 10, 2026
e01ca0e
fix(projects): reject a malformed status position
iamfj Aug 10, 2026
fd13029
fix(labels): reject an empty --parent on update
iamfj Aug 10, 2026
fa994e8
docs(projects): drop the stale milestone fallback comment
iamfj Aug 10, 2026
d1287f6
test(projects): keep the rejection assertions inside the type check
iamfj Aug 10, 2026
cb1cd3a
Merge pull request #295 from linearis-oss/conductor/iamfj-docs/projec…
iamfj Aug 10, 2026
8e8f821
chore(release): 2026.8.0-next.2 [skip ci]
semantic-release-bot Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 43 additions & 3 deletions .github/workflows/ci-validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -268,13 +268,53 @@ jobs:
fi

base_ref="origin/${GITHUB_BASE_REF:-main}"
output=$(git log "$base_ref"..HEAD --name-status --pretty=format: -- CHANGELOG.md | sed '/^$/d')

if [ -n "$output" ]; then
# Repairing notes the release workflow itself lost is the one
# legitimate reason for a PR to touch CHANGELOG.md — see
# "Changelog ownership" in CONTRIBUTING.md. Exempt commits whose
# subject is exactly the reserved backfill subject, and only when
# they change nothing outside CHANGELOG.md and only add lines.
exempt_subject="chore(release): backfill changelog notes"

# Capture into a variable rather than feeding `git log` straight into
# a here-string: a here-string swallows the command substitution's
# exit status, so an unresolvable "$base_ref" would read as an empty
# commit list and the guard would silently pass.
candidates=$(git log "$base_ref"..HEAD --format=%H -- CHANGELOG.md)

offenders=""
while read -r sha; do
[ -n "$sha" ] || continue
subject=$(git log -1 --format=%s "$sha")
if [ "$subject" = "$exempt_subject" ]; then
violation=""

extra=$(git show --name-only --pretty=format: "$sha" | sed '/^$/d' | grep -v '^CHANGELOG.md$' || true)
if [ -n "$extra" ]; then
echo "::error::$exempt_subject commit $sha also touches files other than CHANGELOG.md"
echo "$extra"
violation="yes"
fi

deletions=$(git show --numstat --pretty=format: "$sha" -- CHANGELOG.md | awk 'NF { total += $2 } END { print total + 0 }')
if [ "$deletions" -ne 0 ]; then
echo "::error::$exempt_subject commit $sha removes $deletions CHANGELOG.md line(s); a backfill may only add notes"
violation="yes"
fi

if [ -z "$violation" ]; then
continue
fi
fi
offenders="$offenders$sha $subject"$'\n'
done <<< "$candidates"

if [ -n "$offenders" ]; then
echo "::error::CHANGELOG.md is release-workflow-owned and must not appear in PR branch history"
echo "Drop or amend commits that touch CHANGELOG.md, then push with --force-with-lease"
echo "The only exception is an additions-only, CHANGELOG.md-only commit whose subject is exactly: $exempt_subject"
echo
echo "$output"
echo "$offenders"
exit 1
fi

Expand Down
130 changes: 130 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,147 @@
## [2026.8.0-next.2](https://github.com/linearis-oss/linearis/compare/v2026.8.0-next.1...v2026.8.0-next.2) (2026-08-10)

### ⚠ BREAKING CHANGES

* **milestones:** a milestone name that the scoped project does not carry
now fails instead of resolving to a same-named milestone in another
project.
* **projects:** `linearis projects archive <project>` is removed. Use
`linearis projects delete <project>` to trash a project and
`linearis projects unarchive <project>` to restore it. Linear treats
archived and trashed projects as one state, so the replacement is
behaviourally identical.

### Features

* **labels:** full CRUD and retire/restore for project labels ([4bf8dcc](https://github.com/linearis-oss/linearis/commit/4bf8dcc50e69b764f87bc8c1712c2a72f3dcdd76))
* **labels:** make the group and parent flags reversible ([59d5890](https://github.com/linearis-oss/linearis/commit/59d58900933f939aba1af08439d006f6bde51533))
* **projects:** administer the workspace project status flow ([a6e1a16](https://github.com/linearis-oss/linearis/commit/a6e1a1613b0beb76a94c807b7dfb7caa7ee19403))
* **projects:** chronological project activity timeline ([4e81324](https://github.com/linearis-oss/linearis/commit/4e813240026de27618e388c9322c919151e24f02))
* **projects:** drop archive in favour of delete ([47b509e](https://github.com/linearis-oss/linearis/commit/47b509e79339d5882cfddfd32fca920217f02ce9))
* **projects:** full-text search and external sync disable ([de351cf](https://github.com/linearis-oss/linearis/commit/de351cfda0b093261f1d3d4c6ae1e0830061bceb))
* **projects:** manage project dependency relations ([bdd3de0](https://github.com/linearis-oss/linearis/commit/bdd3de0726ca334dc0de4220a120b139c71e1205))
* **projects:** post and manage project status updates ([c66da2b](https://github.com/linearis-oss/linearis/commit/c66da2b7860438683fd90a39d3e8f91a9ce34709))
* **projects:** read one dependency and page them workspace-wide ([2e9440c](https://github.com/linearis-oss/linearis/commit/2e9440c3b21b376b37eecaf7115203cd04341853))

### Bug Fixes

* **labels:** reject an empty --parent on update ([fd13029](https://github.com/linearis-oss/linearis/commit/fd13029a135cc2208640d31533425074971ef87c))
* **labels:** scope --parent to the same team as the label ([d99ee89](https://github.com/linearis-oss/linearis/commit/d99ee89f6302f4e45a276acb73cbb65a4a9e0a99))
* **milestones:** keep a milestone lookup inside its project ([b143d2b](https://github.com/linearis-oss/linearis/commit/b143d2bf1bd801e757fc913fda2f5157ada7c470))
* **projects:** anchor relation updates to the right end ([9f5e87a](https://github.com/linearis-oss/linearis/commit/9f5e87ab3a05564297f9dc7e5bdafee01f8afbeb))
* **projects:** bound and page the project status flow ([9ebdef7](https://github.com/linearis-oss/linearis/commit/9ebdef7301346bcd9ea222b5a1ba989698aa74e3))
* **projects:** count archived statuses when appending ([1e3b428](https://github.com/linearis-oss/linearis/commit/1e3b4283e7cb375732fa1f1c54475a5f104dcf81))
* **projects:** refuse a lone relation match past the page bound ([d5eb26d](https://github.com/linearis-oss/linearis/commit/d5eb26d58302b05756837b0c70827df46de2e526))
* **projects:** refuse to guess between same-named project statuses ([1be4ab1](https://github.com/linearis-oss/linearis/commit/1be4ab102f03ce6582f02100090e46c4f268fac2))
* **projects:** refuse to guess which relation a project pair means ([fe3508c](https://github.com/linearis-oss/linearis/commit/fe3508c6ec2d8c5e817c4f7b584a4ae97bd68aa5))
* **projects:** reject a malformed status position ([e01ca0e](https://github.com/linearis-oss/linearis/commit/e01ca0e900d3c731784d2d75aa84a88ae4d81c20))
* **projects:** reject an empty relation update before resolving it ([d94e51e](https://github.com/linearis-oss/linearis/commit/d94e51eab34fdc55825f448b6b59b95ba47478e6))
* **projects:** reject pagination flags on per-project relations ([ed7cc89](https://github.com/linearis-oss/linearis/commit/ed7cc89e22368bea83373a8a7b989bc9b81c535b))
* **projects:** report the relation page bound instead of a miss ([b3886e4](https://github.com/linearis-oss/linearis/commit/b3886e4bc55774d441d021f272664495893487f9))
* **projects:** say where the projects went when archiving fails ([30664cd](https://github.com/linearis-oss/linearis/commit/30664cd7583443140eebf76a64287d0888bd09aa))
* **projects:** scope relation milestones on the UUID path ([5824b02](https://github.com/linearis-oss/linearis/commit/5824b02c2a3d3cc51cf36af67f81efa009b3f8ec))

## [2026.8.0-next.1](https://github.com/linearis-oss/linearis/compare/v2026.7.0...v2026.8.0-next.1) (2026-08-10)

### Features

* **attachments:** add disable-sync ([9e7cf04](https://github.com/linearis-oss/linearis/commit/9e7cf044fe240dc665f31a51f5f2b8b820bd6f3c))
* **issues:** accept subscribers and delegate in batch create ([67ea490](https://github.com/linearis-oss/linearis/commit/67ea490da975d9cc5ded0d2ba2b82ed302710347))
* **issues:** add batch create and batch update ([fb68bcf](https://github.com/linearis-oss/linearis/commit/fb68bcfd2cc2a47bc9dde0018d88bc2d2374a8f4))
* **issues:** add from-branch to find an issue by its git branch ([1c0ee8c](https://github.com/linearis-oss/linearis/commit/1c0ee8c97864dea24a4ba2b895f18a4c07639f32))
* **issues:** add order-by, unassigned, state-type and subscriber filters ([2e01ad3](https://github.com/linearis-oss/linearis/commit/2e01ad344b9dbd3f815b7c15a957283687b4faf2))
* **issues:** add restore and snooze ([00bf191](https://github.com/linearis-oss/linearis/commit/00bf1919625da595cd51b7f51b7185b24cbd655b))
* **issues:** add subscribe, share and remind commands ([1530903](https://github.com/linearis-oss/linearis/commit/1530903ddf5962faf53365f17c9600f540b553d7))
* **issues:** let batch update clear a cycle or milestone ([70aafb9](https://github.com/linearis-oss/linearis/commit/70aafb94c28741056ea49eebf8d5184f96d05f69))
* **issues:** publish a JSON Schema for batch create documents ([13ed81a](https://github.com/linearis-oss/linearis/commit/13ed81a20e27d97d079b49ab9770564a70095781))
* **issues:** return url, creator, delegate and lifecycle timestamps ([2d4885e](https://github.com/linearis-oss/linearis/commit/2d4885e9c737bcd1c3e8d7657969c91eb3046ba8))
* **issues:** support team moves, subscribers and delegates ([8c96db1](https://github.com/linearis-oss/linearis/commit/8c96db11c2f3d61c8cb37174c6e92d633a51f936))
* **issues:** take batch update from a JSON document too ([60b9491](https://github.com/linearis-oss/linearis/commit/60b94914b724155e4ee9993558e6fc7f13225fd6))

### Bug Fixes

* **issues:** await user lookups so failures stay JSON ([cd42347](https://github.com/linearis-oss/linearis/commit/cd42347d321d51d609ddda92a3434baeebd40a45))
* **issues:** guard batch update labels across teams too ([c716701](https://github.com/linearis-oss/linearis/commit/c7167010810526ca8d0c790ead1cc0788fb0bd22))
* **issues:** let a UUID pass the mixed-team batch guard ([5a248a8](https://github.com/linearis-oss/linearis/commit/5a248a8c102af4c3be7a6e4f7f9adcc21464bf22))
* **issues:** locate the entry when a batch list is malformed ([b83ea52](https://github.com/linearis-oss/linearis/commit/b83ea52695a356ba9650cc68b506010a3ed7bd66))
* **issues:** make --include-archived surface archived issues ([cb14ec7](https://github.com/linearis-oss/linearis/commit/cb14ec7469a8d421c4ccbd7c7e3112fe95a566d3))
* **issues:** make archived issues reachable by identifier ([6ac9829](https://github.com/linearis-oss/linearis/commit/6ac98297ed9d4c675d0e77ec59e395313efa4f84))
* **issues:** name the flag when a relative offset overflows ([634f846](https://github.com/linearis-oss/linearis/commit/634f846900a27993c5ccff402db90e7bc6aa7560))
* **issues:** resolve a `me` assignee against the viewer ([d5f8198](https://github.com/linearis-oss/linearis/commit/d5f81985ab9632db78b968a043398260c97a336b))
* **issues:** validate a moved issue's estimate against its new team ([c8d94f1](https://github.com/linearis-oss/linearis/commit/c8d94f1518f0066d5b7153c4a5d0c26f75a430b8))
* **issues:** validate batch update estimates against the team scale ([31634dc](https://github.com/linearis-oss/linearis/commit/31634dce7b6ebf384475f0188adeb4941b77f6f3))
* **release:** pin conventionalcommits preset to the writer-v8-compatible line ([fc0276d](https://github.com/linearis-oss/linearis/commit/fc0276d163cf7edce50c41c0533afd902a18a534))

### Performance Improvements

* **issues:** bound the fan-out of batch create ID resolution ([f623be9](https://github.com/linearis-oss/linearis/commit/f623be9c49de173d872c66774a0e0e90dcd61ace))

## [2026.7.0](https://github.com/linearis-oss/linearis/compare/v2026.6.0...v2026.7.0) (2026-08-07)

### Features

* **initiatives:** add --clear-owner to initiatives update ([fb401ea](https://github.com/linearis-oss/linearis/commit/fb401ea029bd559140567ea61c6ff1493609b3ea)), closes [#282](https://github.com/linearis-oss/linearis/issues/282)
* **issues:** add --clear-assignee and --clear-project to issues update ([9a5ca75](https://github.com/linearis-oss/linearis/commit/9a5ca7529efdec30d95c77838f947f6e7255b225)), closes [#282](https://github.com/linearis-oss/linearis/issues/282) [#282](https://github.com/linearis-oss/linearis/issues/282)

### Bug Fixes

* **cli:** classify the two option-shaped parse failures ([19ec395](https://github.com/linearis-oss/linearis/commit/19ec3955285f7fcad3d74e21b294604f59d54ccb)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **cli:** disable Commander's implicit help subcommand ([de405af](https://github.com/linearis-oss/linearis/commit/de405afd709abe27cac3fedf0e06165e7b0becc5)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **cli:** emit JSON envelope for argument-parse errors ([3bd0e38](https://github.com/linearis-oss/linearis/commit/3bd0e3899d64bfa5195009d686cf2cbdddc4ed06)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **cli:** give every bare command group the same MISSING_SUBCOMMAND envelope ([b4c3a8b](https://github.com/linearis-oss/linearis/commit/b4c3a8b58690da398c702147b1c1446f00ab34ca))
* **cli:** keep the usage-error message on a single line ([a447807](https://github.com/linearis-oss/linearis/commit/a4478075c73af9e0c0d3af699c68402559c05343))
* **common:** point auth recovery at 'auth login', not the bare group ([cca71ec](https://github.com/linearis-oss/linearis/commit/cca71ec64c86148dbaa27987933d6fae05541082)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **deps:** update dependency commander to v15 ([290424a](https://github.com/linearis-oss/linearis/commit/290424ae2a7f53d3b014de822187429d4fc350b6))
* **deps:** update dependency graphql to v16.14.2 ([ca72bf7](https://github.com/linearis-oss/linearis/commit/ca72bf7ac32f40643f8b34b7bcafe15675f07226))
* **deps:** update dependency graphql to v17 ([05bb7af](https://github.com/linearis-oss/linearis/commit/05bb7af33f14b5ab91e6c9797d613ac192c58c80))
* **projects:** bound project query connections to avoid complexity limit ([dfe97b8](https://github.com/linearis-oss/linearis/commit/dfe97b8f0c3cf15c5fc40a7861f2cd422fdc30b9)), closes [#276](https://github.com/linearis-oss/linearis/issues/276) [#283](https://github.com/linearis-oss/linearis/issues/283)
* **projects:** surface truncation on bounded connections, lock bounds in tests ([a3145c1](https://github.com/linearis-oss/linearis/commit/a3145c1b99273c11b1e7f077cf2799f63ae4c141)), closes [#276](https://github.com/linearis-oss/linearis/issues/276) [#284](https://github.com/linearis-oss/linearis/issues/284)
* **usage:** list nested group subcommands in domain usage ([2bff44f](https://github.com/linearis-oss/linearis/commit/2bff44ff745df8e186d4a46f92feaac65ac4740c)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)

## [2026.7.0-next.6](https://github.com/linearis-oss/linearis/compare/v2026.7.0-next.5...v2026.7.0-next.6) (2026-08-07)

### Bug Fixes

* **projects:** bound project query connections to avoid complexity limit ([dfe97b8](https://github.com/linearis-oss/linearis/commit/dfe97b8f0c3cf15c5fc40a7861f2cd422fdc30b9)), closes [#276](https://github.com/linearis-oss/linearis/issues/276) [#283](https://github.com/linearis-oss/linearis/issues/283)
* **projects:** surface truncation on bounded connections, lock bounds in tests ([a3145c1](https://github.com/linearis-oss/linearis/commit/a3145c1b99273c11b1e7f077cf2799f63ae4c141)), closes [#276](https://github.com/linearis-oss/linearis/issues/276) [#284](https://github.com/linearis-oss/linearis/issues/284)

## [2026.7.0-next.5](https://github.com/linearis-oss/linearis/compare/v2026.7.0-next.4...v2026.7.0-next.5) (2026-08-06)

### Bug Fixes

* **deps:** update dependency graphql to v17 ([05bb7af](https://github.com/linearis-oss/linearis/commit/05bb7af33f14b5ab91e6c9797d613ac192c58c80))

## [2026.7.0-next.4](https://github.com/linearis-oss/linearis/compare/v2026.7.0-next.3...v2026.7.0-next.4) (2026-08-06)

### Bug Fixes

* **cli:** classify the two option-shaped parse failures ([19ec395](https://github.com/linearis-oss/linearis/commit/19ec3955285f7fcad3d74e21b294604f59d54ccb)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **cli:** disable Commander's implicit help subcommand ([de405af](https://github.com/linearis-oss/linearis/commit/de405afd709abe27cac3fedf0e06165e7b0becc5)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **cli:** emit JSON envelope for argument-parse errors ([3bd0e38](https://github.com/linearis-oss/linearis/commit/3bd0e3899d64bfa5195009d686cf2cbdddc4ed06)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **cli:** give every bare command group the same MISSING_SUBCOMMAND envelope ([b4c3a8b](https://github.com/linearis-oss/linearis/commit/b4c3a8b58690da398c702147b1c1446f00ab34ca))
* **cli:** keep the usage-error message on a single line ([a447807](https://github.com/linearis-oss/linearis/commit/a4478075c73af9e0c0d3af699c68402559c05343))
* **common:** point auth recovery at 'auth login', not the bare group ([cca71ec](https://github.com/linearis-oss/linearis/commit/cca71ec64c86148dbaa27987933d6fae05541082)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)
* **usage:** list nested group subcommands in domain usage ([2bff44f](https://github.com/linearis-oss/linearis/commit/2bff44ff745df8e186d4a46f92feaac65ac4740c)), closes [#281](https://github.com/linearis-oss/linearis/issues/281)

## [2026.7.0-next.3](https://github.com/linearis-oss/linearis/compare/v2026.7.0-next.2...v2026.7.0-next.3) (2026-08-06)

### Features

* **initiatives:** add --clear-owner to initiatives update ([fb401ea](https://github.com/linearis-oss/linearis/commit/fb401ea029bd559140567ea61c6ff1493609b3ea)), closes [#282](https://github.com/linearis-oss/linearis/issues/282)
* **issues:** add --clear-assignee and --clear-project to issues update ([9a5ca75](https://github.com/linearis-oss/linearis/commit/9a5ca7529efdec30d95c77838f947f6e7255b225)), closes [#282](https://github.com/linearis-oss/linearis/issues/282) [#282](https://github.com/linearis-oss/linearis/issues/282)

## [2026.7.0-next.2](https://github.com/linearis-oss/linearis/compare/v2026.7.0-next.1...v2026.7.0-next.2) (2026-07-06)

### Bug Fixes

* **deps:** update dependency commander to v15 ([290424a](https://github.com/linearis-oss/linearis/commit/290424ae2a7f53d3b014de822187429d4fc350b6))

## [2026.7.0-next.1](https://github.com/linearis-oss/linearis/compare/v2026.6.0...v2026.7.0-next.1) (2026-07-06)

### Bug Fixes

* **deps:** update dependency graphql to v16.14.2 ([ca72bf7](https://github.com/linearis-oss/linearis/commit/ca72bf7ac32f40643f8b34b7bcafe15675f07226))

## [2026.6.0](https://github.com/linearis-oss/linearis/compare/v2026.5.0...v2026.6.0) (2026-07-04)

### Features
Expand Down
22 changes: 22 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,28 @@ For the authoritative workflow trigger matrix, required check names, and verific
`CHANGELOG.md` is release-workflow-owned. Do not edit it in feature/fix PRs.
If CI reports changelog history violations, rebase on `main` and drop/amend commits that touched `CHANGELOG.md`.

There is one exception, for repairing releases whose notes semantic-release
failed to render — as happened for `2026.7.0-next.1` … `2026.7.0`, when the
`conventionalcommits` preset resolved to a version incompatible with the notes
generator's writer. `guard-changelog-history` in `ci-validate.yml` lets through
a commit whose subject is exactly:

```
chore(release): backfill changelog notes
```

and only when that commit changes nothing but `CHANGELOG.md` and only adds
lines to it — a backfill that removes or rewrites an existing line fails the
guard. Every other `CHANGELOG.md` edit stays blocked.

Such a repair must be generated rather than hand-written: re-render the notes
for each empty section using the commit range from the compare link already in
its heading, and splice in only the body so the heading's original version,
date and compare link survive untouched — which is also what keeps the diff
additions-only, as the guard requires.
GitHub Release bodies are damaged the same way and cannot be fixed by a
committed file; a maintainer patches those separately with `gh api`.

## Pull Requests

1. Fork the repo and create your branch from `main`
Expand Down
Loading
Loading