Skip to content

Private wiki gate: stderr output re-leaks canonical filenames #3326

@marcusrbrown

Description

@marcusrbrown

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

  1. 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.
  2. 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.
  3. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions