the-custodian/docs/changes/CUST-WP-0080/forge-routes-proposal.json
codex 81f2f59649 security: verify authenticated Forgejo routes live (FORGE6-ROUTES-001 r3)
Revision 2 live run passed 24/25; the clean merge hit Forgejo's 405 during
the mergeability recheck. Revision 3 waits for mergeable, retries only 405
(max 3) and records status codes. 7 boundary tests, isolated rehearsal
(27 checks) and the attended live run (26/26, verified, cleanup confirmed)
pass. Revision 2 proposal and receipts retained.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:33:46 +02:00

33 lines
3.8 KiB
JSON

{
"proposal_id": "FORGE6-ROUTES-001",
"revision": 3,
"state": "prepared-awaiting-isolated-rehearsal",
"origin": "https://forgejo.coulomb.social",
"user": "tegwick",
"repository_name": "custodian-routes-b15df5a32e9697ab47215efc",
"source_sha256": {
"accept_forge_routes.py": "73191bb85bfb41de7084a539eb30ff3f4cb5650fd79e68ff8acc496089bb77f0",
"run_forge_routes.py": "6258140d408e5fbed7373611cdcd65e64aee743a0b36ce4fe55b5dc94663120f",
"receive-hook-proposal.json": "9c8ea3b7fbe16a997359432af7bcf09f429881fd23cc567188c21129e80ccf8d",
"activate_forge_template.py": "ef2b38f655d5520d69dcd69cdb4997eaad4b50773f32c1d798d16331b204c789",
"activate_receive_hooks.py": "9b01ee383e16463981112226e19156b0de59af2d03dd71b9403e144e280a9fb3",
"verify_receive_native.py": "c9120122c6f6f0b7c41fe4fa975e5a2a340e776885d852b861b8c13b7664adcd"
},
"target": "One newly created private disposable repository; pinned deployed Forgejo and admitted hook. Existing repository content, hooks, accounts and policies remain untouched.",
"expected_result": "Authenticated native HTTPS clean acceptance and synthetic-secret refusal with detector evidence; API private creation inherits exact hook; clean/content-secret and clean/merge-message refusal with unchanged refs; quarantine commit absent; anonymous private access refused; owned test repository deleted and absent.",
"verification": "Seven boundary tests pass. Exact shared Suite must be re-rehearsed against pinned isolated Forgejo with the admitted binaries before live use; rehearsal is not deployed acceptance.",
"rollback": "Automatic cleanup checks numeric repository ID, owner, private flag, name and ownership description before deleting only the newly created test repository. On interrupted known creation, rerun run_forge_routes.py with the same proposal and receipt plus --cleanup-only. Ambiguous POST before numeric ID receipt requires reconciliation, never replay or delete by name.",
"abort_owner": "railiance-forge; custodian-codex prepares and verifies receipts",
"cost_estimate_eur": 0,
"cost_basis": "Existing service only; serialized small private probes, no added resources or spend commitments.",
"risk_estimate": "Bounded synthetic test writes to a unique private disposable repository. No real secret fixtures, account creation, access-policy change or external publication. Unexpected acceptance may retain an unbound synthetic private-key fixture until cleanup. API/network failure stops the trial; ambiguous creation and cleanup remain explicitly unverified.",
"authorization_ref": "canon/standards/build-mode-change-authorization_v0.1.md",
"lane": "orange: existing caller OIDC/MFA required; no access or secret-policy scope change",
"live_receipt": "docs/evidence/2026-10-18-netkingdom-security/forge-routes-live-r3.json",
"remaining_scope": "Browser/SSO journey, external gitlink repository, CI, import/mirror, historical/LFS/log/artifact detection and finding response remain open.",
"original_revision_sha256": "a253fce3a565a2af94133da019bdc434dc57b21a8c61b06b4c27e036cf5a01d3",
"refinement": "Pre-execution rehearsal corrected inherited Git hook mode to accept exact hash/owner with 0555 or 0755; initial failed rehearsal and source-binding limitation are retained.",
"previous_revision_sha256": "d12c12857e9ed5f4afa3c1c231fd142adad580a458cc175e74f0ea0e3118d792",
"previous_live_receipt": "docs/evidence/2026-10-13-netkingdom-security/forge-routes-live.json",
"refinement_r3": "Revision 2 live run (2026-10-18) passed 24/25 checks; the clean merge sent ~1s after the refused merge got 405 in 17ms (Forgejo log), i.e. mergeability recheck still running. Revision 3 waits for mergeable again before the clean merge, retries only 405 at most three times, and records the merge status codes (no response bodies). Two new boundary tests cover retry and its bounds."
}