The GitHub mirror of sirens-echo served a 3-day-old tree, and an agent read it as current #822
Labels
No labels
burndown-2026-06
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#822
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Filed by Olaf (OPS) from a working session, with a concrete instance rather than a hypothetical.
What happened
Asked to review
sirens-echo's evaluation harness, I read the repository through the GitHub mirror, because the Forgejo MCP surface exposes no file-read tool (repos, branches, releases, issues, PRs — nothing for contents). The mirror served commitd04fed9e, dated 2026-08-10 11:19. Canonical Forgejomainwas2f24a738, dated 2026-08-13 22:21.Roughly three and a half days stale. Not diverged —
d04fed9eis a real ancestor in canonical history — simply behind.Why that was expensive
The eval system had been substantially rebuilt in that window. I produced a full written assessment of a design that no longer existed, and filed coilyco-gaming/sirens-echo#763 against it. Most of that issue's supporting evidence was wrong: I described
agent/evaluation.jsonwith four cases (the current pack isagent/evaluation.yamlplus sixteen packs underevaluations/), claimed regex and positive assertions were missing whenForbiddenPatternsandRequiredPatternsboth exist, and claimed a known leak was ungated whenForbidPrincipalEchoexists specifically for it.Kai caught it with "the repo is in fj ??? all my repos are in fj." I cloned canonical and corrected the issue. Nothing shipped on the bad reading.
The failure mode is the concerning part: a stale mirror reads exactly like a current one. There is no signal at read time. Every file I fetched was internally consistent and plausibly current, and the assessment built on it was confidently wrong.
Where the defect is
sirens-echohas no mirror workflow —.forgejo/workflows/holds onlyci.ymlandimage-coverage.yml, and nothing in.github/pushes. So the GitHub copy is a Forgejo-side push mirror, configured on the server rather than in the repository, which puts it in this repo's territory.I did not check whether other repos are affected.
mcp-beaver's GitHub copy appeared current when I read it earlier the same session, so this may be one repo's mirror rather than the mechanism.Two questions worth separating
1. Is the mirror broken, or just slow? Push mirrors normally fire on push and retry on a schedule. Three days suggests either a failing job nobody sees or an interval far longer than intended. Worth checking whether the mirror has an error state recorded, and whether any other repo's mirror is behind.
2. Should agents be reading GitHub at all? Arguably not, and that half is cheaper than fixing sync. The tracker rules already say Kai's work routes through Forgejo and GitHub issues are an inbox for external contributors. Nothing says the equivalent for code, and an agent with no Forgejo file-read tool will reach for the mirror by default because it is the only tool-shaped path.
Cloning canonical over HTTPS works fine and needs no token for public repos — that is what I did to recover. If that is the intended path it should be written down somewhere an agent loads, because the current guidance leaves the mirror as the path of least resistance.
Acceptance
sirens-echorestored, and the cause identified rather than nudged.Note on scope
I am not proposing the Forgejo MCP grow a file-read tool. That is a real gap in the surface and it is why the mirror got used, but widening a read grant on a public-facing MCP is its own decision with its own blast radius, and should not be made as a side effect of this. Recording it as context, not as a request.
Incidental
Filing this initially against
coilysiren/infrastructurereturned:That is opcore working correctly — it declined to let a mutating request be silently re-pointed at a different repo than the caller named. Worth noting that the
repo-infrastructureskill points at~/projects/coilysiren/infrastructure/while the Forgejo owner iscoilyco-flight-deck, which is what sent me to the wrong path. Same class of local-path-versus-canonical-owner drift as the mirror issue itself.