Tighten who writes and reviews a record, date the rules, bound history (review of #206)
mesh/merge-gate pass: builds new: modules/mesh-knowledge, sent nowhere; no bus step; every machine composes with the change as it did without (4 of 4 compo…
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery superseded: a newer head of the same pull request

A revision came from anyone and a review was refused only to the first author,
so a co-writer could approve, and a record proposed before callers are proven
would later be reviewable by its own unproven author. Now a revision is taken
only from the proven author, a reserved number only from whoever reserved it,
and a review is refused from any writer of any version or for any record with
an unproven writer. The rules held records from no date, so a correction to an
older record was refused by rules hq never held it to; each dated rule now holds
from hq's own start date, and a new record cannot be dated before its
reservation. history and the question to ask are bounded like the other answers.
This commit is contained in:
2026-10-11 05:10:02 +02:00
parent ba7b455719
commit 10ab959d0f
10 changed files with 382 additions and 33 deletions
@@ -121,7 +121,9 @@ func allText(r *Record) string {
func JudgeRecord(r *Record, held *Entry, lookup Lookup, ref *Reference) []Refusal {
var out []Refusal
refuse := func(rule, format string, a ...any) {
out = append(out, Refusal{Rule: rule, Says: fmt.Sprintf(format, a...)})
if Holds(rule, r.Date) {
out = append(out, Refusal{Rule: rule, Says: fmt.Sprintf(format, a...)})
}
}
decision := r.Kind == KindDecision
if r.Kind != KindDecision && r.Kind != KindResearch {
@@ -531,3 +533,30 @@ func JudgeSet(records []*Record) []Finding {
}
return out
}
// RuleFrom is the day each dated rule began to hold a record, as hq's checks hold it: a record dated earlier was
// never held to it, and a dated correction of it (a progressive insight, which keeps the record's date) is not.
// words.py held the retired words from 2026-10-07 and the daemons' lines from 2026-10-09; cycle.py the deferrals
// from 2026-10-09; records.py the clauses from 2026-10-11 (ADR 0290 rule 3). The decision record's sections, and
// a superseded record cited alone, were held by no check of hq's (words.py and live-citation never read decision
// records): they hold from the day the knowledge base takes the write, 2026-10-11. Every other rule holds every
// record, as hq's checks held it.
var RuleFrom = map[string]string{
"retired-word": "2026-10-07",
"daemon-line": "2026-10-09",
"deferral": "2026-10-09",
"has-clause": "2026-10-11",
"clause-numbering": "2026-10-11",
"clause-lead": "2026-10-11",
"clause-size": "2026-10-11",
"context": "2026-10-11",
"consequences": "2026-10-11",
"checked": "2026-10-11",
"live-citation": "2026-10-11",
}
// Holds says whether a rule holds a record of this date. A record with no day is held to every rule.
func Holds(rule, date string) bool {
from, dated := RuleFrom[rule]
return !dated || !isDay.MatchString(date) || date >= from
}