Skip to content

fix(integration-platform): classify code-based checks statically on manual run (CS-715)#3376

Merged
tofikwest merged 3 commits into
mainfrom
worktree-cs-715-github-inconclusive
Jul 8, 2026
Merged

fix(integration-platform): classify code-based checks statically on manual run (CS-715)#3376
tofikwest merged 3 commits into
mainfrom
worktree-cs-715-github-inconclusive

Conversation

@tofikwest

@tofikwest tofikwest commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Problem

When a user clicks Run on a built-in (code-based) integration check, the manual run-check endpoint could stamp a legitimate result as inconclusive instead of failed/success. An inconclusive run is intentionally hidden from the customer and handed to the self-heal agent — so real findings silently disappeared from the run history (no new run shown, no error), while the scheduled and auto-run paths kept showing the same checks correctly.

Root cause

decideRunStatus holds any non-success result as inconclusive when isDynamic is true. The manual path (task-integrations.controller.ts) computed isDynamic as "does an active DynamicIntegration row exist for this provider slug?"without checking for a code manifest.

Several providers ship both a code-based manifest and an active DynamicIntegration row of the same slug (for extra DB-backed checks): github, vercel, aikido, rippling. A code manifest always wins in the registry, so the check that actually executes is the code one and must be classified statically. Keying off the DB row alone marked those code-check runs inconclusive.

The scheduled path (run-task-integration-checks.ts) and server-run path (run-connection-checks.ts) already guard on the code manifest (manifest ? false : …) — only the manual path was missing the guard (introduced in b374c89b6).

Fix

  • Add registry helper isCodeManifest(slug) (exposes the registry's existing codeManifestIds set).
  • Gate the manual-run isDynamic on it: a provider with a code manifest is never dynamic; only a provider with no code manifest is. This mirrors the scheduled/server-run paths.

Tests

  • New is-code-manifest.test.ts: bundled manifests → true; the mixed code+dynamic providers (github/vercel/aikido/rippling) → true; unknown slug → false; a dynamic-only manifest → resolvable but false; a dynamic registration cannot override a code manifest of the same id.
  • Full @trycompai/integration-platform suite: 435 pass.
  • @trycompai/api typecheck: no errors in any changed file (pre-existing unrelated spec-file failures remain on main).

Impact

Manual runs of code-based checks for github/vercel/aikido/rippling are shown as real failed/success results again. Truly dynamic integrations (no code manifest) are unaffected — they still hold as inconclusive for the self-heal agent. No schema or API-contract change.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CRPjA4fQxdXuELyfTjYF8b


Summary by cubic

Statically classify code-based checks on manual runs and self-heal re-runs using a new isCodeManifest guard. Fixes hidden inconclusive results so github, vercel, aikido, and rippling checks show real success/fail again (CS-715 “manual Run starts then stops silently”).

  • Bug Fixes
    • Manual Run endpoint treats providers with a code manifest as static; only no-manifest providers are dynamic. Mirrors scheduled/server-run paths.
    • Self-heal re-run (rerunAndPersistCheck) applies the same guard so code-based checks aren’t re-held as inconclusive.
    • Exported isCodeManifest from @trycompai/integration-platform and added tests for registry, manual-run controller, and self-heal re-run (bundled, mixed code+dynamic, and dynamic-only cases).

Written for commit ec3646b. Summary will update on new commits.

Review in cubic

…anual run (CS-715)

The manual "run a check" endpoint decided whether a run was dynamic (held as an
'inconclusive' result for the self-heal agent, and hidden from the run history)
versus static (shown as failed/pass) by checking only whether an active
DynamicIntegration row existed for the provider slug.

Several providers ship a code-based manifest AND an active DynamicIntegration row
of the same slug for their extra DB-backed checks. A code manifest always wins in
the registry, so the check that actually runs is the code one and must be
classified statically. Keying `isDynamic` off the DB row alone marked those
code-check runs 'inconclusive', so their results were withheld from the manual
run while the scheduled and server-run paths (which guard on the code manifest)
kept showing them correctly.

Add a registry helper `isCodeManifest` and gate the manual-run `isDynamic` on it,
mirroring the scheduled/server-run paths: a provider with a code manifest is never
dynamic; only a provider with no code manifest is. Add unit tests covering the
bundled manifests, the mixed code+dynamic providers, and the dynamic-only case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CRPjA4fQxdXuELyfTjYF8b
@linear

linear Bot commented Jul 8, 2026

Copy link
Copy Markdown

CS-715

@vercel

vercel Bot commented Jul 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
app Ready Ready Preview, Comment Jul 8, 2026 10:38pm
comp-framework-editor Ready Ready Preview, Comment Jul 8, 2026 10:38pm
portal Ready Ready Preview, Comment Jul 8, 2026 10:38pm

Request Review

@cubic-dev-ai cubic-dev-ai 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.

cubic analysis

No issues found across 5 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Linked issue analysis

Linked issue: CS-715: "[Bug] - GitHub automation: manual Run starts then stops silently (no run recorded, no error) AND scheduled daily runs being skipped"

Status Acceptance criteria Notes
Statically classify manual runs for code-based integration checks (use isCodeManifest so code manifests are never treated as dynamic/inconclusive) The manual-run path now imports and uses isCodeManifest to decide isDynamic, mirroring scheduled/server-run paths.
Treat providers that ship both a code manifest and a DynamicIntegration row (github, vercel, aikido, rippling) as code manifests so manual runs show real failed/success results instead of being hidden Tests explicitly assert these slugs are code manifests and registry prevents a dynamic registration from overriding a code manifest.
Add regression tests and verify suite/typecheck to guard against recurrence A new test file was added and the PR reports the integration-platform suite passing and api typecheck showing no errors for changed files.

Re-trigger cubic

…code-based checks (CS-715)

Extend the isCodeManifest guard from the manual run-check path to the self-heal
agent's re-run (rerunAndPersistCheck). A code-based provider that also has a
dynamic integration row of the same slug (github/vercel/aikido/rippling) was
re-held as 'inconclusive' on re-run — and since the agent cannot patch a code
check, it stayed hidden in a loop. It is now classified statically and its real
result is shown. Dynamic integrations are unaffected (isCodeManifest is false for
them, so the dynamic lookup runs exactly as before).

Tests:
- self-heal re-run reveals a code-based check as 'failed' (not re-held), even when
  a dynamic row shares the slug.
- manual run-check treats a code-based provider as static under the same
  condition; adds the isCodeManifest mock the controller spec now requires.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CRPjA4fQxdXuELyfTjYF8b
@tofikwest tofikwest merged commit 200b191 into main Jul 8, 2026
9 checks passed
@tofikwest tofikwest deleted the worktree-cs-715-github-inconclusive branch July 8, 2026 22:44
claudfuen pushed a commit that referenced this pull request Jul 8, 2026
## [3.99.3](v3.99.2...v3.99.3) (2026-07-08)

### Bug Fixes

* **integration-platform:** classify code-based checks statically on manual run (CS-715) ([#3376](#3376)) ([200b191](200b191))
@claudfuen

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.99.3 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants