R-902 search: contact-mailer source NOT FOUND (DooPlex disks, web editor + history, 10 Gitea repos, build cache); binary kept in git; replacement plan; decoy suite takes a lock (two sessions' runs left a decoy planted)
gates / gates (push) Failing after 11m42s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
This commit is contained in:
2026-10-08 10:35:27 +02:00
parent b340c7417b
commit 0b6758d440
11 changed files with 267 additions and 0 deletions
+8
View File
@@ -34,6 +34,14 @@ import sys
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# ONE RUN AT A TIME (2026-10-08). The decoys mutate REAL files and restore them from a backup taken at plant time. Two
# runs at once in the shared worktree (two sessions running the gates together) let run B back up a file run A had
# already mutated, and B's "restore" then wrote A's decoy back for good: website/en/apps.html was left without its
# Radicale logo, one step from a push. An exclusive lock makes a second run WAIT for the first.
import fcntl
_LOCK = open(os.path.join(ROOT, ".git", "decoy-suite.lock"), "w")
fcntl.flock(_LOCK, fcntl.LOCK_EX)
# ── WHAT THIS FILE COVERS ────────────────────────────────────────────────────────────────────────
# Read by scripts/decoy_coverage_gate.py, which AST-parses this literal rather than grepping for
# gate names — a substring search for coverage would be the very shape this sweep exists to find.