Skip to content

A fifth form of the authorship sentence: nobody named is not a breakdown of zeros - #80

Merged
rdryfoos merged 1 commit into
mainfrom
authorship-fifth-form
Oct 11, 2026
Merged

rdryfoos merged 1 commit into
mainfrom
authorship-fifth-form

Conversation

@rdryfoos

@rdryfoos rdryfoos commented Oct 9, 2026

Copy link
Copy Markdown
Owner

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

No author named on any of the 10 requirements.

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 renders No 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:

No author named on the one requirement.

That sentence was not ruled and is mine. It is one if and one string in authorship_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:

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).

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 Holds
test_AC_GATE_160d_the_sentence_counts_no_rest_when_there_is_none three unassigned rows give the fifth form, and neither of the rest nor came from the case appears
test_AC_GATE_160d_the_fifth_form_reads_as_English_for_one_row one unassigned row gives the singular, and any of the 1 appears nowhere
test_AC_GATE_160d_one_mark_among_many_keeps_the_partial_form one of three marked keeps the partial form, and any of the appears nowhere

Negative control. With main's thread-report.py in 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_report holds: no v5 sidecar is not knowing, not an unassigned registry.

Two corrections that came with it

AC-GATE-160d quoted the sentence as N promises from the case, M from the project (...). The emitter has printed N 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.md carried 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 running authorship_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

  • Full suite: 230 passing on main, 233 on this branch.
  • bash -n on all seven extensions/specassay-check/scripts/*.sh: parse ok.
  • check-doc-versions.py: OK, version being cut 0.5.6, 0 warnings.
  • Gate 2 on this repo's own registry: gate.ok=True, OK (154 registry IDs).

Release note

The ## Unreleased preamble said that nothing in the entry changes the bundle. This entry does: thread-report.py is 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

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
@rdryfoos
rdryfoos merged commit fc89564 into main Oct 11, 2026
2 checks passed
@rdryfoos
rdryfoos deleted the authorship-fifth-form branch October 11, 2026 12:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants