The rehearsal copied 8,412 active keys and preserved every value.
Inspect the command trace
copy --source cache-v1 --target cache-v2 --active-only
verify --source cache-v1 --target cache-v2 --compare values
switch --readers checkout-api,orders-api
Try Leaf chrome and the default package on one synthetic page. Optional widgets have focused working pages in the package catalog.
Use the contents spine or Page Map to find a feature. A feature eyebrow lists
the literal lf-* code names for what that section demonstrates. On
a desktop, hover the compact spine or press g to reveal its labels
over the settled page; wide boards keep the same allocation while the map is
open. Leaf puts circular controls and status indicators at page edges. Hover
over one for its label, or Tab into a group and use ← / → and Enter. Press
a to move through Asks. Changes persist on reload.
data-width
Prose keeps the reading column inside this wide section. Individual evidence blocks can instead use the shared wide measure or all space the shell has left.
| Allocation | Use |
|---|---|
| Column | Explanations and other continuous reading |
| Wide | Tables, code, and comparisons with a shared cap |
| Available | Dense evidence that benefits from every free pixel |
lf-ask · lf-options · lf-option
An lf-ask is one complete Ask: its heading names the question,
and one nested widget owns the answer. This sample uses
lf-options, which records a choice Leaf can replay as page state.
The banner shows completed/total. Press a for the next Ask waiting
on you; open Asks, or press g then
Shift+A, to review every active Ask and its current answer.
The banner also shows Threads, the Versions menu, Page Map (g then Shift+M), Command reference (? twice), and All leaves when another Leaf page is live. A quiet status line at the bottom right reports the current keyboard walk or a useful command result. It moves above the bottom-left shortcuts when room is tight.
lf-suggestion · lf-old · lf-new
Accept applies the proposed text; Reject keeps the original. Undo reverses either decision.
Replace. The sample meeting starts at
Pick a route inside the proposal, accept the proposal, then use its Undo control. The proposal becomes undecided again; your route remains chosen. Reload to check that both decisions survive.
Keep the practice walk indoors.
Take the practice walk outside.
lf-draft
Edit opens a draft. Save records the new text; Cancel closes the editor. Changes lists saved versions, and Restore reapplies one.
Write a different invitation here. Try a few lines to see the editor grow.
Picked up means the saved edit entered an agent turn. The receipt follows that edit through delivery and response. The banner describes the agent’s overall availability, including work on other parts of the page.
The sample workshop is in the blue room.
With Threads closed, a Thread control or marked passage opens the thread inline; t moves to the next inline card and T to the previous one. Open Threads while one is focused, including with g T, and the same thread stays focused in the panel. Under View, filters narrow the list to Open, On you, On agent, or Resolved, and combine Page or Anchored with Content or Layer. Order switches the list from the page's order to Recent, which puts the thread spoken in last first under its day. Collapsed titles retain their message count and current status; On you also names the action owed. Each thread has a short title chosen by the agent; open one to read the full messages beneath it.
New information. Have the agent add a message after the page opens: its status-line notice also reaches the live region without moving focus. A new question, response failure, request outcome, or return to page activity uses that same line. Replies still unread when the page opens are announced once on arrival; rereading a stage or tool update creates no new notice.
A clean passage. Select some of these words, or Alt-click this paragraph, to start a comment. On a touch screen, select words and tap Comment on selection in the banner. The field opens after the native selection menu closes. To comment on the whole paragraph, open More page controls, choose Select element, then tap it. Cancel selection leaves the page unchanged. Type into the floating field and send it. The thread opens with your words already in it, before the server has answered, and becomes another Thread control at this passage. In Threads, three dots pulse in its title row until the agent names it. A send slow enough to notice goes quiet until the log takes it. One the server refuses leaves the words on this passage, where opening the composer again finds them; the general box in Threads gets them back in place.
These passages have real threads in this gallery. Open Threads to compare each row's status, then open a row to inspect its messages. The first pair shows a title before and after naming.
Before · title pending
A title still pending. The workshop schedule leaves lunch open. Open Threads to view it. Its title shows three pulsing dots until the agent gives the thread a short name.
After · title assigned
An existing thread. The sample agenda has room for one more topic. Its speech-bubble control carries a blue interior and a blue glyph, and hovering it shows On you under the label. The image question still needs an answer even though the agent added a later progress update. In Threads, On you still says to answer the question. Open the control and reply: the colour goes as the thread comes back to the agent. The same reading fills the panel’s On you filter and this target’s Page Map row.
Pasted images. That thread includes an image supplied by its companion thread log, outside this document. Click the image to inspect it in Leaf’s Image preview. Paste a screenshot into its reply box to see the thumbnail Leaf keeps in the draft without exposing image Markdown.
A resolved thread. The room has a projector. Its earlier question is resolved. Open Threads in the banner, select Resolved, and try Reopen to bring its Thread control back to the page.
A summarized discussion. The workshop planning thread keeps its earlier decisions in a summary. Open it in Threads, expand the covered messages, and use the right-hand control to fold them again. The latest exchange stays below the summary. Keyboard focus can reach both disclosure controls.
Unread replies. The seeded agent replies start unread. Open Threads and use Unread, or press u there, to reveal the earliest unread reply, including one covered by a summary. A fully exposed short reply leaves the count; scroll through a long reply to read all of it. New since you last looked marks each current unread stretch, and a collapsed summary counts its unread originals until you expand them. Mark thread read, also reachable with m, marks the thread's current messages read, including authored content and folded originals, and so does replying, answering, or resolving it. A margin control whose thread holds unread replies carries the same dot as Threads. On you still identifies a question that needs an answer, even after it is read.
Select words and press E, or hover an agent reply and use its corner control. The picker is feedback for the agent, not chat decoration. A saved passage reaction leaves only its emoji; press it to reveal the separate Remove control, then press that control to take the reaction back.
1 · 👍 · keep. The spare key is with reception.
2 · ❌ · change. This sample claims Tuesday follows Thursday.
3 · 🤔 · clarify. Bring the thing from the other place.
4 · ✂️ · shorten. At this point in time, we can now begin.
5 · 🔎 · support. The exercise involves a map.
6 · 🎯 · prioritize. The side entrance closes early.
lf-margin-entry
One inventory, using the production controls. A margin entry
is runtime-owned chrome whose shared code name is
lf-margin-entry, rather than an authored element type. Rank and
behavior cover every action, disclosure, status, tone, and ordering rank.
Message workflow follows one user move: Sent records admission, Queued means a
later turn will handle it, Picked up means a turn accepted it, and Working or
Replying reports progress on its answer. Turn ended and Update stale keep
uncertainty visible without claiming an interruption. Pickup and work decorate
the existing semantic control; a status face carries the same workflow when no
control survives. Face anatomy shows the icon-or-glyph choice, a
related-reading count, and the transient label with its quieter context. User
interaction compares rest, hover or keyboard focus, an open disclosure, and a
selected page reading. Hover and Tab onto the live specimens to exercise their
real feedback. The projection specimen stands at this exhibit's margin; open
Page Map to see that same contributed control as a full labeled row. Reload to
see the one-time pulse as Working arrives. A control dims only while its user
action is waiting for the log to confirm it.
Act, fail, and settle. Accept or Reject starts as an action. The content changes immediately, and Undo dims while the event travels. A refused send restores the suggestion and puts Failed in words beside Retry and Cancel. Success leaves the changed content and an Undo control alone in the cluster. The same Agent workflow reports the decision until the result settles it.
The practice route uses
Two postures; nothing moves. A marker beside prose stands in the rail, 22px past the column. The schedule below is wider than the column and carries a comment, so its marker stands on the schedule as a pin at its top-right. Narrow the window below 863px and every marker becomes a pin. Press o to hide what is drawn over the page, the pins and the passage marks; the rail stays, and nothing on the page moves. Press it again to bring them back.
| Session | Mon | Tue | Wed | Thu | Fri | Sat | Sun |
|---|---|---|---|---|---|---|---|
| Practice | 9:00 | 9:00 | — | 9:00 | 9:00 | — | — |
| Debugging | 13:30 | — | 13:30 | — | 13:30 | — | — |
lf-ask · lf-options · lf-option
A recorded answer stays visible in the widget that owns it; the Page Map adds no second status.
This gallery deliberately leaves specimen Asks unanswered, so Approve version remains unavailable. On a settled page it records approval for the current version; z takes that approval back.
Press l, then click Street map. Leaf opens a
comment about lf-option · bg-choice-street without choosing the
option. Press Escape to leave design mode.
Press w and draw anywhere across the page. Start over this guide or in its margin to anchor the comment here; empty space with no addressable element alongside comments on the page whole. Every further stroke joins the same drawing, wherever it starts. Send the drawing alone or add words first. Escape puts the comment box away with its strokes kept, and the next stroke brings it back; a second Escape leaves Draw mode. Press w again and start over this guide: the stroke joins the kept drawing rather than replacing it.
Select a few words here, press c, and type a sentence without sending it. Press Escape: the box goes, the words stay, and a notice names the destination that returns to them. Scroll somewhere else, then press g and Shift+D — the page travels back to this passage and reopens the box on the sentence. That destination stands in the sequence only while a kept draft does, so pressing g with nothing written offers no such place to go.
lf-text-document · lf-num
lf-text-document
The document follows its source's current value. Its caption names the captured file and line range.
lf-num
This Num stores
version check reports that the measurement is
behind its source.
Press Restart on one job. Its request becomes pending while the other remains ready. The Asks tray holds one question for the whole set.
These shipped widgets use synthetic data so each feature has a focused example.
lf-grid · lf-metric · lf-chart
Metrics show individual values as tiles, and a Chart compares the values across runs. The metric row and the template grid under it keep to the column, and the three charts take the wide width. Narrow the window: the metric row and the chart grid rewrap a column at a time, and the template grid stacks once it is narrower than 696px. Its log holds its own height and stays on its newest line until you scroll back.
run, baseline, candidate 1, 4, 5 2, 7, 9 3, 9, 12
run, checks first, 5 second, 9 third, 12
run, passed, failed first, 5, 3 second, 9, 2 third, 12, 0
Twelve checks complete and none failed. The log beside this cell is the run's own output.
12:00:01 runner start run=3 checks=12 12:00:04 check schema ok 12:00:07 check migrations ok 12:00:09 check importer-unit ok 12:00:12 check importer-replay ok 12:00:15 check ledger-parity ok 12:00:18 check api-contract ok 12:00:21 check sdk-build ok 12:00:24 check docs-links ok 12:00:27 check rollback ok 12:00:30 check shadow-diff ok 12:00:33 check load-p95 ok 12:00:36 check canary-guardrails ok 12:00:39 runner done run=3 passed=12 failed=0 12:00:41 runner report uploaded 12:00:44 runner baseline updated 12:00:46 runner workers released 12:00:48 runner idle 12:01:00 watcher heartbeat seq=0 12:01:03 watcher heartbeat seq=3 12:01:06 watcher heartbeat seq=6 12:01:09 watcher heartbeat seq=9 12:01:12 watcher heartbeat seq=12 12:01:15 watcher heartbeat seq=15 12:01:18 watcher heartbeat seq=18 12:01:21 watcher heartbeat seq=21 12:01:24 watcher heartbeat seq=24 12:01:27 watcher heartbeat seq=27 12:01:30 watcher heartbeat seq=30 12:01:33 watcher heartbeat seq=33 12:01:36 watcher heartbeat seq=36 12:01:39 watcher heartbeat seq=39 12:01:42 watcher heartbeat seq=42 12:01:45 watcher heartbeat seq=45
lf-code · lf-gloss · lf-note · lf-tree
Gloss explains a marked term such as
def route(weather):
if weather == "rain":
return "covered terrace"
return "courtyard"
def seat(guest):
return guest.table
gallery/
index.html +20 -1
data.json +2
media/
after.png
lf-compare · lf-variant · lf-chip
Compare gives each Variant the same frame. Chips label short attributes.
| Route | Distance (km) |
|---|---|
| Courtyard loop | 1.4 |
| Riverside path | 12.6 |
Mark the route before leaving. The map stays readable when the battery runs out.
Search the nearest stop and update the route. Carry enough power for the return journey.
lf-milestones · lf-milestone · lf-chronology · lf-chronology-entry
Milestones show planned, active, and completed work. A Chronology orders entries by time.
lf-activity
The feed reads this page's own log: the seeded threads, reactions, user actions, and published versions. The board move near the end was taken back, so its row stays struck through and marked undone. Press a thread row to open its thread, or a widget row to travel to the widget.
lf-tabs · lf-tab
This embedded specimen is a framed tabbed section. The browser test also presents this same tab set at the root of a page, where it becomes borderless top navigation for page-scale views. Both forms remember the selected panel after reload. At page level, scroll a view and switch away and back: each selection reaches the panel’s beginning below the tab strip. Browser Back and Forward return to the corresponding views.
The current sample route is under review.
The earlier route crossed the courtyard.
svg.drawing
Two states of a sample page drawn alike in one frame. Switch the colour scheme: every mark follows it.
lf-specimen · lf-shot · lf-options · lf-option
Enter the practice page, accept its suggestion, and add a comment. Its decisions and Threads belong to that page alone. Close any open controls and press Escape to return here; Reset clears the practice page.
practice page
The sample timetable now
Specimen labels invented content. Choose Before or After above the image, or press the Shot control or image to flip.
lf-tabs · lf-tab · lf-suggestion · lf-old · lf-new · lf-board · lf-column · lf-card
Selecting a tab starts its focused sequence against Leaf’s production component and transition code. Each replay runs in a Leaf page inside the preview box, so page-wide controls keep their real margin placement while the gallery stays still. Viewport compares the same page at 1×, 2×, or 4× its displayed size. Pause, replay, or loop the sequence; none writes to the page’s event log.
proposed release note
The importer now
migration checklist
review note
The sample agenda has room for one more topic.
review workspace
The sample agenda has room for one more topic.
lf-workspace · lf-pane · lf-grid
This workspace is embedded in a document, so its list, detail regions, and action footer stay in document flow. The same panes in a grid fill a root workspace in columns and rows when the window has room, each scrolling on its own.
The candidate changes cache keys, receipts, and settlement jobs.
The cache migration is the only change that rewrites stored data.
The rehearsal copied 8,412 active keys and preserved every value.
copy --source cache-v1 --target cache-v2 --active-only
verify --source cache-v1 --target cache-v2 --compare values
switch --readers checkout-api,orders-api
Open the versions menu and press Compare beside v1. The Change control appears by the edited passage and opens its text diff inline.
The sample walk follows the river to the footbridge.
lf-board · lf-column · lf-card
Drag the card to Tried, use its grip with Enter and the arrows, or tap a destination on a phone. Sent, Picked up, and Working report the agent workflow. A refused send offers Retry and Cancel.
This board carries more columns than the page has room for, so it scrolls sideways. Its content fades at each edge with more beyond it: the right edge at first, both edges while crossing, and the left edge at the end. The layer writes these marks on any box in that state, because the platform’s own scrollbar draws nothing until something scrolls it. Boxes holding everything they have — the code block and the diagram above — wear none.
To ask for a refinement, comment on the sample that shows it and say what should change. Plain experiment clicks do not request implementation work.
Move the card, submit a draft, or add an option above. Run
leaf page state PAGE against this preview's page directory. Its
content keeps your exact words, selected options, and card order; source
locations and edit routes distinguish authored content from user decisions
and captured data. Change unrelated source wording and inspect again: those
user choices survive without copying them into HTML. Use
--thread ID to inspect a frozen thread.