Skip to content

Update docs link - #4

Merged
alokedesai merged 1 commit into
warpdotdev:mainfrom
michlimlim:patch-1
Jul 13, 2021
Merged

Update docs link#4
alokedesai merged 1 commit into
warpdotdev:mainfrom
michlimlim:patch-1

Conversation

@michlimlim

Copy link
Copy Markdown

No description provided.

@michlimlim
michlimlim requested a review from alokedesai July 13, 2021 17:01
@alokedesai
alokedesai merged commit e7cb4f3 into warpdotdev:main Jul 13, 2021
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>
@captainsafia captainsafia added the external-contributor Indicates that a PR has been opened by someone outside the Warp team. label Apr 30, 2026 — with Warp Agent Staging
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
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>
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>
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.
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>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

external-contributor Indicates that a PR has been opened by someone outside the Warp team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants