Chronological record of work done on the fork. Newest entries at the top.
Companion to ../TARP-PLAN.md (the plan) and
README.md (the audit). Build artifacts live in /tmp/tarp-build/.
From a review of the three settings tabs (Appearance/Features/Keyboard shortcuts).
Removed only the clearly-dead surfaces; left agent-adjacent ones that may serve the
Ctrl-G CLI-agent workflow (ADR-011). Pushed to main (e9db7ae4, 0140166d).
- Cloud/account: hid "Confirm before closing shared session" (session sharing =
cloud); renamed "Show warning before quitting/logging out" → "…before quitting"
(no accounts). (
settings_view/features_page.rs) - In-app AI:
@context menu in terminal mode defaulted off + toggle hidden (settings/input.rs,features_page.rs); removed the three "Ask Tarp AI" keybindings from the shortcuts list (terminal/view/init.rs) — all gated onIS_ANY_AI_ENABLED, dead in Tarp. - Left (gray / ambiguous): agent font, agent-session tab titles, default session mode (may serve the Ctrl-G composer); "Accept Prompt Suggestion" (cmd-enter, ambiguous); broader shortcuts-list oddities ("Add Repository", duplicate "Close" rows) → a later action-registry pass. See BACKLOG.
Three Tarp-owned changes (app/src + app/Cargo.toml), pushed to main. Rationale
in DECISIONS.md ADR-010 / ADR-011.
-
Session palette searches & shows the tab title + color (
04cdda4c). The palette built its searchable string from prompt + command + hint only, so custom tab titles weren't matchable and every row rendered identically (vapi-ops git:(main)/clwd Running…). Threaded the pane group's custom title and the tab's resolved color intoSessionNavigationData, prepended the title to the searchable string so it dominates fuzzy scoring (prompt/command text is usually identical across sessions), and render each row with a color dot +[title](matched chars bolded). Untitled/uncolored rows unchanged. Touchessession_management.rs,pane_group/mod.rs,workspace/view.rs,terminal_pane.rs,quit_warning/mod.rs,search/command_palette/navigation/{search,render}.rs. -
macOS-native defaults (
b24ba96e): monospace font Hack→SF Mono, size 14→16, cursor Bar→Block, blink on→off (settings/font.rs,settings/editor.rs). SF Mono is macOS-only and not bundled, but font loading falls back to the embedded Hack if it's absent (appearance.rs), so the worst case is "SF Mono if installed, else Hack" — safe for the macOS-only build.copy_on_selectand confirm-on-quit already matched common prefs, left as-is. Defaults only — existing~/.tarpprofiles keep persisted values. -
Ctrl-G opens a rich-input composer for detected CLI agents (
2606c207). Pops a multi-line composer for a running CLI coding agent (Claude Code, codex, gemini, …) without enabling the agent footer/toolbar chips. Enabledcli_agent_rich_inputin thedefaultfeature set (the open handler is gated onFeatureFlag::CLIAgentRichInput); re-gated the Ctrl-G binding on an active agent session (CLI_AGENT_SESSION_ACTIVE_KEY) instead of the footer/chip context flags, so it fires only when an agent is detected in a long-running/alt-screen state and still passes through (BEL) for vim/htop/less and at a bare prompt; rendered the composer chrome-free (no toolbar — brand icon/file-explorer/ settings/attach/chips dropped; close with Ctrl-G or Escape). A narrow, deliberate re-opening of a slice of the agent surface ADR-005/007 disabled — see ADR-011. Touchesapp/Cargo.toml,terminal/view/init.rs,terminal/input/cli_agent.rs.
- Signed + notarized release.
v0.1.0rebuilt with a Developer ID cert + notarization (App Store Connect API key,.p8). Smoke-tested the published DMG:spctl→ accepted, Notarized Developer ID (Developer ID Application: … (K456B8M2ZY)), staple validates, a quarantined copy opens with only the standard one-time "downloaded from the Internet" dialog — no "unverified"/"damaged", noxattr. 7 GHA secrets configured;release.ymlsigned path +notarytool --key/--key-id/--issuerverified. Old release/tag/build runs deleted and re-cut. Install docs (README/RELEASING) updated to the signed flow; ad-hoc path kept as fallback. - UX defaults (shipped in this v0.1.0): removed the per-block command-duration
label in the prompt header; default input is the shell PS1 prompt (not the
Tarp/Universal box —
honor_ps1default true + stopped the initializer forcing Universal); default monospace font 13→14; hid the code-review settings (the "Show code review button" tab toggle + default off, and the "Choose an editor… code review panel/project explorer/global search" chooser in Features). All areapp/src(Tarp-owned). Note: input/font are defaults — existing~/.tarpprofiles keep their persisted values.
The first v0.1.0 was unusable (launch popup). After fixing that and a batch of
visual/UX issues, the broken v0.1.0 release+tag was deleted and v0.1.0 rebuilt
from the fixed code (solo user, no downloads — re-tagging the same version is fine).
What landed:
- Rainfly theme (new Tarp default).
Rainfly Dark(#121212, olive-green#7E9B3Faccent+cursor, no Warp bg image) +Rainfly Light(warm off-white). Wired as#[default]and the Sync-with-OS slots{light: RainflyLight, dark: RainflyDark}. Earlier the default was Warp'sDark/Phenomenon(blue cursor + Warp bg artwork). Other themes untouched. Revisit the rest later (BACKLOG). - Themed text selection.
text_selection_color()was a hardcoded blue; now derives from the theme accent (Rainfly → olive-green). Tracked-crate edit (warp_corecolor.rs), the documented "theme this later" hook. - Agent footers off by default. Running a coding agent (Claude Code/Codex/…)
showed Warp's CLI-agent footer (sparkle/attach/File explorer/agent-settings → an
empty page); the "Use Agent" footer showed for normal commands. Both default to
false now (
should_render_cli_agent_footer,should_render_use_agent_footer_*). - Icon root-fix. The icon only existed as a flattened mockup on white with a
baked drop shadow (
~/Desktop/tarp-2.png); pixel-surgery left a dark box or a white halo. Re-extracted the rounded device from the original with a mask tuned just inside the edge (no shadow, no halo) → new shadow-freeAppIcon-source.png. Logos now render full-bleed + squircle-masked (mirrors the Dock's masked look, so the device bezel blends instead of floating on the About panel). - In-app version fix.
release.ymlnow passes--release-tag, so the About page shows the real version (wasv#.##.###becauseapp_version()readsoption_env!("GIT_RELEASE_TAG"), never set during the build).
- Fixed every-launch "access data from other apps" prompt. Root cause:
secure_state_dir()→app_group_container_path()probed the upstream Warp app-group container (2BBY89MBSN.dev.warp) with a tempfile write on launch → macOS 26 flags it as accessing another app's data (and never persists the grant because the build is unsigned). Tarp has no app-group → returnNonefor the OSS channel (callers fall back to the state dir). Fixes it even unsigned. (crates/warp_core/src/paths.rs— tracked-crate edit, gated to OSS.) - Fixed macOS 26 (Tahoe) icon "platter". Real cause: the app icon was
transparent-padded (~84% art), which Tahoe renders on a light platter (small
icon in a white card). Fix: regenerate the icon full-bleed/opaque (flatten onto
the dark bg, fill the canvas) so Tahoe masks it into the system squircle
(
gen_brand_assets.shapp-icon step). (First suspectedUIDesignRequiresCompatibilityinupdate_plist— removing it fortarpdid NOT fix it, so that was a red herring; the permission-string/entitlement cleanup there still stands as a privacy win.) - Default cursor → Tarp olive-green. The default (Adeberry) theme's cursor fell
back to its steel-blue accent; set it to
#7E9B3F. Per-theme behavior unchanged (other themes keep their own cursor). Revisit all default themes later — BACKLOG. - Privacy/branding in
update_plist+Entitlements.plist: dropped the Warp-branded camera/mic/contacts/calendars/location/photos usage descriptions and entitlements + the Warp app-group; kept only a Tarp-worded AppleScript one. A privacy-first terminal now requests none of those (relevant once signed). - Release preflight gate (
release.yml): a fast Linux job (cargo fmt --checkcargo check --features gui) now gates the ~1.5h macOS build — a release can't be cut from an unformatted/non-compiling commit, and bad commits fail in minutes. Validated: the fmt step caught/passed correctly; cancelled the run before the full build to save minutes.
- Caching: CI Linux build + release preflight share a
linuxrust-cache key (preflight reuses the cache CI keeps warm on main);cache-all-crateson all rust-cache uses (incl. the macOS release cache) so caches survive feature/lockfile tweaks. Existing warm macOS cache preserved (key unchanged). - Status: dev build installed for the popup/icon check; once confirmed, v0.1.1 ships both macOS fixes to the published DMG.
- Released:
v0.1.0(public, not draft) withTarp-macos-arm64.dmg(154 MB) +THIRD_PARTY_LICENSES.txt(1.3 MB). - Build: 1h19m on
macos-latest(vs 1h35m cold dry-run — the macOS rust-cache saved onmainrestored cross-ref, so warm cache shaved ~16m; deps cached, workspace+LTO recompiled). In-app version auto-derived from the tag → reads 0.1.0. - Smoke test (PASS): downloaded the published DMG → mounts cleanly (drag-to-install
layout) → identity
dev.tarp.Tarp/ nameTarp→ simulated browser quarantine →xattr -dr com.apple.quarantine→ app launches. Ad-hoc/unsigned as expected (spctlrejects; documented workaround bypasses it).codesign --verifyprints a benign resources-seal warning on the ad-hoc bundle — resolved once real Developer ID signing is added. - CI fix: the slim
ci.ymlrustfmtjob had been red on everymainpush from pre-existing import-ordering drift (about_page.rs,universal_developer_input.rs); fixed withcargo fmt— CI green now. - Guardrail gap found:
release.ymlandci.ymlare independent triggers, so a release can be (and was — v0.1.0 off a red-fmt commit, harmless since fmt has no binary effect) cut from a commit whose CI is failing. Added a backlog item for a release preflight gate (fmt + check before the expensive build) and a macOS compile-check in CI (today CI only builds Linux; mac-only breakage would surface only at release time). SeeBACKLOG.md.
.github/workflows/release.yml— on avX.Y.Ztag (or manual dispatch) builds theossbundle on a macOS arm64 runner, generatesTHIRD_PARTY_LICENSESviacargo-about, packagesTarp-macos-arm64.dmg, publishes a GitHub Release. Unsigned v1; signing+notarization auto-activate whenAPPLE_*secrets are set.script/macos/bundle(script-owned):APPLE_TEAM_IDenv-overridable; unsigned DMG built from a clean staging dir; DMG volname = app name; dropped Warp install background (plain DMG).prepare_environment: rust-cachesave-ifmaster→main.- Docs:
RELEASING.md(tag flow + signing + unsigned-install workaround), README Download section, BUILD.md release-build section (+ stalewarp-oss→tarpfixes). - Brand fix: removed the opaque grey backing card + residual halo from the icon master; regenerated all assets; updated GitHub repo description.
- Status: validated via
workflow_dispatchdry-run (green) — uncached build 1h36m onmacos-latest, producedTarp-macos-arm64.dmg(~154 MB) +THIRD_PARTY_LICENSES.txt(~1.3 MB). Metal toolchain + pinned cargo-bundle both fine on the runner. Two issues fixed en route: dispatch ref to a nonexistent tag; missing cargo-bundle (now installed from the pinned fork in-workflow). First real release just awaits av*tag (Publish job runs only on tag/publish=true).
- Tarp app icon (from
tarp-2candidate): floodfilled to transparent, re-padded to the macOS grid (centered, ~84% art). README logo + GitHub social banner (1280×640, "A plain, modern terminal · No AI · No cloud · No tracking") added. script/gen_brand_assets.sh— regenerates app icon + About/README logos + social banner from one source (app/channels/oss/icon/AppIcon-source.png). Tweak source → re-run →./script/runto re-bundle.- Social preview = manual upload (GitHub Settings → Social preview).
- Handoff guide written:
ONBOARDING.md(repo root).
- Privacy: telemetry egress hard-disabled (no-op); ToS link removed; confirmed no firebase/network call on launch. No telemetry/trackers/ToS/privacy-policy (ADR-007).
- Defaults: "Sync with OS" theme on by default; config dir
~/.warp-oss→~/.tarp; logtarp.log. WARP_*env vars: confirmed user-exposed; rename toTARP_*deferred (large, risky, cosmetic) — tracked inBACKLOG.md, rationale in ADR-008.- Docs caught up: ADR-007 (privacy), ADR-008 (branding scope), BACKLOG.md created, REMOVED.md + README index updated.
- Visible-label sweep (agent): 151 files, ~466 user-visible "Warp" strings → "Tarp" across window titles, settings UI (incl. Input-type radio), menus, notifications/banners/tooltips, AI/assistant text, onboarding/dialogs, plugin prompts, SSH/Tarpify ("Warpify"→"Tarpify"). Build green, no tracked-crate edits.
- Identity / paths:
oss.rsAppId→dev/tarp/Tarp, logfilewarp-oss.log→tarp.log, embedded plist→Tarp (8f404a14); config dir~/.warp-oss→~/.tarp, data dir via AppId;TERM_PROGRAM→TarpTerminal+ XTVERSION self-idTarp(ver)(60795c71). - Kept intentionally (not user-visible / functional):
WARP_*shell-integration env vars (terminal↔shell contract, ~38 names/~87 read-sites — renaming = high risk, zero branding value); Rust identifiers/types/feature-flag names/crate names;warpdotdev/docs.warp.devupstream URLs;warp-ossartifact names inautoupdate/*(must match release artifacts; autoupdate is disabled anyway); telemetry event payload strings (backend, not UI); the required Denver copyright. - Open decisions (agent-flagged): "Tarpify" verb (applied — confirm); "Warp's Terms of Service" link still points at Warp's ToS (Tarp has none — recommend removing the link); telemetry payload rebrand (optional, not UI).
Second worktree-agent pass (ff7e6951..2bb007b2), build green, command input intact:
- Input bar (the real one =
terminal/universal_developer_input.rs, NOT the agent_input_footer the prior agent checked): removed the Agent ModeAtoggle, the AI model selector ("auto (cost-efficient)"), the@AI-context and/buttons. Kept>_terminal indicator ++file-attach. Editor/PTY paths untouched. - Command palette: dropped Warp Drive / Notebooks / Environment Variables / Agent workflows / AI Conversations chips; kept Workflows / Files (local) / Actions / Sessions / Launch configs.
- Context menus: removed "Share session" (the sign-up popup) + "Ask Warp AI" across all 4 menu builders.
- Workflow editor: removed "Generate title… with Warp AI".
- Vim banner: no longer auto-shown on launch (feature kept; enable via settings).
- Also earlier: About Warp wordmark dropped; Privacy + Shared-blocks settings tabs
removed (
886d3a17). - Residue still compiled-in (not surfaced; later cleanup): the alternate
ai/blocklist/agent_view/agent_input_footerpath (used only if UDI is off / CLI-agent sessions), "Save as workflow" drive item (gated on cloud), Ask-AI/Share keybinding registrations (gated, not visible), andai/billing/pricing/drive/voicemodules. Tracked for the deeper M6 deletion.
Worktree-agent pass (5 area commits 792254c7..cd9a8c66), build green, merged:
- Settings tabs: nav now terminal-only (Appearance, Features, Keyboard, Shared blocks, Privacy, About) — removed Account/Agents/Cloud/Teams/Referrals/Warpify/ Drive; default section → Appearance.
- About: Tarp wordmark + fork copyright (logo SVG still Warp — asset TODO).
- Privacy + links (
util/links.rs): warp.dev → the Tarp repo. - Header: removed Warp AI, Code review, Warp Essentials toolbar/tab-bar items.
- Sidebar: left panel = Global Search only (dropped Project Explorer, Warp Drive, conversation list).
- Footer/input AI (mode switcher, model selector, A/@): deferred — verified
gated on
agent_view/agent_mode(not in default) so inert/not-rendered when logged-out; excising the residual code risks the command input. Left as-is. - Earlier same session: tab-bar Sign up button, Login-for-AI banner removed; vim
prompt "Warp's"→"Tarp's" (
55e79cd8). - Remaining AI residue (follow-up, task #20): "Ask Warp AI" context-menu items
(
terminal/view.rs,init.rs), workflow "Generate title with Warp AI" (workflow_view.rs), the Warp wordmark SVG, and dropping construction of the now-hidden settings pages + input-footer code residue.
- First run showed Warp's account onboarding modal (Sign up / Sign in / Skip).
Cause:
RootView::newfell through toAuthOnboardingState::Authbecauseskip_firebase_anonymous_userisn't in Tarp's minimal default set. - Fix: desktop non-logged-in path now always enters the terminal directly (dropped the ForceLogin / agent-onboarding / login branches). Tarp has no accounts.
- Verified: boots straight into the terminal, no modal, 0 panics.
- Installed Tarp.app to
/Applicationsfor testing. First launch crashed on foreground (debug build):app_menus.rsbuilt menu items for disabled-feature actions (e.g.ToggleConversationListView) whose descriptions are absent → upstreamdebug_assert!indefault_name()panicked (release would not, it compiles the assert out). - Fix:
default_name()no longer panics; dropped the whole AI and Drive (cloud) menus from the menu bar (removed features) + stray View-menu items (ToggleWarpDrive,ToggleConversationListView). Verified Tarp.app launches and stays up with 0 panics. - This is the expected class of "non-cfg-gated edge surfaced by disabling features" (A8 warned of it). More may surface on deeper interaction; the non-panic fallback means they degrade gracefully (a stray "" item at worst) instead of crashing — mop up as found.
- Note: also kicked off then killed a background release build (it saturated CPU and starved the debug app — that was the rustc spike). Build release only when idle, or accept the debug build for testing.
- User supplied two candidates (
~/Desktop/tarp-{1,2}.png); chose tarp-2 (tarp peeled back to reveal a green terminal) — better concept fit, contrast, and fills the rounded-square per macOS convention. - Processed with ImageMagick: corner-floodfill white→transparent (preserves
interior whites), squared, full-bleed rounded. Replaced
channels/oss/icon/no-padding/{512x512.png,icon.ico}; keptAppIcon-source.png(high-res transparent master) for regen. VerifiedTarp.icnsbakes into Tarp.app. - Icon release blocker: RESOLVED. Remaining icon polish (non-blocking): retina
1024/
.iconadaptive bundle (cargo-bundle's icns generator rejected a >2-entry list; current 512 source upscales for retina) and Linux icon install verification.
a0c614c3— rewroteREADME.mdfor Tarp (dropped Warp's Oz/cloud/careers/Slack sections + product imagery; added affiliation disclaimer, Tarp build commands, AGPL/MIT + fork attribution); addedNOTICE(dual copyright per ADR-002).7b437e9e— de-WarpedSECURITY.md+CODE_OF_CONDUCT.mdcontacts (point at the Tarp repo / GitHub private advisory instead of warp.dev addresses).- M0 (tail) — done:
506f6ba9— pruned 18 Warp-internal workflows + CUT actions (docubot, get_channel_config) + scripts/issue-triage/STAKEHOLDERS; replaced the 858-lineci.ymlwith a minimal fmt-check + linux-build CI.5c0cd5eb— de-Warpeddependabot.yml(dropped warpdotdev assignees/private registry/namespace group) + fresh Tarp issue/PR templates (cut AI/Linear/SSH /cherrypick/feature-flag variants).<this>— rewroteCONTRIBUTING.mdfor Tarp (scope, build→BUILD.md, workflow, upstream-sync caution, licensing).
- M0 — branch rename DONE (separate work):
mainis default onorigin,masterdeleted,fork-basetag +upstreamremote set (ADR-006). - M0 still open:
WARP.md(12 KB Warp engineering guide) +FAQ.mdare still Warp-branded — rewrite/retire later; bulk user-facing "Warp" strings (mostly in disabled code).
Decisions used (autonomous, per ADR-001): namespace dev.tarp.Tarp; keep the
channel enum, rename only the Oss arm (low divergence per ADR-003); placeholder
icon (real art deferred). Savepoints, each committed:
b2df3773SP1 — bundle metadata:dev.warp.WarpOss→dev.tarp.Tarp, Tarp copyright (Denver kept per AGPL), plain-terminal description.ca9b7d77SP2 —warp_coreOss arm runtime identity:AppId(dev/tarp/Tarp), url schemetarp(tracked-crate edit, Oss arm only).104ea11cSP3 — binarywarp-oss→tarp, appWarpOss.app→Tarp.app(default-run,[[bin]], bundle metadata key) + all platform bundle/run scripts.9c40fc96SP4 —.desktop→dev.tarp.Tarp.desktop,about.hbs→Tarp.- Verified on macOS: builds green, bundles Tarp.app (
CFBundleIdentifier dev.tarp.Tarp, name Tarp), launches as Tarp (process…/MacOS/tarp+ terminal-server child), quits clean.
M3 remaining / TODO:
- ⚠ Icon is still Warp's art (
app/channels/oss/icon/…) — needs real Tarp logo artwork (can't generate). Must replace before public release (trademark). - Log file still named
warp-oss.log(derived, not from channellogfile_name; source not the channel config). Minor; trace + rename totarp.loglater. - User-facing "Warp" strings (window title, About, menus) +
warp.devhelp URLs +authors = ["Warp Team <dev@warp.dev>"]— large surface (~185 files, much in disabled AI/cloud code). Do the visible ones; bulk can follow.
- Decided (user): reach the no-AI/no-cloud terminal for v1 by disabling
(minimal default feature set), not deleting AI/cloud source. Pivot to branding
(M3) + first release (M4) on the current
dewarpbase. Full source deletion is an optional later project (M6). - Reasoning recorded in
DECISIONS.mdADR-005: the disabled state already meets the user-facing goal; deletion is a ~600–700-file coordinated AI+cloud surgery with high upstream divergence (fights ADR-003 sync); ship-early matches the release cadence. Removed items stay restorable via REMOVED.md. - Next: M3 — Warp→Tarp branding (bundle ids, app name, icons, strings, shell
integration) per
removal/branding-map.md.
- Investigated the "engine-only" middle path the user picked. Verdict: it doesn't
exist as a smaller option. The
ai::refs arecrate::ai::(app's internalapp/src/ai/, 459 files / ~222k LOC); 334 external files import its types;AISettingsitself importscrate::ai; and AI is co-entangled with cloud/server/auth. So AI removal = one ~600–700-file coordinated AI+cloud surgery, not sliceable, high upstream divergence. Detail:removal/ai-removal-feasibility.md. - Reframe: end-state is a spectrum — (a) features off / code present (where we are; low effort, low divergence, ships now) vs (b) code deleted (clean but big + high divergence). Recommendation: ship the disabled-AI terminal as an early release (after branding), treat full deletion as a separate optional large project.
Wave 2 — step 3: AI-removal pass → voice_input removed; AI is monolithic ✅/finding (branch dewarp, c00d58e3)
- Ran a worktree-isolated agent to attempt the AI/agent removal. Outcome: it
removed the one cleanly-excisable AI crate (
voice_input, seeREMOVED.md) to a green build with zero tracked-crate edits, and then correctly stopped. - Major scoping finding: the rest of the AI surface is one monolithic,
all-at-once removal — no further clean leaves:
ai,mcp,computer_use,input_classifier,natural_language_detectionare unconditionally compiled (not feature-gated);mcp/computer_useare leaves ofai, not independently removable.mod ai;is unconditional; AI singletons are added unconditionally inlib.rs;AISettingshas 1,146 refs across 114 always-compiled files, incl.terminal/view.rs(28,306 lines),workspace/view.rs,terminal/input.rs, persistence, server. It also reaches into the sibling cloud / code-editor / notebooks surfaces.- ⇒ removing AI = untangling
lib.rs's singleton graph + the central terminal files in one sustained ~629-file / 222k-LOC effort; it cannot be sliced into green-building increments.
- Revised plan: the AI removal is a dedicated, sustained pass (its own branch,
many build iterations, the approved
persistenceedit), not incremental leaves. Decide vehicle/approach before starting. Until thendewarpstays green with the reduced default +voice_inputgone. - Left ~333 inert
#[cfg(feature="voice_input")]warning-only sites to be deleted with the AI pass (voice is AI-coupled) — not polished now (throwaway churn).
- Telemetry Phase 1 (no-op) confirmed as the achieved state. OSS channel
defaults to
telemetry_config: None/crash_reporting_config: None; step-1 build (--features gui, excludescrash_reporting/cocoa_sentry) launched with telemetry inert and dialed nothing. No code/tracked edits needed for "off". - Key correction to the A3 spec: Group A ("delete
app/src/server/telemetry/wholesale, keep the 774 calls compiling") is NOT standalone-achievable. TheTelemetryEventenum lives inevents.rs:1262and is referenced viaTelemetryEvent::Variantat 157+ sites acrossapp/src. Telemetry code deletion therefore rides with the feature removals (AI/cloud/sharing/onboarding/ code-editor) that own those call sites, not as an up-front cut. Spec updated. - General finding: removals are more entangled than the specs implied. E.g.
voice_input(already unwired fromgui) still has 41 refs woven into the app input-editor view (app/src/editor/view/voice.rs+ state/rendering). Each removal cascades; the big AI removal in particular is a large iterative effort, best done in a focused worktree-isolated pass (perdocs/09Wave 2), not a quick deletion. - Revised approach: keep the feature-flag-reduced binary (step 1) as the stable base; execute the heavy code/crate deletions as dedicated, individually-verified passes (AI first/with code-editor, then cloud/accounts), each ending in the M1 smoke test + a commit.
- Created branch
dewarpoffmasterto keepmasterpristine (it doubles as the future upstream-sync mirror). - LSP audit (D3): confirmed every consumer of
crates/lspis in a removed surface (app/src/code/**,code_review/**,ai/**,settings_view/code_page.rs,terminal/view/init_project/**). No terminal-only path uses LSP → safe to delete. - Applied A8's minimal
default:app/Cargo.toml187 → 49 features (validated all 49 are defined). Original 189-line block saved to/tmp/tarp-build/original_default.txt. Rewiredgui = ["voice_input"]→gui = []. - Verified:
cargo build --bin warp-oss --features gui→ exit 0, 0 errors, 47 benign warnings (dead-code from now-off features). BundledWarpOss.app(codesigned, exit 0). Launched → window + Metal renderer up, quit clean. - Note: AI/cloud subsystems +
*.warp.devURLs still appear at runtime — expected; crates are still linked. This step only shrinks default behaviors (reversible). Their removal is later Wave 2 steps. - Critic reconciliations applied (from
docs/removal/00-review.md): C1 (persistence forced-edit note indep-graph.md), G1 (filename↔A# legend), G2 (feature-ownership ledger) — both in newdocs/removal/README.md; A4 "AI before/with code-editor" ordering; A3↔A8RELEASE_FLAGScross-ref.
- Ran an 8-agent parallel workflow (
wf_b0d4f86a-b9b, 9 agents incl. critic, ~736k tokens, ~4.5 min) →docs/removal/{ai,cloud-accounts,telemetry,code-editor, dep-graph,branding-map,ci-plan,feature-flags}.md+00-review.md. - Critic verdict: conditionally ready for Wave 2; keystone artifact = A8's
187→49 minimal
default. - Locked product decisions (
docs/09§Product decisions): D1 keep Mermaid · D2 remove NL-to-command (input_classifier/natural_language_detection) · D3 remove LSP · D4 keep autosuggest/autocomplete, remove only the AI predictor layer (command_predictor,app/src/ai/predict/**,prompt_suggestions_via_maa).
- Verified the unmodified fork builds + bundles + launches with no code changes
(
warp-oss, 721 MB;WarpOss.applaunches, Metal renderer, logged-out). - Required installing the Metal Toolchain (
xcodebuild -runFirstLaunchthen-downloadComponent MetalToolchain) and the pinnedcargo-bundle. Documented in../BUILD.md.
- Full audit captured in
docs/01..09+TARP-PLAN.md. - Settled naming/trademark posture (keep "Tarp", metaphor-only public rationale,
affiliation disclaimer, distinct branding) —
docs/04. - Upstream-sync strategy (selective cherry-pick of terminal-core only; tracked-vs-
owned path split governs how de-Warp is done) —
docs/08.
- Wave 2 step 2: telemetry no-op baseline (A3 Phase 1, zero tracked-crate edits).
- Then deletions in locked order: AI (predictor/NL/MCP/computer-use/voice) → code-editor + LSP → cloud/accounts.