Skip to content

feat(cli): provision server-side inbound integration bridge in integration subscribe#1222

Merged
khaliqgant merged 9 commits into
mainfrom
inbound-integration-bridge
Jul 8, 2026
Merged

feat(cli): provision server-side inbound integration bridge in integration subscribe#1222
khaliqgant merged 9 commits into
mainfrom
inbound-integration-bridge

Conversation

@khaliqgant

@khaliqgant khaliqgant commented Jul 1, 2026

Copy link
Copy Markdown
Member

Part of the inbound integration bridge (provider → relay agent, server-side, no client process). Companion PRs: relaycast (ingress), relaycast-cloud (secret+expose), relay (CLI subscribe), relayfile (control-plane proxy), relayfile-cloud (snapshot enrichment). Cross-repo — review/merge together.

agent-relay integration subscribe now creates a relaycast inbound-target + a relayfile-cloud webhook subscription (via the relayfile control-plane), with rollback on partial failure and {ok,data} envelope parsing. CHANGELOG updated.

Tests: 29 passing (integration-subscribe, relaycast-groups) + tsc.

Review status

3-way fresh-eyes review completed. Fixed: fail-closed HMAC secret normalization, 5xx-on-transient (no silent loss), require-dedupe-key (no double-inject). Verified correct: exactly-once node delivery, snapshot bounds, signing order.

⚠️ Draft — before merge

  • Fix C: unsubscribe must delete the relayfile-cloud webhook_subscription (persist its id on the binding) — currently unsubscribe does not stop inbound delivery (cross-repo: relay CLI + relayfile daemon)
  • Add tests: golden-fixture HMAC round-trip, enrichment bounds/lazy hydration, CLI rollback/unsubscribe assertions
  • Add cast.agentrelay.com to RELAYFILE_WEBHOOK_HOST_ALLOWLIST for the preview/prod host
  • E2E on a preview stage: real Slack/GitHub/Linear message → relay channel, no client process
    🤖 Generated with Claude Code

Review in cubic

…ration subscribe`

`agent-relay integration subscribe` now creates a relaycast inbound-target and a
relayfile-cloud webhook subscription (via the relayfile control-plane) so provider
messages are injected server-side into the target relay channel, with rollback on
partial failure and `{ok,data}` envelope parsing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a8f6810a-d4e7-4fb9-9840-8457d3378887

📥 Commits

Reviewing files that changed from the base of the PR and between 066e90c and efb19ad.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (2)
  • packages/cli/package.json
  • packages/cli/src/cli/commands/integration.ts

📝 Walkthrough

Walkthrough

This PR adds server-side inbound bridge provisioning to agent-relay integration subscribe: it creates a relaycast inbound target, provisions a relayfile webhook subscription, extends rollback, and updates related CLI tests and release metadata.

Changes

Inbound bridge provisioning

Layer / File(s) Summary
RelayfileBridge contract and inbound-target helpers
packages/cli/src/cli/commands/integration.ts
Adds RelayfileWebhookSubscription, extends RelayfileBridge, implements default bridge methods, and adds inbound-target provisioning helpers with HTTPS and response-shape validation.
runSubscribe wiring and rollback
packages/cli/src/cli/commands/integration.ts
Calls the inbound-target helper during subscribe, creates the relayfile webhook subscription, extends rollback to delete it, and logs the created subscription id.
integration-subscribe test coverage
packages/cli/src/cli/commands/integration-subscribe.test.ts
Updates fetch stubbing, workspace key defaults, relayfile webhook subscription mocks, and adds provisioning assertions and rejection cases.
Other CLI test updates
packages/cli/src/cli/commands/relaycast-groups.test.ts, packages/cli/src/cli/commands/core.test.ts, packages/cli/src/cli/entrypoint.test.ts, packages/cli/package.json, CHANGELOG.md
Extends related CLI mocks and assertions, adjusts core harness timing and SIGINT behavior, bumps one entrypoint timeout, updates the dependency version, and adds the changelog note.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Suggested reviewers: willwashburn

Poem

I hopped through clouds with a secret and key,
Then wired a webhook for agents to see. 🐇
The relaycast bridge now hums just right,
And messages bloom in the node’s soft light.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main CLI change and is specific to the affected command.
Description check ✅ Passed The description covers the feature summary and test plan, with clear follow-up notes; screenshots are reasonably omitted.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch inbound-integration-bridge

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request implements server-side inbound bridge wiring for the agent-relay integration subscribe command. It introduces the creation of a relaycast inbound target and a relayfile webhook subscription, enabling real provider messages to be injected directly into the target relay channel without requiring a local watcher process. Corresponding integration tests have been updated to mock and assert these new webhook subscription flows. There are no review comments, so I have no feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@agent-relay-code

Copy link
Copy Markdown
Contributor

pr-reviewer applied fixes — committed and pushed 9ea6575 to this PR. The notes below describe what changed.

Review: PR #1222 — Provision server-side inbound integration bridge

Summary

This PR wires a server-side inbound bridge into agent-relay integration subscribe: it POSTs to relaycast's /v1/integrations/relayfile/inbound-target, then registers a relayfile-cloud webhook subscription (createWebhookSubscription), with matching rollback (deleteWebhookSubscription) in the failure path. Types, the default bridge, the changelog, and two test suites are updated.

I traced the changed exports — the new RelayfileBridge methods and RelayfileWebhookSubscription type are consumed only by integration.ts and its two test files. No callers exist outside the changed set, so the type/interface surface is self-contained.

Verification (ran the way CI does, in this checkout)

  • tsc --noEmit (packages/cli): pass
  • eslint src/cli/commands/integration.ts: pass
  • prettier --check on all 4 changed files: pass
  • vitest run packages/cli/src/cli/commands: FAIL — 9 failed | 163 passed | 4 skipped. The 9 failures are all in the two files this PR touches; the rest of the CLI suite is green.

Blocking finding (CI is red) — needs a human decision, left unchanged

All 9 new/updated tests in integration-subscribe.test.ts and relaycast-groups.test.ts fail on this PR head.

Root cause: the new createRelayfileInboundTarget() (packages/cli/src/cli/commands/integration.ts:413) is called from runSubscribe at integration.ts:715, before the try-block that creates the inbound webhook. Its first step is resolveWorkspaceKey(resolved) (integration.ts:420), which throws No workspace key found... when no key is set via flag/RELAY_WORKSPACE_KEY/workspace store.

The tests stub global fetch (expecting the real createRelayfileInboundTarget to run and hit the network), but never provide a workspace key. So the code throws at line 420 — before fetch is ever reached — runSdk catches it, and relay.webhooks.createInbound is called 0 times. Every assertion that depends on the subscribe flow proceeding (e.g. integration-subscribe.test.ts:160, :167; relaycast-groups.test.ts:474) then fails. I confirmed createRelayfileInboundTarget/resolveWorkspaceKey did not exist on the base SHA 20b88df0, so this is PR-introduced, not a pre-existing/stale failure.

Why I did not auto-fix it: the two candidate fixes are both human decisions per the review rules:

  • Test-setup fix (most likely intended): the tests stub fetch but forgot the workspace-key prerequisite that runs first. They need a workspace key made available — e.g. pass --workspace-key <key> in ARGS, stub RELAY_WORKSPACE_KEY in the harness env, or otherwise satisfy resolveWorkspaceKey. I must not add/modify tests to make the change pass — that's your call.
  • Production fix: restructuring createRelayfileInboundTarget/ordering or making it an injectable dependency is a behavior/architecture change, not a mechanical edit.

Recommended direction: since fetch is stubbed (author clearly intended the real inbound-target call to execute and reach the network layer), the gap is the missing workspace-key setup in the test harness; add it there rather than changing production ordering.

Advisory Notes

  • Inbound-target has no rollback. createRelayfileInboundTarget provisions a server-side inbound-target via raw fetch at integration.ts:715, but the failure path (integration.ts:754-775) rolls back only the relay webhook, the subscription, and the relayfile webhook subscription — not the inbound-target. A failure after target creation leaves an orphaned inbound-target server-side. This is a design/behavior consideration for the author; not something to change under this review, and out of scope for a mechanical fix.
  • RelayfileWebhookSubscription.secret is declared but unused. The type carries an optional secret (integration.ts:56-59) that no code reads. Minor; flag only.

Addressed comments

  • No existing bot or human review comments were present in the provided PR context (.workforce/context.json contains only PR metadata; no review threads). Nothing to reconcile. The only finding is my own, documented above.

The PR is not ready: a required check (the CLI vitest suite) is failing with 9 PR-introduced test failures, and resolving them requires a human decision (test-setup vs. production change) that I am not permitted to auto-apply. I have left the working tree unchanged (no edits made).

Comment on lines +424 to +427
headers: {
Authorization: `Bearer ${workspaceKey}`,
'Content-Type': 'application/json',
},

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fixed in this PR: inbound-target provisioning now derives its destination only from explicit --base-url/env/default https://cast.agentrelay.com, enforces HTTPS, and is decoupled from the local-broker auth fallback; CodeQL Analysis passes on the new commits.

@khaliqgant khaliqgant marked this pull request as ready for review July 8, 2026 08:35
@khaliqgant khaliqgant requested a review from willwashburn as a code owner July 8, 2026 08:35
@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5f6e7156f2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +744 to +748
relayfileWebhook = await deps.relayfile.createWebhookSubscription({
url: inboundTarget.url,
pathGlobs: [pathGlob],
secret: inboundTarget.secret,
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Persist relayfile webhook subscription IDs

When integration subscribe succeeds, this creates a persistent relayfile-cloud webhook subscription, but the returned relayfileWebhook.subscriptionId is only used for rollback/logging; relayfile.bind still stores only the Relaycast writeback subscription.id. In the normal unsubscribe or same-resource re-subscribe path, runUnsubscribe/replacement cleanup has no way to call deleteWebhookSubscription, so provider events can keep forwarding to the inbound target after the CLI reports the binding removed, or duplicate after replacements.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This is a valid follow-up, but it is intentionally out of scope for this PR: unsubscribe teardown of the relayfile-cloud webhook subscription is tracked separately. This PR keeps the existing relayfile binding contract storing the Relaycast subscription ID, and it preserves rollback for partial failures by deleting the newly-created relayfile webhook subscription if provisioning fails before the bind is committed. Persisting a second cloud subscription ID for normal unsubscribe/replacement teardown needs a binding-schema/API change and will be handled in that follow-up rather than expanding this bridge PR.

@devin-ai-integration devin-ai-integration 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.

Devin Review found 1 potential issue.

Open in Devin Review

Comment on lines +725 to +729
const inboundTarget = await createRelayfileInboundTarget(opts, local, {
channel,
provider,
pathGlob,
});

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.

🟡 Server-side inbound target is never cleaned up when the subscribe operation fails partway through

The server-side inbound target is provisioned (fetch(…POST…) at packages/cli/src/cli/commands/integration.ts:725-729) before the try/catch block that creates the webhook, relayfile subscription, and binding, so if any of those later steps fail, the catch block never rolls it back.

Impact: Each failed subscribe attempt leaks an orphaned inbound-target resource on the Relaycast server.

Inbound target created outside the rollback scope

The try/catch block at packages/cli/src/cli/commands/integration.ts:742-784 carefully rolls back three resources on failure: webhook (line 772-775), subscription (line 767-770), and relayfileWebhook (line 777-783). However, createRelayfileInboundTarget at line 725 is a server-side POST mutation that provisions a resource on the Relaycast API (/v1/integrations/relayfile/inbound-target). Because it is called before the try block, its result is never cleaned up if the try block throws.

Every other mutating step in the subscribe flow has explicit rollback. The inbound target should either be created inside the try block with corresponding rollback in the catch block, or the catch block should be extended to clean up the inbound target.

Prompt for agents
In runSubscribe (packages/cli/src/cli/commands/integration.ts), the createRelayfileInboundTarget call at line 725 provisions a server-side resource via POST but is placed outside the try/catch block that handles rollback (lines 742-784). If any step inside the try block fails, the inbound target is never cleaned up.

To fix this, either:
1. Move the createRelayfileInboundTarget call inside the try block and add a corresponding cleanup in the catch block (similar to how relayfileWebhook is cleaned up), or
2. Add the inbound target to the catch block's rollback logic. You would need to track the inbound target result and add a deletion API call (or a new deleteRelayfileInboundTarget helper) in the catch block.

Approach 1 is more consistent with the existing pattern where all mutations happen inside the try block.
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This is a valid lifecycle concern, but the current Relaycast inbound-target response/contract does not expose a target id or delete endpoint that the CLI can use for rollback. This PR preserves rollback for resources it owns handles for (Relaycast webhook/subscription and relayfile webhook subscription on pre-bind failure). Cleaning up server-side inbound-target allocations needs a control-plane delete/id contract change, so I am leaving it as a follow-up rather than inventing an uncallable rollback path in this CLI PR.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🧹 Nitpick comments (1)
packages/cli/src/cli/commands/integration-subscribe.test.ts (1)

101-124: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting the shared fetch stub into a test helper.

The fetch stub returning the { ok: true, data: { url, secret } } envelope is duplicated verbatim in relaycast-groups.test.ts (lines 11-30). Extracting it into a shared helper (e.g., stubInboundTargetFetch()) would reduce duplication and ensure both files stay in sync if the response shape changes.

♻️ Optional refactor
+// e.g., in a shared test helper file
+export function stubInboundTargetFetch() {
+  vi.stubGlobal(
+    'fetch',
+    vi.fn(
+      async () =>
+        new Response(
+          JSON.stringify({
+            ok: true,
+            data: {
+              url: 'https://cast.test/v1/integrations/relayfile/inbound/ws/ch',
+              secret: 'inbound-secret',
+            },
+          }),
+          { status: 201, headers: { 'content-type': 'application/json' } }
+        )
+    )
+  );
+}

Then in both test files:

-  vi.stubGlobal(
-    'fetch',
-    vi.fn(
-      async () =>
-        new Response(
-          JSON.stringify({
-            ok: true,
-            data: {
-              url: 'https://cast.test/v1/integrations/relayfile/inbound/ws/ch',
-              secret: 'inbound-secret',
-            },
-          }),
-          { status: 201, headers: { 'content-type': 'application/json' } }
-        )
-    )
-  );
+  stubInboundTargetFetch();
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/cli/src/cli/commands/integration-subscribe.test.ts` around lines 101
- 124, The fetch stub in this test is duplicated in another spec, so extract the
shared `{ ok: true, data: { url, secret } }` response setup into a reusable test
helper. Create a helper such as `stubInboundTargetFetch()` and use it both here
and in `relaycast-groups.test.ts`, keeping the existing `vi.stubGlobal('fetch',
...)` behavior but centralizing the response envelope so both tests stay aligned
if the shape changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/cli/src/cli/commands/integration.ts`:
- Around line 449-452: The inbound target parsing in the relaycast response
handling only validates types, so blank trimmed values and non-HTTPS URLs can
still slip through. Update the validation in the relayfile inbound target path
(the block that returns the trimmed `url` and `secret`) to reject
whitespace-only `secret` and `url` values after trimming, and ensure the parsed
`url` is HTTPS before returning it. Keep the checks close to the existing
`isRecord` / `data.url` / `data.secret` guards so the function fails fast with
the same invalid-response error.

---

Nitpick comments:
In `@packages/cli/src/cli/commands/integration-subscribe.test.ts`:
- Around line 101-124: The fetch stub in this test is duplicated in another
spec, so extract the shared `{ ok: true, data: { url, secret } }` response setup
into a reusable test helper. Create a helper such as `stubInboundTargetFetch()`
and use it both here and in `relaycast-groups.test.ts`, keeping the existing
`vi.stubGlobal('fetch', ...)` behavior but centralizing the response envelope so
both tests stay aligned if the shape changes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 328c42bf-35b6-4119-b0ca-0e6f5b4fe22a

📥 Commits

Reviewing files that changed from the base of the PR and between a5fcfed and 5f6e715.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (6)
  • CHANGELOG.md
  • packages/cli/src/cli/commands/core.test.ts
  • packages/cli/src/cli/commands/integration-subscribe.test.ts
  • packages/cli/src/cli/commands/integration.ts
  • packages/cli/src/cli/commands/relaycast-groups.test.ts
  • packages/cli/src/cli/entrypoint.test.ts

Comment thread packages/cli/src/cli/commands/integration.ts Outdated
@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

2 issues found and verified against the latest diff

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="packages/cli/src/cli/commands/integration-subscribe.test.ts">

<violation number="1" location="packages/cli/src/cli/commands/integration-subscribe.test.ts:134">
P3: Defaulting the harness to a workspaceKey makes the suite always run the workspace-aware path. That can hide regressions in the command’s fallback when no local relay options are available.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread packages/cli/src/cli/commands/integration-subscribe.test.ts
relayfile: relayfile as never,
resolveLocalRelayOptions: async () => undefined,
resolveLocalRelayOptions:
opts.resolveLocalRelayOptions ?? (async () => ({ workspaceKey: 'rk_live_test' })),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: Defaulting the harness to a workspaceKey makes the suite always run the workspace-aware path. That can hide regressions in the command’s fallback when no local relay options are available.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/cli/src/cli/commands/integration-subscribe.test.ts, line 134:

<comment>Defaulting the harness to a workspaceKey makes the suite always run the workspace-aware path. That can hide regressions in the command’s fallback when no local relay options are available.</comment>

<file context>
@@ -104,7 +130,8 @@ function harness(
     relayfile: relayfile as never,
-    resolveLocalRelayOptions: async () => undefined,
+    resolveLocalRelayOptions:
+      opts.resolveLocalRelayOptions ?? (async () => ({ workspaceKey: 'rk_live_test' })),
     isInteractive: () => false,
     log,
</file context>
Suggested change
opts.resolveLocalRelayOptions ?? (async () => ({ workspaceKey: 'rk_live_test' })),
opts.resolveLocalRelayOptions ?? (async () => undefined),

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fixed in d0f6fb9 with a regression test that bypasses the harness default workspace key: no --workspace-key, blank RELAY_WORKSPACE_KEY/RELAY_API_KEY, isolated empty AGENT_RELAY_HOME, and resolveLocalRelayOptions returns undefined. The command now has explicit coverage for the fallback/no-workspace path and fails before any fetch or provisioning side effects.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Nice — the no-workspace fallback is now covered explicitly, and the parent concern is addressed for this PR.

Thanks for the feedback! I've saved this as a new learning to improve future reviews.

@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="packages/cli/src/cli/commands/integration-subscribe.test.ts">

<violation number="1" location="packages/cli/src/cli/commands/integration-subscribe.test.ts:134">
P3: Defaulting the harness to a workspaceKey makes the suite always run the workspace-aware path. That can hide regressions in the command’s fallback when no local relay options are available.</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread packages/cli/src/cli/commands/integration-subscribe.test.ts
@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@khaliqgant khaliqgant merged commit ad65974 into main Jul 8, 2026
47 checks passed
@khaliqgant khaliqgant deleted the inbound-integration-bridge branch July 8, 2026 20:33
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.

2 participants