Sprint 4 — The Editing Sprint
Edits landed, citations shipped, and Threads M1 hit its spike-only commitment with extras on top. The sprint closed at 67% deployed, with 83% of the cycle at or past review.
TL;DR
Sprint 4 was the editing sprint, and editing landed. The sprint closed at 67% deployed/merged (117 of 174 pts), with another 16% in review — 83% of the cycle is at or past review.
Goal 1 (Citations in tabs) shipped 100%. Goal 2 (Edits) closed with track changes + comments (LEX-280) deployed via the LEF squad. Goal 3 (Threads M1) hit its spike commitment (LEX-337 in review). Beyond the committed goals, four retroactive deliverables — the chat compaction runtime (LEX-373), the AgentBar thread-tabs foundation (LEX-340), the prompt-caching cost reduction (LEX-312), and extra edit capabilities (LEX-372) — landed or moved to review; see Extra highlights. Goal 4 (Global Lawrence) and Legal Eng carry into Sprint 5.
Sprint health
174pts
In scope
48 issues · grew from 88 mid-sprint
67%
Landed
117 pts deployed or merged · 31 issues
83%
At or past review
+28 pts in review · one merge away
57pts
Carried to Sprint 5
17 issues · 50% Legal Eng
Points distribution by status
Two-thirds of the cycle landed; another sixth is one merge away. Only 8 points sit in Todo and most of those are descope candidates.
Deployed · 25 issues
89 pts
Merged · 6
28
In review · 8
28
In progress · 4
21
Todo · 5
8
Deployed (51%)
Merged (16%)
In review (16%)
In progress (12%)
Todo (5%)
Apr 30
May 2
May 4
May 6
May 8
May 10
Closed · May 12
Two-week cycle. Sprint 5 starts Wed May 14.
Sprint goals — at a glance
The 6 goals as committed at sprint start. Significant work landed outside this scope too — see Extra highlights.
8 / 8 pts · 2 issues shipped
Citations and case files now open as tabs inside the artefact canvas instead of ejecting users to the browser or the PDF module.
What landed
- LEX-343 Citations open in canvas tabs (5pt, Pratik)
- LEX-358 File-level citations — v3 parity (3pt, Adolfo)
- PR #9935 / #9940 SidebarCitationBadge + canvas-tab integration
Goal 2 · Heart of the sprint
Edits
Done
~42 / 50 pts · 11 issues · LEX-280 closed via LEF
The edit pipeline shipped end-to-end across agents, platform-v3, and ooxml. Tracked changes + comments delivered by the LEF squad (LEF-1004, Maxton) — LEX-280 closed.
What landed (LEX + adjacent LEF)
- VFSClient.edit() + /vfs/edit endpoint
- Edit resolver: targeting, planning, Y.js apply
- DocMap extended with blockId + textHash
- Editable-surface registry (LEX-Edit U5/U6b)
- EditorModeToggle in sidebar matter-document tab
- ooxml v0.6.1 — red strikethrough for deletion half
- Real document name in sidebar tabs (no more "Matter-document")
- Adjacent (LEF-1004, Maxton): Suggesting mode + suggestions rail (#9877/#9878), inline document comments (#9882–#9884), tests + storybook (#9880/#9883/#9886), precedent-drafting strip (#9918), comment review fixes (#9936)
- Post-RCA follow-up in review: separate ticket LEX-372 with new format / set_block / list_op commands in the edit DSL — see Extra highlights.
0 / 5 pts · spikes-only scope
Committed scope was research-only. Cross-thread spike landed in review; build work for the matter-level threads runtime + UX also shipped this sprint outside the original scope — see Extra highlights.
Spikes
- LEX-337 Cross-Thread Referencing spike — Peter (In Review). Determines how Lawrence retrieves information from other threads in the same matter without dragging full transcripts into context.
- The "context-window management / new thread prompting" companion spike from the goals page wasn't tracked as a separate Linear ticket — addressed via the cost-reduction work in Extra highlights.
Goal 4 (stretch)
Global Lawrence
UX foundation in
0 / 3 pts tracked · planning + shared UX
Vision doc (LEX-259) still in review. But the AgentBar UX foundation Global Lawrence will share with Threads M1 is deployed, and planning artefacts cover the backend path.
Backend planning + frontend foundation
- Backend exploration (Adolfo, no code yet): Agents Backend Refactor — High-Level Plan; Framework Adoption — May 2026 Evaluation; API redesign exploration for multi-agent / non-matter-scoped flows.
- Frontend foundation — deployed (Pratik, under LEX-340): AgentBar shell + tabs same surface Global Lawrence will use. Design convergence explicit.
- Still expected for stretch: PRD out of WIP, spike, finalised designs — Sprint 5 prep.
Goal 5 · Designs in progress
Misc scoping & designs
In progress
~0 / 10 pts tracked · design tracks not pointed
Sedona's design tracks are moving on a shared interaction model with the AgentBar work — matter-scoped and global surfaces converge.
Tracks underway
- Designs (Sedona): skills library + trigger-point consolidation, task manipulation, intake forms — share AgentBar UX with Threads M1 / Global Lawrence
- LEX-256 Skills DB + reference instructions (8pt, Peter) — In Progress
- LEX-292 Feedback / brainstorming plan (2pt, Emtenan) — In Review
- LEX-293 Discovery session — Deployed
- Adjacent untagged: task-adapter / key-date-adapter / tRPC + VFS stack (#9774–#9779, #507–#508) — enables Sedona's task-manipulation track
Goal 6 · Legal Eng
Multi-jurisdictional & data
57%
~24 / 42 pts · 15 issues · the heavy carry-over
Multi-jurisdictional foundations are in motion. Most planning artefacts are in review; demo content carries into Sprint 5 — Emtenan's heavy track.
Open items
- In review: LEX-356 Legal Data Strategy (8pt, Harry), LEX-357 spike/research plan (3pt), LEX-348 LCO Spike Plan (2pt), LEX-302 Lawra PRD (0pt)
- In progress: LEX-311 Hackathon 10x Cases (8pt, Emtenan), LEX-351 LCO PRD (5pt), LEX-347 LCO Generation Spike
- Todo: LEX-323/324 demo stories (0pt)
Major implementations that landed (or moved to review) this sprint outside the originally-committed goals. All four were retroactively ticketed late-sprint to reflect what actually shipped — together they account for 21 pts of work that would otherwise have been invisible in velocity.
Threads M1 · runtime
LEX-373 · Chat compaction
Deployed · 8 pt · Peter
Conversation compaction in the chat agent. Threads M1 was scoped to spikes only; this is the runtime piece, now in prod. Matter-level conversations can stay inside the context window without losing semantic continuity, and Sprint 5 can pick up cross-thread referencing without re-laying groundwork.
PRs landed
- #536 compaction-package — core primitive
- #537 splitting-at-summary — summary-boundary split
- #538 summarisation — summary generation
- #539 wire-into-chat-agent — overflow path
- #9934 platform-v3 persistence + progress message
Threads M1 · UX foundation
LEX-340 · AgentBar thread tabs
Deployed · 5 pt · Pratik
Frontend shell + components for thread tabs on the matter page. Same UX surface Global Lawrence will share, so design convergence is explicit. Wiring continues in Sprint 5 (LawrenceChatManager, FloatingLawrencePanel, docked sidebar mode).
PRs landed
- #9980 shell prototype story for agent bar + sidebar layout
- #9982 AgentBarTab, AgentBarIdentifier, AgentBarNewThreadButton, AgentBarOverflowBadge
- #9983 AgentBar composed component + Storybook stories
- #9992 AgentBarAllChatsButton with animated count + active state
- #9995 AllChatsPopover for thread selection
Cost & performance
LEX-312 · Prompt-caching · ~90% cost reduction
Deployed · 3 pt · Adolfo
Investigation + implementation of Anthropic prompt caching across the chat agent loop and turns. Measurable cost reductions on chat traffic, with two upstream LiteLLM bugs surfaced and fixed along the way. 40 unit tests + a solution doc landed alongside.
Details
- Full investigation report — methodology, traces, and the two LiteLLM bugs (streaming consumer dropping cache fields; cache breakpoint anchoring)
- PR #501 — agents-side implementation
- Unblocks compaction threshold tuning, Haiku-routing for tool calls, and the static/dynamic prompt-split for cross-session caching — Sprint 5 follow-ups
Post-RCA follow-up
LEX-372 · Extra edit capabilities (formatting, headings, lists)
In Review · 5 pt · Adolfo
New format, set_block, and list_op commands in the edit DSL — closes the bold / italic / heading / alignment / list-conversion gaps surfaced in the Lawrence-2 doc-editing RCA. Lands early Sprint 5.
PRs in review
- #10125 platform-v3: add format command
- #10128 platform-v3: add set_block command
- #10129 platform-v3: add list_op command
- #10087 platform-v3: preserve inherited marks on replace ops
- Companion agents-side docs: #572, #573, #574
Untracked Sprint 4 work — worth surfacing
Real Sprint 4 deliverables that don't show in Linear velocity. Three retroactive tickets created late-sprint (LEX-340 AgentBar, LEX-373 compaction, LEX-372 edit-DSL follow-up) brought 18 pts back into the count, but more remained untracked:
Backend infra to migrate lawrence-api to the new agents-gw subdomain (Adolfo)
Gateway ALB hostname scoping (#565), gateway URL as queryable value (#567), point Inngest sync at new-infra URL (#10100), point AGENT_GATEWAY_SERVICE_URL at agents-gw subdomain (#10102), ENVIRONMENT/DEPLOYED_ENVIRONMENT fallback (#10047), and an agent-definition fix to stop double-counting cache_read as fresh input (#564). Closes the post-LEX-312 reporting gap and unblocks the multi-region rollout.
~3–5 pts
Tasks / keydates VFS namespace expansion (Peter)
Agents-side namespaces (#507, #508), platform-v3 adapters and tRPCs (#9771, #9774, #9775, #9777, #9779). Adjacent to LEX-273 (Harry, Deployed) but the bulk landed under Peter. Directly enables Sedona's task-manipulation design track for Sprint 5.
~3–5 pts
Sidebar dev-tools + polish (Pratik)
Agent stream playground stack (#9687–#9692, #9961), ShimmerText rewrite + components (#9689, #9690, #9921), sidebar input/scroll/mask polish (#9705, #9706), renderer adapter registry refactor (#9801, #9839), animated tag (#9815). Most of this surfaces in the polish chip strip below.
~3–5 pts
Demos + late-deploys (Emtenan, Sedona, Harry)
LEX-364 Update Evictions (UK), LEX-352 Draft from precedent with case details, LEX-358 file-level citations v3 parity. All Deployed late-sprint.
UI polish & sidebar refinement
A lot of unticketed quality landed in the agent-sidebar surface — often invisible but real.
ShimmerText CSS rewrite #9690
AgentStream playground #9688–#9692
AnimatedNumber + count list + text reveal #9689
Input text size + line height #9705
Top fade mask + sticky-message removal #9706
LEX-330 width sync on persisted layout #9737
SidebarContentService adapter registry #9801
SidebarMatterDocumentRenderer + useContentTabMetadata #9839
ShimmerText spread prop cleanup #9921
Sidebar message limit 20 → 50 #9841
Tab streaming indicator #10026
Animated tag #9815
Bugs squashed
| Area | What | PR |
| ooxml editor | Deletion-replacement strikethrough rendering | #56 |
| Sidebar tabs | Document tab showed "Matter-document" instead of real name | #9904 |
| Schema | platform-v3 ↔ content-retrieval drift | #80 |
| Build / dev | Zod hoisting for @hookform/resolvers | #9866 |
| Publishing | Publishing precedents | #9745 |
| CI | Broken component tests on develop | #9916 |
Lessons learnt
What went well
- Edit pipeline shipped end-to-end across agents + platform-v3 + ooxml — a non-trivial multi-repo coordination that delivered the headline goal.
- Spike-to-build velocity on Threads M1. Peter and Pratik converted a spike-only goal into landed groundwork without breaking the cycle commitment. Adolfo's LEX-312 spike shipped a measurable 87–91% cost reduction on chat traffic via Anthropic prompt caching.
- Untagged sidebar polish quality stayed high through 20+ small PRs.
What to improve
- Scope grew 88 → 174 pts mid-sprint. Worth a retro: was the original estimate too tight, or did Threads M1 over-pull? Mid-sprint scope additions are now this team's pattern.
- Untracked-work problem persists — partially addressed. Three retroactive tickets recaptured 18 pts of real ship late-sprint. But infra, tasks/keydates VFS, and dev-tools polish are still off the books. Worth instituting "ticket on PR open, not on PR merge" as a default.
- G4 (Global Lawrence) and Sedona's design tracks remain Linear-invisible. Worth surfacing as explicit cycle items in Sprint 5 so the planning velocity is legible.
Sprint 5 preview
May 14 → May 27 2026. Full goals: LEX Sprint 5 Goals.
| Goal |
Highlights |
| G1 — Forms |
Immigration firm demo end-to-end · Flattened-PDF pipeline drops human-in-the-loop · Front-end forms UI |
| G2 — Granular Citations |
Implementation lands · Front-end 150-character preview cap |
| G3 — Threads M1 |
Back-end + front-end tech plans · Front-end shell scaffolded |
| G4 — Create & Edit polish |
Triage and fix bugs surfaced in the M1 test pass |
| G5 — Intake forms |
High-level tech plan to unblock build in subsequent sprints |
| G6 — Legal Eng |
Legal Data Strategy tech plan · Demo support (immigration firm demo + storylines) |