Context
PR #TBD added scripts/check-wiki-private-presence.ts and a workflow step in merge-data.yaml that blocks the promotion PR when private repo wiki pages exist. When a leak is detected, the script prints the matched filenames to stderr.
The filenames have the form owner--repo.md — they ARE the canonical names the privacy posture is supposed to keep out of public artifacts. Public workflow logs in GitHub Actions are visible to anyone who can read the repo, so the failure output re-leaks the information.
This was an explicit trade-off in the plan: 'the filename IS the leak so printing it to stderr is necessary for the operator to remediate.' But two reviewers (project-standards P1, adversarial P2) flagged it as inconsistent with the project's privacy posture.
Options
- Redact to opaque identifiers + structured remediation. Print
node_id, count, and a generic 'private wiki leak detected — see operator-only log' line. Operator runs scripts/resolve-private.ts (Unit 11) locally to map node_ids back to names. Cost: extra operator step; benefit: no public-log re-leak.
- Print to a privileged log destination. Use GitHub Actions
::warning:: or ::add-mask:: annotations that aren't visible in the public log surface. Investigate which APIs preserve operator visibility while suppressing public surface.
- Accept the trade-off explicitly. Document in
metadata/README.md that the gate's failure output intentionally exposes canonical names because the leak has already happened (the file exists on data and is one merge away from being public). Add a comment in the script noting the trade-off and link to this issue.
Option 1 is the strongest privacy posture and lines up with Unit 11's design. Option 3 is honest but trades correctness for operational simplicity.
Acceptance
- Decision recorded in PR/commit message
- Implementation matches the chosen option
- If options 1 or 2: stderr output during failure contains no
owner--repo strings
- If option 3: explicit doc + code comments
Surfaced by ce:review on feat/private-merge-data-wiki-block (round 1 P1 #4 and P2 finding #6).
Context
PR #TBD added
scripts/check-wiki-private-presence.tsand a workflow step inmerge-data.yamlthat blocks the promotion PR when private repo wiki pages exist. When a leak is detected, the script prints the matched filenames to stderr.The filenames have the form
owner--repo.md— they ARE the canonical names the privacy posture is supposed to keep out of public artifacts. Public workflow logs in GitHub Actions are visible to anyone who can read the repo, so the failure output re-leaks the information.This was an explicit trade-off in the plan: 'the filename IS the leak so printing it to stderr is necessary for the operator to remediate.' But two reviewers (project-standards P1, adversarial P2) flagged it as inconsistent with the project's privacy posture.
Options
node_id, count, and a generic 'private wiki leak detected — see operator-only log' line. Operator runsscripts/resolve-private.ts(Unit 11) locally to map node_ids back to names. Cost: extra operator step; benefit: no public-log re-leak.::warning::or::add-mask::annotations that aren't visible in the public log surface. Investigate which APIs preserve operator visibility while suppressing public surface.metadata/README.mdthat the gate's failure output intentionally exposes canonical names because the leak has already happened (the file exists ondataand is one merge away from being public). Add a comment in the script noting the trade-off and link to this issue.Option 1 is the strongest privacy posture and lines up with Unit 11's design. Option 3 is honest but trades correctness for operational simplicity.
Acceptance
owner--repostringsSurfaced by ce:review on
feat/private-merge-data-wiki-block(round 1 P1 #4 and P2 finding #6).