feat: rule Q62 by stating the truth; strike the /med-arb/ gloss; re-stamp R18
Pouya's four rulings of 2026-09-01, applied 2026-09-02.
Q62 — RULED "state the truth", not "remove the access". /legal/privacy/
now says two people can read the intake table, names their role, and adds
the two stronger facts the false sentence had crowded out: the handler
role holds PutItem only, and adr-sml-deploy is implicitDeny on all seven
read and write actions. Wording is subject to Pouya's read-through —
Q63(a), with a TODO(pouya) beside the copy.
The ruling named one sentence; a vocabulary sweep found the falsehood in
three places, and the audit then found two more. Five paragraphs now
answer "who can see it" and change together.
The tripwire stays permanently, per ruling, and grew from two
alternatives to five. Every alternative is one string that reached dist/.
Proven both ways against the pre-correction page rebuilt from bd282aa:
exit 1 with 5 matches at dist/legal/privacy/index.html:54,67,67,68,72;
exit 0 on the corrected page, self-test 12 patterns / 36 approved
strings.
/med-arb/ — the gloss is struck with no replacement, per ruling. The
strike left "the section above" pointing at the ADRIC rule set and "the
agreement" with no antecedent; both fixed. The bare designations line
sitting under ADRIC's quoted competence requirement is also struck, which
goes beyond the ruling and is flagged for Pouya.
R18 — re-stamped, two-tier: (a)(c)(d) re-verified against a source,
(b)(e)(f)(g) held on a cadence judgement. All seven hold, no shipped
sentence changed. R18's trigger had NO cutover checklist item and had
stamped five extracts of seven; both fixed. Candidate limb (h) flagged.
R10 — fired and unsatisfied; left open on instruction.
The evidence behind the new privacy sentence was weaker than the
sentence. Re-measured: 33 of 33 roles simulated (23 of 26 carried inline
policies nobody had read; the two CDK lookup roles can read the table),
four trust policies, the CloudFormation escalation path for all five
users, 0 federated providers, root recorded. Every read path terminates
at the same two people.
Two review rounds, 36 findings. 35 fixed, 1 declined. Five of round 2's
were defects in round 1's own fixes; stopped at two per D19.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Md3GndFqWPzK78xAoebsg5
This commit is contained in:
co-authored by
Claude Opus 5
parent
bd282aa47d
commit
6aaf089b05
+76
-28
@@ -259,28 +259,52 @@ const PATTERNS = [
|
||||
},
|
||||
{
|
||||
id: 'sole-administrator-q62',
|
||||
rule: 'Q62 — /legal/privacy/ claims sole administrative access to the intake table, and that is FALSE.',
|
||||
rule:
|
||||
'Q62 — the sole-administrative-access claim on /legal/privacy/ was FALSE ' +
|
||||
'and is permanently barred from returning. The page does NOT make it now; ' +
|
||||
'if this fired, something reintroduced the shape. ' +
|
||||
"⚠️ IF THE SECOND ADMINISTRATOR'S ACCESS IS EVER ACTUALLY REMOVED, this " +
|
||||
'pattern starts failing the build on TRUE copy, and the answer is neither ' +
|
||||
'to delete it nor to work around it: re-run the verification in ' +
|
||||
'`docs/reference/intake-table-access-verification.md`, rewrite the page to ' +
|
||||
'the new measured truth, and narrow THIS pattern deliberately with a ' +
|
||||
'Change Log entry. Q23 records the Gitea instance as jointly administered, ' +
|
||||
'so that removal is live rather than hypothetical.',
|
||||
incident:
|
||||
'The page shipped "nobody else has access to the table. There is no team, ' +
|
||||
'no assistant and no external administrator." The AWS account has an ' +
|
||||
'`admins` IAM group carrying AdministratorAccess with TWO members, and ' +
|
||||
'`simulate-principal-policy` returns allowed for dynamodb:GetItem, Query ' +
|
||||
'and Scan on the table for both ' +
|
||||
'[verified 2026-09-01 — docs/reference/intake-table-access-verification.md]. ' +
|
||||
'THE REACHED-DIST CONDITION IS WHY THIS PATTERN EXISTS AT ALL: the ' +
|
||||
'sentence was in dist/legal/privacy/index.html, `build`, `check` and this ' +
|
||||
'script all exited 0 over it, and the only thing between it and a live ' +
|
||||
'privacy policy was a TODO(pouya) in a JSX comment — which Astro strips, ' +
|
||||
'so `grep -rn "TODO(pouya)" dist/` returned nothing. The gate was human ' +
|
||||
'memory. Found by `adversarial-reviewer`, 2026-09-01. ' +
|
||||
'DELETE THIS PATTERN when Q62 is ruled: either the access is removed and ' +
|
||||
'the sentence becomes true, or the sentence is rewritten. It is a tripwire ' +
|
||||
'on one specific published falsehood, not a rule about a class.',
|
||||
/* `\s+`, NOT LITERAL SPACES: `compressHTML` collapses whitespace between
|
||||
tags and leaves it alone inside a text node, so the published bytes read
|
||||
"nobody else has access to\n the table". A literal-space version
|
||||
runs, prints `ok`, and exits 0 with the breach in `dist/`. */
|
||||
re: /nobody\s+else\s+has\s+access\s+to\s+the\s+table|there\s+is\s+no\s+team,\s+no\s+assistant\s+and\s+no\s+external\s+administrator/gi,
|
||||
'no assistant and no external administrator." while TWO principals could ' +
|
||||
'read it. It was in dist/, `build`, `check` and this script all exited 0 ' +
|
||||
'over it, and the only thing between it and a live privacy policy was a ' +
|
||||
'TODO(pouya) in a JSX comment — which Astro strips. The gate was human ' +
|
||||
'memory. Pouya ruled the pattern PERMANENT on 2026-09-01: it no longer ' +
|
||||
'describes live copy, it bars the shape. Do not delete it, and do not ' +
|
||||
'loosen it into a rule about a class. Full history: AGENTS.md entry (an).',
|
||||
/* THREE CONSTRAINTS, AND THEY ARE WHY THIS IS SHAPED AS IT IS.
|
||||
|
||||
1. `\s+`, NOT LITERAL SPACES. `compressHTML` collapses whitespace between
|
||||
tags and leaves it alone inside a text node, so the published bytes
|
||||
read "nobody else has access to\n the table". A literal-space
|
||||
version runs, prints `ok`, and exits 0 with the breach in `dist/`.
|
||||
|
||||
2. EACH ALTERNATIVE IS ONE STRING THAT REACHED `dist/`, NEVER A FAMILY.
|
||||
The first draft of alternative 3 was `(?:or|and)\s+(?:outside|external)`
|
||||
— four phrasings where one was published, so three had no probe and no
|
||||
negative fixture, which is the freeze's stated condition.
|
||||
|
||||
3. ALTERNATIVE 3 IS A DELIBERATE OVER-BAR AND THIS IS ITS COST. The
|
||||
truthful receipt-scoped sentence CONTAINS the published string, so any
|
||||
pattern catching one catches the other — adding that truthful form as a
|
||||
negative fixture failed the self-test, which is the instrument check
|
||||
working. So: the clause "no assistant or outside administrator" cannot
|
||||
be published here in ANY scoping, true or false, without failing this
|
||||
build. That is the right trade for a phrase that has already put a
|
||||
false statement on a privacy policy, and `rule:` says what to do. A
|
||||
lookahead tuned to one guessed phrasing would be the speculative
|
||||
pattern the freeze bars.
|
||||
|
||||
The window in alternative 5 is `[^\w<]{0,8}`, not `\W{0,8}`: `\W` matches
|
||||
`<` and the block sentinel, so it would have been bounded by neither. */
|
||||
re: /nobody\s+else\s+has\s+access\s+to\s+the\s+table|there\s+is\s+no\s+team,\s+no\s+assistant\s+and\s+no\s+external\s+administrator|no\s+assistant\s+or\s+outside\s+administrator|one\s+administrative\s+account,\s+which\s+is\s+mine|honest\s+answer\s+to\s+[^\w<]{0,8}who\s+can\s+see\s+this[^\w<]{0,8}\s*is:\s+me/gi,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -367,23 +391,47 @@ const FIXTURES = {
|
||||
'C.Med-Arbitration',
|
||||
],
|
||||
'sole-administrator-q62': [
|
||||
/* The two published clauses, verbatim from dist/legal/privacy/. */
|
||||
/* The FIVE published clauses from dist/legal/privacy/ as it stood at
|
||||
`bd282aa`, before the Q62 correction. The first form of the pattern
|
||||
caught only the first two: clauses 3 and 4 are the same falsehood in
|
||||
different words in a different section, and clause 5 is the summary
|
||||
that would have re-asserted the struck number. */
|
||||
'nobody else has access to the table',
|
||||
'There is no team, no assistant and no external administrator.',
|
||||
'no analytics on the submission, and no assistant or outside administrator.',
|
||||
'The table is reachable by the function that writes to it and by one administrative account, which is mine',
|
||||
/* The third surface — the summary that would have re-asserted the struck
|
||||
number four lines below the corrected paragraph. */
|
||||
'So the honest answer to "who can see this" is: me, and Google as the company that runs my mail.',
|
||||
],
|
||||
'struck-universal-q39': [
|
||||
'Anyone may be appointed an arbitrator in Ontario',
|
||||
'nothing in law gates the role',
|
||||
],
|
||||
},
|
||||
/* Every one of these is real published or spec-approved copy on this site. */
|
||||
/* Mostly real published or spec-approved copy on this site. A few are
|
||||
deliberate NEAR MISSES — truthful sentences about the same subject that
|
||||
were never published — because a pattern also has to be proven silent on
|
||||
the wording a correction is likely to reach for. Where a fixture is one of
|
||||
those, the comment beside it says so. */
|
||||
mustNotMatch: [
|
||||
/* NEGATIVE FIXTURES FOR `sole-administrator-q62` — the approved copy nearest
|
||||
to the two clauses it catches. The pattern is deliberately anchored on the
|
||||
two published sentences rather than on the ideas in them, because the
|
||||
replacement wording is not yet decided and a looser pattern would fire on
|
||||
whatever Q62's ruling produces. These four are what "nearest" means: the
|
||||
same page's true sentences about the same subject. */
|
||||
/* NEGATIVE FIXTURES FOR `sole-administrator-q62`. The first three are the
|
||||
REPLACEMENT COPY ITSELF, verbatim from the corrected `/legal/privacy/` —
|
||||
which is the fixture that matters, because Q62's ruling required this
|
||||
pattern to be proven silent on the true sentence as well as loud on the
|
||||
false one. THEY MUST BE RE-SYNCED WHENEVER THAT COPY CHANGES — round 1's
|
||||
set went stale within the hour, when the audit rewrote three of the four
|
||||
paragraphs they were copied from. The rest are near misses on the same
|
||||
subject: the pattern is anchored on five strings that reached `dist/`, not
|
||||
on the ideas in them, so a truthful sentence about administrative access
|
||||
must pass. */
|
||||
'Two people can. The table sits in an Amazon Web Services account that also runs systems unrelated to this practice, and that account has two administrators — me, and one other person who administers it with me.',
|
||||
'No one outside those two people has been granted access to the table, and that is measured rather than assumed: every user and every role in the account was simulated against this table, and the only ones that come back able to read it lead to those same two people.',
|
||||
'Two things in the system are narrower than I am, and they are worth stating because they are the part you cannot check for yourself.',
|
||||
'No one else is sent it. There is no CRM, no mailing list and no analytics on the submission.',
|
||||
'Which means there are three copies, not one. The notification in my own mailbox, which is on Google Workspace — so Google holds a copy of whatever you sent me, and so does anyone who can reach that mailbox.',
|
||||
/* The replacement summary, which must not trip the third-surface alternative. */
|
||||
'Which means there are three copies, not one. The record in the table, which the two people above can read.',
|
||||
'The table is reachable by the function that writes to it.',
|
||||
'Two accounts hold administrative access to the AWS account, and the function that writes to the table cannot read it.',
|
||||
'Nobody else has access to my mailbox.',
|
||||
|
||||
Reference in New Issue
Block a user