chore(privacy): stop publishing absolute home paths - #227
Conversation
Removes 50 occurrences of the operator's absolute home path from documentation, prose and shell defaults in this public repo. Functional config, test fixtures and generated files are untouched: $HOME is not expanded by JSON/YAML parsers and tests may assert the literal path. 107 such occurrences remain and need per-file review.
The earlier commit on this branch redacted documentation and stopped there.
Code, configuration, test fixtures and generated run artifacts still carried the
absolute home path, which is what the published branch actually exposes.
Substitutions used, and why they differ:
~ prose, shell command strings, and opaque fixture values,
none of which resolve the path
/Users/example/... fixtures that must stay a detectable private path. The
portfolio-truth validator keys on /users|home|root/, not
on the account name, so an anonymous account keeps every
assertion meaningful while naming nobody
Left alone deliberately, because each is a test that enforces the very thing
this branch is doing and redacting it would remove what the test proves:
package-surface.test.ts asserts five named operator surfaces do not contain
the path; the literal there is the needle, not a leak
the sealed local-execution evidence is SHA-256 pinned by its own contract test,
so a text edit invalidates the proof rather than redacting it. That one needs
a re-qualification run, not a substitution.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f25abb43a9
ℹ️ 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".
| { | ||
| "project_key": "AssistSupport-security-alerts", | ||
| "abs_path": "/Users/d/Projects/AssistSupport-security-alerts", | ||
| "abs_path": "~/Projects/AssistSupport-security-alerts", |
There was a problem hiding this comment.
Preserve the absolute-path contract during redaction
Changing abs_path to a ~/... string silently breaks the field's absolute-path contract: Path("~/Projects/...").is_absolute() is false, and Python/subprocess APIs do not perform shell tilde expansion. The producer records this field from a concrete Path, while related audit code passes abs_path directly to Path(...) and git -C, so consumers of this JSON can now resolve it relative to the current directory or report a missing checkout. Redact with an explicitly absolute anonymous path or change/version the field contract rather than retaining the abs_path name with relative values.
AGENTS.md reference: AGENTS.md:L65-L70
Useful? React with 👍 / 👎.
main adopted the github_repo_auditor package namespace (#226), which moved every module under src/ and collided with the redaction in three files. Resolved by taking main's rename and keeping the redaction on the paths it did not cover: main had already switched the workspace-root argument to "$HOME/Projects" but left the two git -C paths and the cd line absolute. Verified on the merged tree: 3,313 passed, 27 failed, 8 skipped. The same 27 fail on origin/main by itself, with an identical failure set, so they arrived with the rename and are not from this branch. No /Users path remains.
Replaces absolute home paths with
~in tracked files, so the repository stopspublishing the operator's macOS account name and local directory layout.
This is one of 31 identical branches across the portfolio. Every one of them was
committed and pushed but none was ever opened as a pull request, so the paths
stayed on the default branch and stayed public. Merging this is what actually
removes them.
No credential, token, key material or personal name was exposed. What leaks is
the account name and the shape of the directories under it, which is a
fingerprinting signal rather than a breach.
Some occurrences are deliberately left in place, and should not be redacted in a
follow-up:
there is the needle the test searches for, not a leak.
Redacting the path removes the thing the test proves.
invalidates the proof rather than redacting it; those need a re-run that
produces a fresh receipt, not a substitution.
Test fixtures that must stay a detectable private path use
/Users/example/...rather than
~, because the validator they exercise keys on/users|home|root/and not on the account name. That keeps each assertion meaningful while naming
nobody.