Skip to content

fix(contract): regenerate api-schemas for #9813's ignoredCheckRuns - #9837

Merged
loopover-orb[bot] merged 1 commit into
mainfrom
fix/contract-schemas-ignored-check-runs
Jul 29, 2026
Merged

fix(contract): regenerate api-schemas for #9813's ignoredCheckRuns#9837
loopover-orb[bot] merged 1 commit into
mainfrom
fix/contract-schemas-ignored-check-runs

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Closes #9836

contract:api-schemas:check fails on main. #9813 added ignoredCheckRuns to RepositorySettingsSchema in src/ 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:

ignoredCheckRuns: z.array(z.object({ name: z.string(), appSlug: z.string() })).readonly().nullable().optional(),

Why it is worth fixing rather than leaving stale. @loopover/contract is the published package MCP and miner consume, and api-schemas.ts is what an external client validates a settings write against. A client built on the published contract silently strips ignoredCheckRuns — 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 --noEmit and contract-api-requests.test.ts (25 tests) all pass after.

Noted: this check does not appear to gate ci.yml, which is why main stayed 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.

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
@loopover-orb

loopover-orb Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Tip

✅ LoopOver review result - approve/merge recommended

Review updated: 2026-07-29 13:14:08 UTC

1 file · 1 AI reviewer · no blockers · readiness 98/100 · CI green · clean

✅ Suggested Action - Approve/Merge

  • safe to merge

Review summary
This is a minimal, correctly-targeted fix that adds the missing `ignoredCheckRuns` field to the published `RepositorySettingsSchema` in the generated contract package, matching the exact shape of its sibling `advisoryCheckRuns` field one line above it. The change is a one-line generated-output diff closing a real drift bug (a server-accepted field silently stripped by clients validating against the stale published schema), and the PR description states existing tests (`contract-api-schemas:check`, `tsc --noEmit`, and the 25-test `contract-api-requests.test.ts` suite) already cover generated-contract parity for this file.

Nits — 5 non-blocking
  • The PR itself adds no new test asserting `ignoredCheckRuns` round-trips through the schema, relying entirely on the existing generated-parity check suite to catch regressions here — worth confirming that suite actually exercises this specific field.
  • The file is now ~458 generated lines; this is inherent to the generated-file pattern and not something to address in this PR.
  • Consider a quick assertion in `openapi-settings-schema-parity.test.ts` (referenced elsewhere in this file) explicitly checking `ignoredCheckRuns` if it doesn't already, since this is exactly the class of drift that check exists to catch.
  • PR author also opened the linked issue — Link an issue that was opened by a different contributor, or provide a rationale for why this self-authored issue represents genuine discovery work.
  • Code changes lack test evidence — Add focused regression tests or explain why existing coverage is sufficient.

Decision drivers

  • ✅ Code review — No blockers (1 reviewer)
  • ✅ Gate result — Passing (No configured blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ✅ Linked #9836
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 14 registered-repo PR(s), 13 merged, 345 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 14 PR(s), 345 issue(s).
Improvement ℹ️ None detected risk: low · value: none
Linked issue satisfaction

Addressed
The PR adds the exact missing ignoredCheckRuns line to RepositorySettingsSchema in api-schemas.ts, matching the sibling advisoryCheckRuns entry as the issue requested, and states the generated check now passes.

Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is registered but has no active allocation in the current snapshot.
  • Public profile languages: not available
  • Official Gittensor activity: 14 PR(s), 345 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Start here: Treat this as maintainer-lane context rather than normal contributor-lane activity.
  • Then work through the remaining 1 step in the Signals table above.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
🧪 Chat with LoopOver

Ask 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.

  • @loopover ask <question> answers contribution-quality Q&A with source citations and freshness.
  • @loopover chat <question> answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @loopover mention with a real question is routed to the closest matching read-only command automatically — no exact syntax required.

Full command reference: https://loopover.ai/docs/loopover-commands

🧪 Experimental — new and may change.

Decision record
  • action: merge · clause: success
  • config: b41e209df6f9ebb88a1868d2559acaab87c58b8017789e24661ea08a7b0a08dc · pack: oss-anti-slop · ci: passed
  • record: 5e8e41e1c843597dfe853d989cc00f3736ed1b85f8d5f8426a14d010acd9a6dc (schema v5, head f3218ab)

🟩 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.

  • Re-run LoopOver review

@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@JSONbored JSONbored self-assigned this Jul 29, 2026

@loopover-orb loopover-orb Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LoopOver approves — the gate is satisfied and CI is green.

@loopover-orb
loopover-orb Bot merged commit 8659503 into main Jul 29, 2026
6 checks passed
@loopover-orb
loopover-orb Bot deleted the fix/contract-schemas-ignored-check-runs branch July 29, 2026 13:14
JSONbored added a commit that referenced this pull request Jul 29, 2026
…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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

contract: api-schemas.ts is stale on main — #9813's ignoredCheckRuns was never regenerated

1 participant