Repository navigation
Scan the pull request description for home paths and credentials - #991
seathatflowsinourveins wants to merge 10 commits into
Conversation
|
Dependency limit exceeded — report not shown. This pull request scan exceeded the 10,000-dependency limit applied to this scan, so the results are incomplete and may be inaccurate. To avoid reporting false positives, Socket has not posted a report. Upgrade your plan to raise the dependency limit and get complete reports, or view the partial scan in the dashboard. Socket is always free for open source. If this is a non-commercial open source project, contact us to request a free Team account. |
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: de4eed8ffc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d81969ddcd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
d81969d to
fc60da9
Compare
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fc60da90a1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
fc60da9 to
4e5ef13
Compare
The command center's correction #145 found the host account name, inside absolute home paths, in eleven public PR bodies and comments. The required sota-sources job (both byte-identical copies) now also checks the current PR body against scripts/validate.py's home-path and credential rules, written in JavaScript, and fails closed naming only the rule ids. ~/, <user> and the example home pass. A test runs every rule against its Python original on a shared corpus; the new tests fail on the job before this change. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…efuse odd bodies The co-op's GPT read at 0759532 found three gaps, closed in both copies of the sota-sources job: - The body is refused before it is read when it is not text, is longer than 65,536 characters (the API's own "maximum is 65536 characters"), holds a lone surrogate, or holds a control character other than tab, LF or CR; the failure names one fixed rule id. - The rules also run over the body's percent, JSON and HTML decodings and its rendered Markdown text, each decoded once. The rendered form drops only GitHub's inline HTML elements and paired emphasis, so a <name> placeholder or a Users/*/ glob stays as written. A gate-only macos-user-path rule catches /users/<name> in any other case. - The rules spell out Python's str-pattern classes (Unicode \w, \s, boundaries, $, and re.IGNORECASE's extra letters) under the u flag, without the i flag. A new test compares each rule with scripts/validate.py over 156,277 code points in 69 templates. Every open pull request's live description gets the same outcome as before. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Codex's GitHub review of de4eed8 (4 P1, 3 P2), in both copies of the job: - Correction: GitHub stores descriptions over 65,536 characters (its REST update keeps up to 262,144 UTF-8 bytes; #786 has 75,726). The bound is the gate's own, 262,144 code points. - The four decoders compose: every order of every subset, each at most once along a chain (65 forms). - validate.py and the gate take gitleaks's private-key header form, so PKCS #8 ENCRYPTED and OpenPGP key blocks are caught. - The gate does not read the graph-id form inside an http(s) URL; the graph-id name runs at most 256 characters to -code- in both scans (a quadratic 21-93 s run is now 0.05-0.1 s). - macos-user-path takes any number of leading slashes. - A test fails when validate.py gains a rule the gate does not carry. - Publication order is answered in the record: the gate is the backstop; prevention is scanning before gh pr create or edit. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…bels The co-op's GPT read of fc60da9 (2 P2), in both copies of the job: - The graph-id URL exemption covered any http(s) URL, so a graph id behind a loopback or localhost URL passed. It now covers only the path of a public code host's URL (an allowlist, lower case, up to four subdomain labels, stopping at : @ ? #), so loopback, localhost, private-address and unlisted hosts stay caught. - Link and reference labels admitted '[', so 262,144 unmatched '[' gave no verdict within 125 s. Labels now hold no bracket (CommonMark); that body takes 0.16 s, and 21 adversarial shapes at the bound at most 0.26 s. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…k decoder The command center's Claude read at 4e5ef13 (B3 and B4 ruled privacy P1s): - B3: the graph-id exemption covers only a repository name, the segment after one owner segment of a listed code host's URL that starts its token. - B4: personal home path, in validate.py and both copies, reads \\wsl$\, \\wsl\ and \\wsl.localhost\<distro>\home\<name>, JSON-escaped too (MicrosoftDocs/WSL@a1473a69 filesystems.md:22, :34; release-notes.md:24, :76, :145). - B1: the body guard admits tabs and line breaks (Bidi_Class B), so #1003's mirror test passes again. - B2: the link decoder's parentheses are runs that cannot overlap; 35 adversarial shapes at the bound take at most 0.25 s each. The new tests fail on 4e5ef13 (34 failures, 1 error); 13 of 13 weakened copies fail them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…e code-host exemption The command center's fix-round-2 ruling on its micro at 752d961 (M1, M2 and Codex's T8 privacy P1s; the class recurring, rule 4): - M1, T8: the rules also read a projection of the body, HTML comments removed (CommonMark 0.31.2 spec.txt:8986) and the 234 Cc, Cf, Zl and Zp characters but tab, LF and CR removed (Unicode 17.0, Node 24.21's); the decoders compose over it too, each output projected again. - M2: the code-host URL exemption is removed in both copies. - UNC: device paths (\\?\UNC\, \\.\UNC\), either slash, longer and spaced distribution names, and <distro>\mnt\<drive>\Users\<name>, in all three copies (dotnet/docs@8a189e07 file-path-formats.md:94-95, :155, :206). - Links: a title on the next line, or holding an unmatched parenthesis, is decoded again by a second linear pattern. - M3 and the :34 citation corrected; timing restated as measured. The new tests fail at 752d961 (183 failures); 12 of 12 weakened copies fail them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
6a06673's comment named tools/sota-sources/verify_sources.py inside the job's script, so the OpenHands push gate's derivation (push_gate.py derive_ci_protected, names_in_text over run and script text) took the mirror as a CI-named file, and its 15 reads broke the advisory baseline test in validate-shard-2. The comment now names the mirror without a path; the record keeps the path. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…default-ignorables, NFKC The command center's terminal adjudication at e15d125 (N1-N3 privacy P1s, the class's third recurrence, rule 4), in both copies: - N1: the projection removes every raw-HTML construct of the GFM grammar (github/cmark-gfm@587a12bb test/spec.txt:9360-9431) from the body as written, a backslash-escaped '<' being text, by one linear scan; a construct standing alone between separators (a <user> placeholder) stays. - N2: named references come from the HTML5 table cmark-gfm pins (src/entities.inc), limited to the 297 names whose projected text is ASCII or nothing; a test regenerates the subset from the pinned fixture. - N3: every Default_Ignorable_Code_Point is removed (UCD 17.0.0). - Width forms: NFKC. - S1: the description's stale sentences are corrected. The gate now guarantees that no value spelled with its own characters is published, whatever is inserted between them; look-alikes are a P2 follow-up. The new tests fail at e15d125 (51 failures, 2 errors); 11 of 11 weakened copies fail them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
e15d125 to
30f2e00
Compare
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 30f2e00590
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…for home paths only The command center's addendum 01 at e15d125, from the GPT read at 30f2e00: the standalone-construct exception shielded a comment between whitespace, so "Bearer <!--x-->" before a 40-character token passed while GitHub shows the token whole. Two projections now: the credential rules read the body with every raw-HTML construct removed; the home-path rules keep only a tag standing alone between separators (the placeholder form), and every comment, processing instruction, declaration and CDATA section is removed from both. The new tests fail at 30f2e00 (12 failures) and pass here; 3 of 3 weakened copies fail them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
@codex review |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
The GPT read and the command center's Claude micro at 4360b9e: - Codex's threads 4246122618, 4246122624 and 4246122650, and the micro's 2a to 2d: a nested link destination, a defined shortcut reference, nested emphasis, escaped or emphasized underscores in a token, emphasis around a separator, a tag before a forward-slash profile name and a reference outside the 297-name subset each showed a value whole on GitHub and passed both copies. The job's Markdown decoder is now a port of github/cmark-gfm@587a12bb's inline parser for the text it displays (src/inlines.c, extensions/strikethrough.c), with all 2,125 named references and the block structure approximated; the markup projection and its placeholder exception are gone. - Threads 4246122631 and 4246122640, in scripts/validate.py and both copies: an account name is any run of word characters, and a bearer value takes RFC 6750 2.1's b64token alphabet with '=' padding. - The guarantee, the entity premise and the emphasis wording are corrected in the record. A 3,732-body fixture holds the pinned renderer's verdicts; a test rebuilds the renderer from the mirror where gcc is present. The new tests fail on 4360b9e (35 failures) and pass here. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…oice, PR descriptions read back after publishing (#1169) * Gap ledger: name native idle compaction, record enableArtifact false, read PR descriptions back From the practice gap ledger of 2026-10-15 (rows C3-0006, A3-0031 and B2-0004, each ruled ADOPT and confirmed by the co-op's Codex re-check or by the command center's adjudication): - context-compaction (C3-0006): compacting before an idle gap is native since 2.1.299. Idle compaction compacts an interactive terminal conversation on the one-hour cache TTL with 200,000 or more tokens about 54 minutes after its last request, before the cache expires (CHANGELOG.md:97-98 at anthropics/claude-code@94506ff; settings-reference.md:2964-2983 at 2.1.300). The notes name it and keep it on, and the slot's mapping of the compact-before-an-idle-gap practice names it. The idleCompaction disposition stays declined (no override); its stale rollout reason now cites the 2.1.300 docs and the command center's ruling of 2026-10-14 (leave it unset; false only for one session). - settings-permissions (A3-0031, ledger slot new): enableArtifact false, read from NativeStack2604's user settings by an exact-key grep, is recorded as a host choice in a new claude:setting:enableArtifact disposition row (enabled, scope NativeStack2604, carrier host user settings). The template is unchanged: re-applying it keeps keys it does not mention (tools/adoption/apply_claude_settings.py:323-329). - pr-review-pre-cue (B2-0004, ledger slot new): a PR description goes out from a temporary file with --body-file and is read back with gh pr view --json body before the PR is reported or cued. Measured 2026-10-11 on #991: updates over 262,144 UTF-8 bytes got HTTP 200 and GitHub kept the old description. The catalog-freshness propose step already wrote its description to a runner temp file and passed --body-file; it now reads the published description back and stops before reporting the PR when the two differ. #727's stored description is byte-identical to what the step writes for its lane (read 2026-10-15), and gh passes the file's bytes unchanged (cli/cli v2.102.0 create.go:336-341, edit.go:176-181). Tests: tests/test_native_practice_ledger_rows_tokeff_new.py, 6 tests, 5 failed on the base (the page render pin passed); in tests/test_catalog_freshness_propose.py two tests drive the step's shell with a synthetic gh that keeps or drops the description, and both failed on the base in all 5 subtests. Native-practice modules: 106 OK (3 skipped). The 55 modules that read the changed files: 2,665 tests, 2,606 passed, 30 skipped; the 29 others (25 tests.test_claude_usage_metrics errors, prometheus_client not installed on this host; 4 tests.test_upstream_surface_watch CachedArtifactTests failures, this host's cached upstream artifacts) fail the same way on the base. validate rc 0. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Gap ledger tokeff-new fold: read-back failure stops the step, idleCompaction default-on, three neighbour rows The command center's FULL read of #1169 at bf06685 passed with no P1. It ruled ONE fold, to be re-read as a delta. - P2-1: tests/test_catalog_freshness_propose.py:1057's synthetic gh can now fail the read-back with no output, or return a different description. Two tests assert that the step exits 1 without reporting the PR, on the create and update paths. The propose step in .github/workflows/catalog-freshness.yml now stops on a failed read-back with its own message; before this commit it already exited 1 there, but silently. - P2-2: catalogs/foundation/upstream-surface-dispositions.json:3714 moves claude:setting:idleCompaction from declined to default-on. The host leaves the native default alone (docs/decisions/2026-10-06-harness-context-budget-refresh.md:25), and the dispositions rules (:13-14) call that default-on. The pin at tests/test_native_practice_ledger_rows_tokeff_new.py:53 follows. - P3: new rows for three keys: - claude:setting:disableArtifact, not-applicable (a deprecated alias of enableArtifact; settings-reference.md:5354-5360); - claude:env:DISABLE_AUTO_COMPACT, default-on (env-vars.md:450); - claude:env:CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS, default-on (env-vars.md:323). Fail-first, with this commit's tests on git archive exports: - At base 9cf1225, both read-back cases report the PR (exit 0). - At bf06685, the failed read-back exits without its message. - The new disposition test fails at bf06685 (declined), and the new rows' test errors there (no rows). After: the two modules, tests.test_catalog_freshness_propose (91 tests) and tests.test_workflow_hardening (118) pass. zizmor --offline reports no findings (3 suppressed), and validate rc is 0. Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
Scope
sota-sourcesjob also scans the pull request description for an absolute home path or a credential-shaped string, and fails closed naming only the rule id. It detects a repeat of the command center's privacy correction Blind lanes round 2: sanitized export, receipt aliases, two-family adjudication #145 (home paths had reached eleven places in public PR bodies and comments, all masked since) and keeps such a pull request from landing. It does not prevent the leak: GitHub publishes a description before any check runs, and the gate reads only the current description, not titles, comments or the edit history.83cec12ee. Rebased fromc4f499073onto0f1537841, and with the terminal commit onto83cec12ee, each time for a manifest-only conflict (withoutmanifests/evidence.jsonevery commit's patch-id is identical;e15d1259is now260803e1, so the delta then called terminal is260803e1..30f2e005;4360b9e2andd9eb2691follow it).lane:foundation..github/workflows/pr-metadata.ymland.github/workflows/sota-sources-gate.yml(the same job, byte for byte),scripts/validate.py(the private-key, graph-id, home-path and bearer rules),tests/test_sota_sources_gate.py,tests/test_validate.py,tests/fixtures/cmark-gfm-rendered-rules-587a12bb.json,docs/decisions/2026-09-25-top-rule-sota-sources.md,manifests/evidence.json.How:
scripts/validate.py'sPRIVATE_CONTENT, written in JavaScript in the job's github-script: personal home path, Windows user path, encoded home path, and the Hugging Face, GitHub, Tavily, API-secret, private-key and bearer-credential rules, plus a gate-only macOS home rule in any case.~/paths,<user>where GitHub shows it (escaped as\<user>or in a code span; GitHub hides a bare tag, so a forward-slash profile with one is refused) and the documentedexamplehome pass. A WSL home through its Windows UNC path (\\wsl$\,\\wsl\,\\wsl.localhost\, also as a device path\\?\UNC\...or\\.\UNC\..., in either slash, and JSON-escaped) is a home path in both scans.587a12bb(sinced9eb2691); each chain is read as written and with every Cc, Cf, Zl, Zp and Default_Ignorable_Code_Point character but tab, LF and CR removed and NFKC applied.Review rounds:
07595323(three P2s) was fixed inde4eed8f: body guards, decoded forms, Python's Unicode classes spelled out.de4eed8f(four P1s, three P2s) is answered infc60da90:d81969ddhad claimed a 1,048,577-character body was stored, from that 200 answer; a GET read-back corrected it.)ENCRYPTEDand OpenPGP key blocks.6a06673d: the gate reads it everywhere, asvalidate.pydoes). The graph-id name is bounded to 256 characters in both scans: a quadratic run of 21 to 93 s now takes 0.05 to 0.1 s.validate.pygains a rule the gate does not carry.gh pr createorgh pr edit.d81969dd(one P1, one P2): T8, a value split by an HTML comment, which GitHub hides, passed; fixed in6a06673d(the projection). T9, an invalid character reference such as�inside a path, is decoded to nothing, so contrived text is refused though GitHub shows U+FFFD there: a fail-safe false positive, kept, in Follow-ups.fc60da90(two P2s): T10, a graph cache path carried in an http(s) URL was exempt; fixed in4e5ef13d(the exemption then covered code hosts only) and moot since6a06673dremoves it. T11, an unresolved reference link such as[<part>][missing]is collapsed, so contrived text is refused though GitHub shows it literally: fail-safe, kept, in Follow-ups.fc60da90(two P2s) is answered in4e5ef13d:: @ ? #. Loopback, localhost, private-address and unlisted hosts stay caught. (752d9618narrows it to a repository name.)[, so 262,144 unmatched[gave no verdict within 125 s. Labels now hold no bracket, as in CommonMark. That body takes 0.16 s, and 21 adversarial shapes at the bound took at most 0.26 s each; that set missed an unclosed link of whitespace (below).4e5ef13d(fix3): ACK, no blocker.4e5ef13d(CHANGES_REQUESTED; its adjudication ruled B3 and B4 privacy P1s) is answered in one commit,752d9618:https://github.com/inside a local URL or its query, as a link destination, after a comma or deeper in the path passed both copies. It now covers only a repository name, the segment right after one owner segment of a listed host's URL, and that URL must start its token. The read's 5 bodies, a pipe, a table cell, a semicolon and a comma now fail both copies, as invalidate.py; a linked or autolinked repository named like a graph id still passed (until6a06673dremoved the exemption).\\wsl.localhost\<distro>\home\<name>,\\wsl$\...,\\wsl\...and the JSON-escaped form are nowpersonal home pathinvalidate.pyand both copies, cited to Microsoft's "Working across file systems" and the WSL release notes. The 19 tracked lines that write the form, all masked, stay clean.validatered). Every other C0 and C1 control is still refused; a test runs all 65 in both copies.[a](followed by spaces, line feeds or tabs up to the 262,144-code-point bound gets a verdict at once; at4e5ef13d, 65,536 spaces gave none within 130 s. 35 adversarial shapes at the bound took at most 0.25 s each in my run; the command center's micro measured 0.26 to 0.28 s at a load of about 26, so6a06673drestates the bound as measured.4e5ef13d(34 failures, 1 error), and 13 of 13 weakened copies fail them.752d9618(CHANGES_REQUESTED; the adjudication ruled M1, M2 and Codex's T8 privacy P1s, and the class recurring, rule 4) is answered in6a06673d, fix round 2 of 2, and a comment-only second commit,e15d1259(the M3 path in the job's comment made the OpenHands push gate count the mirror's reads and turned the requiredvalidatered; the command center's go):752d9618let 143 through. Clean bodies with these characters still pass.(,',",[,<or>still exempted a graph id; now the gate reads the graph-id form asvalidate.pydoes, and a repository named like one is refused by both.\\?\UNC\,\\.\UNC\), either slash, a distribution name with a space or up to 255 characters, and<distro>\mnt\<drive>\Users\<name>, in all three copies (.NET's file path formats). The B4 citation now namesWSL/filesystems.md:34only.752d9618stopped decoding (a title on the next line, a title holding an unmatched parenthesis) are decoded again by a second, linear link pattern.tools/sota-sources/verify_sources.py, and it counts the four admitted line breaks as section content; the record names the path, and sincee15d1259the job's comment names the mirror without it.752d9618(183 failures), and 12 of 12 weakened copies fail them. Codex's threads T1 to T11 are answered and resolved.752d9618..e15d1259(fix5): ACK, no blocker; its 7 P3s are in Follow-ups.e15d1259(CHANGES_REQUESTED; three new privacy P1s, the class's third recurrence, rule 4) is answered in one commit,30f2e005(called terminal then;4360b9e2andd9eb2691follow it). Each enumeration is replaced by the set a specification defines, in both copies:<font>,<input>, CDATA, a processing instruction) split a value, and GitHub drops it. The projection removes every raw-HTML construct of the GFM grammar (github/cmark-gfm@587a12bbtest/spec.txt:9360-9431), from the body as written, a backslash-escaped<being text, by one linear scan. A construct standing alone between separators, such as a<user>placeholder in a path, is kept, since removing it would join the separators around it.­,‍,_,$) split or completed a value. Names are decoded from the HTML5 table as cmark-gfm pins it (src/entities.inc, 2,125 names), limited mechanically to the 297 whose text after the character projection is ASCII or nothing; a test regenerates that subset from a pinned fixture of the table.\p{Default_Ignorable_Code_Point}matches the same set).d9eb2691): a value spelled with its own characters is refused when it shows whole in the body as written, in the text the pinned renderer's inline parser displays for it (block structure approximated as the record states), or in their decodings. (This said "whatever is inserted between them" untild9eb2691; the GPT read and the micro at4360b9e2disproved it.) What it does not: a look-alike that substitutes a character (a division slash, a Cyrillic letter, another UTS Attach native command returns and usable dashboard evidence #39 confusable); a skeleton projection is a P2 follow-up.e15d1259(51 failures, 2 errors), and 11 of 11 weakened copies fail them.30f2e005(fix6, CHANGES_REQUESTED: one new P1 the terminal commit introduced, six P3s) is answered in one commit,4360b9e2, as the command center's addendum 01 ate15d1259accepted:x Bearer <!--x-->and a 40-character token was refused at260803e1and accepted at30f2e005, while GitHub hides the comment and shows the token whole; a tag, a processing instruction or CDATA in that place passed at both heads.Bearerand its token and at the start of every ported token's value (ghp_,github_pat_,sk-ant-,hf_,tvly-), and a comment, processing instruction, declaration or CDATA between the separators of a Windows profile. They fail at30f2e005(12 failures) and pass at4360b9e2; the placeholder controls pass on both; 3 of 3 weakened copies fail them.AKIAandxoxprefixes have no ported rule here (the stated scope), so they are not among them.4360b9e2(fix7, CHANGES_REQUESTED: Codex's five open threads, each a P1) and the command center's Claude micro at4360b9e2(CHANGES_REQUESTED: four new shape families and the guarantee) are answered in one commit,d9eb2691, under the command center's process for this class (the verdict files are the input). Each was a shape the hand-written Markdown decoder did not model, so the fix matches the text the pinned renderer shows instead of adding to the list:587a12bb's inline parser for the text it displays (src/inlines.c: escapes, code spans, references, autolinks, raw HTML, links and images, emphasis with the flanking rules and the rule of three;extensions/strikethrough.c), with the block structure approximated (fenced code, container markers, table cells, emphasis matched by paragraph and by line).src/inlines.c:1074-1077), 4246122624 (a defined shortcut reference: the reference map,:1209,:1224) and 4246122650 (nested emphasis); the micro's 2a (escaped or emphasized underscores in a token), 2b (emphasis around_or a separator), 2c (a tag before a forward-slash profile name: GitHub hides the tag, so the placeholder exception is gone) and 2d (all 2,125 named references now; the "no other name" premise was false).scripts/validate.pyand both copies: an account name of any word characters (Unicode letters and digits too), and a bearer value in RFC 6750 2.1'sb64tokenalphabet with=padding (rfc6750.txt:252-254). Over every tracked file the widened rules add no match.4360b9e2(35 failures) and pass atd9eb2691; 14 of 14 weakened copies fail them (one more, taking one emphasis delimiter at a time, shows the same text and is not counted).4360b9e2run back to back, on a 64-CPU host at a load of about 16.xoxis in Follow-ups; the timing ratio is the measured one; the evidence table's timing row is this head's; the control that pinned the double-slash gap is gone (the gap stays a follow-up); the superseded weakened-copies run is noted beside the later one.Follow-ups (not in this change):
4360b9e2:secrets-credentialslayer.blueprints/runtime-workers/openhands/resolver.py:456,blueprints/native-skill-practice/p1/README.md:14), as before; 18 existing hostname lines inmanifests/evidence.json, none in the patch.30f2e005(fix6):d9eb2691(above).String.prototype.normalize(NFKC), and a link-definition locator.blueprints/runtime-workers/openhands/resolver.py:456andblueprints/native-skill-practice/p1/README.md:14.manifests/evidence.json, none in the patch.C:\Users\<x>\aliceis accepted: GitHub shows the escaped<x>, so the name is behind visible markup; a forward-slash profile behind a hidden tag is refused sinced9eb2691).catalogs/landscape/final-stack.jsonafter Move the claude-native-practice skill row to the commit that holds #1001, #1005 and #986 #1018, so it is fixed on main; recheck withpython3 scripts/final_stack.py --checkat the landing rebase.blueprints/runtime-workers/openhands/resolver.py:456andblueprints/native-skill-practice/p1/README.md:14.manifests/evidence.json.e15d1259): a division slash, a fraction slash, a set minus, Cyrillic letters inhome,Users, a graph id orghp_, and other UTS Attach native command returns and usable dashboard evidence #39 confusables substitute a character rather than insert one, so the projection does not read them; a skeleton projection from the UTS Attach native command returns and usable dashboard evidence #39 confusables data would.d9eb2691: the port shows it as text in a code span or fenced code, as GitHub does).752d9618..e15d1259(fix5, ACK):d9eb2691).blueprints/runtime-workers/openhands/resolver.py:456andblueprints/native-skill-practice/p1/README.md:14.manifests/evidence.json, none in the patch.752d9618:/ho�me/<name>/xwas refused though GitHub shows U+FFFD; T11: an unresolved reference link was collapsed, so<home>/xwas refused. Both failed safe on contrived text; settled ind9eb2691.#1003's section regex removes comments with<!--[\s\S]*?-->, which rescans from every unclosed<!--: 65,536 characters of them in the section take 0.49 s (7.8 s at the bound) on Node 24.21. Verify the code citations in a PR's SOTA sources (W1b phase A, report-only) #1003's mirror test pins that regex, so a linear form belongs with that test.PRIVATE_CONTENT(1,222 tests).4e5ef13d:\home\<name>\without a UNC prefix,\Users\<name>\without a drive,\\host\c$\Users\<name>\,~<name>/,/home//<name>/, and a Windows profile name that starts with a non-ASCII letter (caught sinced9eb2691).homeis caught since6a06673d, and a fullwidth solidus since30f2e005(NFKC); look-alikes are above._(KEY_sk-ant-...) has no word boundary in either scan, and gitleaks misses it too.AKIA, Slackxox, a genericapi_key): GitHub's partner secret scanning covers public pull request descriptions; running pinned gitleaks over the body is a research-queue candidate.cd0a2f97...,cf1a8e20...) no longer reproduce: retain the captures or cite the mdn/content commit.d9eb2691, and a maintained renderer stays in the research queue.SOTA sources
body, which the job already reads throughgithub.rest.pulls.getinactions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3(v9.0.0).scripts/validate.py,PRIVATE_CONTENTatc4f499073(lines 38-61): the rules ported.tests.test_sota_sources_gatekeeps the JavaScript and Python versions in agreement, over a shared corpus and every assigned code point.config/gitleaks.toml, ruleprivate-key, at83d9cd684c87(https://github.com/gitleaks/gitleaks/blob/83d9cd684c87d95d656c1458ef04895a7f1cbd8e/config/gitleaks.toml#L2784-L2788): the private-key header form, kept case-sensitive.\\wsl$in File Explorer. Its source and the WSL release notes at MicrosoftDocs/wsl@a1473a69:WSL/filesystems.md:34;WSL/wsl-config.md:162(\\wsl.localhost\Ubuntu-20.04\etc\wsl.conf);WSL/release-notes.md:24(Build 21354,\\wsl.localhost, and\\wsl$keeps working),:76(Build 20175,\\wsl),:145(Build 19013, the\\wsl$check is case-insensitive).unicodedata(unicodedata.bidirectional); the test computes the set.<!-->,<!--->, or<!--up to-->(spec.txt:8986; https://spec.commonmark.org/0.31.2/spec.txt, read 2026-10-12T05:21:42Z, sha256bfef4ddc...).extracted/DerivedGeneralCategory.txt(https://www.unicode.org/Public/17.0.0/ucd/extracted/, read 05:21:42Z, sha256d62e5bab...): Cc, Cf, Zl and Zp, 234 code points without tab, LF and CR; Node 24.21 carries Unicode 17.0 (ICU 78.3), and Python 3.13.16's 15.1.0 gives the same 234.8a189e07f74e50fa0e49551857c3b88d69a7630bdocs/standard/io/file-path-formats.md::94-95(\\.\UNC\and\\?\UNC\device paths),:155(forward slashes are separators),:206(names are case-insensitive).587a12bb54d95ac37241377e6ddc93ea0e45439b:test/spec.txt:9360-9431("Raw HTML": open and closing tags, comments, processing instructions, declarations, CDATA) and:5946-5950(entity references, with WHATWG'sentities.jsonas the authority);src/entities.inc(the HTML5 table, 2,125 names, sha2563932dfa6...), kept astests/fixtures/cmark-gfm-entities-587a12bb.json.DerivedCoreProperties.txt, Default_Ignorable_Code_Point (https://www.unicode.org/Public/17.0.0/ucd/, read 2026-10-12T08:01:08Z, sha25624c7fed1...), and NFKC (String.prototype.normalize, ECMA-262).tools/sota-sources/verify_sources.py:141-143(JS_LINE_BREAKS,JS_TRIM), and its test,tests/test_verify_sources.py:231(test_the_mirror_and_the_workflow_script_pass_and_fail_the_same_bodies), with the edge bodies at:203and:204.Evidence-class table
native_provengh api -X PATCHprobes on this PR, checked by GET read-back and the edit history, each restored and read back equal; receipt kept by the api-actions lane~/,<user>andexamplepasssyntheticGatePrivacyTests, which runs the job's script in node with the github-script calling conventionsynthetictest_each_rule_agrees_with_scripts_validate,test_each_rule_agrees_with_python_on_every_code_pointsynthetictest_a_body_at_the_bound_is_scanned_in_bounded_time(24 bodies at 262,144 code points, including unclosed links, comments and markup of each kind, references and width forms); andtest_a_body_built_against_the_renderer_is_scanned_in_bounded_time(29 renderer-stress bodies at the bound); Timing: on Node 24.21 the 70 adversarial shapes of the earlier rounds each get a verdict within 0.69 s at the bound (two runs, worst 0.65 and 0.69 s), against 0.77 s at4360b9e2run back to back, on a 64-CPU host at a load of about 16de4eed8f, and each of 11 weakened copies fails themsyntheticFAILED (failures=22); 11 of 11 mutants faillocal_integrationde4eed8f; 86 at 20:17Z againstfc60da90; rule ids only4e5ef13dis answered: B3's bodies, the WSL UNC forms, the guard's line breaks and an unclosed linksynthetic4e5ef13d(34 failures, 1 error) and pass at752d9618; 13 of 13 weakened copies fail themlocal_integrationtest_the_tracked_masked_wsl_homes_stay_clean(19 lines in 11 files);python3 scripts/validate.pypasses on the tree4e5ef13d's on live descriptionslocal_integration752d9618is answered: split values, glued code-host URLs, comment splits, the rarer UNC forms and two link shapessynthetic752d9618(183 failures) and pass at6a06673d; 12 of 12 weakened copies fail theme15d1259is answered: raw HTML of every kind, the HTML5 named references, default-ignorables and width formssynthetice15d1259(51 failures, 2 errors) and pass at30f2e005; 11 of 11 weakened copies fail them; the entity subset is regenerated from the pinned table by a test4360b9e2are answered: Codex's five threads and the micro's 2a to 2dsynthetic4360b9e2(35 failures) and pass atd9eb2691; 14 of 14 weakened copies fail them (one more, taking one emphasis delimiter at a time, shows the same text and is not counted)syntheticGateRendererParityTests: a 3,732-body fixture of github/cmark-gfm@587a12bb's verdicts, regenerated from a gcc build of the mirror where present; the spec harness passes 670 of 6704360b9e2's name no rule on live descriptionslocal_integratione15d1259's on live descriptionslocal_integration752d9618's on live descriptionslocal_integrationLocal commands run
Decision record
docs/decisions/2026-09-25-top-rule-sota-sources.md, "PR-body privacy scan (2026-10-10)", "After the first review", "After Codex's review (2026-10-11)", "After the second GPT read (2026-10-11)" "After the command center's Claude read of4e5ef13d(2026-10-12)", "After the command center's Claude micro of752d9618(2026-10-12, fix round 2)" "After the command center's Claude micro ofe15d1259(2026-10-12, the terminal commit)", with its addendum 01 and addendum 02 (d9eb2691).🤖 Generated with Claude Code