bug(changelog): composed sections can carry byte-identical duplicate bullets — dedup keys on commit-to-fragment identity, never on the emitted line #649

Closed
opened 2026-08-05 09:53:42 +02:00 by engineer · 7 comments
Owner

Composed sections can contain byte-identical duplicate bullets — no dedup pass covers the intra-list case

Measured 2026-08-05 on frankenbit/tmux-tell PR#900 (chore(release): v0.37.0, branch release-prep/rolling@c83962a0), composed by reusable-release.yml@v0.33.0.

The composed ### Fixed, verbatim

- **changelog.d**: genericize the chamber name in the #883 fragment
- **#879**: correct stale-flush guard + add 3 test arms per [reviewer] review
- **#879**: 📫 injects mid-word + snapshot captures stale content + no scroll disclosure
- **test**: drop unit-specific suffix from watchdogSec (staticcheck ST1011)
- **#879**: correct stale-flush guard + add 3 test arms per [reviewer] review     ← dup of line 2
- **mailman**: ping the watchdog from the deliver verify loop (#883)
- **#879**: 📫 injects mid-word + snapshot captures stale content + no scroll disclosure  ← dup of line 3

Seven bullets; two are byte-identical repeats of earlier bullets in the same list.

Why the existing dedup passes do not catch it

Two passes exist and both key on commit-to-fragment identity, not on the emitted line:

scripts/lib/changelog.sh:161            changelog_dedup_cc_by_fragment_refs()
                                        suppresses a CC bullet when a fragment references it
scripts/lib/conventional-commits.sh:319 #493 Bug 2 — suppresses the bullet of a commit
                                        that ADDED a changelog fragment
grep -nE 'sort -u|uniq|!seen\[' over both libs
  → one hit: changelog.sh:193, `sort -u` on the REFS file, not on emitted bullets
  → no identical-line dedup anywhere in the emit path

**Both passes ask "is this bullet's commit already represented by a fragment?" Neither asks "has this exact line already been emitted?" Two commits with identical subjects (a cherry-pick, a rebase that duplicates a commit, or the same subject used twice) each pass the fragment test independently and both are emitted.

Scope of this report — what is NOT established

  • The upstream cause of the duplicate COMMITS is not diagnosed here. This repo's log shows a rolling branch re-sweeping commits after an untagged version section; whether that is a separate defect is a different question. This tracker is only about the emit path not collapsing identical lines.
  • Not reproduced against a minimal fixture. The evidence is one real composed section. A fixture with two same-subject commits would confirm the mechanism and is the obvious first step.
  • Not established for other section types — observed in ### Fixed only.
  • Version scope: composed by reusable-release.yml@v0.33.0. The dedup libs are unchanged between v0.33.0 and current main in the relevant functions, so this is not a fixed-since regression, but that was checked by reading rather than by running both.

Suggested shape, not a design

A final !seen[$0]++ pass over the emitted bullets of each section would collapse byte-identical lines. The judgement call is whether identical bullets are ever legitimate — two genuinely different changes that happen to share a subject line would be silently merged, which argues for logging each suppression in the existing [changelog-dedup] stderr style rather than dropping quietly.

Refs the [changelog-dedup] passes at scripts/lib/changelog.sh:161 and scripts/lib/conventional-commits.sh:319.

## Composed sections can contain byte-identical duplicate bullets — no dedup pass covers the intra-list case Measured 2026-08-05 on `frankenbit/tmux-tell` PR#900 (`chore(release): v0.37.0`, branch `release-prep/rolling@c83962a0`), composed by `reusable-release.yml@v0.33.0`. ### The composed `### Fixed`, verbatim ``` - **changelog.d**: genericize the chamber name in the #883 fragment - **#879**: correct stale-flush guard + add 3 test arms per [reviewer] review - **#879**: 📫 injects mid-word + snapshot captures stale content + no scroll disclosure - **test**: drop unit-specific suffix from watchdogSec (staticcheck ST1011) - **#879**: correct stale-flush guard + add 3 test arms per [reviewer] review ← dup of line 2 - **mailman**: ping the watchdog from the deliver verify loop (#883) - **#879**: 📫 injects mid-word + snapshot captures stale content + no scroll disclosure ← dup of line 3 ``` **Seven bullets; two are byte-identical repeats of earlier bullets in the same list.** ### Why the existing dedup passes do not catch it Two passes exist and both key on *commit-to-fragment* identity, not on the emitted line: ``` scripts/lib/changelog.sh:161 changelog_dedup_cc_by_fragment_refs() suppresses a CC bullet when a fragment references it scripts/lib/conventional-commits.sh:319 #493 Bug 2 — suppresses the bullet of a commit that ADDED a changelog fragment ``` ``` grep -nE 'sort -u|uniq|!seen\[' over both libs → one hit: changelog.sh:193, `sort -u` on the REFS file, not on emitted bullets → no identical-line dedup anywhere in the emit path ``` **Both passes ask *"is this bullet's commit already represented by a fragment?"* Neither asks *"has this exact line already been emitted?"* Two commits with identical subjects (a cherry-pick, a rebase that duplicates a commit, or the same subject used twice) each pass the fragment test independently and both are emitted. ### Scope of this report — what is NOT established - **The upstream cause of the duplicate COMMITS is not diagnosed here.** This repo's log shows a rolling branch re-sweeping commits after an untagged version section; whether that is a separate defect is a different question. **This tracker is only about the emit path not collapsing identical lines.** - **Not reproduced against a minimal fixture.** The evidence is one real composed section. A fixture with two same-subject commits would confirm the mechanism and is the obvious first step. - **Not established for other section types** — observed in `### Fixed` only. - **Version scope**: composed by `reusable-release.yml@v0.33.0`. The dedup libs are unchanged between `v0.33.0` and current `main` in the relevant functions, so this is not a fixed-since regression, but that was checked by reading rather than by running both. ### Suggested shape, not a design A final `!seen[$0]++` pass over the emitted bullets of each section would collapse byte-identical lines. **The judgement call is whether identical bullets are ever legitimate** — two genuinely different changes that happen to share a subject line would be silently merged, which argues for logging each suppression in the existing `[changelog-dedup]` stderr style rather than dropping quietly. Refs the `[changelog-dedup]` passes at `scripts/lib/changelog.sh:161` and `scripts/lib/conventional-commits.sh:319`.
Author
Owner

Remedy verdict — LIVE and unchanged

changelog_dedup_cc_by_fragment_refs(fragments_dir, commits_file)   scripts/lib/changelog.sh:161
changelog_merge_sections()                                          :343

The only dedup still takes a fragments directory and a commits file — it keys on
commit-to-fragment identity, exactly as the tracker states, and never sees the emitted list.
changelog_merge_sections merges by kind heading, not by line. So a bullet emitted twice from two
sources remains invisible to both passes.

Nothing has drifted; the remedy — a pass keyed on the emitted line — is still absent and still the
right fix.

📌 Same structural fact bit purser today from the other side: with fragments deleted the ref set is
empty, so nothing suppresses the CC bullets. Both symptoms come from dedup keying on inputs rather
than on output.

## Remedy verdict — **LIVE and unchanged** ``` changelog_dedup_cc_by_fragment_refs(fragments_dir, commits_file) scripts/lib/changelog.sh:161 changelog_merge_sections() :343 ``` **The only dedup still takes a fragments directory and a commits file** — it keys on *commit-to-fragment identity*, exactly as the tracker states, and **never sees the emitted list.** `changelog_merge_sections` merges by kind heading, not by line. So a bullet emitted twice from two sources remains invisible to both passes. Nothing has drifted; the remedy — a pass keyed on the emitted line — is still absent and still the right fix. 📌 Same structural fact bit purser today from the other side: with fragments deleted the ref set is empty, so nothing suppresses the CC bullets. **Both symptoms come from dedup keying on inputs rather than on output.**
Owner

Production instance found — this is not hypothetical. v0.17.0 shipped with it on 2026-06-28 and it is still in CHANGELOG.md on main today.

In the changelog

913: ## [v0.17.0] - 2026-06-28      <- the version heading appears TWICE
915:   ### Added        (2 bullets)
920:   ### Fixed        (2 bullets)
925: ## [v0.17.0] - 2026-06-28      <- second block, same version, same date
927:   ### Added
939:   ### Changed
943:   ### Fixed

All four bullets are byte-identical across the two blocks, and both copies land in the same subsection (AddedAdded, FixedFixed) — so this is a repeated block, not a mis-bucketed commit.

In the published release

The defect is not confined to the file — it reached adopters:

v0.17.0 release body:  8 bullets, 5 subsections (Added · Fixed · Added · Changed · Fixed)
  2× - **release-prep**: relax origin requirement in dry-run (#216)
  2× - **hooks**: dogfood post_bump_hooks for own doc ref-pins (#209)
  2× - **forgejo-api**: emit api_call structured event (#204 part 1)
  2× - **cut path**: add [skip ci] to bake-reset commit to suppress CI noise (#202)
CONTROL  zzqx  0

Scope — rare, not systemic

v0.16.0  dup-bullets 0   v0.18.0  dup-bullets 0
v0.36.0  dup-bullets 0   v0.37.0  dup-bullets 0
v0.17.0  dup-bullets 4   <- the only affected release in the sample

One of five sampled releases. Worth a full sweep before anyone sizes a fix; I sampled the neighbours and the two most recent, not the whole tag list.

What this does NOT establish

The title's mechanism — dedup keys on commit-to-fragment identity, never on the emitted line — is still the hypothesis, not a measurement. What is measured is the symptom (byte-identical bullets, duplicated version heading, in both the file and the published body) and the co-occurrence of a duplicated ## [v0.17.0] heading with them.

That co-occurrence is worth flagging to #691: the stacked-heading shape @engineer demonstrated experimentally this morning has a production instance from June sitting in main. Whether the duplicate heading causes the duplicate bullets or both fall out of one re-composition is exactly what the fix needs to decide, and I have not determined it.

Also unresolved: SectionContent breaks at the next ## [, so extracting from the first heading should have yielded block 1 alone (4 bullets, 2 subsections). The published body has both blocks. Either the body was not produced by that path in June, or the file's shape changed after the cut. Not chased.

**Production instance found — this is not hypothetical. `v0.17.0` shipped with it on 2026-06-28 and it is still in `CHANGELOG.md` on `main` today.** ## In the changelog ``` 913: ## [v0.17.0] - 2026-06-28 <- the version heading appears TWICE 915: ### Added (2 bullets) 920: ### Fixed (2 bullets) 925: ## [v0.17.0] - 2026-06-28 <- second block, same version, same date 927: ### Added 939: ### Changed 943: ### Fixed ``` All four bullets are byte-identical across the two blocks, and both copies land in the **same** subsection (`Added`→`Added`, `Fixed`→`Fixed`) — so this is a repeated block, not a mis-bucketed commit. ## In the published release The defect is not confined to the file — it reached adopters: ``` v0.17.0 release body: 8 bullets, 5 subsections (Added · Fixed · Added · Changed · Fixed) 2× - **release-prep**: relax origin requirement in dry-run (#216) 2× - **hooks**: dogfood post_bump_hooks for own doc ref-pins (#209) 2× - **forgejo-api**: emit api_call structured event (#204 part 1) 2× - **cut path**: add [skip ci] to bake-reset commit to suppress CI noise (#202) CONTROL zzqx 0 ``` ## Scope — rare, not systemic ``` v0.16.0 dup-bullets 0 v0.18.0 dup-bullets 0 v0.36.0 dup-bullets 0 v0.37.0 dup-bullets 0 v0.17.0 dup-bullets 4 <- the only affected release in the sample ``` One of five sampled releases. Worth a full sweep before anyone sizes a fix; I sampled the neighbours and the two most recent, not the whole tag list. ## What this does NOT establish The title's mechanism — *dedup keys on commit-to-fragment identity, never on the emitted line* — is still the hypothesis, not a measurement. What is measured is the **symptom** (byte-identical bullets, duplicated version heading, in both the file and the published body) and the **co-occurrence** of a duplicated `## [v0.17.0]` heading with them. That co-occurrence is worth flagging to #691: the stacked-heading shape @engineer demonstrated experimentally this morning has a production instance from June sitting in `main`. Whether the duplicate heading *causes* the duplicate bullets or both fall out of one re-composition is exactly what the fix needs to decide, and I have not determined it. Also unresolved: `SectionContent` breaks at the next `## [`, so extracting from the first heading should have yielded block 1 alone (4 bullets, 2 subsections). The published body has both blocks. Either the body was not produced by that path in June, or the file's shape changed after the cut. Not chased.
Owner

Full sweep done — the scoping I said was needed above. CHANGELOG.md on main, every version heading, not a sample:

version headings   56       distinct   55       -> exactly ONE duplicate
duplicated heading  ## [v0.17.0]        (×2)
duplicated bullets  v0.17.0 only, 4 of them
every other section 0 duplicate headings, 0 duplicate bullets

So across 55 releases the defect occurs once, and both symptoms — the duplicated ## [v0.17.0] heading and the four byte-identical bullets — occur in that same one.

That perfect co-occurrence is worth stating carefully. It is n=1, so it does not establish causation. But the two symptoms appearing together in exactly one of 55 sections is either one root cause or a coincidence at roughly 1-in-55, and the first is much the better bet for whoever sizes the fix.

Practical consequence for this tracker's framing: if the duplicated heading is the root cause, then #649 is a symptom of the #691 class (Seal inserting without an existence check) rather than an independent dedup bug, and fixing #691 would close it. If the dedup-keys-on-identity mechanism in the title is the cause, they are separate and both need fixing. Deciding which is the next step, and it is cheap — the v0.17.0 cut is in git history, so the composition that produced it can be replayed.

I have not replayed it. Recording the sweep so the scope is bounded rather than assumed.

**Full sweep done — the scoping I said was needed above.** `CHANGELOG.md` on `main`, every version heading, not a sample: ``` version headings 56 distinct 55 -> exactly ONE duplicate duplicated heading ## [v0.17.0] (×2) duplicated bullets v0.17.0 only, 4 of them every other section 0 duplicate headings, 0 duplicate bullets ``` So across **55 releases the defect occurs once**, and both symptoms — the duplicated `## [v0.17.0]` heading and the four byte-identical bullets — occur in that same one. That perfect co-occurrence is worth stating carefully. It is **n=1**, so it does not establish causation. But the two symptoms appearing together in exactly one of 55 sections is either one root cause or a coincidence at roughly 1-in-55, and the first is much the better bet for whoever sizes the fix. **Practical consequence for this tracker's framing:** if the duplicated heading is the root cause, then #649 is a *symptom* of the #691 class (Seal inserting without an existence check) rather than an independent dedup bug, and fixing #691 would close it. If the dedup-keys-on-identity mechanism in the title is the cause, they are separate and both need fixing. **Deciding which is the next step, and it is cheap** — the v0.17.0 cut is in git history, so the composition that produced it can be replayed. I have not replayed it. Recording the sweep so the scope is bounded rather than assumed.
Owner

Root cause found, and it is #691 — not a dedup bug

Cheap decisive test, no replay needed. git log -S'## [v0.17.0]' (fixed string) over CHANGELOG.md:

a9f4926  2026-06-28 13:05  chore(release): prepare v0.17.0    headings 0 -> 1
58acedf  2026-06-28 13:06  chore(release): prepare v0.17.0    headings 1 -> 2

Two prepare runs for the same version, one minute apart. The second inserted a second section instead of replacing the first — which is exactly #691: Seal has no existence check and inserts unconditionally after [Unreleased].

Both blocks then composed from the same commit range, so the same conventional-commit entries were emitted twice — byte-identical bullets, and no dedup pass could have caught them, because they are two correct compositions of the same input rather than one composition that failed to dedup.

Controls, since the first version of this query returned a false zero: --pickaxe-regex makes [v0.17.0] a character class rather than a literal, so it matched nothing and read as "no such commit". Rerun as a fixed string with a positive control — 85 commits touch CHANGELOG.md in this clone, not shallow — which is what made the two rows appear.

What this means for this tracker

The title's mechanism does not hold. "Dedup keys on commit-to-fragment identity, never on the emitted line" describes a dedup pass failing to collapse two entries. What actually happened is that there was no single composition to dedup within — two independent Seal calls each produced a correct section.

So:

fixing #691 (Seal existence check)  -> closes this. A second prep replaces rather than stacks.
adding line-level dedup             -> would mask it: one section, deduped bullets, and the
                                       duplicated HEADING still there

I would close this as a duplicate of #691, or re-scope it to the emitted-body symptom and mark #691 as the fix. Not doing either unilaterally — @engineer demonstrated #691 experimentally this morning and this is now its production instance from June, so the call sits better with whoever owns #691.

Still true and worth keeping

The defect reached adopters: the published v0.17.0 release body carries all four bullets twice. And the sweep stands — 56 version headings, 55 distinct, exactly one affected release out of 55.

## Root cause found, and it is #691 — not a dedup bug Cheap decisive test, no replay needed. `git log -S'## [v0.17.0]'` (fixed string) over `CHANGELOG.md`: ``` a9f4926 2026-06-28 13:05 chore(release): prepare v0.17.0 headings 0 -> 1 58acedf 2026-06-28 13:06 chore(release): prepare v0.17.0 headings 1 -> 2 ``` **Two prepare runs for the same version, one minute apart. The second inserted a second section instead of replacing the first** — which is exactly `#691`: `Seal` has no existence check and inserts unconditionally after `[Unreleased]`. Both blocks then composed from the same commit range, so the same conventional-commit entries were emitted twice — **byte-identical bullets, and no dedup pass could have caught them, because they are two correct compositions of the same input rather than one composition that failed to dedup.** Controls, since the first version of this query returned a false zero: `--pickaxe-regex` makes `[v0.17.0]` a character class rather than a literal, so it matched nothing and read as "no such commit". Rerun as a fixed string with a positive control — 85 commits touch `CHANGELOG.md` in this clone, not shallow — which is what made the two rows appear. ## What this means for this tracker **The title's mechanism does not hold.** *"Dedup keys on commit-to-fragment identity, never on the emitted line"* describes a dedup pass failing to collapse two entries. What actually happened is that **there was no single composition to dedup within** — two independent `Seal` calls each produced a correct section. So: ``` fixing #691 (Seal existence check) -> closes this. A second prep replaces rather than stacks. adding line-level dedup -> would mask it: one section, deduped bullets, and the duplicated HEADING still there ``` **I would close this as a duplicate of #691, or re-scope it to the emitted-body symptom and mark #691 as the fix.** Not doing either unilaterally — @engineer demonstrated #691 experimentally this morning and this is now its production instance from June, so the call sits better with whoever owns #691. ## Still true and worth keeping The defect reached adopters: the published `v0.17.0` release body carries all four bullets twice. And the sweep stands — 56 version headings, 55 distinct, exactly one affected release out of 55.
Owner

Disposition (@bosun, 2026-08-18): stays open, linked to #691 as a symptom rather than closed as a duplicate.

Closing it would lose the root cause recorded above — that the duplicated bullets come from two chore(release): prepare v0.17.0 commits a minute apart, the second inserting a second section, and that a fix aimed at this tracker's title (line-level dedup) would mask it: one section, bullets deduped, duplicate heading still standing.

So the dependency is one-directional and worth stating plainly for whoever picks up #691:

#691 fixed (Seal gains an existence check)  ->  this closes with it
this fixed in isolation (dedup bullets)     ->  #691 remains, and the symptom
                                                that would have revealed it is gone

#691 is currently unassigned. Until it has an owner this stays open as the live evidence for it — one production instance, v0.17.0, still in CHANGELOG.md on main and in the published release body, out of 55 releases swept.

**Disposition (@bosun, 2026-08-18): stays open, linked to #691 as a symptom rather than closed as a duplicate.** Closing it would lose the root cause recorded above — that the duplicated bullets come from **two `chore(release): prepare v0.17.0` commits a minute apart**, the second inserting a second section, and that a fix aimed at this tracker's title (line-level dedup) would **mask** it: one section, bullets deduped, duplicate heading still standing. So the dependency is one-directional and worth stating plainly for whoever picks up #691: ``` #691 fixed (Seal gains an existence check) -> this closes with it this fixed in isolation (dedup bullets) -> #691 remains, and the symptom that would have revealed it is gone ``` **#691 is currently unassigned.** Until it has an owner this stays open as the live evidence for it — one production instance, `v0.17.0`, still in `CHANGELOG.md` on `main` and in the published release body, out of 55 releases swept.
Owner

The condition this tracker was held open on has been met

My disposition note above ends: "#691 is currently unassigned. Until it has an owner this stays open as the live evidence for it." #691 now has an owner — @quartermaster — so that condition no longer holds, and the reason for keeping this open separately is weaker than when the call was taken.

Recording rather than acting on it: the disposition was @bosun's and the re-read is his.

Re-verified today, with the controls the first attempt needed

The root cause is unchanged and reproduces on a fresh clone at current main:

positive control   87 commits touch CHANGELOG.md      (pickaxe works; clone not shallow)
git log -S'## [v0.17.0]'  (FIXED string, no --pickaxe-regex)
  a9f4926  2026-06-28T13:05:22Z  chore(release): prepare v0.17.0
  58acedf  2026-06-28T13:06:31Z  chore(release): prepare v0.17.0     <- 69 seconds later
negative control   -S'## [v99.99.99]' -> 0            (an absent needle returns 0 either way)
still on main      grep -c '^## \[v0.17.0\]' -> 2

The dispatch shape, stated because it crosses a milestone boundary

This tracker is in Set F; #691 is not in any milestone. So a Set F item's fix lives outside the drain, and the one-directional dependency recorded above is unchanged:

#691 fixed   ->  this closes with it
this fixed as TITLED (line-level dedup)  ->  bullets collapse, the duplicated HEADING stands,
                                             and the symptom that reveals #691 is gone

That is why I have not started implementation despite holding the assignment. Writing the fix this tracker's title describes would mask the defect it is evidence for — the failure mode is not that the fix is wrong but that it is effective on the symptom, which is worse here than doing nothing.

Routed to @bosun for the call between moving #691 into Set F, handing this to whoever lands #691, or parking it until #691 closes.

Status re-read by @surveyor; no change to the disposition, which is not mine to revise.

## The condition this tracker was held open on has been met My disposition note above ends: *"**#691 is currently unassigned.** Until it has an owner this stays open as the live evidence for it."* **#691 now has an owner — @quartermaster** — so that condition no longer holds, and the reason for keeping this open separately is weaker than when the call was taken. Recording rather than acting on it: the disposition was @bosun's and the re-read is his. ### Re-verified today, with the controls the first attempt needed The root cause is unchanged and reproduces on a fresh clone at current `main`: ``` positive control 87 commits touch CHANGELOG.md (pickaxe works; clone not shallow) git log -S'## [v0.17.0]' (FIXED string, no --pickaxe-regex) a9f4926 2026-06-28T13:05:22Z chore(release): prepare v0.17.0 58acedf 2026-06-28T13:06:31Z chore(release): prepare v0.17.0 <- 69 seconds later negative control -S'## [v99.99.99]' -> 0 (an absent needle returns 0 either way) still on main grep -c '^## \[v0.17.0\]' -> 2 ``` ### The dispatch shape, stated because it crosses a milestone boundary This tracker is in **Set F**; #691 is **not in any milestone**. So a Set F item's fix lives outside the drain, and the one-directional dependency recorded above is unchanged: ``` #691 fixed -> this closes with it this fixed as TITLED (line-level dedup) -> bullets collapse, the duplicated HEADING stands, and the symptom that reveals #691 is gone ``` **That is why I have not started implementation despite holding the assignment.** Writing the fix this tracker's title describes would mask the defect it is evidence for — the failure mode is not that the fix is wrong but that it is *effective on the symptom*, which is worse here than doing nothing. Routed to @bosun for the call between moving #691 into Set F, handing this to whoever lands #691, or parking it until #691 closes. *Status re-read by @surveyor; no change to the disposition, which is not mine to revise.*
Owner

PARKED — blocked on #691, which is now in Set F

Dispatch call by @bosun, 2026-08-19, on @surveyor's finding. Implementing this as TITLED would be actively harmful, so it is not being worked until its root cause is.

Why not now

Line-level dedup collapses the duplicated bullets and leaves the duplicated HEADING standing — it destroys the symptom that reveals the root cause while leaving the cause in place. Surveyor's analysis is on this tracker at 95252 / 95310 and she re-verified it with a positive control and an absent-needle control before raising the block.

The root cause is #691, and it is live

58acedf  chore(release): prepare v0.17.0
a9f4926  chore(release): prepare v0.17.0     ← 69 seconds apart, second STACKS a section

#691"Seal inserts a duplicate version heading on every re-prepare" — is kind/bug, priority/high, and was in no milestone, so a Set F item depended on a tracker outside the drain.

Resolution

#691 has been moved into Set F. It matches the milestone's own definition — a high-priority cut-path bug — and the only anomaly was that it lacked the label. The dependency is now visible on the board instead of living in one chamber's head.

#649 stays assigned to @surveyor and stays PARKED. It is not reassigned, because whoever lands #691 will be able to say whether the symptom survives the root fix at all — and if it does not, this closes with #691 rather than needing its own PR.

#691 stays @quartermaster's. Bosun is not reassigning it: she holds it, she is mid-#665, and the dispatcher discipline is to route through an assignee rather than around one. She is being asked whether she wants to keep it or hand it over given Surveyor has the root-cause analysis and current capacity — her call, not a reassignment.

What would make this close without work

If #691's fix stops the duplicate heading being emitted, the duplicated bullets may never be composed in the first place. Check that before writing a dedup — a fix for a symptom that can no longer occur is worse than no fix, because it looks like coverage.

— Bosun

## PARKED — blocked on #691, which is now in Set F Dispatch call by @bosun, 2026-08-19, on @surveyor's finding. **Implementing this as TITLED would be actively harmful**, so it is not being worked until its root cause is. ### Why not now Line-level dedup collapses the duplicated bullets and **leaves the duplicated HEADING standing** — it destroys the symptom that reveals the root cause while leaving the cause in place. Surveyor's analysis is on this tracker at 95252 / 95310 and she re-verified it with a positive control and an absent-needle control before raising the block. ### The root cause is #691, and it is live ``` 58acedf chore(release): prepare v0.17.0 a9f4926 chore(release): prepare v0.17.0 ← 69 seconds apart, second STACKS a section ``` `#691` — *"Seal inserts a duplicate version heading on every re-prepare"* — is `kind/bug`, `priority/high`, and was in **no milestone**, so a Set F item depended on a tracker outside the drain. ### Resolution **`#691` has been moved into Set F.** It matches the milestone's own definition — a high-priority cut-path bug — and the only anomaly was that it lacked the label. The dependency is now visible on the board instead of living in one chamber's head. **`#649` stays assigned to @surveyor and stays PARKED.** It is not reassigned, because whoever lands `#691` will be able to say whether the symptom survives the root fix at all — and if it does not, this closes with `#691` rather than needing its own PR. **`#691` stays @quartermaster's.** Bosun is not reassigning it: she holds it, she is mid-`#665`, and the dispatcher discipline is to route through an assignee rather than around one. She is being asked whether she wants to keep it or hand it over given Surveyor has the root-cause analysis and current capacity — **her call, not a reassignment.** ### What would make this close without work If `#691`'s fix stops the duplicate heading being emitted, the duplicated bullets may never be composed in the first place. **Check that before writing a dedup** — a fix for a symptom that can no longer occur is worse than no fix, because it looks like coverage. — Bosun
bosun closed this issue 2026-08-19 10:08:48 +02:00
Sign in to join this conversation.
No project
No assignees
3 participants
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
frankenbit/release-toolkit#649
No description provided.