fix(contract): regenerate api-schemas for #9813's ignoredCheckRuns - #9837
Conversation
contract:api-schemas:check fails on main: #9813 added ignoredCheckRuns to RepositorySettingsSchema in src/ without committing the regenerated contract copy. Fourth piece of that PR's fallout, after the three #9829 fixed. @loopover/contract is what MCP and miner consume, and api-schemas.ts is what an external client validates a settings write against -- so a client built on the published contract silently strips ignoredCheckRuns: accepted by the server, absent from the schema, configuration that appears to save and then does nothing. Generated output, not hand-edited: `npm run contract:api-schemas`. Closes #9836
|
Tip ✅ LoopOver review result - approve/merge recommendedReview updated: 2026-07-29 13:14:08 UTC
Review summary Nits — 5 non-blocking
Decision drivers
Context & advisory signals — never blocks the verdict
Linked issue satisfactionAddressed Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. Decision record
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
…the surface already announced (#9840) * fix(train): tell the contributor when the merge train defers a merge the surface already announced Observed live on #9837: the published panel said the PR was MERGING -- the planner's disposition legitimately concluded wouldMerge before the executor's train check ran -- and then the enforce-mode train denial recorded itself AUDIT-ONLY. Publicly the PR claimed an action that never happened, which reads as the bot silently breaking its word (and, to an operator, as the old lost-merge bug recurring when it is actually FIFO queueing working as designed: 9837 was waiting on overlapping older sibling 9833, whose CI was still running). Post one comment naming the blocker and what happens next. Dedup via the AUDIT TRAIL, not a transient lock: claimTransientLock fails OPEN on any deployment without a transient cache bound, which would repeat the comment on every denial pass. The comment's own audit row (recorded only after a successful post, so a failed post retries next pass) is the durable "did we say this" fact everywhere, keyed per (waiting PR, blocker) so a NEW blocker gets its own line and the SAME blocker never repeats within the 24h train window. * test(train): cover the failed-comment retry path Codecov flagged the two remaining lines: the branch where createIssueComment REJECTS. That path is the whole reason the audit row is written after the post rather than before -- a transient GitHub failure must leave no row, so the next pass retries instead of believing the contributor was told. Pins all three states: a failed post still denies and records nothing, the next pass retries, and once it succeeds it stops. * test(train): cover the audit-write fail-safe on the wait comment Codecov's last uncovered line was the .catch() on the dedup row's own write. It is deliberately fail-open: if that best-effort write fails, the worst case is one duplicate comment on a later pass, and the denial plus merge suppression must be unaffected. Pinned by failing ONLY that event type, so the denial's own audit write still succeeds and the test proves the branch rather than the mock.
Closes #9836
contract:api-schemas:checkfails onmain. #9813 addedignoredCheckRunstoRepositorySettingsSchemainsrc/without committing the regenerated contract copy — the fourth piece of that PR's fallout, after the three #9829 fixed.One generated line, directly beside the sibling it mirrors:
Why it is worth fixing rather than leaving stale.
@loopover/contractis the published package MCP and miner consume, andapi-schemas.tsis what an external client validates a settings write against. A client built on the published contract silently stripsignoredCheckRuns— accepted by the server, absent from the schema — so the configuration appears to save and then does nothing, with no error at either end.Generated output, produced by
npm run contract:api-schemas, not hand-edited.contract:api-schemas:check,tsc --noEmitandcontract-api-requests.test.ts(25 tests) all pass after.Noted: this check does not appear to gate
ci.yml, which is whymainstayed green despite the drift. Whether it should is a separate question — a contract-drift check that never runs cannot catch the class of bug it exists for. Not changing CI wiring here.