Update docs link - #4
Merged
Merged
Conversation
alokedesai
approved these changes
Jul 13, 2021
1 task
ImL1s
pushed a commit
to ImL1s/warp
that referenced
this pull request
Apr 30, 2026
…capture + WindowContext callback wiring
Codex round-1 review (CODEX_REVISE) found 3 real Vulkan correctness blockers
plus a contract-completeness blocker on the canonical impl. Round-2 fixes:
1. **HOST_READ buffer memory barrier** before vkMapMemory
(`record_and_capture_raw` post-cmd_copy_image_to_buffer):
`vkCmdCopyImageToBuffer` writes the staging buffer; HOST_COHERENT removes
the explicit `vkInvalidateMappedMemoryRanges` requirement, but the Vulkan
spec STILL requires device write availability/visibility to host before
reading via vkMapMemory. Without this barrier, mapped memory can have
stale or partial data on conformant drivers.
- vk::BufferMemoryBarrier with src=TRANSFER_WRITE, dst=HOST_READ
- srcStage=TRANSFER, dstStage=HOST
Refs: docs.vulkan.org/spec/latest/chapters/synchronization.html (HOST_READ),
docs.vulkan.org/spec/latest/chapters/memory.html (host visibility)
2. **queue_present_khr after capture submit** to recover WSI image:
Codex repro on RFCY71LAFYE (Galaxy S25): 6 captures → validation errors
at warpdotdev#2 → Vk(TIMEOUT) at warpdotdev#4 with "Application has already previously acquired
2 images and must present or release images before acquiring more". WSI
spec requires acquired images to be returned via queue_present_khr (or
destroyed via swapchain teardown) — old code stopped after wait_idle,
never presenting, so swapchain ran out of images after 2-3 captures.
- Submit now signals `render_finished`; queue_present_khr waits on it
- Synchronous queue_wait_idle + reset fence/cmd-pool retained for
deterministic readback timing
- SUBOPTIMAL/OUT_OF_DATE on present don't fail the capture (readback
already completed); regular submit_clear_frame path will recreate
Refs: docs.vulkan.org/spec/latest/chapters/VK_KHR_surface/wsi.html
3. **WindowContext::request_frame_capture callback wiring**:
The trait method was a documented stub — not invoking the callback. AC
warpdotdev#1/warpdotdev#2 require it to deliver raw RGBA bitmap. New impl:
- `AndroidSwapchain::capture_to_callback()` runs the same readback
pipeline (now refactored as `record_and_capture_raw`), constructs
`CapturedFrame::new(width, height, rgba_bytes)`, invokes callback
synchronously
- `Window::request_frame_capture` (window.rs:325) calls it with magenta
clear color (M2-S08+ will use real scene contents once submit_scene
consumes them)
- PNG-encoding path (`record_and_capture` wrapper) shares the same
`record_and_capture_raw` engine — both raw-RGBA and PNG callers have
identical Vulkan pipeline + barriers
- Mac uses async setNeedsDisplay (mac/window.rs:1134); on Android we own
the render thread under the swapchain Mutex so synchronous is correct
Verification on Galaxy S24 Ultra (R5CX10VFFBA, Adreno 750, SDK 36):
- Single-shot: 1080x2340 magenta PNG, mean RGB (255,0,255), validation clean
- Tight-loop 10-capture stress: 10/10 succeeded in 3.9s broadcast, ZERO
Vk(TIMEOUT), ZERO validation warnings/errors, all magenta (Codex round-1
blocker 2 verifier — round-1 repro got Vk(TIMEOUT) at capture 4)
- M2-S04 60s render smoke: 7444 frames, peak 122fps, p50/p95/p99 8/9/10ms,
validation clean (no regression)
Mirror impl in main repo (crates/android-host/src/vulkan.rs) updated in
parallel commit on warp-mobile-android repo.
Web search docs consulted (2026-04-30):
- https://docs.vulkan.org/spec/latest/chapters/synchronization.html
- https://docs.vulkan.org/spec/latest/chapters/memory.html
- https://docs.vulkan.org/spec/latest/chapters/VK_KHR_surface/wsi.html
- https://docs.rs/ash/0.38/ash/vk/struct.BufferMemoryBarrier.html
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lucianfialho
added a commit
to lucianfialho/warp
that referenced
this pull request
Apr 30, 2026
… model, secrets, metadata - YAML pre-parse alias rejection: byte-scan for *[A-Za-z_] before calling serde_yaml; rejects amplification attacks before any parser work begins - Add 1MB YAML cap and alias rejection to product spec Behavior warpdotdev#4 (was tech-only); aligns both specs on all detection limits - RichContentMetadata: specify concrete StructuredDataBlock variant with source_block_id: BlockId and view_handle: ViewHandle<StructuredDataBlockView>; height changes use mark_rich_content_dirty(view_handle.id()) — same mechanism as AI blocks and other variable-height RichContent - Secrets/redaction: Behavior #19a in product spec; detection uses BlockGrid::contents_to_string default (obfuscated); tree values and all copy affordances use the same obfuscated text; unobfuscated secrets never exposed - WARP_RICH_OUTPUT: cache std::env::var result at TerminalView init; consistent across both specs as process-level only, per-command out of scope Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ImL1s
pushed a commit
to ImL1s/warp
that referenced
this pull request
Apr 30, 2026
…al mirror)
- InputEvent::TouchCancel { x, y } variant added — closes open down sequence
when Android ACTION_CANCEL fires (state machine integrity Issue warpdotdev#4 fix)
- TouchCancel added to kind()/x()/y() match arms
- AndroidInput::on_touch_cancel() method + touch_cancel_count field + InputStats
- Public touch_cancel() entry point
- Scroll variant doc updated: positive vy = finger moves DOWNWARD in Android
screen coordinates (Issue warpdotdev#5 fix — consistent with VelocityTracker semantics)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Closed
2 tasks
ImL1s
added a commit
to ImL1s/warp
that referenced
this pull request
May 1, 2026
…capture + WindowContext callback wiring
Codex round-1 review (CODEX_REVISE) found 3 real Vulkan correctness blockers
plus a contract-completeness blocker on the canonical impl. Round-2 fixes:
1. **HOST_READ buffer memory barrier** before vkMapMemory
(`record_and_capture_raw` post-cmd_copy_image_to_buffer):
`vkCmdCopyImageToBuffer` writes the staging buffer; HOST_COHERENT removes
the explicit `vkInvalidateMappedMemoryRanges` requirement, but the Vulkan
spec STILL requires device write availability/visibility to host before
reading via vkMapMemory. Without this barrier, mapped memory can have
stale or partial data on conformant drivers.
- vk::BufferMemoryBarrier with src=TRANSFER_WRITE, dst=HOST_READ
- srcStage=TRANSFER, dstStage=HOST
Refs: docs.vulkan.org/spec/latest/chapters/synchronization.html (HOST_READ),
docs.vulkan.org/spec/latest/chapters/memory.html (host visibility)
2. **queue_present_khr after capture submit** to recover WSI image:
Codex repro on RFCY71LAFYE (Galaxy S25): 6 captures → validation errors
at warpdotdev#2 → Vk(TIMEOUT) at warpdotdev#4 with "Application has already previously acquired
2 images and must present or release images before acquiring more". WSI
spec requires acquired images to be returned via queue_present_khr (or
destroyed via swapchain teardown) — old code stopped after wait_idle,
never presenting, so swapchain ran out of images after 2-3 captures.
- Submit now signals `render_finished`; queue_present_khr waits on it
- Synchronous queue_wait_idle + reset fence/cmd-pool retained for
deterministic readback timing
- SUBOPTIMAL/OUT_OF_DATE on present don't fail the capture (readback
already completed); regular submit_clear_frame path will recreate
Refs: docs.vulkan.org/spec/latest/chapters/VK_KHR_surface/wsi.html
3. **WindowContext::request_frame_capture callback wiring**:
The trait method was a documented stub — not invoking the callback. AC
warpdotdev#1/warpdotdev#2 require it to deliver raw RGBA bitmap. New impl:
- `AndroidSwapchain::capture_to_callback()` runs the same readback
pipeline (now refactored as `record_and_capture_raw`), constructs
`CapturedFrame::new(width, height, rgba_bytes)`, invokes callback
synchronously
- `Window::request_frame_capture` (window.rs:325) calls it with magenta
clear color (M2-S08+ will use real scene contents once submit_scene
consumes them)
- PNG-encoding path (`record_and_capture` wrapper) shares the same
`record_and_capture_raw` engine — both raw-RGBA and PNG callers have
identical Vulkan pipeline + barriers
- Mac uses async setNeedsDisplay (mac/window.rs:1134); on Android we own
the render thread under the swapchain Mutex so synchronous is correct
Verification on Galaxy S24 Ultra (R5CX10VFFBA, Adreno 750, SDK 36):
- Single-shot: 1080x2340 magenta PNG, mean RGB (255,0,255), validation clean
- Tight-loop 10-capture stress: 10/10 succeeded in 3.9s broadcast, ZERO
Vk(TIMEOUT), ZERO validation warnings/errors, all magenta (Codex round-1
blocker 2 verifier — round-1 repro got Vk(TIMEOUT) at capture 4)
- M2-S04 60s render smoke: 7444 frames, peak 122fps, p50/p95/p99 8/9/10ms,
validation clean (no regression)
Mirror impl in main repo (crates/android-host/src/vulkan.rs) updated in
parallel commit on warp-mobile-android repo.
Web search docs consulted (2026-04-30):
- https://docs.vulkan.org/spec/latest/chapters/synchronization.html
- https://docs.vulkan.org/spec/latest/chapters/memory.html
- https://docs.vulkan.org/spec/latest/chapters/VK_KHR_surface/wsi.html
- https://docs.rs/ash/0.38/ash/vk/struct.BufferMemoryBarrier.html
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ImL1s
added a commit
to ImL1s/warp
that referenced
this pull request
May 1, 2026
…al mirror)
- InputEvent::TouchCancel { x, y } variant added — closes open down sequence
when Android ACTION_CANCEL fires (state machine integrity Issue warpdotdev#4 fix)
- TouchCancel added to kind()/x()/y() match arms
- AndroidInput::on_touch_cancel() method + touch_cancel_count field + InputStats
- Public touch_cancel() entry point
- Scroll variant doc updated: positive vy = finger moves DOWNWARD in Android
screen coordinates (Issue warpdotdev#5 fix — consistent with VelocityTracker semantics)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
th1nkful
pushed a commit
to th1nkful/warp
that referenced
this pull request
May 1, 2026
Five round-3 review comments, all important: 1. PRODUCT warpdotdev#4 (async timing): the "next keystroke after declaration" guarantee conflicted with warpdotdev#26's non-blocking guarantee. Reworded so the invariant is "the first keystroke after Warp has parsed the next ShellBindings payload from that prompt", with the small async window made explicit. Declarations never block typing. 2. PRODUCT warpdotdev#14 (zsh/bash reserved keys): claim that only fish has reserved keys was wrong — current zsh and bash bootstraps install binds for ^P/\C-p, \ei, \ep, \ew. Listed the reserved set per shell explicitly (zsh: 2, bash: 4, fish: 4); user bindings on those keys import as "reserved-by-warp" and don't fire. 3. tech.md fish nonce: fish runs config.fish before --init-command, so an env-var nonce is readable to user code. Added a fish-specific path: nonce written to a 0600 tempfile under the runtime dir, path passed via --init-command, bootstrap reads then rms the file. WARP_BOOTSTRAP_NONCE env var not used for fish at all. 4. tech.md warpui_core layering: ShellTabBinding/ShellBinding can't live in the UI core. Reworked: warpui_core gets a generic set_contextual(scope_key, bindings) API only; the terminal layer (new keymap_bridge.rs) translates ShellBinding -> Binding with a ContextPredicate::TabIs predicate and BindingOrigin::Shell tag. Resolution order is enforced by predicate evaluation + origin tag, not by a new tier-typed Vec. 5. tech.md toggle test: now asserts cached-table reuse on toggle-on plus next-precmd refresh, matching the relaxed PRODUCT warpdotdev#24 from round 2. https://claude.ai/code/session_01AbtuqGqnwn4X9yo2jdQAs5
This was referenced May 1, 2026
Closed
2 tasks
1 task
cephalonaut
added a commit
that referenced
this pull request
May 7, 2026
## Description Add a required Parallelization section (#4) to the `write-tech-spec` skill, modeled after the parallelism guidance in the server-side `run_agents` prompt. Tech specs now actively evaluate whether parallel sub-agents would reduce wall-clock time or isolate work, and document the strategy including agent roles, execution mode, worktrees, branch/PR strategy, and coordination boundaries. ## Linked Issue N/A — internal skill improvement. ## Testing Documentation-only change (skill markdown file). No code changes. ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode Co-Authored-By: Oz <oz-agent@warp.dev> Co-authored-by: Oz <oz-agent@warp.dev>
trungtai1805
pushed a commit
to trungtai1805/warp
that referenced
this pull request
May 9, 2026
…tdev#10400) ## Description Add a required Parallelization section (warpdotdev#4) to the `write-tech-spec` skill, modeled after the parallelism guidance in the server-side `run_agents` prompt. Tech specs now actively evaluate whether parallel sub-agents would reduce wall-clock time or isolate work, and document the strategy including agent roles, execution mode, worktrees, branch/PR strategy, and coordination boundaries. ## Linked Issue N/A — internal skill improvement. ## Testing Documentation-only change (skill markdown file). No code changes. ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode Co-Authored-By: Oz <oz-agent@warp.dev> Co-authored-by: Oz <oz-agent@warp.dev>
tungd
pushed a commit
to tungd/warp
that referenced
this pull request
May 11, 2026
…tdev#10400) ## Description Add a required Parallelization section (warpdotdev#4) to the `write-tech-spec` skill, modeled after the parallelism guidance in the server-side `run_agents` prompt. Tech specs now actively evaluate whether parallel sub-agents would reduce wall-clock time or isolate work, and document the strategy including agent roles, execution mode, worktrees, branch/PR strategy, and coordination boundaries. ## Linked Issue N/A — internal skill improvement. ## Testing Documentation-only change (skill markdown file). No code changes. ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode Co-Authored-By: Oz <oz-agent@warp.dev> Co-authored-by: Oz <oz-agent@warp.dev>
Kira-Pgr
referenced
this pull request
in EnSue-Laboratories/warp
May 19, 2026
control surface on `#[cfg(unix)]`; fall back when no active window. This commit closes the remaining gaps from the code review on PR #1: - **tab focus** (`WorkspaceAction::ActivateTab(idx)`), **pane focus** (`PaneGroupAction::FocusTerminalView(view_id)` plus auto-activate the owning tab so cross-tab focus actually moves the user), **pane close** (`PaneGroup::close_pane(pid)` with proper PaneId lookup), and **block read** (`BlockList::block_with_id`) are now real implementations instead of "not implemented in v0" stubs. - Fix #3 (`pane split --pane <id>` honoring the flag): focus the requested pane first via `FocusTerminalView`, then dispatch `PaneGroupAction::Add(direction)`. `add_terminal_pane` reads `focused_pane_id` as its split source, so without focusing first the split would always have used whichever pane happened to have focus. - Fix #4 (`#[cfg(unix)]` gating): `mod cli_control` and `mod control_server` are now Unix-only, and the dispatchers in `app/src/lib.rs` (the CLI fast path) and `app/src/ai/agent_sdk/mod.rs` return a clear "only available on Unix targets" error on `#[cfg(not(unix))]`. Windows / WASM builds no longer pull in `std::os::unix::net::Unix*`. - Active-workspace lookup: when no Warp window is frontmost (the common case when the CLI is invoked from another terminal), fall back to any registered workspace instead of erroring out. With a single Warp instance this is unambiguous; with multiple, the user can focus the desired window first to disambiguate. - List queries now filter panes hidden for close (`PaneGroup::is_pane_hidden_for_close`). Without this, `pane close` appeared to no-op because the undo-close machinery keeps the pane in `pane_contents` for restoration. `tab list` / `pane list` now reflect what the user actually sees. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lawsmd
pushed a commit
to lawsmd/cortex
that referenced
this pull request
May 22, 2026
…tdev#10400) ## Description Add a required Parallelization section (warpdotdev#4) to the `write-tech-spec` skill, modeled after the parallelism guidance in the server-side `run_agents` prompt. Tech specs now actively evaluate whether parallel sub-agents would reduce wall-clock time or isolate work, and document the strategy including agent roles, execution mode, worktrees, branch/PR strategy, and coordination boundaries. ## Linked Issue N/A — internal skill improvement. ## Testing Documentation-only change (skill markdown file). No code changes. ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode Co-Authored-By: Oz <oz-agent@warp.dev> Co-authored-by: Oz <oz-agent@warp.dev>
2 tasks
cephalonaut
added a commit
that referenced
this pull request
May 27, 2026
Address the rest of the Phase 1 review comments on top of the prior three Phase 1 commits and the constants-only followup. Hydration (pane_group/mod.rs): - decide_remote_child_hydration_action now filters empty/whitespace conversation_id tokens and falls through to Fallback (#3), and records task_is_terminal: bool so we can distinguish Inactive (terminal) from ActiveUnattachable (still running on the server). - hydrate_remote_child_transcript_in_place takes task_is_terminal and skips the conversation-ended tombstone for non-terminal tasks (#1), so a still-streaming ActiveUnattachable run does not look ended in the local UI. - The async continuation guard inside the spawn now also asserts that child_agent_panes[child_id] still equals the pane id we dispatched against AND the pane's terminal view's active_conversation_id is still child_id, so a racing nav or competing hydration cannot clobber a stale target (#2). - enter_remote_child_existing_session_in_place renamed to apply_existing_ambient_task_to_pane to reflect what it actually does at the pane-group layer (#14). - pending_remote_child_hydrations switched from a tuple value to a named PendingRemoteChildHydration struct (#13). - pending_ambient_restoration_subscription_installed doc shortened (#18) and hydrate_task_backed_hidden_child_pane's idempotency comment fixed to match the actual check (pane tracked AND placeholder has at least one exchange) (#9). Merge precondition (history_model.rs): - merge_cloud_tasks_into_existing_conversation now returns an anyhow::Error when the local placeholder isn't present in conversations_by_id (#5). The caller already handles the Err arm by falling back to apply_existing_ambient_task_to_pane plus a tombstone, so we never silently construct a detached merged conversation. Optimistic-stub filter (persistence/model.rs + conversation_loader.rs): - Added AgentConversation::into_tasks_for_restore(self) -> Vec<api::Task> consolidating the optimistic-stub filter behind one named helper (#4); call site in conversation_loader.rs now destructures the AgentConversation and routes through the helper, and the persistence::model imports are grouped into a single line (#15). Eviction (persistence/agent.rs): - select_conversations_to_evict's first-iteration branch rewritten with an iter.next() pattern instead of the first: bool flag (#17), and parse_failure_is_treated_as_standalone_tree renamed to parse_failure_row_is_treated_as_root_and_can_be_referenced_by_others to reflect what the test actually proves (#10). Tests: - pane_group/mod_tests.rs: LoadTranscript assertions updated for the new task_is_terminal field; tuple .0/.1 syntax replaced with the named PendingRemoteChildHydration struct fields; new decide_remote_child_hydration_empty_token_falls_back test for the empty/whitespace filter; hydration_decision_task helper doc-commented to spell out session_link = None (#19). - history_model_tests.rs: new merge_cloud_tasks_into_existing_conversation_preserves_placeholder_identity integration test asserting the merged conversation retains the placeholder's AIConversationId, parent linkage, agent_name, run_id, is_remote_child flag, surfaces the cloud transcript title and at least one exchange, and that calling merge with an unknown placeholder returns the precondition error (#7). Validation: cargo fmt + cargo clippy -p warp --features local_fs -D warnings + cargo clippy -p persistence --tests --all-features -D warnings + cargo nextest run pane_group:: persistence::agent::tests ai::blocklist::history_model::tests persistence::model::tests all pass on this commit. Co-Authored-By: Oz <oz-agent@warp.dev>
cephalonaut
added a commit
that referenced
this pull request
May 29, 2026
Address the rest of the Phase 1 review comments on top of the prior three Phase 1 commits and the constants-only followup. Hydration (pane_group/mod.rs): - decide_remote_child_hydration_action now filters empty/whitespace conversation_id tokens and falls through to Fallback (#3), and records task_is_terminal: bool so we can distinguish Inactive (terminal) from ActiveUnattachable (still running on the server). - hydrate_remote_child_transcript_in_place takes task_is_terminal and skips the conversation-ended tombstone for non-terminal tasks (#1), so a still-streaming ActiveUnattachable run does not look ended in the local UI. - The async continuation guard inside the spawn now also asserts that child_agent_panes[child_id] still equals the pane id we dispatched against AND the pane's terminal view's active_conversation_id is still child_id, so a racing nav or competing hydration cannot clobber a stale target (#2). - enter_remote_child_existing_session_in_place renamed to apply_existing_ambient_task_to_pane to reflect what it actually does at the pane-group layer (#14). - pending_remote_child_hydrations switched from a tuple value to a named PendingRemoteChildHydration struct (#13). - pending_ambient_restoration_subscription_installed doc shortened (#18) and hydrate_task_backed_hidden_child_pane's idempotency comment fixed to match the actual check (pane tracked AND placeholder has at least one exchange) (#9). Merge precondition (history_model.rs): - merge_cloud_tasks_into_existing_conversation now returns an anyhow::Error when the local placeholder isn't present in conversations_by_id (#5). The caller already handles the Err arm by falling back to apply_existing_ambient_task_to_pane plus a tombstone, so we never silently construct a detached merged conversation. Optimistic-stub filter (persistence/model.rs + conversation_loader.rs): - Added AgentConversation::into_tasks_for_restore(self) -> Vec<api::Task> consolidating the optimistic-stub filter behind one named helper (#4); call site in conversation_loader.rs now destructures the AgentConversation and routes through the helper, and the persistence::model imports are grouped into a single line (#15). Eviction (persistence/agent.rs): - select_conversations_to_evict's first-iteration branch rewritten with an iter.next() pattern instead of the first: bool flag (#17), and parse_failure_is_treated_as_standalone_tree renamed to parse_failure_row_is_treated_as_root_and_can_be_referenced_by_others to reflect what the test actually proves (#10). Tests: - pane_group/mod_tests.rs: LoadTranscript assertions updated for the new task_is_terminal field; tuple .0/.1 syntax replaced with the named PendingRemoteChildHydration struct fields; new decide_remote_child_hydration_empty_token_falls_back test for the empty/whitespace filter; hydration_decision_task helper doc-commented to spell out session_link = None (#19). - history_model_tests.rs: new merge_cloud_tasks_into_existing_conversation_preserves_placeholder_identity integration test asserting the merged conversation retains the placeholder's AIConversationId, parent linkage, agent_name, run_id, is_remote_child flag, surfaces the cloud transcript title and at least one exchange, and that calling merge with an unknown placeholder returns the precondition error (#7). Validation: cargo fmt + cargo clippy -p warp --features local_fs -D warnings + cargo clippy -p persistence --tests --all-features -D warnings + cargo nextest run pane_group:: persistence::agent::tests ai::blocklist::history_model::tests persistence::model::tests all pass on this commit. Co-Authored-By: Oz <oz-agent@warp.dev>
cephalonaut
added a commit
that referenced
this pull request
May 29, 2026
Address the rest of the Phase 1 review comments on top of the prior three Phase 1 commits and the constants-only followup. Hydration (pane_group/mod.rs): - decide_remote_child_hydration_action now filters empty/whitespace conversation_id tokens and falls through to Fallback (#3), and records task_is_terminal: bool so we can distinguish Inactive (terminal) from ActiveUnattachable (still running on the server). - hydrate_remote_child_transcript_in_place takes task_is_terminal and skips the conversation-ended tombstone for non-terminal tasks (#1), so a still-streaming ActiveUnattachable run does not look ended in the local UI. - The async continuation guard inside the spawn now also asserts that child_agent_panes[child_id] still equals the pane id we dispatched against AND the pane's terminal view's active_conversation_id is still child_id, so a racing nav or competing hydration cannot clobber a stale target (#2). - enter_remote_child_existing_session_in_place renamed to apply_existing_ambient_task_to_pane to reflect what it actually does at the pane-group layer (#14). - pending_remote_child_hydrations switched from a tuple value to a named PendingRemoteChildHydration struct (#13). - pending_ambient_restoration_subscription_installed doc shortened (#18) and hydrate_task_backed_hidden_child_pane's idempotency comment fixed to match the actual check (pane tracked AND placeholder has at least one exchange) (#9). Merge precondition (history_model.rs): - merge_cloud_tasks_into_existing_conversation now returns an anyhow::Error when the local placeholder isn't present in conversations_by_id (#5). The caller already handles the Err arm by falling back to apply_existing_ambient_task_to_pane plus a tombstone, so we never silently construct a detached merged conversation. Optimistic-stub filter (persistence/model.rs + conversation_loader.rs): - Added AgentConversation::into_tasks_for_restore(self) -> Vec<api::Task> consolidating the optimistic-stub filter behind one named helper (#4); call site in conversation_loader.rs now destructures the AgentConversation and routes through the helper, and the persistence::model imports are grouped into a single line (#15). Eviction (persistence/agent.rs): - select_conversations_to_evict's first-iteration branch rewritten with an iter.next() pattern instead of the first: bool flag (#17), and parse_failure_is_treated_as_standalone_tree renamed to parse_failure_row_is_treated_as_root_and_can_be_referenced_by_others to reflect what the test actually proves (#10). Tests: - pane_group/mod_tests.rs: LoadTranscript assertions updated for the new task_is_terminal field; tuple .0/.1 syntax replaced with the named PendingRemoteChildHydration struct fields; new decide_remote_child_hydration_empty_token_falls_back test for the empty/whitespace filter; hydration_decision_task helper doc-commented to spell out session_link = None (#19). - history_model_tests.rs: new merge_cloud_tasks_into_existing_conversation_preserves_placeholder_identity integration test asserting the merged conversation retains the placeholder's AIConversationId, parent linkage, agent_name, run_id, is_remote_child flag, surfaces the cloud transcript title and at least one exchange, and that calling merge with an unknown placeholder returns the precondition error (#7). Validation: cargo fmt + cargo clippy -p warp --features local_fs -D warnings + cargo clippy -p persistence --tests --all-features -D warnings + cargo nextest run pane_group:: persistence::agent::tests ai::blocklist::history_model::tests persistence::model::tests all pass on this commit. Co-Authored-By: Oz <oz-agent@warp.dev>
cephalonaut
added a commit
that referenced
this pull request
May 29, 2026
Address the rest of the Phase 1 review comments on top of the prior three Phase 1 commits and the constants-only followup. Hydration (pane_group/mod.rs): - decide_remote_child_hydration_action now filters empty/whitespace conversation_id tokens and falls through to Fallback (#3), and records task_is_terminal: bool so we can distinguish Inactive (terminal) from ActiveUnattachable (still running on the server). - hydrate_remote_child_transcript_in_place takes task_is_terminal and skips the conversation-ended tombstone for non-terminal tasks (#1), so a still-streaming ActiveUnattachable run does not look ended in the local UI. - The async continuation guard inside the spawn now also asserts that child_agent_panes[child_id] still equals the pane id we dispatched against AND the pane's terminal view's active_conversation_id is still child_id, so a racing nav or competing hydration cannot clobber a stale target (#2). - enter_remote_child_existing_session_in_place renamed to apply_existing_ambient_task_to_pane to reflect what it actually does at the pane-group layer (#14). - pending_remote_child_hydrations switched from a tuple value to a named PendingRemoteChildHydration struct (#13). - pending_ambient_restoration_subscription_installed doc shortened (#18) and hydrate_task_backed_hidden_child_pane's idempotency comment fixed to match the actual check (pane tracked AND placeholder has at least one exchange) (#9). Merge precondition (history_model.rs): - merge_cloud_tasks_into_existing_conversation now returns an anyhow::Error when the local placeholder isn't present in conversations_by_id (#5). The caller already handles the Err arm by falling back to apply_existing_ambient_task_to_pane plus a tombstone, so we never silently construct a detached merged conversation. Optimistic-stub filter (persistence/model.rs + conversation_loader.rs): - Added AgentConversation::into_tasks_for_restore(self) -> Vec<api::Task> consolidating the optimistic-stub filter behind one named helper (#4); call site in conversation_loader.rs now destructures the AgentConversation and routes through the helper, and the persistence::model imports are grouped into a single line (#15). Eviction (persistence/agent.rs): - select_conversations_to_evict's first-iteration branch rewritten with an iter.next() pattern instead of the first: bool flag (#17), and parse_failure_is_treated_as_standalone_tree renamed to parse_failure_row_is_treated_as_root_and_can_be_referenced_by_others to reflect what the test actually proves (#10). Tests: - pane_group/mod_tests.rs: LoadTranscript assertions updated for the new task_is_terminal field; tuple .0/.1 syntax replaced with the named PendingRemoteChildHydration struct fields; new decide_remote_child_hydration_empty_token_falls_back test for the empty/whitespace filter; hydration_decision_task helper doc-commented to spell out session_link = None (#19). - history_model_tests.rs: new merge_cloud_tasks_into_existing_conversation_preserves_placeholder_identity integration test asserting the merged conversation retains the placeholder's AIConversationId, parent linkage, agent_name, run_id, is_remote_child flag, surfaces the cloud transcript title and at least one exchange, and that calling merge with an unknown placeholder returns the precondition error (#7). Validation: cargo fmt + cargo clippy -p warp --features local_fs -D warnings + cargo clippy -p persistence --tests --all-features -D warnings + cargo nextest run pane_group:: persistence::agent::tests ai::blocklist::history_model::tests persistence::model::tests all pass on this commit. Co-Authored-By: Oz <oz-agent@warp.dev>
Stoica-Mihai
pushed a commit
to Stoica-Mihai/warp
that referenced
this pull request
Jun 5, 2026
…tdev#10400) ## Description Add a required Parallelization section (warpdotdev#4) to the `write-tech-spec` skill, modeled after the parallelism guidance in the server-side `run_agents` prompt. Tech specs now actively evaluate whether parallel sub-agents would reduce wall-clock time or isolate work, and document the strategy including agent roles, execution mode, worktrees, branch/PR strategy, and coordination boundaries. ## Linked Issue N/A — internal skill improvement. ## Testing Documentation-only change (skill markdown file). No code changes. ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode Co-Authored-By: Oz <oz-agent@warp.dev> Co-authored-by: Oz <oz-agent@warp.dev>
Zollicoff
pushed a commit
to Zollicoff/warp
that referenced
this pull request
Jul 2, 2026
…tdev#10400) ## Description Add a required Parallelization section (warpdotdev#4) to the `write-tech-spec` skill, modeled after the parallelism guidance in the server-side `run_agents` prompt. Tech specs now actively evaluate whether parallel sub-agents would reduce wall-clock time or isolate work, and document the strategy including agent roles, execution mode, worktrees, branch/PR strategy, and coordination boundaries. ## Linked Issue N/A — internal skill improvement. ## Testing Documentation-only change (skill markdown file). No code changes. ## Agent Mode - [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode Co-Authored-By: Oz <oz-agent@warp.dev> Co-authored-by: Oz <oz-agent@warp.dev>
This was referenced Jul 15, 2026
warp-agent-staging Bot
pushed a commit
that referenced
this pull request
Jul 20, 2026
Rework for PR #13995 review feedback: - Rename spec file `agents/specs/APP-4883: warp terminal share CLI.md` to `agents/specs/APP-4883 - warp terminal share CLI.md`. The colon is an illegal path character on Windows, causing `git checkout` (exit 128) and failing all Windows CI jobs. - Fix a shell-exit race in `TerminalShareRunner`: gate clean termination on a `shared_session_established` flag set synchronously in the `EstablishedSharedSession` event handler (same turn as printing the join link), instead of a `bootstrapped` flag set on a later async hop. This ensures the process never exits 0 before the join link is printed and never drops an `Event::Exited` that arrives during the gap. - Attribute a CLI `warp terminal share` session to `SharedSessionSource::user` instead of `ambient_agent` by threading a `share_source` through `TerminalDriverOptions`; the AgentDriver path keeps `ambient_agent`. - Document the owner-only (share-with-self) default when no `--share` recipients are given (spec Behavior #4): code comments, spec Behavior #4 / Q2 update, and a new bare-`--share` arg test. - Remove the unused `_global_options` parameter from `terminal::run` per AGENTS.md. Co-Authored-By: Warp <agent@warp.dev>
fbartho
added a commit
to fbartho/warp
that referenced
this pull request
Jul 21, 2026
…ompensation (GH13914) Oz flagged that the existing paint math (visible_left - 2*block_padding, width (visible_right - visible_left) + 2*block_padding) is asymmetric: block_padding algebraically cancels out of the right edge and only ever shifts the left edge. The prior spec wording claimed this was applied "symmetrically to both edges", which was wrong. Traced through the impl (fb/13914-code-chip-ink-width-impl, crates/warpui_core/src/text_layout.rs:1362-1405): the ink-derived edges are substituted as local visible_left/visible_right values immediately before this unchanged block_padding math runs, so the fix composes with the legacy left-only offset rather than replacing or bypassing it. The right edge ends up pure ink-geometry (block_padding cancels), but the left edge picks up an extra 2*block_padding beyond the intended ink padding — a font_size/5 (~1px at 13px) residual left/right imbalance that survives the fix, unrelated to the advance-vs-ink bug this issue targets. Documents this precisely in tech.md (new "Interaction with the legacy block_padding offset" section + Follow-up), and softens product.md's Success Criterion 1 / adds Open Question warpdotdev#4 so the spec doesn't overclaim full left/right padding equality.
This was referenced Jul 21, 2026
warp-agent-staging Bot
pushed a commit
that referenced
this pull request
Jul 28, 2026
…ction, Escape, yanks, tests - Fix #1 (CRITICAL): vim mode indicator (NOR/VIS/REP) never appeared in footer. Added TuiInputViewEvent::VimModeChanged event emitted on every mode transition in apply_vim_action. TuiTerminalSessionView now subscribes to this event and calls ctx.notify() so its footer re-renders on each vim mode change. - Fix #2 (CRITICAL): visual-mode d/c mapped to KillLine instead of visual selection. Added visual_selection_anchor: Option<CharOffset> to TuiInputView. Entering visual mode (v) records the anchor; VisualOperator::Delete/Change deletes from anchor to current cursor; VisualOperator::Yank reads the selection non-destructively. Added DeleteVisualSelection and YankVisualSelection variants to TuiVimAction and updated map_visual_operator accordingly. - Fix #3 (IMPORTANT): Escape unconditionally claimed when vim enabled, shadowing session-level bindings. Now only claimed when vim needs it: non-Normal modes (Insert/Visual/Replace) or Normal mode with pending input. In Normal mode with no pending, Escape passes through to session-level handlers (orchestration focus-main, cancel-restore). - Fix #4 (IMPORTANT): y$ used kill+re-insert making u undo the yanked text. Now reads buffer text non-destructively from cursor to line end without modifying the buffer or touching the undo stack. - Fix #5 (IMPORTANT): yw yanked entire buffer instead of one word. Now uses vim-style word boundary scan (word chars then trailing whitespace, or punctuation run then whitespace) starting at cursor position, non-destructively. - Fix #6 (TESTS): Add three required tests: vim_mode_slash_command_is_registered (verifies /vim-mode static definition and TuiOnly surface), vim_mode_slash_command _persists_toggle (exercises the toggle + settings persistence), and vim_mode_indicator_shown_only_when_vim_mode_is_enabled (verifies None when disabled, None in Insert mode, Some("NOR") in Normal mode, None after disabling). Co-Authored-By: Oz <oz-agent@warp.dev>
4 tasks
cephalonaut
added a commit
that referenced
this pull request
Aug 1, 2026
#2: Remove empty if-block for is_existing_child_placeholder in controller.rs #3: Remove dead selected_conversation_id/root_identity bindings in shared_session.rs #4: Simplify ensure_remote_child_conversation comment to focus on idempotence #10/#11: Update tracker field comments to use Primary/Observer terminology and explain when None Co-Authored-By: Oz <oz-agent@warp.dev>
cephalonaut
added a commit
that referenced
this pull request
Aug 1, 2026
#2: Remove empty if-block for is_existing_child_placeholder in controller.rs #3: Remove dead selected_conversation_id/root_identity bindings in shared_session.rs #4: Simplify ensure_remote_child_conversation comment to focus on idempotence #10/#11: Update tracker field comments to use Primary/Observer terminology and explain when None Co-Authored-By: Oz <oz-agent@warp.dev>
cephalonaut
added a commit
that referenced
this pull request
Aug 1, 2026
#2: Remove empty if-block for is_existing_child_placeholder in controller.rs #3: Remove dead selected_conversation_id/root_identity bindings in shared_session.rs #4: Simplify ensure_remote_child_conversation comment to focus on idempotence #10/#11: Update tracker field comments to use Primary/Observer terminology and explain when None Co-Authored-By: Oz <oz-agent@warp.dev>
This was referenced Aug 5, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.