Epic: madtea's external contracts are asserted, not verified #544
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Depends on
#504 actions runs: madtea reads only Gitea's run fields, so Forgejo runs show no branch or start time
sixfold-space/madtea
#537 git: generate and verify the git CLI surface, the way surface-diff does for the forge API
sixfold-space/madtea
#538 api-specs: the vendored specs are hand-refreshed and Gitea's is a minor version stale
sixfold-space/madtea
#540 ci: a failing scheduled run notifies nobody
sixfold-space/madtea
#542 ci: the forgejo-smoke job has never run
sixfold-space/madtea
Reference
sixfold-space/madtea#544
Loading…
Add table
Add a link
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?
madtea depends on three external contracts: the git binary's CLI, the Gitea API, and the Forgejo API. Every check that claims to verify one of them is anchored to something hand-maintained, frozen in the repository, switched off, or absent. Several of them report confident verdicts anyway.
This is one root cause with several symptoms, found over a single day of investigating an unrelated failure.
The state, measured 2026-09-17
surface-diffdocs/api-specs/forgejo-15.0.json, hand-vendoredsurface-diffdocs/api-specs/gitea-1.26.1.json, hand-vendoreddocs/COMPAT.md, hand-written, 56 rowsforgejo-smokeTwo further properties make the above worse rather than merely incomplete:
surface-diffruns on a daily cron, but it compares repository files against repository files. Its result cannot change between commits, so the scheduled run recomputes a known answer.Why this matters more than the individual bugs
A check anchored to a stale artifact does not fail safe.
TestAPISurfaceMatchesSpecclassifies an endpoint missing from every spec asorphanedand treats it as a bug. Against the stale Gitea spec, an endpoint that exists in 1.27 reads as nonexistent, and the natural response to that failure is to delete working code.The same shape appears in
COMPAT.md, whose assertions are copied verbatim into MCP tool descriptions. An agent reading that a capability is unavailable has no way to tell whether that is true today or was true once.So the failure mode is not "we lack coverage". It is "we report verdicts we cannot support", which is worse, because it is trusted.
Exit criterion
No claim madtea makes about an external contract survives without something that checks it against that contract, and a check that breaks reaches a person.
Children
How this surfaced
None of it was found by looking. It surfaced because a CI job merged without ever having been run, failed, and could not be diagnosed. Each attempt to diagnose it hit another check that turned out to be decorative. That is the real signal here: the defects were individually invisible, and only became visible when something adjacent broke loudly enough to force an investigation.