the-custodian/docs/changes/CUST-WP-0080/receive-hook-operations.md
codex eb93eeedfd
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Reject generated-only commits / generated-commit-guard (push) Successful in 7s
security: preserve verified Forgejo scanner activation and reconcile recovery
2026-10-13 11:31:06 +02:00

3.9 KiB

Initial forge receive-hook activation

Owner work: FORGE-WP-0006-T02, coordinated through RMGR-WP-0021-T03 and CUST-WP-0080 G07. The exact proposed action is receive-hook-proposal.json; its executor and artifact hashes are immutable for that trial. The standing build-mode authorization supplies the reversible-change authority; this is not an independent owner approval, autopilot promotion, or credential-isolation proof.

Composition and scope

The proposal enumerates 22 existing repositories, their eight original hook-file hashes, the exact running pod/image, and two admitted Linux executables. Only an additional pre-receive.d/10-custodian-secret-scan is retained. Generated Forgejo dispatchers and authorization hooks remain byte-for-byte unchanged. Tool storage is /data/security/receive-secret-scan/20261012-57a0642b6251, on the existing persistent data volume. No user-authored arbitrary hook facility is enabled.

Metadata reconciliation found 165 repositories; the other 143 are uncovered, not exempt. Actions enabled and branch-protection metadata do not prove required CI checks, credential scope, or frontend lifecycle enforcement.

Execution and rollback

From the Custodian checkout, default invocation performs read-only preflight:

python3 docs/changes/CUST-WP-0080/activate_receive_hooks.py \
  --proposal docs/changes/CUST-WP-0080/receive-hook-proposal.json \
  --receipt docs/evidence/2026-10-12-netkingdom-security/receive-hook-activation.json

--apply performs the exact mutation and writes its receipt; do not reapply to an already installed profile. On failure after hook writes, automatic rollback removes only the known added hook files and verifies the original inventory. --rollback performs that same removal explicitly and does not require temporary build artifacts. It retains the admitted tools as inert files. Explicit rollback still verifies the pinned live target and health; if the pod has changed or health is failing, the abort owner must review the current target before recovery. Never edit the original proposal to disguise a changed execution revision.

Unknown hook modifications cause rollback refusal rather than deletion. Inspect the receipt and exact path hashes; preserve evidence and resolve the concurrent change with the forge owner. Temporary staging cleanup requires a matching owner marker. No existing repository data, config, ref, account, or credential is removed by ordinary rollback.

Verification boundaries

The isolated native probe tests clean acceptance, intermediate-history detection, scanner unavailability, quarantine discard and recovery using the exact deployed image and binaries. Its Forgejo authorization hook is stubbed and the receipt explicitly says so.

Activation uses the actual SSH transport and existing authorization hooks. A separate, directly tested temporary hook vetoes the exact synthetic probe ref on all 22 targets. Both clean and disposable-secret probes must therefore fail the push, while the scanner must separately report clean and blocked. Ref absence and quarantined-commit absence are checked. The temporary veto is removed only after all probes pass. No synthetic key is valid for authentication or retained in Git. Native probe logs and fixture material are not published.

These forced rejections alone do not prove normal clean acceptance. The next ordinary authorized source push supplies that evidence, scoped to its repository and commit. HTTP pushes, frontend edits/merges/imports, restart/hook regeneration, new-repository reconciliation, historical/LFS/log/artifact coverage, and governed finding-to-response acceptance remain open in the owner plan.

The installer rehearsal uses local stand-ins for transport and scanner, proving installation/rollback behavior only. It covers partial installation recovery, missing build artifacts during rollback, executable mode checks, and preservation of unknown changes. It is not a substitute for either native receipt.