Both publish workflows fail on every main commit, and have for as long as the run history goes back — three retries per push, never one success. Neither package has actually been publishing.
Root cause
packages/loopover-contract/dist is gitignored. publish-mcp.yml and publish-miner.yml both build @loopover/engine for exactly that reason, with a comment explaining it — but neither builds @loopover/contract, and both packages import it:
bin/loopover-mcp.ts(16,8): error TS2307: Cannot find module "@loopover/contract/api-schemas"
bin/loopover-miner-mcp.ts(5,44): error TS2307: Cannot find module "@loopover/contract"
lib/github-token-resolution.ts(22,8): error TS2307: Cannot find module "@loopover/contract/cli-config"
Reproduced locally by deleting the contract dist/ and running each workflow’s own build command: 9 unresolved imports for MCP, 7 for the miner. Adding npm run build --workspace @loopover/contract makes both pass.
Scope is exactly these two. publish-contract already builds itself; publish-engine, publish-mcp-registry and publish-ui-kit don’t depend on the contract.
Why it went unnoticed
The failure is in a publish workflow, not in validate-*, so PR CI stays green and the gate is unaffected. Main’s check rollup shows the red, but it reads as release noise rather than "the package has not shipped since it started importing the contract".
Worth considering separately
The retry loop is its own signal: three failed attempts per commit, indefinitely, is a pipeline telling nobody. A publish that fails identically on consecutive commits should surface once, loudly, rather than re-failing quietly forever.
Both publish workflows fail on every main commit, and have for as long as the run history goes back — three retries per push, never one success. Neither package has actually been publishing.
Root cause
packages/loopover-contract/distis gitignored.publish-mcp.ymlandpublish-miner.ymlboth build@loopover/enginefor exactly that reason, with a comment explaining it — but neither builds@loopover/contract, and both packages import it:Reproduced locally by deleting the contract
dist/and running each workflow’s own build command: 9 unresolved imports for MCP, 7 for the miner. Addingnpm run build --workspace @loopover/contractmakes both pass.Scope is exactly these two.
publish-contractalready builds itself;publish-engine,publish-mcp-registryandpublish-ui-kitdon’t depend on the contract.Why it went unnoticed
The failure is in a publish workflow, not in
validate-*, so PR CI stays green and the gate is unaffected. Main’s check rollup shows the red, but it reads as release noise rather than "the package has not shipped since it started importing the contract".Worth considering separately
The retry loop is its own signal: three failed attempts per commit, indefinitely, is a pipeline telling nobody. A publish that fails identically on consecutive commits should surface once, loudly, rather than re-failing quietly forever.