Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
cd1e4e2
Acceptance process: make the cohort runnable and markable mechanically
LTSCommerce Oct 5, 2026
e7a0c5d
Acceptance process: apply the first review
LTSCommerce Oct 5, 2026
62c837a
Method 3.2: prefer semantic detectors; detector verdicts name the kind
LTSCommerce Oct 5, 2026
191f05f
Acceptance keys: method 2d on the detector preference, before the cohort
LTSCommerce Oct 5, 2026
ad97dfa
Acceptance process: apply the owner's decisions on review 1
LTSCommerce Oct 5, 2026
02aefca
Method 3.2: the strongest kind of detector is a MUST; textual replace…
LTSCommerce Oct 5, 2026
dd16779
Acceptance keys: 2d and the restatements follow the MUST and textual
LTSCommerce Oct 5, 2026
d45df88
Acceptance process: answer sheets posted on the pull request, not kep…
LTSCommerce Oct 9, 2026
6cc2fb6
Acceptance process: apply the editor's rulings on review 2
LTSCommerce Oct 9, 2026
d85beca
Method 3.2 and detector 8: apply the rulings on review 2
LTSCommerce Oct 9, 2026
28c0a0c
Acceptance keys: follow the revised 3.2 and detector 8
LTSCommerce Oct 9, 2026
23e7d8c
Acceptance process: apply the editor's rulings on review 3
LTSCommerce Oct 9, 2026
1116138
Method 3.2 and detector 8: apply the rulings on review 3
LTSCommerce Oct 9, 2026
333a5de
Acceptance keys: follow the 3.2 rulings on review 3
LTSCommerce Oct 9, 2026
dba7461
Acceptance process: apply the editor's rulings on review 4
LTSCommerce Oct 9, 2026
97d1d53
Method 3.2 and 3.6: apply the rulings on review 4
LTSCommerce Oct 9, 2026
fc3b0f9
Acceptance keys: follow the rulings on review 4
LTSCommerce Oct 9, 2026
5a863ae
Acceptance process: apply the editor's rulings on review 5
LTSCommerce Oct 9, 2026
76832dd
Method 2, 3.2 and section 1, detector 9: apply the rulings on review 5
LTSCommerce Oct 9, 2026
7180b40
Acceptance keys: follow the rulings on review 5
LTSCommerce Oct 9, 2026
b713023
Acceptance process: the commit named before readers start; sheet-visi…
LTSCommerce Oct 9, 2026
a695010
Acceptance process: name pull request 13 in acceptance/CHANGES.md
LTSCommerce Oct 9, 2026
56558fa
Register: Ruff and Pyright advice defers to method clause 3.2
LTSCommerce Oct 9, 2026
17d48d5
Merge branch 'editor/acceptance-mechanical' into editor/semantic-dete…
LTSCommerce Oct 9, 2026
5b6093f
Acceptance process: record the 2d question-set line for pull request 14
LTSCommerce Oct 9, 2026
bdfd055
Acceptance process: mark question 2 for its gist, judge open marks as…
LTSCommerce Oct 9, 2026
87536c5
Clarity edits after runs 19 and 20
LTSCommerce Oct 9, 2026
85110c1
Keys: quotations follow the clarity edits after runs 19 and 20
LTSCommerce Oct 9, 2026
7f6a196
Acceptance process: review 7, every element of a question 2 answer co…
LTSCommerce Oct 9, 2026
66301b9
Review rulings on the edits after runs 19 and 20
LTSCommerce Oct 9, 2026
ba8a0bd
Keys: quotations follow the review rulings
LTSCommerce Oct 9, 2026
7a4bb2d
Acceptance process: review 8, a set-aside sheet's answers still count…
LTSCommerce Oct 9, 2026
204f95b
Acceptance process: review 9, the fourth row's clearing test covers a…
LTSCommerce Oct 9, 2026
3b848c7
Detector 5.3 and method 3.3 Part B: the review's last readings settled
LTSCommerce Oct 9, 2026
27b4ce6
Acceptance runs 19 and 20: SPEC.md and DETECTOR-SPEC.md, first cohort…
LTSCommerce Oct 9, 2026
3aefdd1
Merge branch 'editor/acceptance-mechanical' into editor/semantic-dete…
LTSCommerce Oct 9, 2026
72f1679
Method 2, 3.2, 3.3 and 4, detector 5.3, 6.1, 7.1 and 8: runs 21 and 2…
LTSCommerce Oct 9, 2026
c5bfd10
Keys: method 2d and detector 2b quotations follow the reworded 3.2 an…
LTSCommerce Oct 9, 2026
43923ca
Method 3.3 Parts B and C: the review's two readings settled
LTSCommerce Oct 9, 2026
0b8d699
Acceptance runs 21 and 22: SPEC.md and DETECTOR-SPEC.md, second cohor…
LTSCommerce Oct 9, 2026
598908b
Acceptance process: a short quotation under question 4 covers the pla…
LTSCommerce Oct 9, 2026
b172fd6
Method 1, 3.1 and 3.2, detector 7.1, 8 and 8.1: runs 23 and 24 findin…
LTSCommerce Oct 9, 2026
296aad5
Keys: method 2d and detector 2b quotations follow the reworded 3.2 an…
LTSCommerce Oct 9, 2026
c482c0f
Merge branch 'editor/acceptance-mechanical' into editor/semantic-dete…
LTSCommerce Oct 9, 2026
431b60a
Method section 1, Owner: the first human up a chain of agents
LTSCommerce Oct 9, 2026
dfb9b68
Acceptance runs 23 and 24: SPEC.md and DETECTOR-SPEC.md, third cohort…
LTSCommerce Oct 9, 2026
0b2d190
Method 3.1, 3.2, 3.5 and 3.6, detector 7.1 and 8: runs 25 and 26 find…
LTSCommerce Oct 9, 2026
d07c177
Keys: method 2d and detector 2b and kind quotations follow the reword…
LTSCommerce Oct 9, 2026
e783b64
Method 3.1, 3.2, 3.5 and detector 7.1: the review's readings settled
LTSCommerce Oct 9, 2026
1db0c67
Acceptance runs 25 and 26: SPEC.md and DETECTOR-SPEC.md, fourth cohor…
LTSCommerce Oct 9, 2026
c6ee1a8
Method 2, 3.1, 3.2 and 7, detector 6.1, 7.1 and 8: runs 27 and 28 fin…
LTSCommerce Oct 9, 2026
224579f
Keys: method 2d and detector 2b quotations follow the reworded 3.2 an…
LTSCommerce Oct 9, 2026
6ddba40
Method 3.1 and detector 7.1: two readings from the review settled
LTSCommerce Oct 9, 2026
db47301
Acceptance runs 27 and 28: SPEC.md and DETECTOR-SPEC.md, fifth cohort…
LTSCommerce Oct 9, 2026
00f54d9
Acceptance runs 29 and 30: SPEC.md and DETECTOR-SPEC.md, sixth cohort…
LTSCommerce Oct 9, 2026
d88ab30
Acceptance process: name runs 19 to 30 as made under this change
LTSCommerce Oct 9, 2026
814567b
Acceptance process: an earlier run's judgement does not bind where it…
LTSCommerce Oct 10, 2026
638093a
Merge remote-tracking branch 'origin/editor/acceptance-mechanical' in…
LTSCommerce Oct 10, 2026
b9e5a3f
Method 2, 3.1, 3.2, 3.5 and 4, detector 7.1, 8, 8.1 and 9: runs 29 an…
LTSCommerce Oct 10, 2026
7257121
Acceptance process: a question reworded only where it asks the same t…
LTSCommerce Oct 10, 2026
5cec557
Acceptance process: an earlier run's judgement binds no later run
LTSCommerce Oct 10, 2026
d1c8f7b
Merge editor/acceptance-mechanical after review 1, finding 1
LTSCommerce Oct 10, 2026
8f5b7ee
Acceptance process: a rewording is the editor's decision, question by…
LTSCommerce Oct 10, 2026
8abd44f
Method 2, 3.2, 3.5 and 4, detector 6.2, 7.1, 8.2 and 9: review 1 find…
LTSCommerce Oct 10, 2026
5f01f4c
Acceptance process: a departure is recorded against the same pull req…
LTSCommerce Oct 10, 2026
3accca7
Merge remote-tracking branch 'origin/editor/acceptance-mechanical' in…
LTSCommerce Oct 10, 2026
87a1c64
Method 3.2, detector 6.2 and 8.2, acceptance process: review 2 findin…
LTSCommerce Oct 10, 2026
ea5cc4c
Method 3.2 and 3.5: review 3 findings R3-1 and R3-2 applied
LTSCommerce Oct 10, 2026
d20c571
Method 3.2: the smoke check named as clause 3.3 names it, one that de…
LTSCommerce Oct 10, 2026
4383fb8
Acceptance process: the test proves the clarity of the change, with k…
LTSCommerce Oct 12, 2026
36d87d1
Acceptance process: review 1 findings applied
LTSCommerce Oct 12, 2026
8a63448
Acceptance process: review 2 findings applied
LTSCommerce Oct 12, 2026
4cc5688
Acceptance process: review 3 findings applied
LTSCommerce Oct 12, 2026
c31d49a
Acceptance process: CHANGES.md names pull request 22
LTSCommerce Oct 12, 2026
972cbb7
Merge branch 'editor/acceptance-coherent' into editor/detector-route-…
LTSCommerce Oct 12, 2026
373e46f
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
e6bdf40
Keys and routed findings: open points from runs 53 to 59
LTSCommerce Oct 12, 2026
04aa914
Merge branch 'editor/acceptance-coherent' into editor/detector-route-…
LTSCommerce Oct 12, 2026
0670e82
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
ed30e69
Detector: the detectable route, the gap duty, the remainder and the m…
LTSCommerce Oct 12, 2026
4081aa4
Toolchain key and routed findings: open points from runs 61 and 62
LTSCommerce Oct 12, 2026
a44ddf8
Merge branch 'editor/acceptance-coherent' into editor/detector-route-…
LTSCommerce Oct 12, 2026
27aaf5d
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
c1c986e
Run 060: detector route rule cohort, failed on two findings
LTSCommerce Oct 12, 2026
4cbecad
Detector: a Message row in section 2, and who may grade a detector
LTSCommerce Oct 12, 2026
9907492
Routed findings from runs 63 and 64
LTSCommerce Oct 12, 2026
890d8e3
Run 063: detector route rule cohort, failed on one finding
LTSCommerce Oct 12, 2026
d157143
Detector 5.3: a fuller report elsewhere is not a remainder
LTSCommerce Oct 12, 2026
44fdd9e
Merge branch 'editor/acceptance-coherent' into editor/detector-route-…
LTSCommerce Oct 12, 2026
11a4cd1
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
e764773
Semantic detectors: the change reduced to what it changes
LTSCommerce Oct 12, 2026
5852a85
Routed findings: four detector rows closed by run 66, two toolchain r…
LTSCommerce Oct 12, 2026
6a2775e
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
da3e431
Merge branch 'editor/acceptance-coherent' into editor/detector-route-…
LTSCommerce Oct 12, 2026
c78b76c
Run 066: detector route rule cohort passed
LTSCommerce Oct 12, 2026
f3ec69e
Routed findings: rows from runs 19 to 30, two closed by defined-terms…
LTSCommerce Oct 12, 2026
befe52c
Semantic detectors: review findings applied
LTSCommerce Oct 12, 2026
ae5f8da
Runs 060, 063 and 066: pull request 23 and the posted answer sheets
LTSCommerce Oct 12, 2026
06d26fc
Runs 070 and 071: semantic detectors, method passed, detector failed
LTSCommerce Oct 12, 2026
8defdae
Detector 5.3 and 8.1: the location owed only where the summary leaves…
LTSCommerce Oct 12, 2026
bc6ae14
Method key: clause 3.3's narrowing sentence; routed findings from run…
LTSCommerce Oct 12, 2026
d67174c
Merge branch 'editor/acceptance-coherent' into editor/detector-route-…
LTSCommerce Oct 12, 2026
32e786f
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
aa21dee
Detector 8.2: the configuration whose kind is named, in the clause's …
LTSCommerce Oct 12, 2026
f7e55e1
Merge branch 'editor/detector-route-rule' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
dbdf841
Detector 5.3 and 7.1: a usable summary defined, detectability in one …
LTSCommerce Oct 12, 2026
13b497b
Toolchain key: the 4.3 row says which case the fixture presents; ROUT…
LTSCommerce Oct 12, 2026
f32e542
Run 073: detector route rule cohort, failed on clauses 5.3 and 7.1
LTSCommerce Oct 12, 2026
cca75a7
Run 077: detector route rule cohort, failed on clause 5.3's remainder…
LTSCommerce Oct 12, 2026
c5f17b5
Detector 5.3: the remainder in three plain sentences
LTSCommerce Oct 12, 2026
0c21e98
Merge branch 'editor/acceptance-coherent' into editor/detector-route-…
LTSCommerce Oct 12, 2026
74fffac
Run 074: semantic detectors, detector cohort failed on clause 8.2
LTSCommerce Oct 12, 2026
9841bc9
Detector 8.2: the hosted-service sentence dropped
LTSCommerce Oct 12, 2026
ef98a67
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
ac14996
Changelog: clause links point at the headings as they are
LTSCommerce Oct 12, 2026
23f5bf0
Changelog: clause links point at the headings as they are
LTSCommerce Oct 12, 2026
08b9e56
Run 078: detector route rule cohort passed
LTSCommerce Oct 12, 2026
ed889dd
Run 079: semantic detectors, detector cohort passed
LTSCommerce Oct 12, 2026
874c303
Merge branch 'editor/detector-route-rule' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
389ef3f
Acceptance: a missing-document remark is a note however it quotes; a …
LTSCommerce Oct 12, 2026
87e62de
Run records: links to the answer sheets posted on the pull request
LTSCommerce Oct 12, 2026
12b09fb
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
0da928d
ROUTED: run 81 names the toolchain 6.1 Project record sentence again;…
LTSCommerce Oct 12, 2026
ae6faf2
ROUTED: run 82 names the toolchain 6.2 last paragraph again
LTSCommerce Oct 12, 2026
a095fa7
ROUTED: toolchain 6.2's first paragraph against clause 6.4's defaults…
LTSCommerce Oct 12, 2026
852dcd8
ROUTED: run 84 names the toolchain Project record entry against claus…
LTSCommerce Oct 12, 2026
568e323
ROUTED: run 85 names the toolchain 6.2 first paragraph against clause…
LTSCommerce Oct 12, 2026
40f7895
ROUTED: run 86's findings in untouched toolchain text, clause 6.4 aga…
LTSCommerce Oct 12, 2026
baa51ff
Merge branch 'editor/acceptance-coherent' into editor/semantic-detectors
LTSCommerce Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
287 changes: 222 additions & 65 deletions ACCEPTANCE.md

Large diffs are not rendered by default.

91 changes: 91 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,37 @@ version entry with no cohort line has not been accepted and is not published.

## Method specification (SPEC.md)

### Unreleased

- New obligation, clause [3.2](SPEC.md#32-build-the-net): a rule the practitioner writes MUST be written in the strongest
kind of detector that can express it, semantic, else syntactic, else textual, judged by the
configuration it runs in; enabling an existing rule or tightening its thresholds is not writing
one, and giving an existing rule a pattern of the project's own, or changing the pattern of one
the project wrote, is. A weaker kind is allowed only on two grounds, that the stronger cannot
express the rule or that the language has no detector of that kind which accepts bespoke
rules; a stronger configuration of a detector the project runs counts, and one only a hosted
service or licence tier provides does not. The remediation docs of a rule the practitioner
writes MUST name its detector and kind, and where the kind is weaker than semantic the grounds
MUST be recorded there and in the description of the commit that adds or moves the rule or
first records them, naming the stronger detectors considered. The practitioner judges the
grounds; a project MAY require the owner's sign-off by recording that requirement where it
records its calibrations, which section [4](SPEC.md#4-authority-which-decisions-belong-to-whom) and the section [3](SPEC.md#3-the-method) map note. Clause [3.6](SPEC.md#36-make-the-failure-message-terse-and-point-it-at-real-documentation)'s
list of what the remediation docs state defers to what clause [3.2](SPEC.md#32-build-the-net) adds. Section
[1](SPEC.md#1-terminology) defines textual, syntactic and semantic by whether a rule can ask the type of any
expression and what any name refers to across the whole program, naming mypy as semantic only
with `check_untyped_defs`. Section [2](SPEC.md#2-when-the-method-applies) and clause [3.2](SPEC.md#32-build-the-net) send a class that no extensible
detector of a kind the language has can express within clause [3.1](SPEC.md#31-attribute-the-defect-to-a-class)'s bounds to a bespoke
detector or a toolchain gap, not to "no pattern exists". Section [7](SPEC.md#7-conformance)'s conforming defence
carries the kind, and Appendix A carries the requirement. Prompted by project rules hosted in
ast-grep, where the language already had a semantic host, that decided by names: they reported
unrelated calls of the same name, and clause [3.2](SPEC.md#32-build-the-net) said any detector qualified whatever its
category. The method question set gains load-bearing statement 2d. Runs 19, 21, 23, 25, 27
and 29 were made on an earlier text of this change under the earlier acceptance rules: runs
19 and 29 failed on statement 2d, and every run failed on passages the change had not
touched, as `acceptance/CHANGES.md` records; the change was then reduced to the text above,
and the passages those runs named in untouched text are listed in `acceptance/ROUTED.md` for
changes of their own. Accepted by [run 70](acceptance/runs/070-semantic-detectors-run-13.md).

### 1.1.0, 2026-10-02

- New obligation, section [2](SPEC.md#2-when-the-method-applies): a defect whose fix is deferred MUST be recorded where the project's
Expand Down Expand Up @@ -68,6 +99,66 @@ pass it.

## Detector specification (DETECTOR-SPEC.md)

### Unreleased

- New obligation, clause [8.2](DETECTOR-SPEC.md#82-a-verdict-on-a-detector-must-name-its-kind-in-each-configuration-it-grades): a verdict on a detector MUST name the kind, semantic, syntactic
or textual, of each configuration it grades. It is not a level of conformance and does not change the verdict; it is
stated because method clause [3.2](SPEC.md#32-build-the-net) now requires a rule to be written in the strongest kind
of detector that can express it, and a verdict of conforming alone presents a textual detector
as an equal host. Section [9](DETECTOR-SPEC.md#9-relationship-to-the-other-specifications) still adds no obligation to the method a practitioner
follows and names this one as binding whoever gives a verdict on a detector, a practitioner
included when they give one, and section [2](DETECTOR-SPEC.md#2-terminology)'s gloss carries the three terms and the
message. Runs 20, 22, 24, 26, 28 and 30 were made on an earlier text of this change under the
earlier acceptance rules and failed on passages the change had not touched, as
`acceptance/CHANGES.md` records; the passages those runs named in untouched text are listed
in `acceptance/ROUTED.md` for changes of their own. [Run
71](acceptance/runs/071-semantic-detectors-run-14.md), under the rules of pull request 22,
failed on this clause's first paragraph, which two readers could not place, and on misses in
clauses [5.3](DETECTOR-SPEC.md#53-the-result-must-reach-the-practitioner-in-the-output-of-the-command-they-ran) and [6.1](DETECTOR-SPEC.md#61-the-detector-must-provide-a-mechanism-that-resolves-a-printed-identifier-to-its-documentation) in text the change had not touched; the paragraph then gained a sentence
naming the configuration whose kind is named, and [run
74](acceptance/runs/074-semantic-detectors-run-15.md) failed on that sentence, three readers
unable to tell which configuration it meant. The sentence is withdrawn: the verdict names the
kind of each configuration it grades. Accepted by [run
79](acceptance/runs/079-semantic-detectors-run-16.md).
- Clarity, no obligation changed: four passages that cold readers of an unrelated change read as
the document pulling against itself or could not follow, each listed in `acceptance/ROUTED.md`.
Clause [7.1](DETECTOR-SPEC.md#71-a-detector-may-offer-an-inline-suppression-route-but-must-make-it-detectable-or-disableable)'s detectable route is now a bespoke rule the project writes for the detector under
clause [4.1](DETECTOR-SPEC.md#41-the-detector-must-support-bespoke-rules-written-by-the-project-that-runs-it), after six runs read "a Rule the project can write in the Detector itself" as the
project editing the detector's own source, and a new paragraph says what detectable means and
what each of the two ways is. Clause [8.1](DETECTOR-SPEC.md#81-a-maintainer-may-declare-the-version-of-this-document-the-detector-conforms-to-and-the-declaration-records-known-gaps)'s duty to record a known gap falls only on a detector
that declares a version, and says so beside "The declaration is optional", with the method's
clause [3.2](SPEC.md#32-build-the-net) record applying either way. Clause [5.3](DETECTOR-SPEC.md#53-the-result-must-reach-the-practitioner-in-the-output-of-the-command-they-ran) says what the remainder is, and that
there is none where the output prints every finding. Clause [6.1](DETECTOR-SPEC.md#61-the-detector-must-provide-a-mechanism-that-resolves-a-printed-identifier-to-its-documentation) says it asks for the
mechanism and not for every page, a missing page failing clause [6.3](DETECTOR-SPEC.md#63-a-bundled-rules-documentation-must-ship-with-the-rule-at-a-version-tracked-together), and that a
documentation path printed in the message is not enough on its own, after three readers of
run 54 set that sentence against the mechanism. Prompted by runs 32 to 54 on the defined-terms
change, in which two or more readers quoted each passage.
[Run 60](acceptance/runs/060-detector-route-rule-run-1.md) failed on two findings in the
revised text, every keyed item within threshold: two readers could not find Message defined,
so section [2](DETECTOR-SPEC.md#2-terminology)'s table gains a Message row; and two readers stopped at clause [8.1](DETECTOR-SPEC.md#81-a-maintainer-may-declare-the-version-of-this-document-the-detector-conforms-to-and-the-declaration-records-known-gaps)'s
"anyone who exercises the clauses above", which now says anyone may grade a detector by
checking it against each clause of sections [4](DETECTOR-SPEC.md#4-authoring-rules) to [7](DETECTOR-SPEC.md#7-suppression).
[Run 63](acceptance/runs/063-detector-route-rule-run-2.md) failed on one finding in the revised
text, every keyed item five of five: two readers needed two readings of clause [5.3](DETECTOR-SPEC.md#53-the-result-must-reach-the-practitioner-in-the-output-of-the-command-they-ran)'s
sentence on a report that only adds detail, which is now a sentence of its own with its subject
stated; three readers named clause [6.1](DETECTOR-SPEC.md#61-the-detector-must-provide-a-mechanism-that-resolves-a-printed-identifier-to-its-documentation)'s paragraph on a project's own rule, which this
change does not touch and `acceptance/ROUTED.md` now lists.
[Run 66](acceptance/runs/066-detector-route-rule-run-3.md) passed, every keyed item five of
five, its one finding being that same clause [6.1](DETECTOR-SPEC.md#61-the-detector-must-provide-a-mechanism-that-resolves-a-printed-identifier-to-its-documentation) paragraph, named again by three readers,
which stays in `acceptance/ROUTED.md` for a change of its own. Run 69, a cohort of the
defined-terms change on this document with this change merged in, then had two readers set
clause [5.3](DETECTOR-SPEC.md#53-the-result-must-reach-the-practitioner-in-the-output-of-the-command-they-ran)'s "MUST carry both a usable summary and the location of the remainder" against its
"need not name it", and two readers stop at clause [8.1](DETECTOR-SPEC.md#81-a-maintainer-may-declare-the-version-of-this-document-the-detector-conforms-to-and-the-declaration-records-known-gaps)'s gap sentence and its MAY: clause
[5.3](DETECTOR-SPEC.md#53-the-result-must-reach-the-practitioner-in-the-output-of-the-command-they-ran) now owes the location only where the summary leaves a finding out, and clause [8.1](DETECTOR-SPEC.md#81-a-maintainer-may-declare-the-version-of-this-document-the-detector-conforms-to-and-the-declaration-records-known-gaps) says
where a practitioner's record of a gap lives and that a detector without a declaration can
still be found to conform. [Run 73](acceptance/runs/073-detector-route-rule-run-4.md) failed
on clause [5.3](DETECTOR-SPEC.md#53-the-result-must-reach-the-practitioner-in-the-output-of-the-command-they-ran)'s "usable summary" and on clause [7.1](DETECTOR-SPEC.md#71-a-detector-may-offer-an-inline-suppression-route-but-must-make-it-detectable-or-disableable)'s second paragraph; clause
[5.3](DETECTOR-SPEC.md#53-the-result-must-reach-the-practitioner-in-the-output-of-the-command-they-ran) now says what a usable summary is and what the remainder is, and clause [7.1](DETECTOR-SPEC.md#71-a-detector-may-offer-an-inline-suppression-route-but-must-make-it-detectable-or-disableable) states
the two ways a route is detectable in one paragraph. [Run
77](acceptance/runs/077-detector-route-rule-run-5.md) failed on the remainder sentence alone,
four readers unable to tell what "is not one" referred to; it is now three plain sentences.
Accepted by [run 78](acceptance/runs/078-detector-route-rule-run-6.md).

### 1.0.0, 2026-09-08

First version, split out of toolchain specification 0.1.0 on the same day. States what a detector,
Expand Down
32 changes: 20 additions & 12 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ review. It is a patch version when released.
SHOULD or MAY in a numbered section or appendix. It needs everything a clarity edit needs, plus
the five tests in SCOPE.md answered in the pull request, and it is at least a minor version when
released. `tools/changes.py` tells the two apart mechanically and CI runs it on every pull
request.
request. A change to the acceptance process, as ACCEPTANCE.md defines one under "Changes to
this process", is neither: ACCEPTANCE.md says how it is made, and it is recorded in
`acceptance/CHANGES.md`, not in CHANGELOG.md.

## What a pull request contains

Expand All @@ -55,20 +57,26 @@ survives, the change is yours.
the editor sets the pre-release header.
2. **Scope.** For an obligation, the editor confirms each SCOPE.md test. A failed test closes the
pull request with a row in `DECLINED.md`.
3. **Review and rewrite.** An independent review of the diff against the document, then the
editor's rewrite, pushed to the pull request branch where the contributor allows it or to an
editor's branch that supersedes it.
3. **Review and rewrite.** An independent review of the diff against the whole document, by a
reviewer who did not draft the change, then the editor's rewrite, pushed to the pull request
branch where the contributor allows it or to an editor's branch that supersedes it. The pull
request names the reviewer and links or contains the review.
4. **Keys.** Where the change touches a sentence an acceptance key quotes, or adds a load-bearing
obligation, the editor updates the key before the cohort runs, never after.
5. **The cohort.** The acceptance test in ACCEPTANCE.md runs on the final text. Its record is
committed under `acceptance/runs/`, the `Unreleased` changelog line names it, and CI refuses
a specification change that lacks one. For an obligation, the editor sets the document's
header to `<next version>-dev, unpublished` in the same commit if it still names a published
version. A wording change after the run means a fresh run.
obligation, the editor updates the key before the cohort runs, never after. The key's
required elements stay what its question asks for; `acceptance/README.md` says what a key
update may and may not do.
5. **The cohort.** The acceptance test in ACCEPTANCE.md runs on the final text, one cohort per
changed document. Its record is committed under `acceptance/runs/`, the `Unreleased`
changelog line names it, and CI refuses a specification change that lacks one. For an
obligation, the editor sets the document's header to `<next version>-dev, unpublished` in the
same commit if it still names a published version. A change to the document's text after the
run means a fresh run, as ACCEPTANCE.md says under "When it runs". A finding the
run routes to `acceptance/ROUTED.md` is not fixed in this pull request.
6. **Merge** into `next` by merge commit, and the branch is deleted.

Steps 2 to 5 are done by a person with a Claude Code session, not by CI, and they happen in
batches. A quiet pull request is not a declined one; a declined one says so.
Steps 2 to 5 are the editor's, not CI's, and they happen in batches. The editor may have an
agent draft, review or mark, as ACCEPTANCE.md allows for marking; every decision in these steps
stays the editor's. A quiet pull request is not a declined one; a declined one says so.

## Versions and releases

Expand Down
Loading
Loading