Development record
ProbeIdentity misses the identity scope the environment sets, so a CI or direnv persona is committed in clear. The probe unions every scope git config --get-all reports, but GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL are an identity source git config never lists: they outrank every config file when a commit is written, and CI runners, direnv profiles and rebase wrappers set them routinely. An identity that authors the caller's commits but is absent from the matcher set is stored verbatim by every write-time redactor (capture, memory, history, intent), which is the same class the three GHSA identity advisories reported for a repo-local persona. Evidence: scanner.ProbeIdentity in internal/adapter/scanner/identity.go reads only git config. The fix is to fold those four environment values into the Other* sets, read once in ProbeIdentity and subject to the same guards the config values are, proved by a test that sets them in-process and asserts the address is redacted.
ProbeIdentity misses the identity scope the environment sets, so a CI or direnv persona is committed in clear. The probe unions every scope git config --get-all reports, but GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL are an identity source git config never lists: they outrank every config file when a commit is written, and CI runners, direnv profiles and rebase wrappers set them routinely. An identity that authors the caller's commits but is absent from the matcher set is stored verbatim by every write-time redactor (capture, memory, history, intent), which is the same class the three GHSA identity advisories reported for a repo-local persona. Evidence: scanner.ProbeIdentity in internal/adapter/scanner/identity.go reads only git config. The fix is to fold those four environment values into the Other* sets, read once in ProbeIdentity and subject to the same guards the config values are, proved by a test that sets them in-process and asserts the address is redacted.
Grounds
- pursued: the environment is the identity scope that actually authors the commits and the one no config listing reports, so a CI or direnv persona was the last scope the union missed; added as others rather than as the effective value so reading it cannot be turned into a config-injection displacement
Frontmatter
| id | iss-2609020128539293 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | major |
.abcd/work/issues/resolved/iss-2609020128539293-probeidentity-misses-the-identity-scope.md
open on GitHub ↗ · commit history ↗