test: docs contract merged-stream test pins its own ON FAILURE line (#146)
CI / verify (push) Successful in 1m10s
Release / release (push) Successful in 35s

The comparison against render_failure_hint() alone passed unchanged if the
record lost its exit-1 cause, since both sides fell back to the same see: line.
CHANGES prose for 8d5fc6e corrected: three mismatches plus one #142 correction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2

Files changed:
- CHANGES.md
- VERSION
- tools/chemenu/tests/test_cli.py
This commit is contained in:
torben committed 2026-09-26 18:50:01 +02:00
1 parent 8d5fc6e941
commit 8f61209b6b
3 files changed
+33 -16

No files matched your search

+27 -15
View File
@@ -59,7 +59,7 @@ concern - readable here, never shipped as something to parse.
---
## 7.1.0-beta.25 - 2026-09-26 - Command records: three more mismatches from #142 aligned to code
## 7.1.0-beta.26 - 2026-09-26 - docs contract: the merged-stream test pins its own ON FAILURE line
**Author:** Torben Nehmer
@@ -94,6 +94,7 @@ concern - readable here, never shipped as something to parse.
- network: property defined; sync, publish and upstream merge marked networked
- log append: unreadable --body-file is an ERROR line, not a traceback
- Command records: three more mismatches from #142 aligned to code
- docs contract: the merged-stream test pins its own ON FAILURE line
<!-- /wikitool:bumps -->
### CalDAV task-tracker provider (Nextcloud Tasks, iOS Reminders); review reports unknown-value findings instead of skipping them
@@ -392,20 +393,31 @@ record's cause now names the cases ("missing, not a readable file, or not valid
### Command records: three more mismatches from #142 aligned to code
Four more text-vs-code disagreements from #142's collection issue (Gitea #146), decided in the
code's favour and fixed in the text - no behaviour change. `lint`'s quote-limit cap counts
blockquotes, not lines, since #22 changed the unit; `kb/CONTRACT.md`'s Quotation cap section had
kept the old wording and now names the same unit, with the rule that a fenced code block is
masked out first. `docs contract`'s record carried no exit-1 cause at all although
`contract_command` fails when `tools/CONTRACT.md` is missing - the case #143's own follow-up
flagged - so it now names that cause; the merged-stream test that used to exercise the `see:`
fallback through this very gap is updated to check the new hint instead, and the fallback itself
stays covered by its own fixture-based test. `xref add`'s `atomic` property still described the
two-write shape from before the edge became one-sided, though the code and its own NOTES have
long said a source-page edge only ever writes A; it now says so. `publish`'s `atomic` property,
tightened once already in this candidate to "every gate runs before staging", still missed the
one case that breaks it: the rebase-review gate can exit 42 on the single retry of a rejected
push, which happens after the commit already landed.
Three more text-vs-code disagreements from #142's collection issue (Gitea #146), plus a
correction of one of #142's own text fixes - all decided in the code's favour and fixed in the
text, no behaviour change. `lint`'s quote-limit cap counts blockquotes, not lines, since #22
changed the unit; `kb/CONTRACT.md`'s Quotation cap section had kept the old wording and now
names the same unit, with code masked out first. `docs contract`'s record carried no exit-1
cause at all although `contract_command` fails when `tools/CONTRACT.md` is missing, so it now
names that cause; the merged-stream test that used to exercise the `see:` fallback through this
very gap now pins the command's own ON FAILURE line literally, and the fallback itself stays
covered by its own fixture-based test. `xref add`'s `atomic` property still described a two-write
shape, though the code and the record's own NOTES say an edge is written into A only and B is
never touched; it now says so. `publish`'s `atomic` property, tightened earlier in this
candidate to "every gate runs before staging", still missed the one case that breaks it: on the
single retry of a rejected push, the rebase-review gate can exit 42 after the local commit
exists - nothing is pushed, and the `--confirm-rebase` re-run pushes that commit.
The five other text fixes #142 made in the code's direction were checked against the code and
stand as they are.
### docs contract: the merged-stream test pins its own ON FAILURE line
The previous change's test compared `docs contract`'s output only against
`render_failure_hint()` of the same record - which would still pass if the record lost its
exit-1 cause again, because both sides would then fall back to the same `see:` line. It now also
pins the `ON FAILURE (wikitool docs contract -h):` header and the missing-file cause literally;
removing the cause from the record fails it.
---
+1 -1
View File
@@ -1 +1 @@
7.1.0-beta.25
7.1.0-beta.26
+5
View File
@@ -367,5 +367,10 @@ def test_stderr_hint_follows_the_error_line_when_streams_are_merged(tmp_path):
assert result.returncode == 1
lines = result.stdout.splitlines()
assert lines[0] == "ERROR tools/CONTRACT.md is missing."
# Pinned literally, not only against `render_failure_hint`: that comparison
# alone would pass unchanged if the record lost its cause again, since both
# sides would then fall back to the same `see:` line.
assert lines[1] == "ON FAILURE (wikitool docs contract -h):"
assert lines[2].startswith(" `tools/CONTRACT.md` is missing -> Not transient - restore the file")
hint = cli_contract.render_failure_hint(cli_contract.get("docs contract"))
assert "\n".join(lines[1:]) == hint