fix(ci#2929/RC): REDACT raw CP/SSM response in staging redeploy-fleet (Rule 8 — #2946 split, redaction only) #2952
Reference in New Issue
Block a user
Delete Branch "fix/2946-redact-only"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #2946 (the redaction half only) — manifest pinning lands in #2939
PM 16:45Z direction: #2946 split — keep ONLY the redeploy-tenants-on-staging.yml redaction (the genuinely-needed Rule 8 fix). DROP the 3 duplicate pinning files (manifest.json + clone-manifest + manifest_pinning_test) — #2939 is the canonical carrier for those.
This PR is the SPLIT-OUT redaction commit. The 5 other commits on the original #2946 branch (the manifest-pinning carrier:
e2e48a30,08e9033e,40a0f898,e4a38404,4b97073e) are NOT in this branch — they live in #2939 already.What this PR does
cat | jq . || catleaked the raw ValidationException into the persistent CI log on 2026-06-15 staging run 509031, masking the actual cause). Print ONLY: HTTP status code, a count, and a success/failure boolean. Per-tenant details (with the .error field redacted to a boolean) go to the GITHUB_STEP_SUMMARY for operator visibility.\(.error // "-")printed the raw error string, including SSM ValidationExceptions with operator-sensitive values, into the persistent CI log).Both redactions land in the same commit because they're mechanically paired (the runner-log REDACTED_BODY shape is deliberately aligned with the GITHUB_STEP_SUMMARY per-tenant table shape so an operator can correlate the two views).
What this PR does NOT do (lands via #2939)
Run
Deploy-staging on PR #2946 branch (per .gitea/workflows). Expect: same green as #2946 originally, with the Rule 8 redaction in effect. The runtime behavior is unchanged for SUCCESS runs (only the FAILURE-shape runner log + the .error STRING in the per-tenant table are redacted).
Diff
1 file changed, 14 insertions(+), 2 deletions(-).
APPROVE — this is the clean redaction-only split of #2946 I committed to approving once de-conflicted. Confirmed scope: one file (
.gitea/workflows/redeploy-tenants-on-staging.yml, +14/-2) — the duplicate manifest-pinning is dropped, so no overlap with #2939. mergeable=True.Reviewed the Rule-8 redaction (security-relevant, scrutinized — not rubber-stamped):
cat "$HTTP_RESPONSE" | jq . || cat "$HTTP_RESPONSE"(dumped the entire raw CP/SSM response to the persistent runner log) →REDACTED_BODYemitting only{ok, result_count, stragglers_count, http_code}. No raw body, no.error, no SSM ValidationException text. Graceful{"ok":"unparseable",...}fallback on jq failure.\(.error // "-")(raw error string, incl. operator-sensitive SSM values) →\((.error // "") != "")(boolean). Error reduced to true/false; the rest of the per-tenant row (slug/phase/ssm_status/exit/healthz) is operational, not secret.Verified completeness: both leak sites from the 2026-06-15 staging run 509031 are redacted; I see no remaining
cat $HTTP_RESPONSE/ raw.errorsink in the diff. Robustness preserved (2>/dev/null,|| true, fallback). jq expressions are valid. This strictly reduces log exposure — no enforcement weakened.Code-review dimension satisfied. Note: the still-red
security-review / approved,qa-review / approved,reserved-path-review, andsop-checklist / all-items-ackedare separate ceremony gates needing their respective reviewers'/author's acks — not a code defect. 👍