From 8f61209b6bfc7e9774c97f565a5faf411e8f9ff8 Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Sat, 26 Sep 2026 18:50:01 +0200 Subject: [PATCH] test: docs contract merged-stream test pins its own ON FAILURE line (#146) 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 Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2 Files changed: - CHANGES.md - VERSION - tools/chemenu/tests/test_cli.py --- CHANGES.md | 42 +++++++++++++++++++++------------ VERSION | 2 +- tools/chemenu/tests/test_cli.py | 5 ++++ 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 21c542b..5924a5c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -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 ### 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. --- diff --git a/VERSION b/VERSION index e81d378..4ed4d3f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.1.0-beta.25 +7.1.0-beta.26 diff --git a/tools/chemenu/tests/test_cli.py b/tools/chemenu/tests/test_cli.py index 556aad2..b01d25a 100644 --- a/tools/chemenu/tests/test_cli.py +++ b/tools/chemenu/tests/test_cli.py @@ -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