Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ keyboard alone, and the mouse stays first-class.
lazily loaded code changes in the Local Changes-style Pierre file tree,
switch stacked/split layout in place, jump from timeline comments to their
file/thread, read GitHub review threads with replies directly beneath their code,
and add stale-head-guarded comments to selected
line ranges. A compact readiness ledger combines review,
reply to them, resolve or reopen them, and add stale-head-guarded comments to
selected line ranges. A compact readiness ledger combines review,
checks, conflicts, merge state, and provider freshness before merging with
merge-commit, squash, or rebase through a GitHub-style split control.
Authentication stays in the signed-in `gh` / `az` CLI; provider policies
Expand Down
14 changes: 12 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -1064,8 +1064,9 @@ passes on its measured platform. Doc-only change: PRD §8, `docs/perf-baseline.m
rendered Markdown, color-coded checks, discussions with top-level comment
creation, current-branch auto-open, and full-width lazy selected-file Pierre
diffs shipped 2026-07-13 through authenticated provider CLIs. Inline/review
actions, Azure policies, and merge controls remain; GitLab and Bitbucket are
follow-on provider adapters.
comments plus GitHub thread replies/resolution and merge controls now ship;
batched review actions and richer Azure parity remain. GitLab and Bitbucket
are follow-on provider adapters.
- ☐ Telemetry (opt-in, clearly disclosed)
- ☐ Localization framework + English baseline
- ☑ Performance pass on 100k-commit repos — closed 2026-07-06 with the 0.5
Expand Down Expand Up @@ -1641,6 +1642,15 @@ to local `HEAD`; it never includes unstaged drafts or creates the PR itself.
Vendor CLI health errors remain distinct from signed-out sessions, and sign-in
is preflighted before Strand reports that the browser or CLI flow has started.

**Hosted PR thread writes shipped (2026-07-15):** GitHub review-thread cards
now expose provider-permission-gated Reply and Resolve/Reopen actions. Writes
use stable GraphQL thread node IDs through the signed-in `gh` CLI, with bodies
and variables sent over stdin; the small mutation outcomes patch both the
inline Changes card and flattened Conversation timeline locally, preserving the
mounted Pierre diff, file selection, scroll, focus, and per-thread drafts.
Coordinate-based new comments retain their exact-head guard; replies and thread
state do not need one because they target an existing stable thread.

---

## 1.1+ — Post-1.0
Expand Down
9 changes: 6 additions & 3 deletions TASKS.md
Original file line number Diff line number Diff line change
Expand Up @@ -1326,9 +1326,12 @@ tree: watch the agent work, review fast, accept or reject safely.
line-range selection, persistent fetched thread cards with replies and
resolved/outdated state, and an annotation-row composer through
`repo_pull_request_inline_comment`, with
exact-head validation before publishing. Reply creation, Azure
iteration-tracked inline comments, direct binary attachment uploads,
suggestions, and thread resolution remain.
exact-head validation before publishing. GitHub thread cards now publish
immediate replies and Resolve/Reopen writes through provider-capability-
gated GraphQL mutations, patching Changes + Conversation locally without a
detail/patch reload (`repo_pull_request_thread_reply`,
`repo_pull_request_thread_resolve`). Azure iteration-tracked inline writes,
direct binary attachment uploads, and suggestions remain.
- ☐ Submit reviews: approve, request changes, dismiss/update a review where supported.
- ◐ PR review ledger + merge-readiness model (see
`docs/pull-request-improvements.md`).
Expand Down
29 changes: 29 additions & 0 deletions crates/strand-tauri/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,35 @@ pub async fn repo_pull_request_inline_comment(
.await
}

/// Reply to an existing provider review thread. The provider thread ID is a
/// stable target, so this write does not depend on diff coordinates or head SHA.
#[tauri::command(async)]
pub async fn repo_pull_request_thread_reply(
path: String,
thread_id: String,
body: String,
) -> CmdResult<pull_requests::PullRequestComment> {
run_blocking("pull request thread reply", move || {
pull_requests::reply_to_thread(&path, &thread_id, &body)
.map_err(|message| CmdError { message })
})
.await
}

/// Resolve or reopen an existing provider review thread.
#[tauri::command(async)]
pub async fn repo_pull_request_thread_resolve(
path: String,
thread_id: String,
resolved: bool,
) -> CmdResult<pull_requests::PullRequestReviewThreadUpdate> {
run_blocking("pull request thread resolution", move || {
pull_requests::set_thread_resolved(&path, &thread_id, resolved)
.map_err(|message| CmdError { message })
})
.await
}

/// Merge a hosted pull request through its provider. The expected source
/// commit prevents merging unseen updates; provider policies remain enforced.
#[tauri::command(async)]
Expand Down
2 changes: 2 additions & 0 deletions crates/strand-tauri/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ fn main() {
commands::repo_pull_request_diff,
commands::repo_pull_request_comment,
commands::repo_pull_request_inline_comment,
commands::repo_pull_request_thread_reply,
commands::repo_pull_request_thread_resolve,
commands::repo_pull_request_merge,
commands::repo_diff_unstaged,
commands::repo_diff_staged,
Expand Down
Loading
Loading