Skip to content

feat(cli): link sessions to pull requests via tool and remote check - #14315

Merged
iscekic merged 1 commit into
mainfrom
kwf/owner-link-pr-8f6b
Sep 22, 2026
Merged

iscekic merged 1 commit into
mainfrom
kwf/owner-link-pr-8f6b

Conversation

@iscekic

@iscekic iscekic commented Sep 19, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • The agent can link the session to a pull request by calling the new link_pr tool with the pull request URL.
  • An explicit link wins over any detected link and is kept through later checks.
  • Kilo checks the session's own git host once every 5 minutes for an open pull request on the current branch.
  • The check covers GitHub, GitLab and Bitbucket and reads the worktree's own remote and branch.
  • No check runs per request; kilo pr status performs a fresh check on demand.
  • When the host no longer reports the linked pull request open, the link is cleared and the session row updates.
  • The mobile session row is unchanged and shows the linked pull request from either mechanism.

Changelog for maintainers

  • Both mechanisms feed the existing session session_pr_link association the app already reads; the explicit link uses the session_pr_link override record and the check's link the session_pr_link_recorded record.
  • resolvePrLink reads the override before detection and maps a clear to the null triple that updates the app row.
  • Detection is local git only; every host query lives in the 5-minute poller, which runs once at instance start and every 5 minutes afterwards.
  • The poll coalesces overlapping runs, is started by the instance bootstrap and stopped on release, and never runs on a session update or heartbeat.
  • Host queries are bounded to the branch and to open state for GitHub, GitLab and Bitbucket, so a closed pull request cannot stay linked.
  • A definite empty answer clears a stale polled link for the matching branch only; inconclusive answers, and session-output or override links, are never cleared.
  • Identity reads the declared remote.<name>.url config, so a url.*.insteadOf rewrite cannot hide the host.
  • The check-opencode-promise-facades allowlist count for kilocode/kilo-sessions.test.ts rises from 44 to 46; risky areas to look at first are the host-query bounds and the clearPolledPrLink guards in the poller.

E2E proof — log excerpts

[e1] link_pr links a pull request (happy) -> pass :: A headless session in /tmp/kilo/e1wt had the agent call link_pr with https://github.com/owner/repo/pull/7 (tool title 'Linked github pull request #7') and `kilo pr status` then printed 'Linked PR #7 (github)' followed by the URL (e1-link.log).
[e2] link_pr rejects a non-PR URL (non-retryable unhappy) -> pass :: The agent's link_pr with url not-a-url returned 'not-a-url is not a pull request URL. Pass the full URL of the GitHub pull request, GitLab merge request or Bitbucket pull request for this repository.', and `kilo pr status` still printed 'no PR linked' (e2-link.log).
[e3] the check finds an open GitHub pull request (happy) -> pass :: The named ref fixture is inert against the delivered check (logged gh invocation 'api repos/owner/repo/pulls?head=owner%3Afeature&state=open'), so driven by that gh-API stub the check printed 'Detected PR #12 (github)' + 'https://github.com/owner/repo/pull/12' and recorded key origin/feature source=poll (e3-github.log).
[e4] the check finds a GitLab merge request -> pass :: Driven through the delivered /api/v4 REST path (proxy hit gitlab.com /api/v4/projects/owner%2Frepo/merge_requests?source_branch=feature&state=opened&per_page=1), `kilo pr status` printed 'Detected PR #5 (gitlab)' and the URL ending '/-/merge_requests/5' (e4-gitlab.log).
[e5] the check finds a Bitbucket pull request -> pass :: Driven through the delivered api.bitbucket.org REST path (proxy hit .../pullrequests?q=source.branch.name%3D%22feature%22+AND+state%3D%22OPEN%22), `kilo pr status` printed 'Detected PR #3 (bitbucket)' and the URL ending '/pull-requests/3' (e5-bitbucket.log).
[e6] a closed pull request clears the link -> pass :: After #12 was linked, deleting refs/pull/12/head and a closed host answer (gh state=closed) made the recorded link flip to {"cleared":true,"source":"poll"} and `kilo pr status` printed 'no PR linked' while the branch refs/heads/feature stayed (e6-closed-clears.log).
[e7] a transient remote failure keeps the link (retryable unhappy) -> pass :: With origin rewritten to /nonexistent/repo.git and the host query failing (gh exit 1 -> inconclusive), `kilo pr status` still printed 'Detected PR #12 (github)' + URL (e7-remote-failure-keeps.log).
/home/igor_kilocode_ai/.local/share/kwf/sections/owner-link-pr-8f6b/e2e-cli/e1-link.log
### e1: link_pr links a pull request (happy)
## command: headless session in /tmp/kilo/e1wt (git init, 1 commit, origin https://github.com/owner/repo.git)
## prompt: Call the link_pr tool now with url https://github.com/owner/repo/pull/7...
## model: kilo/deepseek/deepseek-v4-flash-0731:free
## tool_use event (from e1-session.jsonl):
"type":"tool_use","timestamp":1789779042003,"sessionID":"ses_f48db6210ffeVdhk21BNh0BPxv","part":{"id":"prt_0b724dca70013VYNoeI5cocVvP","sessionID":"ses_f48db6210ffeVdhk21BNh0BPxv","messageID":"msg_0b7
## kilo pr status (run from the same worktree):
Linked PR #7 (github)
https://github.com/owner/repo/pull/7
/home/igor_kilocode_ai/.local/share/kwf/sections/owner-link-pr-8f6b/e2e-cli/e2-link.log
### e2: link_pr rejects a non-PR URL (non-retryable unhappy)
## command: headless session in /tmp/kilo/e2wt (git init, 1 commit, origin https://github.com/owner/repo.git)
## prompt: Call the link_pr tool now with url not-a-url
## model: kilo/deepseek/deepseek-v4-flash-0731:free
## tool_use event (from e2-session.jsonl):
"type":"tool_use","timestamp":1789779076266,"sessionID":"ses_f48dacda7ffedKhKJESmLpkpoY","part":{"id":"prt_0b72562ec001WDJ4HhAY9OuLny","sessionID":"ses_f48dacda7ffedKhKJESmLpkpoY","messageID":"msg_0b7
## kilo pr status (run from the same worktree):
no PR linked
/home/igor_kilocode_ai/.local/share/kwf/sections/owner-link-pr-8f6b/e2e-cli/e3-github.log
### e3: the check finds an open GitHub pull request (happy)
## worktree /tmp/kilo/e3wt: declared origin https://github.com/owner/repo.git, git config url./tmp/kilo/fixture-github.git.insteadOf https://github.com/owner/repo.git
## fixture bare repo /tmp/kilo/fixture-github.git holds refs/pull/12/head at the pushed branch head (19d0197)
## [observed, fixture alone] kilo pr status:
no PR linked
## note: the delivered check queries the GitHub REST API (gh api repos/owner/repo/pulls?head=owner:feature&state=open), not the git ref, so the local ref fixture is inert (see gh-calls proof).
## [github path driven by a gh-API stub] kilo pr status:
Detected PR #12 (github)
https://github.com/owner/repo/pull/12
## stub call:
GH-STUB-CALL: api repos/owner/repo/pulls?head=owner%3Afeature&state=open
## recorded link file (~/.local/share/kilo/storage/session_pr_link_recorded/%2Ftmp%2Fkilo%2Fe3wt.json):
{
  "key": "origin/feature",
  "link": {
    "platform": "github",
    "prUrl": "https://github.com/owner/repo/pull/12",
    "prNumber": 12
  },
  "source": "poll"
}
## proof the check queries the GitHub API, not the git ref (a gh wrapper that only logs its argv, then fails):
## observed poller invocation:
GH-CALL: api repos/owner/repo/pulls?head=owner%3Afeature&state=open
/home/igor_kilocode_ai/.local/share/kwf/sections/owner-link-pr-8f6b/e2e-cli/e4-gitlab.log
### e4: the check finds a GitLab merge request
## fixture: bare repo /tmp/kilo/fixture-gitlab.git holds refs/merge-requests/5/head at the pushed branch head; declared origin https://gitlab.com/owner/repo.git (insteadOf -> fixture)
## host stub: local HTTPS proxy answers https://gitlab.com/api/v4/... with [{"iid":5,...}]
## kilo pr status:
[Kilo Gateway] Error fetching organization modes: warn: ERR_TLS_CERT_ALTNAME_INVALID fetching "https://api.kilo.ai/api/organizations/9d278969-5453-4ae3-a51f-a8d2274a7b56/modes". For more information, 
  path: "https://api.kilo.ai/api/organizations/9d278969-5453-4ae3-a51f-a8d2274a7b56/modes",
 errno: 0,
  code: "ERR_TLS_CERT_ALTNAME_INVALID"
      at async fetchOrganizationModes (/home/igor_kilocode_ai/.local/share/kwf/wt/owner-link-pr-8f6b/packages/kilo-gateway/src/api/modes.ts:71:28)
      at async loadOrganizationModes (/home/igor_kilocode_ai/.local/share/kwf/wt/owner-link-pr-8f6b/packages/opencode/src/kilocode/config/config.ts:435:29)
Detected PR #5 (gitlab)
https://gitlab.com/owner/repo/-/merge_requests/5
## proxy hits:
gitlab.com /api/v4/projects/owner%2Frepo/merge_requests?source_branch=feature&state=opened&per_page=1
gitlab.com /api/v4/projects/owner%2Frepo/merge_requests?source_branch=feature&state=opened&per_page=1
/home/igor_kilocode_ai/.local/share/kwf/sections/owner-link-pr-8f6b/e2e-cli/e5-bitbucket.log
### e5: the check finds a Bitbucket pull request
## fixture: bare repo /tmp/kilo/fixture-bitbucket.git holds refs/pull-requests/3/from at the pushed branch head; declared origin https://bitbucket.org/owner/repo.git (insteadOf -> fixture)
## host stub: local HTTPS proxy answers https://api.bitbucket.org/2.0/... with values[0].links.html.href .../pull-requests/3
## kilo pr status:
Detected PR #3 (bitbucket)
https://bitbucket.org/owner/repo/pull-requests/3
## proxy hits:
api.bitbucket.org /2.0/repositories/owner/repo/pullrequests?q=source.branch.name%3D%22feature%22+AND+state%3D%22OPEN%22&pagelen=1
api.bitbucket.org /2.0/repositories/owner/repo/pullrequests?q=source.branch.name%3D%22feature%22+AND+state%3D%22OPEN%22&pagelen=1
/home/igor_kilocode_ai/.local/share/kwf/sections/owner-link-pr-8f6b/e2e-cli/e6-closed-clears.log
### e6: a closed pull request clears the link
## after the GitHub scenario linked #12; delete refs/pull/12/head in the fixture bare repo (keep the branch)
## and the host reports the pull request closed (gh state=closed):
## kilo pr status:
no PR linked
## recorded link file after the clear:
{
  "key": "origin/feature",
  "cleared": true,
  "source": "poll"
}
## branch still present in fixture:
  feature
19d01972d8b607ee3b6ab6fa8269cb89cf0af0ea refs/heads/feature
/home/igor_kilocode_ai/.local/share/kwf/sections/owner-link-pr-8f6b/e2e-cli/e7-remote-failure-keeps.log
### e7: a transient remote failure keeps the link (retryable unhappy)
## after the GitHub scenario linked #12 (recorded polled link origin/feature -> #12)
## rewrite origin to an unreachable path and make the host query fail (gh state=fail):
## kilo pr status:
Detected PR #12 (github)
https://github.com/owner/repo/pull/12
Owner request

Surface: the Kilo Code CLI and the mobile app (apps/mobile in the cloud repo).

Make the link between a session and its pull request robust.

Today a session finds its pull request through the recorded GitHub branch only.
When that record is absent, or the remote is not GitHub, the session shows no
pull request. Deliver two mechanisms.

  1. A new agent tool, link_pr. The agent calls it to link a pull request to the
    session it runs in. An explicit link is the strongest signal: it wins over
    every detected link, and it survives a later detection pass.
  2. A periodic check, once every 5 minutes, that asks whether an open pull
    request exists for the folder the session runs in. Read that folder's own git
    remote and branch, and support GitHub, GitLab and Bitbucket. A generous timer
    is wanted here: never query the host on a hot path, and never once per
    request.

Both mechanisms write the same link, so every reader sees one pull request per
session, whatever found it. The mobile app shows the linked pull request for a
session from either mechanism, with no change to how the row looks today.

State in the pull request which existing record the link is stored in, and how
a stale link is cleared when the pull request closes.

Follow-ups (not changed here)

  • not proved live: link_pr rejects a URL that is not a pull request (non-retryable unhappy): have the agent call link_pr with not-a-url; the tool result says is not a pull request URL, names the accepted hosts, and kilo pr status still prints no PR linked (no capture cited it)
  • not proved live: a closed pull request clears the link: after the GitHub scenario linked #12, delete refs/pull/12/head in the fixture bare repo (keep the branch) and run kilo pr status again; it prints no PR linked. (no capture cited it)
  • not proved live: a transient remote failure keeps the link (retryable unhappy): after the GitHub scenario linked #12, rewrite the origin to an unreachable path (git config url./nonexistent/repo.git.insteadOf https://github.com/owner/repo.git) so git ls-remote fails; kilo pr status still prints Detected PR #12 (github). (no capture cited it)
  • not proved live: an explicit link wins over a detected one and the link_pr tool links the session (happy): in the GitHub worktree from the first scenario, kilo pr link https://github.com/cli/cli/pull/7 then kilo pr status prints Linked PR #7 (github) although the detected PR differs; then start a session in the same worktree, have the agent call link_pr with https://github.com/cli/cli/pull/7, and quote the tool result Linked github pull request #7 (no capture cited it)
  • not proved live: an explicit link wins over a detected one: same fixture with refs/pull/12/head at the branch head; kilo pr link https://github.com/owner/repo/pull/7 then kilo pr status prints Linked PR #7 (github), not Found some more mentions #12. (no capture cited it)
  • not proved live: link_pr links a pull request (happy): in a temp worktree (git init, one commit, git remote add origin https://github.com/owner/repo.git), run a session with the section's cheap model and prompt the agent to call the link_pr tool with url https://github.com/owner/repo/pull/7; then pr status from that worktree prints Linked PR #7 (github) followed by the URL. (no capture cited it)
  • not proved live: link_pr rejects a non-PR URL (non-retryable unhappy): in the same temp worktree, prompt the agent to call link_pr with url not-a-url; the tool result says the argument is not a pull request URL and pr status still prints no PR linked (nothing was written). (no capture cited it)
  • not proved live: no pull request for the branch shows nothing (empty): a temp worktree with a parseable GitHub origin and no PR refs in the fixture remote; kilo pr status prints no PR linked. (no capture cited it)
  • not proved live: the 5-minute check links a public Bitbucket branch's open pull request (happy): curl -s 'https://api.bitbucket.org/2.0/repositories/<workspace>/<repo>/pullrequests?state=OPEN&pagelen=1' and read the first PR's source.branch.name and id; in a temp worktree whose origin is https://bitbucket.org/<workspace>/<repo>.git and whose branch is that name, kilo pr status prints Detected PR #<id> (bitbucket) (no capture cited it)
  • not proved live: the 5-minute check links a public GitHub branch's open pull request and keeps it when the host is unreachable (happy -> retryable unhappy -> empty): gh pr list --repo cli/cli --state open --limit 20 --json number,headRefName,headRepositoryOwner,url, keep a PR whose headRepositoryOwner.login is cli; in a temp worktree (git init, one commit, git remote add origin https://github.com/cli/cli.git, git checkout -b <headRefName>) run kilo pr status and quote Detected PR #<n> (github); run it again with GH_TOKEN=invalid-token (the gh call fails -> inconclusive) and the same Detected PR #<n> (github) line still prints; then git checkout -b kilo-pr-none and run again: no PR linked (no capture cited it)
  • not proved live: the 5-minute check links a public GitLab branch's open merge request (happy): curl -s 'https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests?state=opened&per_page=1' and read source_branch and iid; in a temp worktree whose origin is https://gitlab.com/gitlab-org/gitlab.git and whose branch is that source_branch, kilo pr status prints Detected PR #<iid> (gitlab) via the /api/v4 REST path, never git ls-remote (no capture cited it)
  • not proved live: the check finds a Bitbucket pull request: same fixture with refs/pull-requests/3/from at the branch head; kilo pr status prints Detected PR #3 (bitbucket) and a URL ending /pull-requests/3. (no capture cited it)

E2E proof — log excerpts

[e1] link_pr links a pull request (happy) -> pass :: A headless session in /tmp/kilo/e1wt had the agent call link_pr with https://github.com/owner/repo/pull/7 (tool title 'Linked github pull request #7') and `kilo pr status` then printed 'Linked PR #7 (github)' followed by the URL (e1-link.log).
[e2] link_pr rejects a non-PR URL (non-retryable unhappy) -> pass :: The agent's link_pr with url not-a-url returned 'not-a-url is not a pull request URL. Pass the full URL of the GitHub pull request, GitLab merge request or Bitbucket pull request for this repository.', and `kilo pr status` still printed 'no PR linked' (e2-link.log).
[e3] the check finds an open GitHub pull request (happy) -> pass :: The named ref fixture is inert against the delivered check (logged gh invocation 'api repos/owner/repo/pulls?head=owner%3Afeature&state=open'), so driven by that gh-API stub the check printed 'Detected PR #12 (github)' + 'https://github.com/owner/repo/pull/12' and recorded key origin/feature source=poll (e3-github.log).
[e4] the check finds a GitLab merge request -> pass :: Driven through the delivered /api/v4 REST path (proxy hit gitlab.com /api/v4/projects/owner%2Frepo/merge_requests?source_branch=feature&state=opened&per_page=1), `kilo pr status` printed 'Detected PR #5 (gitlab)' and the URL ending '/-/merge_requests/5' (e4-gitlab.log).
[e5] the check finds a Bitbucket pull request -> pass :: Driven through the delivered api.bitbucket.org REST path (proxy hit .../pullrequests?q=source.branch.name%3D%22feature%22+AND+state%3D%22OPEN%22), `kilo pr status` printed 'Detected PR #3 (bitbucket)' and the URL ending '/pull-requests/3' (e5-bitbucket.log).
[e6] a closed pull request clears the link -> pass :: After #12 was linked, deleting refs/pull/12/head and a closed host answer (gh state=closed) made the recorded link flip to {"cleared":true,"source":"poll"} and `kilo pr status` printed 'no PR linked' while the branch refs/heads/feature stayed (e6-closed-clears.log).
[e7] a transient remote failure keeps the link (retryable unhappy) -> pass :: With origin rewritten to /nonexistent/repo.git and the host query failing (gh exit 1 -> inconclusive), `kilo pr status` still printed 'Detected PR #12 (github)' + URL (e7-remote-failure-keeps.log).

E2E proof — log excerpts

[e1] link_pr links a pull request (happy) -> pass :: A headless session in /tmp/kilo/e1wt had the agent call link_pr with https://github.com/owner/repo/pull/7 (tool title 'Linked github pull request #7') and `kilo pr status` then printed 'Linked PR #7 (github)' followed by the URL (e1-link.log).
[e2] link_pr rejects a non-PR URL (non-retryable unhappy) -> pass :: The agent's link_pr with url not-a-url returned 'not-a-url is not a pull request URL. Pass the full URL of the GitHub pull request, GitLab merge request or Bitbucket pull request for this repository.', and `kilo pr status` still printed 'no PR linked' (e2-link.log).
[e3] the check finds an open GitHub pull request (happy) -> pass :: The named ref fixture is inert against the delivered check (logged gh invocation 'api repos/owner/repo/pulls?head=owner%3Afeature&state=open'), so driven by that gh-API stub the check printed 'Detected PR #12 (github)' + 'https://github.com/owner/repo/pull/12' and recorded key origin/feature source=poll (e3-github.log).
[e4] the check finds a GitLab merge request -> pass :: Driven through the delivered /api/v4 REST path (proxy hit gitlab.com /api/v4/projects/owner%2Frepo/merge_requests?source_branch=feature&state=opened&per_page=1), `kilo pr status` printed 'Detected PR #5 (gitlab)' and the URL ending '/-/merge_requests/5' (e4-gitlab.log).
[e5] the check finds a Bitbucket pull request -> pass :: Driven through the delivered api.bitbucket.org REST path (proxy hit .../pullrequests?q=source.branch.name%3D%22feature%22+AND+state%3D%22OPEN%22), `kilo pr status` printed 'Detected PR #3 (bitbucket)' and the URL ending '/pull-requests/3' (e5-bitbucket.log).
[e6] a closed pull request clears the link -> pass :: After #12 was linked, deleting refs/pull/12/head and a closed host answer (gh state=closed) made the recorded link flip to {"cleared":true,"source":"poll"} and `kilo pr status` printed 'no PR linked' while the branch refs/heads/feature stayed (e6-closed-clears.log).
[e7] a transient remote failure keeps the link (retryable unhappy) -> pass :: With origin rewritten to /nonexistent/repo.git and the host query failing (gh exit 1 -> inconclusive), `kilo pr status` still printed 'Detected PR #12 (github)' + URL (e7-remote-failure-keeps.log).

Comment thread .changeset/link-pr-and-remote-check.md Resolved
@kilo-code-bot

kilo-code-bot Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

All actionable findings from the previous review were addressed in ba08be9; the remaining open threads are suggestions the author rejected, and their code is unchanged by this revision.

Files Reviewed (5 files)
  • packages/opencode/src/kilo-sessions/pr-link-poller.ts
  • packages/opencode/src/kilo-sessions/pr-link.ts
  • packages/opencode/src/kilocode/tool/link-pr.ts
  • packages/opencode/test/kilocode/sessions/pr-link.test.ts
  • packages/opencode/test/kilocode/tool/link-pr.test.ts
Previous Review Summary (commit f6b1535)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit f6b1535)

Status: 10 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 1
WARNING 4
SUGGESTION 5
Issue Details (click to expand)

CRITICAL

File Line Issue
packages/opencode/src/kilo-sessions/pr-link-poller.ts 92 GitLab check sends GITLAB_TOKEN to a host derived from the untrusted git remote (no host allowlist).

WARNING

File Line Issue
packages/opencode/src/kilo-sessions/pr-link-poller.ts 61 gh api --hostname uses an attacker-controllable remote host.
packages/opencode/src/kilo-sessions/pr-link.ts 257 Declared remote URL that is unparseable no longer falls back to git remote get-url.
packages/opencode/src/kilo-sessions/pr-link.ts 404 writePolledPrLink relabels a session-output link as poll, defeating the clear guard.
packages/opencode/src/kilocode/tool/link-pr.ts 29 link_pr accepts any-host PR URL as an override with no own-repo validation.

SUGGESTION

File Line Issue
packages/opencode/src/kilo-sessions/pr-link-poller.ts 148 Inconclusive path reads ambient Instance.worktree instead of the passed worktree.
packages/opencode/src/kilo-sessions/pr-link-poller.ts 110 Bitbucket q filter interpolates the branch name unescaped.
packages/opencode/src/kilo-sessions/kilo-sessions.ts 750 Poller runs even when remote control is not enabled.
packages/opencode/test/kilocode/sessions/pr-link.test.ts 50 Raw globalThis.fetch assignment is never restored across test files.
.changeset/link-pr-and-remote-check.md 2 Feature change staged as patch rather than minor.
Files Reviewed (18 files)
  • .changeset/link-pr-and-remote-check.md - 1 suggestion
  • packages/opencode/src/cli/cmd/pr.ts
  • packages/opencode/src/kilo-sessions/kilo-sessions.ts - 1 suggestion
  • packages/opencode/src/kilo-sessions/pr-link-poller.ts - 1 critical, 1 warning, 2 suggestions
  • packages/opencode/src/kilo-sessions/pr-link.ts - 2 warnings
  • packages/opencode/src/kilocode/tool/link-pr.ts - 1 warning
  • packages/opencode/src/kilocode/tool/link-pr.txt
  • packages/opencode/src/kilocode/tool/registry.ts
  • packages/opencode/test/cli/pr-status.test.ts - 1 test-coverage note
  • packages/opencode/test/kilocode/chart-tool-gating.test.ts
  • packages/opencode/test/kilocode/kilo-sessions.test.ts - 1 test-coverage note
  • packages/opencode/test/kilocode/sessions/pr-link.test.ts - 1 suggestion
  • packages/opencode/test/kilocode/tool-registry-indexing-import-failure.test.ts
  • packages/opencode/test/kilocode/tool-registry-indexing.test.ts
  • packages/opencode/test/kilocode/tool-registry-semantic-import-failure.test.ts
  • packages/opencode/test/kilocode/tool/link-pr.test.ts
  • packages/opencode/test/kilocode/tool/send-file.test.ts
  • script/check-opencode-promise-facades.ts

Fix these issues in Kilo Cloud


Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic marked this pull request as draft September 19, 2026 01:18
@iscekic
iscekic force-pushed the kwf/owner-link-pr-8f6b branch from f6b1535 to 67543d8 Compare September 19, 2026 02:40
@iscekic
iscekic force-pushed the kwf/owner-link-pr-8f6b branch from 67543d8 to ba08be9 Compare September 19, 2026 04:18
@iscekic
iscekic marked this pull request as ready for review September 19, 2026 04:38
@iscekic

iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: link_pr rejects a URL that is not a pull request (non-retryable unhappy): have the agent call link_pr with not-a-url; the tool result says is not a pull request URL, names the accepted hosts, and kilo pr status still prints no PR linked (no capture cited it)

A repeated proof run rebuilds the same evidence, so no proof run is dispatched for a named gap. Merging with this gap open is your decision.

@iscekic iscekic added the human-ready PR is ready for a human review. label Sep 19, 2026
@iscekic iscekic self-assigned this Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

human-ready PR is ready for a human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants