Repository navigation
A fifth form of the authorship sentence: nobody named is not a breakdown of zeros - #80
Merged
Merged
Conversation
A fifth form of the authorship sentence, for the registry where no row carries a mark at all: "No author named on any of the N requirements." The four forms that stand are untouched, and the fifth fires only when every row lacks a mark; one mark among many keeps the partial form. Until now the all-unassigned case fell into the partial form, which exists so that a breakdown of a handful of rows is not read as the whole registry, and which therefore ends by counting the rest. With nothing assigned there is no rest, so the sentence ended in four zeros measuring an empty remainder, in the same voice as a real count. Found 2026-10-09 on the sixth demo specimen's own comment, posted by the 0.5.6 workflow: "No author named on 10 of 10 requirements; of the rest, 0 came from the case, 0 from the project (design 0, retrospective 0, constitution 0)." One wording in the fifth form was not ruled and is mine to be overruled: a single unassigned row reads "No author named on the one requirement.", because "any of the 1 requirements" is not English, and one row is what a cold project has after its first mint. Three tests under AC-GATE-160d: the fifth form, its singular, and the boundary that keeps the partial form when one row is marked. The four existing tests are untouched. Negative control: with main's thread-report.py and these tests, the two fifth-form tests fail and the boundary test passes. AC-GATE-160d is amended to name the new form, and its quoted shape is corrected to what the emitter has actually printed since 2026-10-02: "N requirements came from the case", not "N promises from the case". The two sentences quoted in docs/trace-manifest-v5.md carried the same stale wording and are corrected against the code, with the fifth form added beside them. Suite 230 -> 233 passing; Gate 2 on this repo's own registry OK (154 registry IDs); doc-versions OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vzf6Sh5RVMKdFqaXKFF2FY
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rik's ruling of 2026-10-09: a fifth form of the authorship sentence for the all-unassigned case, added to the four that stand.
The form
It fires only when every row lacks a mark. One mark among many keeps the partial form, which is what the boundary test holds.
One wording I chose, for you to overrule
The ruling gives
No author named on any of the N requirements.At N=1 that rendersNo author named on any of the 1 requirements, which is not English, and one unassigned row is a reachable and common state: it is what a cold project has after its first mint. So the fifth form has a singular:That sentence was not ruled and is mine. It is one
ifand one string inauthorship_sentence(), plus the test that pins it; say the word and both come out and N=1 reads the ruled sentence verbatim. The house already handles singulars this way two lines below (noun = "requirement" if case == 1 else "requirements").Why the old behaviour was wrong
The partial form exists so that a breakdown of a handful of rows is not read as the whole registry, which is why it ends by counting the rest. With nothing assigned there is no rest, so it ended in four zeros measuring an empty remainder, in the same voice as a real count. Found on the sixth specimen's own comment, posted by the 0.5.6 workflow:
That is #74's comment verbatim, read today. The reader it lands on is the one who has not met the field yet, and it tells them the tool measured something about their project rather than that there is nothing yet to measure.
Tests
Three new, all under
AC-GATE-160d, and the four existing tests are untouched:test_AC_GATE_160d_the_sentence_counts_no_rest_when_there_is_noneof the restnorcame from the caseappearstest_AC_GATE_160d_the_fifth_form_reads_as_English_for_one_rowany of the 1appears nowheretest_AC_GATE_160d_one_mark_among_many_keeps_the_partial_formany of theappears nowhereNegative control. With main's
thread-report.pyin place and these tests as written, the two fifth-form tests fail and the boundary test passes:2 failed, 9 passed. Only the script was reverted for that run, nothing else.The empty-rows case is untouched and still reaches its own sentence first, which
test_AC_GATE_160d_a_missing_v5_file_loses_the_numbers_not_the_reportholds: no v5 sidecar is not knowing, not an unassigned registry.Two corrections that came with it
AC-GATE-160dquoted the sentence asN promises from the case, M from the project (...). The emitter has printedN requirements came from the case, M from the project (...)since the plain-words ruling of 2026-10-02, and the tests have asserted that wording since. The registry row kept the pre-ruling shape. It is corrected here in the same sentence that gains the fifth form, so the row describes what the code does.docs/trace-manifest-v5.mdcarried the same stale wording in both of its quoted examples, one of them in a third wording (Authorship unassigned on 99 of 104 rows) that the code has never printed. Both are corrected by runningauthorship_sentence()on those exact counts and pasting what came back, and the fifth form is added beside them.This is scope I added rather than scope you asked for. The reason is that a row and a document quoting a sentence this PR changes cannot be left quoting a sentence the tool does not say.
Checks run here, before the push
bash -non all sevenextensions/specassay-check/scripts/*.sh: parse ok.check-doc-versions.py: OK, version being cut 0.5.6, 0 warnings.gate.ok=True, OK (154 registry IDs).Release note
The
## Unreleasedpreamble said that nothing in the entry changes the bundle. This entry does:thread-report.pyis shipped. The preamble is rewritten to say so, and to record that the two catalog issues that imposed the freeze are closed, since the two items below it landed under a freeze that no longer holds.Not in this PR
The fifth form will not show on #74 once #79 marks the example app's ten rows. That is as you ruled: the form is for strangers' projects, and the specimen is the thing that found it.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Vzf6Sh5RVMKdFqaXKFF2FY
Generated by Claude Code