Development record
releaseOf stamps the homepage feature block by strings.Contains of the record id against each CHANGELOG line, with no word boundary, walking newest dated section first. A short id therefore inherits a longer one: on ec7f40d6 releaseOf(itd-9) returns 0.4.1 off the itd-93 credit and releaseOf(itd-1) returns 0.7.1 off itd-130, and a future superstring landing in a newer section restamps the featured id. site check does not validate the stamp. The same package already carries bodyHandleRe. Fix: match the record id at a word boundary (reuse bodyHandleRe, or split the line into tokens); newest-section-first can stay. Detector: a changelog whose newer dated section mentions itd-1990 must not stamp featured itd-199, while a line naming itd-199 as its own id still matches. Independent of the Audit Notes rollup scanner. Reported as GitHub issue 624 against ec7f40d6. <!-- record-lint: illustrative -->
releaseOf stamps the homepage feature block by strings.Contains of the record id against each CHANGELOG line, with no word boundary, walking newest dated section first. A short id therefore inherits a longer one: on ec7f40d6 releaseOf(itd-9) returns 0.4.1 off the itd-93 credit and releaseOf(itd-1) returns 0.7.1 off itd-130, and a future superstring landing in a newer section restamps the featured id. site check does not validate the stamp. The same package already carries bodyHandleRe. Fix: match the record id at a word boundary (reuse bodyHandleRe, or split the line into tokens); newest-section-first can stay. Detector: a changelog whose newer dated section mentions itd-1990 must not stamp featured itd-199, while a line naming itd-199 as its own id still matches. Independent of the Audit Notes rollup scanner. Reported as GitHub issue 624 against ec7f40d6.
Grounds
- pursued: the misattribution is entirely in the boundary of the match, so a whole-handle comparison fixes every case without changing which section wins; a featured record whose stamp is still wrong after this, or a stamp that disappears for a record the changelog does credit, would show it wrong.
Frontmatter
| id | iss-2609081941074556 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2609081941074556-releaseof-substring-match-misattributes.md
open on GitHub ↗ · commit history ↗
mentions7
- iss-2609090951280114releaseOf now compares whole handles found by the package handle pattern rather than testing a substring, which stops a digit continuation such as itd-1990 from being read as a credit for itd-199. That pattern ends in a word boundary, and a hyphen is not a word character, so a hyphen-suffixed compound still yields the short handle as a match: run over the line renamed branch fix/itd-199-cleanup the pattern returns itd-199, and because the walk takes the newest dated section first, such a mention in a newer section out-stamps the real credit in an older one. Verified by running the shipped pattern over that line and over itd-1990, which correctly returns only the long handle. Dormant today, since the committed changelog carries no such compound token and nothing is mis-stamped now, and recorded because branch names, file stems and run ids of exactly that shape are ordinary changelog prose and the failure would be silent on the day one lands. Fix direction: require the character after the handle to be neither a word character nor a hyphen, or compare against the record ids the export already knows rather than against any handle-shaped token. Detector: a newer changelog section mentioning a hyphen-suffixed compound built on a handle must not stamp that handle, while a line naming the handle as itself still does. Residual of iss-2609081941074556. <!-- record-lint: illustrative -->
- iss-2609090951287232The same review that made the audit rollup reader fence-aware left the changelog credit matcher reading raw lines: releaseOf splits the changelog on newlines, tracks the dated headings, and asks whether each line credits the handle, with no fence state at all. A handle mentioned inside a fenced block, a shell example, a sample record or a quoted diff, therefore counts as a credit, and because the walk takes the newest dated section first, a fenced mention in a newer section stamps the featured record with that section version instead of the one that actually shipped it. Verified by reading the loop: the only per-line branch is the dated-heading test, and the same package already carries the fence-aware section walker the rollup reader was moved onto in the same change. It matters because the version stamp is the homepage claim about when a promise was delivered, and the failure is silent, rendering a plausible wrong version rather than nothing. Fix direction: give the changelog walk the same fence tracking the rollup reader has, or read the changelog through the shared section walker rather than by hand. Detector: a handle appearing only inside a fenced block in a newer changelog section must not stamp that section version, while a prose credit in an older section still does. Residual of iss-2609081941074556.
- itd-1Every Intent Has Acceptance Criteria; Every Audit Verifies Them
- itd-9Old Lifeboats Still Unpack
- itd-93abcd Scaffolds a Release Gate That Works on the First Try
- itd-130`abcd update` completes a chosen update in one verb
- itd-199A reading is about something narrower than everything, and its scope is a committed, adjustable choice