* fix(restamp): quoted since: rows and stale base-version mentions on branch-added lines when VERSION equals the base (gbrain #7640)
A PR that stamped X, lost its slot and merged a base that had reached X on
its own had no branch stamp, and the mention scanner could not pass the
opening quote of a quoted row, so gstack-restamp --next left the PR's
{ since: 'X' } rows at X while the release shipped as X+1.
- tentativeMentions and rewriteStamps accept since: 'X' / since: "X" /
(was 'X') / (was "X") and keep the quote style; the scanner also reads
the policy's stamp_patterns templates.
- With no branch stamp and no --was, a stamp-form mention of the base
version on a line the branch added moves; the same version on a base
line stays. The stamp_paths stage detail names both counts per file.
- test/restamp-mentions.test.ts (pure forms + the reporter's state rebuilt
with the real bin), stamp-templates pin updated, docs/ship-policy.md,
--was help line, CHANGELOG [Unreleased].
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(restamp): review pass 1 — closing quotes, positional provenance, retry after a partial apply
- since: 'X' and (was 'X') require the quote to close right after X in the
scanner and the rewrite table, so a quoted prerelease or a mismatched pair
is never a stamp (the tree receipt shares the table).
- branchAddedLines records positions from the unified=0 hunk headers; the
stamp_paths stage rewrites by position, so a base line with the same text
stays and a CRLF checkout still finds the branch's row.
- Journal recovery restores the equal-base provenance (no branch stamp) so a
stamp interrupted after VERSION was written retries as a stamp, not noop.
- Skipped detail names the explicit version it searched for; --was help line
names the CHANGELOG re-heading; docs and CHANGELOG state the boundaries,
the fork-point attribution and the rule's false-positive class.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(restamp): review pass 2 — positions counted through joined-hunk context
parseUnifiedDiff records each added line's new-side position (addedAt),
counting context lines a hunk carries, and branchAddedLines pins
--inter-hunk-context=0, so a diff.interHunkContext setting that joins two
hunks around a base row no longer shifts the branch's second row onto the
base row. Test with interHunkContext=1 (red on the pass-1 tree).
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* docs(restamp): correct the red-case count, the --was sentence and the help default
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
---------
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>