The committee's findings, which arrived after #52 was merged - #53
Merged
Conversation
The line added one commit ago read "Ordered by how much each one moved the score". That is true of every finding except one, and the exception sorted to the top of the first report generated from this code. Every non-statistical finding pools into a single weighted density that Map turns into the pattern score, and Map is monotone, so among those the order by weight is exactly the order by contribution. Scorer excludes the Statistical category from that sum and derives its share from the sentence-length distribution instead, so stat.burstiness carries a weight that ranks it on the page without being what moved the number. The ordering is unchanged and defensible — in that document burstiness did contribute most. What was not defensible was a sentence claiming a measured quantity the model does not hold, on the page this project built to argue that a number without its provenance is not evidence. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Everything here came out of the committee review, either as a finding or as something found while checking one. **A false accusation, and it is not from this branch.** The headline counted `Citations.Issues.Count` where `ContradictionCount` exists. CitationIssue draws the line itself — a cited source missing from the list is a contradiction, an uncited entry in the list is not, "because people legitimately list further reading" — so a document whose only fault was further reading was announced as "Checkable facts found: 1 source contradiction", over a note asserting in the report's own voice that it "disagrees with itself". Reproduced with a tidy bibliography before fixing it. The CLI and the UI panel both use ContradictionCount correctly, so the report was the only surface that said it. **The citations list was cut in document order.** Left in place one commit ago while the same defect was fixed for signals: forty uncited entries early in a long bibliography would print and the repeated DOI in the last entry would not. Contradictions first now, then position — the checker's own distinction, not a new judgement. **MaxRows is public, settable and unvalidated, and this library is on NuGet.** A negative value printed "… and 12 more" for two findings, because the omission count is Count minus the limit. At zero rows the page claimed nothing omitted outweighed what was shown, with nothing shown. Clamped once at the top, and the strong clause is used only when there is something above for the rest to weigh less than. **The character table now says why it is not in file order.** It prints line and column so the reader can find each occurrence in an editor, which makes it the one table they are invited to verify; a Line column reading 6, 1, 2, 3 with no explanation looks like a defect. The signals list already carried its own line — this applies the same standard to the table it reordered. **Finding.Weight's own doc claimed what the report was corrected for claiming.** "Contribution of this finding to the overall score" is false for stat.burstiness, whose weight the scorer never reads. Harmless until the report began sorting by it and telling the reader what the order meant. Four new tests, 356 green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The second reviewer returned DO NOT SHIP with five reproducible findings. All five were confirmed by test before being fixed, and all five failed first. **An image is a request.** Escaping the angle bracket blocks raw HTML and does nothing to ``. The page's own last line says nothing here was uploaded anywhere; a report that fetches a pixel from somebody else's host the moment a teacher pastes it into the LMS has broken that sentence, and the fetch carries the moment they opened it. Escaping the opening bracket covers images and links both. **An asterisk captured the report's own prose.** The signal row is the matched text followed by the report's `*→ suggestion*`, so one asterisk from the document paired with the report's marker: emphasis opened at the document's character and closed at the report's, swallowing the explanation into the document's content, and the matched character vanished. That is issue #37's third item, deferred as cosmetic two commits ago and demonstrably not cosmetic. Fixing it needed the order reversed. Resolving the escapes and then escaping for HTML puts a live asterisk back before the emphasis pass runs, so the two are now one pass, and an escaped asterisk returns as `*` — a literal asterisk to every renderer, exactly as `<` is a literal bracket, and not a character the emphasis pass can see. `_` and `` ` `` are deliberately left alone: neither can pair with a marker this report writes on the same line, so the worst they do is italicise a document's own text, and escaping them would put a backslash in front of the underscore in every filename a teacher reads. **Three more values reaching the page unescaped.** The analysed language, which `Analyze` takes from its caller and the MCP server takes as free text from a model; `GeneratedOn` and `EngineVersion`, public settable strings on the same record whose `DocumentName` was already routed. A newline in either forged a second heading in the report's own voice. **`Cell` trimmed the evidence.** A rule whose regex includes the surrounding spaces matches them, and they are part of the span in the document. Dropped, on the page whose claim is that it reproduces what the document said. The cost is one backslash in the raw Markdown of a real report — `cites \[3]` — which the HTML resolves back to `[3]`, with no stray backslash anywhere on the page. Checked by reading the generated report, not only the assertions. The reviewer also confirmed the ordering against every edge asked for, and 100,000 findings sorted and truncated in 41 ms. Five new tests, 361 green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…till did #32 removed "Reads mostly human" from the report and "Minimal signs of AI writing" from the score card, because they are the same state described two ways and the first is a claim about the writer that this project cannot make: a detector that detects nothing also returns a low score, and how much machine writing this catches has deliberately never been measured. It survived in two places, found while checking a reviewer's aside about a third: - The CLI, on the line printed when nothing is found: "✓ No strong AI tells found — reads mostly human", in green. The tick and the colour were the same claim in another form, so both go with it. - The web interface, which is the surface most people see: the empty state read "This reads mostly human — nice work", and the rhythm caption "reads human". The caption for the opposite case describes the cadence rather than the author — "a machine-like, metronomic cadence" — so the varied one now does the same. Both say what was measured instead: nothing above the measured boundary, and that this is not evidence a person wrote it. The reason it survived is worth more than the fix. The test that guards this wording reads AnalysisResult.Verdict, and neither of these is that: one is a literal in a Console.WriteLine, the other is locale data that arrives as community pull requests. So the guard now lives where the data does, and names the file and the key when it fires. Verified by putting the old sentence back and watching it fail. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 10, 2026
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.
Read this first. PR #52 was merged at 11:39 with only its first commit. The two adversarial reviews reported afterwards, and everything they found is in the four commits here.
maintoday carries a sentence I proved false and three defects the reviewers demonstrated, so this is not a follow-up — it is the rest of #52.Verified rather than assumed:
git merge-base --is-ancestorsays07c82f6is inmainand78b8fb6is not. CI never ran on any of these four commits; the checks showing green on #52 are from the first push.What
mainis shipping right nowstat.burstiness, which the scorer excludes from the weighted sum — and which sorts to the top of a real report. The claim sits directly above the one row it does not describe.in a document survives into the Markdown*in a document eats the report's own prose*→ suggestion*marker. The matched character disappears.The four commits
ace9e9b— say weight, not score. Found by checkingScorer.csinstead of trusting my own comment.4ecdac2— Fable's lens (claims). The headline countedIssues.CountwhereContradictionCountexists, so a tidy bibliography listing further reading was announced as "1 source contradiction" over a note saying the document "disagrees with itself" — an accusationCitationIssueexplicitly declines to make. Reproduced before fixing. This one predates Sort the evidence before cutting it, and stop the Markdown carrying live HTML #52. (Correction, verified after the PR was written: it shipped for five days, not months. The miscounting headline entered on 2026-08-05 in1b2b1b8and went out inv0.4.0the same day. I wrote "months" without checking, which is the overclaim this project exists to argue against, so recording it rather than quietly editing it out.) Plus: citations sorted,MaxRowsclamped (it is public and unvalidated — a negative value printed "… and 12 more" for two findings), the character table now says why it is not in file order, andFinding.Weight's own doc corrected.feb7e2b— Codex's lens (attack). Returned DO NOT SHIP with five reproducible findings; all five were written as failing tests before being fixed. Escaping<does nothing to Markdown's own image and link syntax. Fixing the asterisk needed the escape resolution and the HTML escaping merged into one pass, because resolving first puts a live marker back before the emphasis pass runs; an escaped asterisk returns as*. Three more values reached the page unescaped: the analysed language (free text from a model, via MCP),GeneratedOnandEngineVersion. AndCelltrimmed the matched text, which contradicts the one thing this page promises.78b8fb6— the CLI and the web interface still said "reads mostly human", the claim The verdict bands were chosen by hand; the calibration is measured. Reconcile them. #32 removed from the report because it is about the writer and not ours to make. The guard now lives in the locale files, where community translations arrive, and names the file and key when it fires — verified by putting the old sentence back and watching it fail.Verification
cites \[3]), which the HTML resolves back to[3].Note on process
Nothing here is a criticism of merging #52 — I said the code was ready and the checks were running. It is a note that "merged" is a snapshot, not a promise about the branch, which is the third form this trap has taken in this repository.
🤖 Generated with Claude Code