Follow-up to PR #192.
The installed construction publisher fails closed during live preflight because GitHub Contents API returns base64 with line breaks and cpg_decode_content passes that wrapped value directly to jq base64 decoding. The same failure reproduces with jq 1.6 and jq 1.7.1. Removing ASCII whitespace before decoding yields the exact committed blob.
Scope: patch only scripts/construction-publisher-gate.sh and its targeted test. Add a wrapped-base64 regression. Do not change authority, connector, merge rules, workflows, mode, Roadmap, live yshifu, targets, or fallback behavior.
Acceptance: targeted publisher tests and ShellCheck pass; exact CI passes; one final independent review has no unresolved Important. The broken installed gate cannot publish its own repair, so final publication must remain fail closed pending an explicit recovery path.
Follow-up to PR #192.
The installed construction publisher fails closed during live preflight because GitHub Contents API returns base64 with line breaks and cpg_decode_content passes that wrapped value directly to jq base64 decoding. The same failure reproduces with jq 1.6 and jq 1.7.1. Removing ASCII whitespace before decoding yields the exact committed blob.
Scope: patch only scripts/construction-publisher-gate.sh and its targeted test. Add a wrapped-base64 regression. Do not change authority, connector, merge rules, workflows, mode, Roadmap, live yshifu, targets, or fallback behavior.
Acceptance: targeted publisher tests and ShellCheck pass; exact CI passes; one final independent review has no unresolved Important. The broken installed gate cannot publish its own repair, so final publication must remain fail closed pending an explicit recovery path.