You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Push-path private-text scan let #5159 through with internal names in added lines, filenames and a commit trailer #5265
The private-text scan on the push path passed #5159 at 8f7e79a. A reviewer found the leak by grep. The scrub commit is 81745ab.
What the scan missed:
Added lines (~900): machine and cell names, agent session ids, and local absolute paths. They sat in evidence rows, receipts, specs, test fixtures and one shell script's default host list.
Filenames: two added files carried a machine name or a session id in the path. A content-only scan never sees these.
Commit messages: one commit carries a session-id trailer. The merge queue squashes with COMMIT_MESSAGES, so a message reaches main whatever the PR body says.
Fix wanted, in the push-path scan:
Scan the paths of added and renamed files, not just their content.
Scan every added line in every file type, .jsonl and .json evidence included.
Fail on any hit and print the count. Never let | tail decide the exit status.
Out of scope here, noted for the owner: crates/aprender-review-experiment/src/admission.rs on main already holds a cell table with the same kind of names, from before #5159. It needs its own scrub and a matching contract change.
Which scan. Main has no tracked push-path private-text scan: I searched scripts, workflows, the repo's git hooks and the Makefile. The only scan in use is a local, untracked privscan.sh FILE..., which greps a fixed pattern list over the files it is given. So the table tests that scanner under the three ways a push path could feed it. Each row makes one commit in a throwaway repo. 1 means the scan refused.
case
want
content of changed files
git diff base..head
diff + --name-only -M paths + git log --format=%B
added line naming a machine
1
1
1
1
added .jsonl evidence row naming a machine
1
1
1
1
new file whose path names a machine, neutral content
1
0
1
1
file renamed to a path naming a machine
1
0
1
1
commit-message trailer naming a machine
1
0
0
1
merge-commit message naming a machine
1
0
0
1
added line with an agent session id (<name>-<xx> [<hex6>])
git diff text catches paths (from its +++ b/ and rename to headers), but no commit message.
The full invocation catches everything except session ids. The pattern list has no session-id pattern at all, so they pass however the scan is fed. That is the one row still red under the full invocation, and the fix needs a pattern plus a case for it.
The squash uses COMMIT_MESSAGES, so log --format=%B over base..head, merge commits included, is required and not optional.
One conflict for the fix's quorum to settle before code: the working brief requires an Agent: <session> trailer on every commit, and that trailer reaches main through the squash. A session-id pattern would refuse every compliant commit. Either the trailer carries a non-private name, or the scan exempts that one trailer form. That is a rule change, not a code choice.
The script that builds and runs this table stays local for now. Its fixtures name real machines, and a public copy would itself be a leak. In the fix PR the fixtures will use a planted token injected into the pattern list.
Folded into #2876 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it.
Activity
noahgift commentedon Oct 14, 2026
Case table for 0.72. The fix follows it, in 0.73.
Which scan. Main has no tracked push-path private-text scan: I searched scripts, workflows, the repo's git hooks and the Makefile. The only scan in use is a local, untracked
privscan.sh FILE..., which greps a fixed pattern list over the files it is given. So the table tests that scanner under the three ways a push path could feed it. Each row makes one commit in a throwaway repo.1means the scan refused.git diff base..head--name-only -Mpaths +git log --format=%B.jsonlevidence row naming a machine<name>-<xx> [<hex6>])What it shows:
git difftext catches paths (from its+++ b/andrename toheaders), but no commit message.log --format=%Boverbase..head, merge commits included, is required and not optional.One conflict for the fix's quorum to settle before code: the working brief requires an
Agent: <session>trailer on every commit, and that trailer reaches main through the squash. A session-id pattern would refuse every compliant commit. Either the trailer carries a non-private name, or the scan exempts that one trailer form. That is a rule change, not a code choice.The script that builds and runs this table stays local for now. Its fixtures name real machines, and a public copy would itself be a leak. In the fix PR the fixtures will use a planted token injected into the pattern list.
noahgift commentedon Oct 14, 2026
Folded into #2876 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it.
Agent: aprender-clerk