Commit 3f4afd2210
Verified · cmc ci/build: success ci/test: success
CHANGELOG.org +53
| @@ -4,6 +4,59 @@ Versioning follows semver from v0.1.0. Database migrations run | ||
| 4 | 4 | automatically on daemon start; upgrade notes appear per release when |
| 5 | 5 | anything beyond "replace the binary and restart" is needed. |
| 6 | 6 | |
| 7 | * v1.19.0 — 2026-09-11 | |
| 8 | ||
| 9 | Labels and milestones an org defines once for every repository under | |
| 10 | it, and =Closes owner/name#N= acting across repositories (#203). | |
| 11 | ||
| 12 | ** Org labels and milestones | |
| 13 | ||
| 14 | - Migration 0052: =labels= and =milestones= rows belong to a | |
| 15 | repository or to an org, exactly one, with a partial unique index | |
| 16 | per scope. Existing rows and their memberships keep their ids. | |
| 17 | - A repository owned by an org sees the org's labels and milestones | |
| 18 | beside its own; =issue label --add=, =issue milestone= and =mr | |
| 19 | milestone= resolve the org's row first. A repository cannot create, | |
| 20 | recolour, remove, close or reopen a name its org holds; the refusal | |
| 21 | names the org command. | |
| 22 | - =org label set|list|remove= and =org milestone | |
| 23 | create|list|close|reopen=, for org admins. Creating a name that | |
| 24 | repositories under the org already use folds them in: their issues | |
| 25 | and merge requests move to the org's row and the repository rows | |
| 26 | go. =repo transfer= into an org folds the same way. Counts on org | |
| 27 | rows span the repositories the caller can read. | |
| 28 | - Web: read-only =/<org>/-/labels= and =/<org>/-/milestones=, linked | |
| 29 | from the org page; an "org" mark on repository label and milestone | |
| 30 | pages, whose forms act on repository rows only. | |
| 31 | - =label list= and =milestone list= JSON carry =org: true= on an org | |
| 32 | row. | |
| 33 | ||
| 34 | ** Cross-repository closes | |
| 35 | ||
| 36 | - =Closes owner/name#N= in a commit on the default branch, or in a | |
| 37 | merged merge request's title or body, closes that issue when the | |
| 38 | actor holds write on the target and the pushing key's scope allows | |
| 39 | it: a deploy key never acts outside its binding. An unknown or | |
| 40 | refused target does nothing and logs nothing; the text stays a | |
| 41 | plain autolink. An archived target is refused. Bare =owner/name#N= | |
| 42 | without a keyword stays display-only. | |
| 43 | ||
| 44 | ** Store | |
| 45 | ||
| 46 | - A migration whose first line is =-- foreign_keys: off= runs on one | |
| 47 | pinned connection with foreign keys off, re-enabled afterwards and | |
| 48 | =foreign_key_check= required empty. Rebuilding a table other tables | |
| 49 | reference loses the children's rows otherwise, even under | |
| 50 | =legacy_alter_table=. | |
| 51 | ||
| 52 | ** Behaviour changes | |
| 53 | ||
| 54 | - =milestone create= exits 1 on a duplicate title, as =org milestone | |
| 55 | create= does; it exited 2 before. | |
| 56 | ||
| 57 | Upgrade: replace the binary and restart; migration 0052 runs on | |
| 58 | start and copies every label and milestone row once. | |
| 59 | ||
| 7 | 60 | * v1.18.1 — 2026-09-11 |
| 8 | 61 | |
| 9 | 62 | A runner that cannot hang on a dead connection, SSH keys with names, |