| Module: the import path is src.rest/cat/012 | cat | | +1164 | -1164 | | ✓ |
| fix | Nushell: read the error nu marks with an ASCII x | Dami | | +12 | -1 | 1.1 | ✓ |
| build | Lint: staticcheck 2026.2.2, which reads Go 1.27.2's export data | Dami | | +1 | -1 | 1.0 | ✗ |
| build | CI: make check runs on your machine for src.rest | Dami | | +9 | -0 | 1.1 | |
| feat | Site: build under a path when forge deploys it | Dami | | +7 | -3 | 1.3 | |
| docs | Docs: make quick for iterating, make check once at the end | Dami | | +45 | -8 | 0.0 | |
| chore | Merge main ≠ | Dami | | +1128 | -243 | 2.4 | |
| build | Check: make quick, the checks of what changed | Dami | | +124 | -2 | 1.0 | |
| feat | Site: the hero leads with the first-steps recording | Dami | | +11 | -11 | 1.1 | |
| build | Check: lint, tests, oracle and e2e at once, then timed tests alone | Dami | | +69 | -13 | 1.8 | |
| build | Lint: the checks run at once, vet once with the stress tag | Dami | | +114 | -54 | 1.8 | |
| test | E2E: sessions run in parallel, golden screens wait to match | Dami | | +128 | -5 | 1.3 | |
| feat | Site: a sidebar per section; the homepage drops its headline; A1 holds a short label | Dami | | +45 | -37 | 2.0 | |
| test | File fixtures: v0.8.0 | Dami | | +216 | -0 | 0.1 | |
| docs | Docs: the recordings show charts as the sixel images 012 draws | Dami | | +7 | -9 | 0.1 | |
| deps | HTML export: pages and views embed JetBrains Mono | Dami | | +20 | -27 | 1.4 | |
| feat | Site: the navbar lists the docs' sections, and the landing page leads with what 012 is | Dami | | +90 | -36 | 1.7 | |
| docs | Docs media: the recordings in JetBrains Mono and their pages' color schemes | Dami | | +0 | -0 | 0.3 | |
| feat | Pictures: one font, JetBrains Mono, and color families by page | Dami | | +766 | -155 | 2.0 | |
| fix | Themes: a scheme named exactly wins over looser matches | Dami | | +9 | -4 | 1.6 | |
| test | File fixtures: v0.7.0 ≠ | Dami | | +216 | -0 | 0.1 | |
| fix | Notes: the hover box keeps clear of the status line, as the error box | Dami | | +62 | -17 | 1.3 | |
| docs | Demos: the sources recording reads a grouped count, a date and a MEDIAN | Dami | | +21 | -5 | 0.7 | |
| refactor | Formats: inferring one allocates no closure per formula | Dami | | +10 | -8 | 1.2 | |
| Docs: the sources' formulas picture shows a working MEDIAN, formats and F1 | Dami | | +415 | -168 | | |
| feat | Sources: MEDIAN, PERCENTILE, QUARTILE, LARGE, SMALL and MODE stream | Dami | | +671 | -189 | 1.9 | |
| feat | Functions: PERCENTILE, QUARTILE, their .INC and .EXC, MODE.SNGL and RANK.EQ | Dami | | +318 | -68 | 2.0 | |
| feat | Sources: results over a column keep its format; counts show grouped | Dami | | +334 | -33 | 1.8 | |
| feat | Errors: an explanation too long for the context line says the rest on F1 | Dami | | +375 | -41 | 1.8 | |
| build | Merge branch 'main' into worktree-agent-a44969b7ca50f8b04 ≠ | Dami | | +461 | -10 | 1.5 | |
| build | Site: make site fails on a Mermaid diagram that doesn't parse | Dami | | +401 | -2 | 1.5 | |
| fix | Site: a diagram's box stays filled when the color mode switches quickly | Dami | | +58 | -6 | 1.5 | |
| docs | Docs: two sequence diagrams draw again, a semicolon no longer ending their message | Dami | | +2 | -2 | 0.1 | |
| chore | Site: 012.dev.site is the site's and the install scripts' address | Dami | | +59 | -44 | 2.1 | |
| build | Site: make site-publish deploys the site to Cloudflare Workers static assets at 012.dev.site | Dami | | +1597 | -46 | 1.4 | |
| fix | Terminals: the wait for the background ends its timer once it's known | Dami | | +40 | -14 | 1.6 | |
| docs | UI: monochrome_test.go within 500 lines, and frame's comment within doclint | Dami | | +3 | -4 | 0.0 | |
| docs | Docs: the screen waits for the terminal's background in Themes | Dami | | +5 | -0 | 0.0 | |
| feat | Merge branch 'main' into worktree-agent-ad6f14fb00ee28a82 ≠ | Dami | | +1623 | -115 | 2.3 | |
| fix | Terminals: the screen waits for the terminal's background, so a light one never flashes the dark theme | Dami | | +121 | -24 | 1.9 | |
| Merge main | Dami | | +2155 | -54 | | |
| feat | Agents keep values' types: typed values in and out, write_table, column formats through notebooks | Dami | | +1623 | -115 | 2.3 | |
| refactor | Notebooks: typing's pauses on a clock tests give, so no unit test waits on a debounce | Dami | | +84 | -7 | 1.3 | |
| fix | Merge branch 'main' into worktree-agent-a948340a23674e9bd ≠ | Dami | | +240 | -18 | 2.1 | |
| docs | Docs: the word at the caret and F1's help in Writing a cell and Keys; the roadmap's section 2 ships | Dami | | +28 | -11 | 0.0 | |
| Notebooks: the word's hover drawn plain beside its muted summary; e2e and screens | Dami | | +354 | -16 | | |
| feat | Merge branch 'main' into worktree-agent-a0152d966ca1eb8be ≠ | Dami | | +5844 | -236 | 2.4 | |
| test | Random edits: 3,000 seeds by default | Dami | | +4 | -4 | 0.7 | |
| feat | Notebooks: the word at the caret on the context line, and F1's help | Dami | | +1161 | -12 | 1.5 | |
| fix | A paste replacing merges respills past them | Dami | | +24 | -5 | 1.5 | |
| feat | nushell: nu --ide-hover, and a command's help read from its hover | Dami | | +375 | -0 | 0.6 | |
| fix | A blocked array computed again has the arrays checked again | Dami | | +29 | -3 | 1.4 | |
| fix | A region blocked but for arrays has them checked again | Dami | | +19 | -1 | 1.3 | |
| build | doclint: agents are a feature; only an agent that changed something narrates | Dami | | +5 | -3 | 1.0 | |
| fix | Blocked arrays close cycles over the cells they need | Dami | | +60 | -8 | 1.9 | |
| docs | README: live mode's bullet names agents without doclint's phrase | Dami | | +1 | -1 | 0.0 | |
| fix | Screens: the palette counts the live-mode commands | Dami | | +7 | -7 | 0.5 | |
| fix | Arrays over a region's table whose cells they read are circular | Dami | | +108 | -1 | 1.8 | |
| feat | Live mode tape: a scripted agent (demos/liveagent) suggests, asks and is accepted; the README lists live mode | Dami | | +196 | -0 | 0.3 | |
| Merge main | Dami | | +10304 | -236 | | |
| docs | Docs: live mode, its keys, command line and architecture; the roadmap row shipped | Dami | | +295 | -29 | 0.1 | |
| Live mode end to end: 012 --listen in libghostty with a real 012 mcp --attach, and its golden screens | Dami | | +701 | -157 | | |
| Merge branch 'main' into worktree-agent-ae758ab3375f6ccdb; v0.5.0 is released, so linked sources' fixtures are v0.6.0's | Dami | | +218 | -18 | | |
| test | File fixtures: v0.5.0 ≠ | Dami | | +200 | -0 | 0.1 | |
| Merge branch 'main' into worktree-agent-ae758ab3375f6ccdb | Dami | | +404 | -23 | | |
| feat | Live mode: agents hear of settled suggestions through a resource they subscribe to | Dami | | +98 | -51 | 2.1 | |
| test | Golden screens: the palette counts the linked sources' commands | Dami | | +9 | -9 | 0.3 | |
| Merge main | Dami | | +1382 | -320 | | |
| feat | Live mode in the grid: 012 --listen, File > Invite an agent, suggestions to review | Dami | | +1556 | -18 | 1.9 | |
| Merge main | Dami | | +34 | -3 | | |
| fix | Notebook streams: the output's grid takes arriving rows in place, widening its columns | Dami | | +404 | -23 | 1.9 | |
| Merge branch 'main' into worktree-agent-ae758ab3375f6ccdb | Dami | | +3736 | -713 | | |
| fix | Commands on a source's tab are recorded in macros and wait for their turn to write in a room | Dami | | +61 | -9 | 2.0 | |
| docs | README: linked sources in the tour | Dami | | +6 | -0 | 0.0 | |
| feat | Demo: ten million rows of Parquet linked, sorted and summed | Dami | | +87 | -0 | 0.2 | |
| docs | Roadmap: SQL cells shelved beside other transports | Dami | | +13 | -31 | 0.0 | |
| feat | max-cells bounds what a function holding what it reads is given of a linked source, as the setting changes | Dami | | +3 | -1 | 1.9 | |
| docs | Roadmap: SQL cells and connections | Dami | | +29 | -0 | 0.0 | |
| docs | Docs: linked sources in the architecture, tests and file versions | Dami | | +8 | -5 | 0.0 | |
| feat | Go to a row on a source's tab; keys of linked sources | Dami | | +48 | -1 | 1.2 | |
| test | Linked sources: e2e test, golden screens and stills, a filter of the condition alone, Page Down as a sheet's | Dami | | +861 | -17 | 1.4 | |
| feat | Live mode: agents attached to a session's room over a socket | Dami | | +2539 | -33 | 2.0 | |
| test | e2e: a changed golden screen prints its first differing HTML line | Dami | | +21 | -1 | 0.5 | |
| fix | Pages just read aren't the ones let go; a page that can't be read isn't read over and over; docs of linked sources | Dami | | +490 | -17 | 1.4 | |
| feat | Engine: proposals, a change made on a copy and applied whole or by cell | Dami | | +512 | -8 | 1.3 | |
| docs | Docs: notebook names without config-like examples | Dami | | +3 | -3 | 0.0 | |
| Merge branch 'main' into worktree-agent-a4e6ec5e6afec1cd9 | Dami | | +2354 | -393 | | |
| Merge branch 'main' into worktree-agent-ae758ab3375f6ccdb; linked sources in a shared room are the room's | Dami | | +4882 | -241 | | |
| docs | Docs: a notebook cell's statements, comments and names in one rule | Dami | | +47 | -8 | 0.0 | |
| feat | Notebook UI: statements, comments and assigned names in the editor, runs and streams | Dami | | +231 | -20 | 2.1 | |
| fix | Notebook cells hand back every name they assign; one Prepare for the screen and --notebooks | Dami | | +280 | -43 | 2.1 | |
| test | Speed gate and stress cases for scrolling and summing linked sources | Dami | | +198 | -24 | 1.5 | |
| Merge branch 'main' into worktree-agent-a4e6ec5e6afec1cd9 | Dami | | +4790 | -194 | | |
| feat | WIP: notebook cells read as nu does: statements, comments, assignments | Dami | | +798 | -254 | 2.9 | |
| Merge branch 'main' into worktree-agent-a310ee441d83cdd0c | Dami | | +4790 | -194 | | |
| refactor | MCP views: the grid in the result's _meta, the model's result without HTML | Dami | | +107 | -72 | 2.4 | |
| feat | Sources stream to functions through batches a goroutine reads; stress benchmarks of formulas and pivots over ten million rows | Dami | | +507 | -202 | 2.1 | |
| test | Screens: the palette lists the sharing commands; a stream's output as a grid | Dami | | +43 | -43 | 0.3 | |
| feat | Headless opens read linked sources in the workbook's folder; describe names sources | Dami | | +121 | -16 | 1.9 | |
| test | View test: its variables are outside O12_, which names options | Dami | | +7 | -7 | 1.4 | |
| docs | Docs, skill and prompts: one 012 mcp for every workbook | Dami | | +190 | -87 | 1.9 | |
| chore | install-mcp: hosts named after the apps: claude-code, claude-desktop, codex | Dami | | +13 | -13 | 2.0 | |
| feat | Sources in the file: version 7, random edits, fixtures of v0.5.0 | Dami | | +319 | -5 | 1.0 | |
| Merge branch 'main' into worktree-agent-ae758ab3375f6ccdb | Dami | | +1934 | -232 | | |
| feat | Linked sources in the UI: Link a source, a paged tab with a scrollbar, sort and filter pushed down, formulas answered in the background | Dami | | +1670 | -8 | 2.4 | |
| Merge branch 'main' into worktree-agent-a310ee441d83cdd0c | Dami | | +4177 | -1145 | | |
| feat | 012 agent --install-mcp claude|codex|desktop | Dami | | +458 | -5 | 0.9 | |
| feat | MCP: one server for every workbook, and views in Apps SDK hosts | Dami | | +1675 | -305 | 2.7 | |
| docs | Docs: the shared budget as a still drawn from its golden screen, and the share recording | Dami | | +31 | -1 | 0.5 | |
| Merge branch 'main' into worktree-agent-a2264ce9952a1a538 | Dami | | +1949 | -239 | | |
| docs | Docs: sharing a workbook over SSH, the room layer, its measurements | Dami | | +331 | -55 | 0.5 | |
| test | Shared workbooks: golden screens, e2e with two ssh sessions, reading without color | Dami | | +392 | -10 | 1.7 | |
| Merge branch 'worktree-agent-a329fd9933c794bac' | Dami | | +1891 | -200 | | |
| feat | Pipeline demo uses the sheet command; sizes cut like nushell's | Dami | | +43 | -32 | 2.0 | |
| feat | paged: a host answering formulas and pivot tables over linked sources by streaming them | Dami | | +1145 | -2 | 2.2 | |
| feat | Shared workbooks: restoring kept work, cancelling dialogs, tests | Dami | | +322 | -17 | 2.0 | |
| Merge branch 'main' into worktree-agent-a329fd9933c794bac | Dami | | +7965 | -1027 | | |
| Merge branch 'main' into worktree-agent-ae758ab3375f6ccdb | Dami | | +2248 | -918 | | |
| Merge branch 'worktree-agent-ad04278543d0a173d' into worktree-agent-ae758ab3375f6ccdb | Dami | | +2914 | -110 | | |
| feat | Linked sources in the engine: paged tabs, questions to a host, pivots over sources, format version 7 | Dami | | +1090 | -69 | 2.8 | |
| feat | Functions over linked sources: calls asked whole, answered by streaming | Dami | | +482 | -4 | 2.3 | |
| test | fileio: stress benchmarks of ten-million-row Parquet and SQLite sources | Dami | | +290 | -0 | 0.1 | |
| docs | Rules: the last four rows of conditions are Excel's | Dami | | +1 | -1 | 0.1 | |
| fix | Crash guard: Update returns the model after a panic | Dami | | +15 | -7 | 1.3 | |
| docs | Docs: notebook cells and ux as pictures; doclint refuses drawn screens | Dami | | +158 | -35 | 1.5 | |
| feat | fileio: Parquet files and SQLite tables or queries read in place as sources, sorted and filtered by streaming or in SQL | Dami | | +2201 | -1 | 2.2 | |
| docs | Docs: stills of tracing, evaluate, tables, rules and borders | Dami | | +154 | -129 | 0.0 | |
| feat | Stills: golden screens drawn as PNGs for the docs, dark and light | Dami | | +1528 | -35 | 2.0 | |
| Merge branch 'main' into worktree-agent-a2264ce9952a1a538 | Dami | | +9878 | -1491 | | |
| feat | Serve: sessions opening one file share its workbook | Dami | | +2048 | -88 | 2.3 | |
| Merge branch 'main' into worktree-agent-ae6b2b109d64cf53d | Dami | | +202 | -11 | | |
| refactor | fileio: Parquet and SQLite values become cells in one place, for imports and sources | Dami | | +221 | -98 | 1.9 | |
| Merge branch 'worktree-agent-ae758ab3375f6ccdb' into worktree-agent-ad04278543d0a173d | Dami | | +108 | -0 | | |
| feat | Sources: the API of Parquet files and SQLite tables read in place | Dami | | +108 | -0 | 1.2 | |
| test | File fixtures: v0.4.0 ≠ | Dami | | +200 | -0 | 0.1 | |
| docs | Roadmap: Toward 1.0 shipped; Agents is section 4 | Dami | | +2 | -11 | 0.0 | |
| Merge branch 'main' into worktree-agent-ae6b2b109d64cf53d | Dami | | +5434 | -67 | | |
| Merge branch 'main' into worktree-agent-ae6b2b109d64cf53d | Dami | | +2651 | -513 | | |
| docs | Demos: work in a notebook output's grid; chart the recipe's totals from it | Dami | | +34 | -28 | 0.3 | |
| Merge branch 'main' into worktree-agent-aeb87329b34333341 | Dami | | +2652 | -519 | | |
| docs | README: web pages and agents in the tour; say one change, not undo, where the file keeps no history | Dami | | +10 | -5 | 0.4 | |
| feat | MCP Apps views: ranges and charts drawn in the chat | Dami | | +199 | -8 | 1.2 | |
| Merge branch 'worktree-agent-afc7c9861f505f935' | Dami | | +902 | -388 | | |
| docs | Docs: notebook outputs as grids, their keys; roadmap row shipped | Dami | | +81 | -20 | 0.0 | |
| Screens and e2e: working in a notebook output's grid | Dami | | +572 | -346 | | |
| feat | 012 mcp: an MCP server on a workbook file | Dami | | +2099 | -7 | 1.1 | |
| feat | Engine: steps know their author, operations their order, undo per author | Dami | | +705 | -21 | 2.3 | |
| feat | Notebook outputs: tables and records are 012's own grid | Dami | | +1546 | -517 | 2.2 | |
| fix | ROUND keeps exact inputs exact; Sheets' ROUND(1.23456789012345, 14) differs on purpose | Dami | | +14 | -17 | 2.0 | |
| Merge branch 'main' into worktree-agent-a07fc05cc74c47671 | Dami | | +3681 | -1297 | | |
| docs | Docs: a region's first rows widen its columns outside the undo history | Dami | | +8 | -3 | 0.0 | |
| fix | Arrays in a cycle together settle the same whatever order they're computed in | Dami | | +166 | -8 | 1.6 | |
| fix | Random edits: pointing Total elsewhere is one undo step | Dami | | +3 | -2 | 0.7 | |
| feat | Agents with a shell: 012 describe, JSON results, set --dry-run, a Claude Code skill | Dami | | +1363 | -37 | 2.0 | |
| test | Screens: the function list matches one more description for "if" | Dami | | +2 | -2 | 0.3 | |
| Merge branch 'main' into worktree-agent-afc7c9861f505f935 | Dami | | +644 | -11 | | |
| fix | Sheets corpus: reasons for kept differences, import artefacts unconfirmed | Dami | | +58 | -43 | 0.9 | |
| fix | Functions follow Sheets where the Sheets corpus found them apart | Dami | | +319 | -88 | 2.6 | |
| feat | Number formats show fractions; ROUND and number literals as Sheets has them | Dami | | +273 | -2 | 2.0 | |
| Merge branch 'main' into worktree-agent-a2264ce9952a1a538 | Dami | | +644 | -11 | | |
| feat | Notebooks: cells run as streams, rows arriving as the pipeline prints them | Dami | | +985 | -28 | 1.9 | |
| feat | HTML export: a sheet, a range or a chart as a web page in 012's look | Dami | | +1782 | -24 | 1.6 | |
| docs | Docs: installing with the install script, publishing a release with the site | Dami | | +95 | -10 | 0.1 | |
| feat | Install scripts and make site-release: the release served from the docs site | Dami | | +549 | -1 | 0.9 | |
| fix | Cycles are found from the formulas as written | Dami | | +515 | -27 | 2.1 | |
| test | Sheets corpus: record Sheets' results from the owner's import | Dami | | +289 | -289 | 0.8 | |
| docs | Roadmap: section 6 Agents; notebook outputs as a grid | Dami | | +15 | -1 | 0.0 | |
| fix | Regions in each other's way show the same whichever order their rows arrive in | Dami | | +330 | -62 | 2.1 | |
| fix | Arrays: unmerging frees the arrays its merges blocked, and a cycle through an array gone is looked for again | Dami | | +83 | -12 | 1.3 | |
| test | Screens: the palette and help list the notebook's new commands | Dami | | +10 | -10 | 0.2 | |
| Merge branch 'main' into worktree-agent-a34f3360f328e751a | Dami | | +4435 | -232 | | |
| test | Screens: the palette and help list the notebook's new commands | Dami | | +11 | -11 | 0.2 | |
| Merge branch 'main' into worktree-agent-a34f3360f328e751a | Dami | | +6169 | -344 | | |
| chore | Demos: the notebook and nu recipe recorded as Jupyter's tab; notebook.tape types less in the palette to stay under 1 MB | Dami | | +4 | -4 | 0.7 | |
| feat | Notebook screens, e2e and docs as Jupyter's | Dami | | +953 | -606 | 1.5 | |
| test | File fixtures: v0.3.0 saved again with its table, the release being unreleased | Dami | | +11 | -1 | 0.6 | |
| feat | 012 get and set find tables by name and structured reference | Dami | | +89 | -5 | 1.6 | |
| Merge branch 'main' into worktree-agent-a6b83a2391f8f76db | Dami | | +2 | -4 | | |
| fix | e2e: the trip layout check waits for the grid's last rows | Dami | | +2 | -4 | 0.8 | |
| test | File fixtures: a table and formulas reading it by column in this release's workbook | Dami | | +12 | -2 | 0.6 | |
| fix | Random edits make, rename, resize, style and remove tables and read them by column | Dami | | +51 | -11 | 2.0 | |
| Merge main into the tables branch | Dami | | +3496 | -182 | | |
| chore | gofmt ≠ | Dami | | +0 | -1 | 0.3 | |
| feat | Notebook: Jupyter's look and ergonomics | Dami | | +2067 | -676 | 2.4 | |
| test | Random edits: cellValue, clear of the steps test's shown | Dami | | +7 | -7 | 0.2 | |
| test | Golden screens: the palette, help and Data menu with tables and tracing | Dami | | +35 | -35 | 0.3 | |
| Merge main into the tables branch: tracing follows structured references | Dami | | +2722 | -156 | | |
| Merge branch 'main' into worktree-agent-a0f031e76fafdf3b4 | Dami | | +2651 | -146 | | |
| docs | Following files: arrays and regions in each other's way | Dami | | +3 | -1 | 0.0 | |
| test | File fixtures: notebook tabs and outputs sent to sheets in this release's workbook; roadmap: cycles found from the formulas as written | Dami | | +62 | -29 | 0.7 | |
| fix | Outputs sent to sheets: undo keeps what it puts back, formulas follow a region blocked or gone, arrays spill over regions | Dami | | +170 | -10 | 2.2 | |
| Merge branch 'main': notebook tabs replace command regions; random edits send outputs' rows as the UI does | Dami | | +15907 | -3613 | | |
| refactor | diff: Dump writes a sheet's fields in a function of their own | Dami | | +21 | -16 | 1.0 | |
| feat | diff and merge compare tables one by one, as regions; monochrome table test moves beside the tables' | Dami | | +88 | -31 | 1.5 | |
| Merge branch 'main' into worktree-agent-a0b9e33bebde77f90 | Dami | | +7755 | -170 | | |
| docs | Docs: Tracing formulas page, keys, roadmap row shipped, tracing demo | Dami | | +170 | -16 | 0.1 | |
| Tracing in the grid, a list to go to one, and Evaluate formula | Dami | | +1378 | -87 | | |
| Merge main into the tables branch | Dami | | +7755 | -170 | | |
| feat | Go to and the name box know tables | Dami | | +26 | -8 | 1.2 | |
| Tables: e2e test, golden screens (dark, light, high contrast), roadmap | Dami | | +463 | -77 | | |
| docs | Roadmap: fixtures, random edits, the speed gate and crash safety shipped; cycles through several arrays ahead | Dami | | +5 | -4 | 0.0 | |
| test | File fixtures: entries that read against their format, in this release's workbook | Dami | | +5 | -1 | 0.2 | |
| docs | Docs: Tables page, structured references, suggestions and the XLSX and macro references | Dami | | +229 | -34 | 1.0 | |
| fix | make speed: baseline with arrays checked for cycles through their cells as they spill | Dami | | +26 | -26 | 0.9 | |
| Merge branch 'worktree-agent-a34f3360f328e751a' | Dami | | +1955 | -154 | | |
| Merge branch 'toward1-crash' into worktree-agent-a0f031e76fafdf3b4 | Dami | | +789 | -42 | | |
| Merge branch 'toward1-speed' into worktree-agent-a0f031e76fafdf3b4 | Dami | | +527 | -44 | | |
| test | Random edits: undo, reopen and full recalculation checked after random sequences of edits | Dami | | +569 | -2 | 0.1 | |
| fix | Cycles and arrays settle the same whatever order cells are computed in | Dami | | +505 | -65 | 2.0 | |
| fix | Regions: formulas follow a table that shrinks, and a label line moved onto old rows is cleared | Dami | | +76 | -3 | 1.5 | |
| feat | Plain text: an entry reads as it was typed until it's typed again, in the file too | Dami | | +109 | -24 | 1.9 | |
| feat | Tables round-trip to XLSX as Excel tables | Dami | | +745 | -39 | 2.1 | |
| Merge branch 'worktree-agent-aa57c25f63a077089' | Dami | | +4896 | -15 | | |
| feat | Text fields move and delete by word; Ctrl+U deletes to the line's start | Dami | | +208 | -1 | 1.7 | |
| feat | Tables in the UI: Convert to table, Data > Table, banding and header roles, suggestions | Dami | | +855 | -24 | 1.9 | |
| Merge branch 'main' into worktree-agent-a34f3360f328e751a | Dami | | +696 | -0 | | |
| docs | Docs: Writing a cell in Notebooks, Tab in the keys, serve-shell and nu's questions; roadmap row shipped | Dami | | +83 | -10 | 0.5 | |
| test | e2e: nu's highlighting and a problem it found in golden screens; highlight and Tab with the real nu | Dami | | +263 | -4 | 0.9 | |
| fix | 012 get notes only outputs the file doesn't hold | Dami | | +26 | -17 | 1.6 | |
| feat | Scripts, diff and merge follow notebook tabs | Dami | | +686 | -278 | 2.7 | |
| feat | Tables: named ranges with a header row, read by column name in formulas | Dami | | +1870 | -62 | 1.8 | |
| feat | Notebook: code cells highlighted, checked and completed by nu itself | Dami | | +1200 | -140 | 2.2 | |
| Merge branch 'main' into worktree-agent-aa57c25f63a077089 | Dami | | +8859 | -3475 | | |
| test | diff: test merging one-sheet files with named ranges | Dami | | +25 | -0 | 0.0 | |
| feat | Engine: trace links with names, regions, spills and sources; formulas evaluated part by part | Dami | | +1106 | -46 | 1.9 | |
| docs | Docs: scripts, diff and merge in git, the command line | Dami | | +414 | -8 | 0.1 | |
| feat | 012 get, set, recalc, export, diff and merge-driver | Dami | | +1132 | -9 | 1.6 | |
| feat | diff: compare and merge workbooks cell by cell | Dami | | +1965 | -0 | 0.9 | |
| feat | headless: read, set, recalculate and save workbook files without the screen | Dami | | +945 | -0 | 1.3 | |
| feat | nushell: ask nu about a pipeline with --ide-ast, --ide-check and --ide-complete; answers pinned to nu 0.116's | Dami | | +412 | -3 | 1.3 | |
| docs | Testing: the crashtest tag without naming its variable | Dami | | +2 | -2 | 0.3 | |
| docs | Testing: the e2e binary's crashtest tag | Dami | | +4 | -1 | 0.2 | |
| feat | A crash in 012 or 012 serve keeps unsaved work and reports where | Dami | | +241 | -21 | 1.8 | |
| feat | ui.Guard: a panic in Update, Init or a command quits cleanly; View's goes on to Bubble Tea | Dami | | +468 | -0 | 1.7 | |
| feat | Recovery files for local sessions: kept in Settings.RecoveryDir, keyed by the file's full path, offered on start | Dami | | +76 | -20 | 1.7 | |
| Merge branch 'main' into worktree-agent-a98f52988d601b5d5 | Dami | | +8163 | -3475 | | |
| test | Sheets corpus: 301 formulas whose results 012 matches with Google Sheets | Dami | | +696 | -0 | 0.3 | |
| feat | make speed: frames and recalculation held to a checked-in baseline in make check | Dami | | +474 | -4 | 1.1 | |
| test | UI tests: the stress benchmarks' fake terminal and color-scale sheet in an untagged file | Dami | | +53 | -40 | 0.5 | |
| test | File fixtures: workbooks each release saved open and save back byte for byte | Dami | | +711 | -5 | 0.7 | |
| Merge branch 'main' into worktree-agent-a46c4a76e052afd9d | Dami | | +36 | -2 | | |
| refactor | Data > Shell holds the notebook's commands, so n still picks Named ranges; help and palette screens list the notebook | Dami | | +77 | -77 | 1.8 | |
| docs | Roadmap: Toward 1.0 and Around the grid; Sheets and 1-2-3 as inspiration, not specs | Dami | | +36 | -2 | 0.0 | |
| chore | Notebook: long names and read lists end in an ellipsis; lint and docs fixes | Dami | | +22 | -25 | 1.3 | |
| docs | Notebook demos re-recorded; diagrams in the nushell pages; r runs a cell where Ctrl+Enter can't | Dami | | +164 | -48 | 0.8 | |
| Merge branch 'main' | Dami | | +1783 | -180 | | |
| docs | Docs: notebook tabs in the nushell pages, keys, the file format, architecture and the roadmap | Dami | | +225 | -153 | 0.4 | |
| Merge branch 'main' | Dami | | +1536 | -376 | | |
| docs | Docs: notebooks rewritten for notebook tabs | Dami | | +208 | -130 | 0.1 | |
| test | Notebook e2e tests and golden screens; notebook keys in help and the palette | Dami | | +893 | -329 | 1.7 | |
| Merge branch 'main' into worktree-agent-a5841c474df51dec1 | Dami | | +1037 | -360 | | |
| fix | Site: Mermaid draws once the fonts load, measuring text in Plex Mono | Dami | | +24 | -3 | 1.3 | |
| feat | UI: notebook tabs, Jupyter-style, in package nbview | Dami | | +4908 | -1420 | 2.8 | |
| feat | Engine: notebook tabs and outputs sent to sheets replace command regions | Dami | | +1684 | -1308 | 2.8 | |
| Merge branch 'main' into worktree-agent-a199e16728734af47 | Dami | | +303 | -57 | | |
| feat | 012 --pipe --send ask|selection|sheet: quitting sends without asking | Dami | | +303 | -57 | 1.5 | |
| Merge branch 'main' into worktree-agent-a199e16728734af47 | Dami | | +512 | -26 | | |
| feat | Docs site: redirects keep old addresses; doccheck asks for them | Dami | | +179 | -3 | 1.1 | |
| fix | Data commands take a region's table from a cell in the region | Dami | | +80 | -18 | 1.9 | |
| fix | Imports without widths of their own fit their columns to the data | Dami | | +116 | -23 | 1.8 | |
| Text charts: bars start on the axis line and end on tick lines | Dami | | +236 | -196 | | |
| fix | Sixel charts keep the text chart under an opaque image | Dami | | +64 | -67 | 1.9 | |
| Merge branch 'main' into worktree-agent-a5841c474df51dec1 | Dami | | +511 | -26 | | |
| docs | Docs: Mermaid diagrams on the site and in place of ASCII art | Dami | | +1763 | -181 | 0.7 | |
| docs | Site landing page: the nushell tile shows the sheet command | Dami | | +1 | -1 | 0.2 | |
| Merge branch 'main' into worktree-agent-af6318053ae59ffbc | Dami | | +1 | -1 | | |
| feat | Nushell module 012.nu: sheet, sheet view and sheet nu, installed by 012 nu --install-module | Dami | | +511 | -25 | 1.2 | |
| docs | Roadmap: nushell highlighting, completion and checking in code cells | Dami | | +2 | -1 | 0.1 | |
| feat | Go to accepts a region's name (nu.r1) and selects its table | Dami | | +71 | -8 | 1.1 | |
| docs | Roadmap: a TUI Jupyter for nushell replaces the grid notebook; sections renumbered | Dami | | +11 | -6 | 0.2 | |
| chore | Site navbar: the logomark alone, without a title beside it | Dami | | +1 | -1 | 1.4 | |
| Merge branch 'main': ! opens the prompt only on a notebook sheet | Dami | | +65 | -23 | | |
| fix | ! opens the shell prompt only on a notebook sheet; elsewhere it starts an entry | Dami | | +55 | -18 | 2.0 | |
| docs | Docs: nushell pages name settings only in config examples | Dami | | +2 | -2 | 0.0 | |
| docs | Docs: a Nushell section with pipelines, notebooks, types and a cookbook | Dami | | +853 | -283 | 0.9 | |
| feat | Data menu fits 30 rows with Linked file beside Shell regions | Dami | | +54 | -27 | 1.9 | |
| refactor | Regions: one engine for linked files and shell regions | Dami | | +1175 | -1145 | 2.7 | |
| Merge branch 'main' into worktree-agent-a261c5f69e4010b5c | Dami | | +4305 | -86 | | |
| fix | Data menu: Shell regions hold Refresh region, so the menu fits 30 rows | Dami | | +29 | -30 | 1.7 | |
| test | Test: linked files resolve inside the served folder | Dami | | +21 | -0 | 0.0 | |
| test | Golden screens: Data > Linked file, Follow the file among import locations | Dami | | +59 | -59 | 0.2 | |
| Merge branch 'main' into worktree-agent-a261c5f69e4010b5c | Dami | | +20443 | -3 | | |
| Merge branch 'main' into worktree-agent-ac7cbfaca2c108659 | Dami | | +20443 | -3 | | |
| fix | Notebooks: sorting a region keeps its order; regions download as values | Dami | | +65 | -0 | 1.4 | |
| feat | Telemetry: a live span for each linked file update applied | Dami | | +4 | -0 | 0.9 | |
| docs | Docs: Following files, the change stream, bounds of following | Dami | | +206 | -6 | 0.0 | |
| test | Following files: e2e test, golden screens, stress benchmark | Dami | | +542 | -39 | 1.7 | |
| feat | Notebooks: docs, the demo tape, and the roadmap | Dami | | +385 | -73 | 1.0 | |
| Notebooks: e2e tests with nu, golden screens, a monochrome cue | Dami | | +440 | -5 | | |
| fix | Criteria walks read every cell of their first grown chunk | Dami | | +27 | -1 | 1.0 | |
| feat | Following files: live sources, Data > Linked file, Import's Follow the file | Dami | | +1431 | -11 | 2.1 | |
| fix | Pipes and text downloads send the rows a filter shows | Dami | | +35 | -7 | 2.0 | |
| feat | Notebooks: a nushell prompt on the formula bar, regions run in the background | Dami | | +1538 | -17 | 2.0 | |
| docs | Docs site: where it's published and how to publish a build | Dami | | +15 | -1 | 0.0 | |
| feat | Linked regions in the engine: live ops outside undo, saved as their source | Dami | | +1688 | -40 | 2.4 | |
| feat | nushell: run a command with nu, tables in as variables and $in, a table back | Dami | | +401 | -0 | 1.0 | |
| feat | Regions: blocks of cells filled from outside the engine, stacking on notebook sheets | Dami | | +1466 | -11 | 2.4 | |
| build | make site and make site-serve; the docs site page in contributing | Dami | | +83 | -2 | 0.8 | |
| feat | Docs site: Docusaurus 3.10 over docs/, a landing page drawn as a 012 screen | Dami | | +20345 | -0 | 2.0 | |
| Merge branch 'main' into worktree-agent-abec0b9c68b8ca7c4 | Dami | | +152 | -68 | | |
| feat | Pipelines: e2e tests with stdin piped, golden screens, the nushell page | Dami | | +451 | -36 | 1.0 | |
| feat | 012 - and 012 --pipe: tables in on standard input, out on standard output | Dami | | +383 | -6 | 1.8 | |
| Merge branch 'main' into worktree-agent-a0b418380892dde75 | Dami | | +24 | -16 | | |
| docs | Bounds: rendering numbers with shades kept on the stack ≠ | Dami | | +17 | -17 | 0.0 | |
| feat | Pipe mode in the UI: standard input as a sheet, quitting sends a table | Dami | | +361 | -11 | 1.6 | |
| feat | Files: NUON and JSON tables in and out, tables from a stream | Dami | | +807 | -36 | 2.0 | |
| feat | Format > Number > Size: bytes shown as nushell shows file sizes | Dami | | +146 | -8 | 1.1 | |
| feat | NUON: a nushell object notation codec, read a row at a time | Dami | | +1814 | -0 | 1.1 | |
| refactor | Frames: shades and roles stay on the stack; a line's spans reused; ASCII widths counted at once | Dami | | +111 | -35 | 1.6 | |
| docs | Roadmap: toward multiplayer through streaming and shared SSH sessions; other transports stay shelved | Dami | | +24 | -16 | 0.0 | |
| docs | Roadmap: the nushell notebook track | Dami | | +15 | -0 | 0.0 | |
| fix | XLSX differential: the excelize side reads vertical alignment; make test and check pass the stress datasets to tests | Dami | | +3 | -2 | 1.1 | |
| docs | Roadmap: the rules, locale and layout rows shipped; Scale is what's ahead | Dami | | +5 | -14 | 0.1 | |
| refactor | Bars: glyph runs drawn with their roles' escape codes, kept for the frame | Dami | | +49 | -5 | 1.4 | |
| test | Bounds: a frame of data bars and icons (BenchmarkFrame bars-8192x26) | Dami | | +26 | -4 | 1.3 | |
| test | Tests: FuzzRead seeds of the new rules and displays; German month names and parse errors end to end | Dami | | +21 | -0 | 0.1 | |
| Rules: golden screens, e2e and docs for bars, icons, chips and the new rules | Dami | | +436 | -38 | | |
| Merge branch 'main' into worktree-agent-a52a926d29bb7e613 | Dami | | +4172 | -1552 | | |
| feat | Rules: data bars, icons and dropdown chips drawn; the panel makes every new rule | Dami | | +693 | -61 | 2.1 | |
| feat | Rules: top and bottom values, averages, duplicates, date periods, data bars, icon sets; rules move to other sheets; checked macro pastes and fills | Dami | | +2047 | -245 | 2.2 | |
| test | Golden palette screens count the rule commands; e2e sort-bar macro sorts back instead of undoing | Dami | | +12 | -11 | 0.5 | |
| Merge main into worktree-agent-a7b4fc48052126417 | Dami | | +3221 | -282 | | |
| test | Macros: an e2e test of recording the sort bar; answered dialogs timed as commands | Dami | | +38 | -1 | 0.8 | |
| Merge branch 'main' into worktree-agent-a52a926d29bb7e613 | Dami | | +3212 | -276 | | |
| Layout: Format > Alignment, border colors, joints of double and thick lines, merges | Dami | | +952 | -219 | | |
| feat | Layout: vertical alignment and border colors in the style, files and XLSX; sheet-edge outlines | Dami | | +382 | -57 | 2.2 | |
| docs | Docs: dialog answers in the macro API, the hosts table, recording | Dami | | +151 | -58 | 0.5 | |
| Merge branch 'main' into worktree-agent-a0a78d336afa445c0 | Dami | | +1521 | -164 | | |
| test | e2e: kitty keyboard on and off, keys held to preview, vim repeat, registers, marks and :w! | Dami | | +392 | -54 | 0.9 | |
| feat | Rules panel: macros record and replay edits, removals and moves | Dami | | +255 | -38 | 1.9 | |
| feat | Find and replace: macros record and replay replacements | Dami | | +200 | -13 | 1.8 | |
| Merge branch 'main' into worktree-agent-aab35d4dba8e626ca | Dami | | +80 | -67 | | |
| test | Charts: test that sixel images decode to the composited plot | Dami | | +96 | -0 | 0.0 | |
| feat | Charts: sixel images on terminals without kitty graphics | Dami | | +841 | -26 | 1.5 | |
| feat | Pivot editor: macros record and replay pivots made and edited | Dami | | +106 | -17 | 2.0 | |
| feat | Charts: a narrow chartHost; macros record and replay inserts, edits, moves | Dami | | +548 | -166 | 2.5 | |
| refactor | Prompts: a narrow promptHost | Dami | | +104 | -64 | 1.6 | |
| feat | Vim: . repeat, registers, marks, cc and s, : history, :w!; keys held to preview with the kitty keyboard protocol | Dami | | +1302 | -61 | 1.6 | |
| fix | Named ranges picker: a narrow namesHost; its changes noted in recordings | Dami | | +52 | -11 | 1.2 | |
| refactor | Formula suggestions: package suggest behind a seven-method host | Dami | | +571 | -351 | 1.8 | |
| refactor | Shortcuts view: package shortcuts behind a four-method host | Dami | | +288 | -150 | 1.4 | |
| feat | Filter picker: package filterpick; macros record and replay its criteria | Dami | | +743 | -340 | 2.0 | |
| feat | Locale: month and day names, Excel codes, filters and parse errors in the locale | Dami | | +855 | -102 | 2.2 | |
| refactor | Store: spilled cells and pivot results as slots, not whole Cells | Dami | | +504 | -71 | 2.3 | |
| feat | Sort bar: package sortbar; macros record and replay its choices | Dami | | +825 | -207 | 1.9 | |
| refactor | Choice bars: package choicebar behind a three-method host | Dami | | +262 | -111 | 1.7 | |
| docs | Roadmap: the XLSX check in spreadsheet apps is the release checklist's; one line for the grid and its storage | Dami | | +2 | -4 | 0.0 | |
| docs | Docs: rules' moves with cut and paste in their own section, what validation checks as a list; themes link the cues rather than list them | Dami | | +31 | -25 | 0.0 | |
| docs | README: eight demo tiles; charts, find and replace, JEV and formats shown on their own pages; locale in the tour | Dami | | +19 | -15 | 0.1 | |
| docs | Docs: the .012 reader's costs and the one-format reasoning in Bounds of support; a table row that swallowed a paragraph | Dami | | +28 | -23 | 0.0 | |
| Merge branch 'main' into worktree-agent-a5d13858d7c20f6f0 | Dami | | +2 | -2 | | |
| fix | Files: layout fields in the streaming reader's seeds; a key without a value refused | Dami | | +14 | -0 | 1.4 | |
| Merge branch 'main' into worktree-agent-a5d13858d7c20f6f0 | Dami | | +2138 | -259 | | |
| build | lint: refuse scratch-named files (zz_, tmp, scratch, dbg_) as well as binaries | Dami | | +2 | -2 | 1.3 | |
| fix | Borders: undo labels read 'all borders B2:C4', 'top border B2' | Dami | | +4 | -1 | 1.4 | |
| refactor | XLSX: layout reading and writing split to keep functions simple | Dami | | +80 | -50 | 1.2 | |
| docs | Docs: compact undo steps and the streaming .012 file | Dami | | +94 | -54 | 0.1 | |
| docs | Bounds: what wrapped text, borders, heights and merges cost | Dami | | +22 | -2 | 0.1 | |
| refactor | History: a step's row heights allocated when a height changes | Dami | | +13 | -5 | 1.2 | |
| refactor | UndoCost costs the fewer of the range's cells and the rich cells | Dami | | +26 | -14 | 1.6 | |
| refactor | Engine: borders packed in a byte, so a cell stays 256 bytes | Dami | | +69 | -57 | 2.4 | |
| refactor | Open: plain numbers straight into their slots | Dami | | +334 | -33 | 2.1 | |
| fix | Grid: bands of an unshaped sheet without asking each row; charts over tall rows tested | Dami | | +31 | -2 | 1.2 | |
| docs | Docs and a demo: wrapped text, row heights, borders, merged cells | Dami | | +110 | -5 | 0.3 | |
| Grid: borders drawn from a frame's cache; a laid-out stress shape | Dami | | +66 | -13 | | |
| Screens: the trip plan in the high-contrast theme | Dami | | +32 | -1 | | |
| Screens: the palette lists the layout commands | Dami | | +5 | -5 | | |
| Merge main: the locale file field in the streaming reader | Dami | | +4354 | -343 | | |
| Save streams into the temporary file | Dami | | +31 | -15 | | |
| Stream the .012 file: cells read into the store and written from it | Dami | | +909 | -103 | | |
| Merge branch 'main' into worktree-agent-a5d13858d7c20f6f0 | Dami | | +5542 | -676 | | |
| Grid: cell roles by pointer, not copied per cell | Dami | | +24 | -21 | | |
| Layout: golden screens, e2e flows and polish | Dami | | +527 | -94 | | |
| Ask before a change too large to undo | Dami | | +102 | -1 | | |
| Undo: before-images in the store's compact form | Dami | | +578 | -54 | | |
| Stress: clearing a full max-cells sheet, and the peak heap of open and save | Dami | | +81 | -13 | | |
| Merge branch 'main' into the locale branch | Dami | | +2966 | -510 | | |
| Merge branch 'worktree-agent-a5d84df4c78b3591d' | Dami | | +1731 | -120 | | |
| Locale picker: a tag narrows the list, samples show a formula | Dami | | +28 | -5 | | |
| e2e: switching locales, LANG as the default; golden screens | Dami | | +317 | -25 | | |
| Merge branch 'main' into worktree-agent-a5d84df4c78b3591d | Dami | | +78 | -63 | | |
| XLSX: wrapped text, borders, row heights and merged cells both ways | Dami | | +539 | -43 | | |
| Screens: drop a duplicate high-contrast entry that recorded the bills fixture | Dami | | +0 | -8 | | |
| doccheck: doc paths in the Makefile, scripts and deploy configs too; roadmap row for compact derived cells | Dami | | +30 | -16 | | |
| Docs: bounds figures in one home, stale doc paths fixed | Dami | | +48 | -47 | | |
| Grid: wrapped text, tall rows, borders and merged cells | Dami | | +1891 | -301 | | |
| Tests: high-contrast screens in their own file, monochrome states as separate tests | Dami | | +136 | -130 | | |
| Merge branch 'main' into worktree-agent-a5d84df4c78b3591d | Dami | | +1196 | -366 | | |
| Roadmap: distribution and upkeep, accessibility and rule moves shipped | Dami | | +6 | -11 | | |
| Validation on pastes and fills; rules move with cut and paste | Dami | | +418 | -2 | | |
| Docs: the locale in the architecture, registries, formulas and macros; roadmap | Dami | | +26 | -4 | | |
| CSV in the locale: fields read and written its way | Dami | | +265 | -27 | | |
| File > Settings > Locale: a workbook's locale, typed and shown | Dami | | +897 | -109 | | |
| Formulas in a locale's syntax, translated at the edges | Dami | | +203 | -0 | | |
| Accessibility: a high-contrast theme, and every state readable without color | Dami | | +809 | -73 | | |
| Docs: compact storage in the bounds, architecture and extending pages | Dami | | +150 | -123 | | |
| Undo budget: count a plain cell's before-image with the input made for it | Dami | | +5 | -5 | | |
| max-cells: ten million by default, with a stress shape at that size | Dami | | +22 | -11 | | |
| Sheet: entries and clears read formatting without making cells | Dami | | +27 | -9 | | |
| Sheet: compact column storage behind cellStore | Dami | | +932 | -214 | | |
| Stress: heap per cell after opening a file, and the cost of a cell read | Dami | | +61 | -5 | | |
| Engine: wrapping, borders, row heights and merged cells | Dami | | +1347 | -97 | | |
| Releasing: the XLSX check goes through File > Download | Dami | | +1 | -1 | | |
| Locales: the table, and numbers and dates typed and shown in each | Dami | | +834 | -20 | | |
| Grafana: recent traces and a trace view in the runtime dashboard | Dami | | +125 | -6 | | |
| stress-report: flag regressions against the last release's run | Dami | | +182 | -27 | | |
| make dist: release archives built locally, and 012 version | Dami | | +194 | -2 | | |
| Note the release tags after the history rewrite | Dami | | +1 | -1 | | |
| Demos: an arrays tape | Dami | | +39 | -1 | | |
| Macros and Excel pages: point at the page that holds the fact | Dami | | +9 | -4 | | |
| doccheck: the Docusaurus tree, and doc paths named in Go code | Dami | | +214 | -32 | | |
| Generators, tests and code name the new doc paths | Dami | | +82 | -62 | | |
| The screen: the lines and every mode indicator; a menu path fix | Dami | | +25 | -1 | | |
| README: install in one line, the rest in getting-started/install.md | Dami | | +5 | -12 | | |
| Docs: one home per fact in the new tree; link text names pages | Dami | | +117 | -119 | | |
| Docs: links for the new tree | Dami | | +170 | -170 | | |
| Docs: a Docusaurus tree of folders by concept | Dami | | +1500 | -1075 | | |
| Merge branch 'worktree-agent-a2b0e9a607742cefd' | Dami | | +219 | -9 | | |
| Pivot values take the column's common format; theme search by dark or light filters by kind | Dami | | +219 | -9 | | |
| Merge main: shipped list, restructured files.md, demos | Dami | | +1500 | -465 | | |
| Untrack two committed test binaries; lint refuses binaries and files over 2 MB | Dami | | +18 | -1 | | |
| Merge main: conditional formatting and data validation | Dami | | +6641 | -120 | | |
| Document how arrays are computed and spilled, their bounds, and mark them done | Dami | | +80 | -8 | | |
| Look for spilled cells to draw only on sheets with spills | Dami | | +7 | -2 | | |
| Split the docs checks and the config overview under the complexity limit | Dami | | +69 | -50 | | |
| Demos: tapes for rules, pivot tables, vim keys, macros and themes | Dami | | +258 | -1 | | |
| config.md: an overview table before the option reference | Dami | | +41 | -0 | | |
| README: a landing page; docs show the recordings that teach them | Dami | | +53 | -79 | | |
| architecture.md, extending.md: describe the code as it is | Dami | | +5 | -5 | | |
| Contributor docs: the docs checks, tapes and where facts go | Dami | | +57 | -30 | | |
| files.md: import, Excel, saving and the format as separate sections | Dami | | +211 | -102 | | |
| ROADMAP: what's ahead, then one line per shipped feature | Dami | | +82 | -131 | | |
| Merge main into docs steward | Dami | | +6602 | -115 | | |
| keys.md: sections by task, every bound key listed | Dami | | +157 | -89 | | |
| Check the docs against the code and each other | Dami | | +567 | -0 | | |
| Keep evaluation frames and snapshot cells as small as before arrays | Dami | | +122 | -65 | | |
| Untrack a compiled test binary and ignore *.test | Dami | | +1 | -0 | | |
| Rules: e2e test, golden screens and docs | Dami | | +769 | -63 | | |
| Show a cell's note on hover over its checkbox or dropdown mark too | Dami | | +1 | -1 | | |
| Note rule edits in macro recordings, and list Clear conditional formats | Dami | | +41 | -11 | | |
| Draw rule shades from cached escape codes, and find percentiles by selection | Dami | | +206 | -39 | | |
| Test spills end to end and record their golden screens | Dami | | +197 | -3 | | |
| Merge main: charts, notes, protected ranges and pivot subtotals | Dami | | +5571 | -816 | | |
| Spill a range that is a cell's whole formula, as Sheets does | Dami | | +96 | -13 | | |
| Document arrays, spills, LET and LAMBDA, and regular expressions | Dami | | +113 | -13 | | |
| Merge main into rules | Dami | | +5498 | -799 | | |
| Keep arrays data-proportional and the evaluator's hot paths as fast | Dami | | +240 | -71 | | |
| Add a stress shape of 1000 FILTER and UNIQUE arrays over 8192 rows | Dami | | +23 | -0 | | |
| List rule screens, and order rule menu items as Sheets does | Dami | | +143 | -15 | | |
| Read and write conditional formats and data validation in XLSX | Dami | | +1196 | -22 | | |
| Write spills to XLSX as Excel's dynamic array formulas | Dami | | +422 | -43 | | |
| Merge the chart types and options | Dami | | +2695 | -429 | | |
| Chart types and options: e2e test, golden screens, docs | Dami | | +450 | -67 | | |
| Chart editor: one type chip on narrow screens | Dami | | +40 | -9 | | |
| Show spilled cells and refuse editing them | Dami | | +133 | -24 | | |
| Merge pivot extras and section 1 follow-ups | Dami | | +716 | -182 | | |
| Notes and protected ranges: e2e tests and golden screens | Dami | | +475 | -62 | | |
| Add SPLIT, REGEXMATCH, REGEXEXTRACT and REGEXREPLACE | Dami | | +277 | -1 | | |
| Add LET, LAMBDA, MAP, REDUCE, SCAN, BYROW, BYCOL and MAKEARRAY | Dami | | +231 | -1 | | |
| Draw and edit conditional formats and data validation | Dami | | +2213 | -18 | | |
| Compute arrays and spill them from the formula's cell | Dami | | +2201 | -113 | | |
| Parse array literals, LET and LAMBDA names, and LAMBDA calls | Dami | | +338 | -42 | | |
| Pivot editor: Value name prompt, shorter hints; golden screens; roadmap | Dami | | +133 | -14 | | |
| Document notes and protected ranges; mark them done in the roadmap | Dami | | +45 | -4 | | |
| Chart editor: stacking, trend line, and an axis and legend bar | Dami | | +311 | -28 | | |
| Draw area, scatter, stacked charts and axis options | Dami | | +1675 | -285 | | |
| Chart area and scatter types and chart options in the sheet | Dami | | +203 | -43 | | |
| Replace current sheet removes charts that no longer fit the new data | Dami | | +80 | -47 | | |
| Keep the excelize reference importer under the complexity limit | Dami | | +4 | -7 | | |
| Notes as XLSX comments both ways; protected sheets noted on import | Dami | | +301 | -20 | | |
| Vim p/P carry row formats; cutting a block leaves its cells plain | Dami | | +102 | -12 | | |
| Add conditional formats and data validation to the engine | Dami | | +2089 | -4 | | |
| Notes and protected ranges in the UI | Dami | | +641 | -15 | | |
| Pivot tables: column subtotals, renamed values, Sheets' blank label | Dami | | +406 | -114 | | |
| Notes on cells and protected ranges in the engine | Dami | | +625 | -87 | | |
| Note that releases are tagged from v0.1.0 | Dami | | +1 | -1 | | |
| Mark section 1 done and list its three small follow-ups | Dami | | +5 | -1 | | |
| Merge branch 'main' into worktree-agent-ae34d1301321fca4b | Dami | | +1657 | -90 | | |
| Merge branch 'main' into worktree-agent-ae34d1301321fca4b | Dami | | +1349 | -85 | | |
| Merge branch 'main' into worktree-agent-a3e506a22e38bc9d2 | Dami | | +1349 | -85 | | |
| Record the Google Sheets check of 012's XLSX output | Dami | | +1 | -1 | | |
| Describe moveFormats by what it does | Dami | | +3 | -2 | | |
| Merge branch 'main' into worktree-agent-ae34d1301321fca4b | Dami | | +426 | -389 | | |
| Say why a key whose check failed is kept, as the code is | Dami | | +4 | -4 | | |
| Document formats travelling with copy and move, import location details and traces into hidden sheets | Dami | | +35 | -6 | | |
| Merge branch 'main' into worktree-agent-a3e506a22e38bc9d2 | Dami | | +424 | -385 | | |
| 012 serve: open a file named on the ssh command line, and keep unsaved work on shutdown or idle timeout | Dami | | +1190 | -84 | | |
| Say when a trace finds only cells on hidden sheets, and how to show them | Dami | | +111 | -4 | | |
| Import location: new sheets go after the current tab; Replace current sheet keeps its charts | Dami | | +192 | -55 | | |
| Merge branch 'main' into worktree-agent-aa352c3e491997bf4 | Dami | | +192 | -316 | | |
| Merge branch 'main' into worktree-agent-aefb5423310f7d3e1 | Dami | | +29 | -0 | | |
| Describe the bounds of support as they are, and run doclint in make lint | Dami | | +192 | -316 | | |
| Say why array expressions in range arguments stay #VALUE! | Dami | | +3 | -3 | | |
| Merge branch 'main' into worktree-agent-aa352c3e491997bf4 | Dami | | +232 | -69 | | |
| Carry column and row formats with copy, cut and move, as Sheets does | Dami | | +604 | -54 | | |
| Mark the line that states the doclint rule | Dami | | +1 | -1 | | |
| Write down the no-broken-windows rules | Dami | | +29 | -0 | | |
| Add doclint and fix what it finds outside limits.md | Dami | | +174 | -24 | | |
| Mark a worksheet whose filter hides rows as in filter mode | Dami | | +3 | -0 | | |
| Add staticcheck to make lint and clear its findings | Dami | | +29 | -45 | | |
| Merge branch 'main' into worktree-agent-aa352c3e491997bf4 | Dami | | +14 | -2 | | |
| Name renamed sheets by their new names in XLSX formulas and defined names | Dami | | +146 | -44 | | |
| Check a new JEV API key with one test call and say how it went; golden screens for it and Save as replacing | Dami | | +363 | -27 | | |
| Keep frozen panes and filters in XLSX, both ways | Dami | | +905 | -25 | | |
| Ask before Save as or :w replaces another existing file | Dami | | +128 | -3 | | |
| Re-infer formulas reading blanks of a newly formatted column, row or sheet at once | Dami | | +118 | -2 | | |
| Add make check: gofmt, vet, lint, tests, oracle and e2e before a push | Dami | | +14 | -2 | | |
| Read a range where one value is wanted as the cell in the formula's row or column | Dami | | +296 | -17 | | |
| Move the OTLP close tests to their own file, under the length limit | Dami | | +58 | -52 | | |
| Don't let a dead inherited OTLP endpoint slow quitting | Dami | | +67 | -10 | | |
| Collect the roadmap ahead: hardening, Sheets features, scale, macros and keys, upkeep | Dami | | +59 | -5 | | |
| Merge branch 'main' into worktree-agent-aaa0590bb98cf6547 | Dami | | +9 | -6 | | |
| Document nested spans | Dami | | +115 | -10 | | |
| Write a span's ids to the JSON log with one allocation | Dami | | +35 | -29 | | |
| Nest the UI's, imports' and sessions' spans | Dami | | +280 | -57 | | |
| Time recalculations and pivot refreshes in their workbook's trace | Dami | | +107 | -24 | | |
| Nest spans through a per-owner Trace and explicit Parent handles | Dami | | +509 | -97 | | |
| Say which palette the recordings use | Dami | | +3 | -2 | | |
| Record the demos in Catppuccin Mocha with an isolated config | Dami | | +6 | -4 | | |
| Group the module's imports apart in the function library | Dami | | +2 | -1 | | |
| Merge branch 'main' into worktree-agent-aea7749106333daaf | Dami | | +3953 | -2318 | | |
| Document the function library's package and its boundary | Dami | | +175 | -45 | | |
| Add ranges up in the engine and walk lookups with a cursor | Dami | | +147 | -76 | | |
| Group the module's imports apart from the others | Dami | | +5 | -1 | | |
| Document the UI's hosts and the packages components moved to | Dami | | +78 | -23 | | |
| Test an open menu against a fake host | Dami | | +89 | -0 | | |
| Move the import runner into internal/ui/transfer | Dami | | +369 | -223 | | |
| Move the function library into internal/functions | Dami | | +1595 | -950 | | |
| Move values, formats and entry parsing into internal/value | Dami | | +426 | -309 | | |
| Give the macro manager a narrow host | Dami | | +29 | -10 | | |
| Give the pivot editor a narrow host | Dami | | +125 | -78 | | |
| Give the menus a narrow host and move the theme picker out | Dami | | +318 | -133 | | |
| Move the tab strip's layout into internal/ui/tabstrip | Dami | | +331 | -197 | | |
| Move the find bar into internal/ui/findbar | Dami | | +708 | -414 | | |
| Move the command line into internal/ui/cmdline | Dami | | +466 | -241 | | |
| Move the picker into internal/ui/picker | Dami | | +774 | -500 | | |
| Move the edit line into internal/ui/lineedit | Dami | | +334 | -280 | | |
| Move the overlay contract into internal/ui/overlay | Dami | | +590 | -481 | | |
| Add criteria and lookup shapes to the stress benchmarks | Dami | | +54 | -0 | | |
| Total selection statistics per block, and document the merge | Dami | | +58 | -4 | | |
| Merge main (7431646) into Step A | Dami | | +6627 | -888 | | |
| Document Step A: the grid, its bounds and what cost the grid | Dami | | +181 | -54 | | |
| Read the cell map for ranges over a quarter of the sheet's cells | Dami | | +3 | -3 | | |
| Keep pivots, big selections and XLSX imports as fast as before | Dami | | +64 | -18 | | |
| Trim the costs the benchmarks showed, and more edges by index | Dami | | +174 | -87 | | |
| Keep sort, undo and store tests under the complexity limit | Dami | | +113 | -80 | | |
| Golden screens and an e2e test at the corner of a million rows | Dami | | +107 | -7 | | |
| Stress a sparse million rows in the UI | Dami | | +23 | -0 | | |
| Search lookups and criteria through the cells their ranges hold | Dami | | +259 | -83 | | |
| Guard every command against grid-sized work | Dami | | +126 | -8 | | |
| Format the whole sheet once | Dami | | +126 | -43 | | |
| Sort only the rows that hold cells | Dami | | +123 | -20 | | |
| Merge performance quick wins: block selection stats, JEV recalc by question, 120 fps, depth limits | Dami | | +1100 | -276 | | |
| Merge 012's own streaming XLSX reader and writer; excelize leaves the binary | Dami | | +3188 | -392 | | |
| Record the selection statistics, JEV, frame rate and depth limits | Dami | | +129 | -48 | | |
| Port hidden sheets and missing-sheet formulas to the new XLSX code | Dami | | +210 | -65 | | |
| Imports and exports: max-cells budget, column and row styles | Dami | | +344 | -58 | | |
| UI at a million rows: wider row numbers, filtered stepping by index | Dami | | +105 | -78 | | |
| Raise the grid to Excel's 1,048,576 rows by 16,384 columns | Dami | | +1427 | -428 | | |
| Merge branch 'worktree-agent-a772f6065b4ca6f62' | Dami | | +2296 | -213 | | |
| Publish the collector's health check on localhost:13133 | Dami | | +2 | -1 | | |
| Document the XLSX reader and writer: limits, numbers, fuzzing | Dami | | +70 | -15 | | |
| Test hidden sheets, sheet suggestions and the import location end to end, with golden screens | Dami | | +547 | -41 | | |
| Write XLSX with archive/zip instead of excelize | Dami | | +481 | -124 | | |
| Keep the evaluation depth count off the hot path | Dami | | +72 | -53 | | |
| Bound shared formula expansion and look up column styles once | Dami | | +66 | -29 | | |
| Ask where File > Import puts the data: new sheets, the current sheet or the spreadsheet | Dami | | +512 | -44 | | |
| Import XLSX with 012's streaming reader instead of excelize | Dami | | +211 | -197 | | |
| Add a streaming XLSX reader on archive/zip and encoding/xml | Dami | | +2248 | -0 | | |
| Suggest sheet names in formula autocomplete, pointing into the sheet after | Dami | | +295 | -21 | | |
| Bound evaluation depth by putting off cells past it | Dami | | +277 | -72 | | |
| Cap formula nesting at 1024 levels in the parser | Dami | | +83 | -1 | | |
| Hide and unhide sheets: tab menu Hide sheet and View > Hidden sheets | Dami | | +652 | -47 | | |
| Read ranges by what they hold, not their area | Dami | | +1230 | -333 | | |
| Ask Bubble Tea for 120 frames a second | Dami | | +2 | -2 | | |
| Gather JEV answers for a frame and recalculate them together | Dami | | +130 | -11 | | |
| Recalculate only the formulas waiting for a JEV answer | Dami | | +205 | -105 | | |
| Sum selection statistics from per-column block aggregates | Dami | | +261 | -43 | | |
| Export formulas naming a missing sheet to XLSX as their values, with a note | Dami | | +109 | -15 | | |
| Benchmark XLSX imports of full sheets and report peak heap per cell | Dami | | +84 | -14 | | |
| Compute PRODUCT, SUMIF, SUMIFS and SUMPRODUCT in decimal arithmetic | Dami | | +186 | -50 | | |
| Note how macros behave in 012 serve sessions | Dami | | +6 | -0 | | |
| Merge macros: recording, Starlark scripts, step limits and trust | Dami | | +5058 | -218 | | |
| Merge pivot tables and frequency tables | Dami | | +3843 | -150 | | |
| Merge the config file, keychain API key and color-scheme themes | Dami | | +16093 | -271 | | |
| Test recording the fill handle and a fitted column, both ways | Dami | | +27 | -0 | | |
| Format the script tests | Dami | | +0 | -1 | | |
| Stop a macro's script when its program is gone, so no goroutine outlives a session | Dami | | +49 | -6 | | |
| Document macros: a user guide and API reference, keys, files, patterns, architecture and limits | Dami | | +601 | -149 | | |
| Document pivot and frequency tables | Dami | | +125 | -11 | | |
| Recompute a pivot when a cell in its way is cleared | Dami | | +45 | -7 | | |
| Document the config file, themes and API key setup | Dami | | +261 | -20 | | |
| Run jev-api-key-command only when a sheet first asks JEV | Dami | | +65 | -2 | | |
| Test pivots end to end and record their golden screens | Dami | | +456 | -85 | | |
| Test config, themes and the API key end to end | Dami | | +452 | -17 | | |
| Fix scheme contrast by blending toward the text color | Dami | | +63 | -37 | | |
| Benchmark replaying a 1000-action macro and a script's calls under -tags stress; read small ranges without scanning the sheet | Dami | | +106 | -2 | | |
| Add golden screens for the macro menu, recording, manager, errors and trust question | Dami | | +557 | -95 | | |
| Merge vim keys and the undo byte cap; rank palette titles with a word starting with the query first | Dami | | +2378 | -138 | | |
| Edit macro scripts only where an editor is allowed, and test recording and replay end to end | Dami | | +164 | -15 | | |
| Register 012 serve's settings; keep serve's entry points compiling | Dami | | +154 | -16 | | |
| Route :w and :e through the File menu's save, open and download paths | Dami | | +55 | -52 | | |
| Read settings from the config file; keep the API key out of files | Dami | | +1522 | -175 | | |
| Benchmark pivots over 8192 rows and group without allocating keys | Dami | | +142 | -43 | | |
| Document vim keys and mark the roadmap item done | Dami | | +65 | -5 | | |
| Record, run and manage macros under Data > Macros, with a trust prompt for files made elsewhere | Dami | | +2276 | -52 | | |
| Test vim keys through libghostty and record their screens | Dami | | +301 | -36 | | |
| Show the keys that finish a vim sequence, and size completions to fit | Dami | | +37 | -3 | | |
| Merge branch 'ssh-serve' | Dami | | +2441 | -114 | | |
| Add Data > Pivot table, the pivot editor and Column stats | Dami | | +1117 | -45 | | |
| Fit new pivot sheets' columns and list a pivot filter's values | Dami | | +113 | -8 | | |
| Tidy the oracle module for the dependencies wish brought in | Dami | | +9 | -9 | | |
| Include the SSH session benchmark in make stress | Dami | | +1 | -1 | | |
| Save over a file deleted since it was opened without asking | Dami | | +9 | -1 | | |
| Document 012 serve: setup, security model and limits | Dami | | +177 | -4 | | |
| Measure concurrent SSH sessions under -tags stress | Dami | | +194 | -4 | | |
| Add terminal color schemes as themes, with full-width bar roles | Dami | | +11716 | -4 | | |
| Add a credential store for the JEV API key | Dami | | +455 | -1 | | |
| Plan raising the grid: data-proportional operations, a cell budget, compact storage | Dami | | +12 | -0 | | |
| Test 012 serve end to end through the system ssh client in libghostty | Dami | | +118 | -1 | | |
| Add optional vim keys with a : command line | Dami | | +1587 | -49 | | |
| Add 012 serve: sessions over SSH with charm.land/wish/v2 | Dami | | +1231 | -34 | | |
| Add pivot tables to the engine as derived sheets | Dami | | +1906 | -12 | | |
| Add a central config file with a typed option registry | Dami | | +1362 | -0 | | |
| Add the macro package: a Starlark API for scripts, recorded actions as source, step limits and cancelling | Dami | | +965 | -7 | | |
| Keep macros with the workbook: undoable list, file field, and an undo step that stays open across calls | Dami | | +445 | -22 | | |
| Resolve file names through a root that can confine them to a directory | Dami | | +706 | -64 | | |
| Cap undo history by estimated bytes as well as steps | Dami | | +333 | -35 | | |
| Mark VHS demos done; they render locally, not in CI | Dami | | +2 | -2 | | |
| Show demo recordings in the README | Dami | | +17 | -0 | | |
| Note the last full stress run in the limits doc | Dami | | +3 | -1 | | |
| Merge the engine refactor: formula and numfmt packages, a cell store, range reads, per-workbook JEV source | Dami | | +4404 | -3364 | | |
| Merge the UI restructure: components own their state, leaf packages for theme, row layout and formula text | Dami | | +4273 | -3717 | | |
| Size the lexer's token slice from the formula's length | Dami | | +3 | -1 | | |
| Free a chart's old image before resending it, so it fills its new size | Dami | | +14 | -1 | | |
| Give workbooks their JEV source with SetRemote instead of a global | Dami | | +10 | -22 | | |
| Document the formula and numfmt packages and where the engine can grow | Dami | | +104 | -26 | | |
| Split the remaining complex engine functions into named steps | Dami | | +361 | -259 | | |
| Derive the chart type list from one table | Dami | | +14 | -4 | | |
| Describe the UI's structure in the architecture doc | Dami | | +55 | -10 | | |
| Keep the JEV source on the workbook | Dami | | +27 | -19 | | |
| Say what Model is now: the root that routes and composes | Dami | | +7 | -2 | | |
| Move the row text layout into internal/ui/rowtext | Dami | | +53 | -46 | | |
| Derive the UI's format lists and choices from fileio's formats table | Dami | | +32 | -26 | | |
| Document the file formats table, charts and telemetry, and the split screen tests | Dami | | +69 | -12 | | |
| Pick bar glyphs with a function instead of walking cells through a callback | Dami | | +29 | -28 | | |
| Move formula text scanning into internal/ui/formula | Dami | | +125 | -117 | | |
| Read ranges through lookup.cells in the aggregates | Dami | | +70 | -35 | | |
| Edit a cell from the mouse through the edit command | Dami | | +2 | -2 | | |
| Tidy mouse geometry and name runCommand as the command hook | Dami | | +70 | -68 | | |
| Move trace, clipboard and cell drawing helpers off Model | Dami | | +55 | -53 | | |
| Move terminal and JEV handling onto the types that own them | Dami | | +88 | -82 | | |
| Make formula suggestions a component | Dami | | +62 | -61 | | |
| Put each sheet's cells behind a cellStore | Dami | | +135 | -89 | | |
| Set up and check the fill handle test with helpers | Dami | | +30 | -17 | | |
| Give the import flow its own methods and split out downloads | Dami | | +213 | -184 | | |
| Run the chart benchmarks in make stress | Dami | | +1 | -1 | | |
| Move recalculation into recalc.go and split marking by reader kind | Dami | | +266 | -225 | | |
| Move the find bar's drawing and mouse handling to findview.go | Dami | | +185 | -175 | | |
| Split the open menu out of menubar.go | Dami | | +381 | -363 | | |
| Split the chart selection and chart editor out of charts.go | Dami | | +497 | -447 | | |
| Name the evaluators in the function tables | Dami | | +496 | -428 | | |
| Split the e2e screen list from the screen recorder, and the HTML and key helpers | Dami | | +625 | -574 | | |
| Make the tab strip a component with its own layout | Dami | | +309 | -257 | | |
| Split the OTLP exporter by concern: config, log handler and metrics | Dami | | +352 | -282 | | |
| Move the formula language into internal/formula | Dami | | +1699 | -1304 | | |
| Make the context-line prompt a component | Dami | | +468 | -415 | | |
| Supersample only the pie image's edge and rim pixels, and find slices by binary search | Dami | | +98 | -31 | | |
| Group Model's fields into the components that own them | Dami | | +461 | -401 | | |
| Register chart types in a table of layouts instead of switching on them | Dami | | +156 | -125 | | |
| Give the grid its own type, embedded in Model | Dami | | +323 | -308 | | |
| Move the formats table to formats.go and describe each format fully there | Dami | | +191 | -108 | | |
| Stream CSV and TSV exports to the file row by row, and read UTF-16 as a stream | Dami | | +77 | -54 | | |
| Register each file format's importer and exporter in the kinds table | Dami | | +81 | -53 | | |
| Stop reading Parquet files and SQLite tables at the sheet's last row | Dami | | +200 | -75 | | |
| Split XLSX sheet writing, WK1 record reading and the delimited round trip test into helpers | Dami | | +133 | -96 | | |
| Translate formulas to Excel token by token, with a helper per token kind | Dami | | +86 | -63 | | |
| Decode Lotus formulas with an opcode table instead of one big switch | Dami | | +218 | -141 | | |
| Add stress benchmarks of chart drawing, as text and as images | Dami | | +76 | -0 | | |
| Write down the patterns for extending 012 | Dami | | +124 | -0 | | |
| Read formula text with small scanner types | Dami | | +278 | -230 | | |
| Move number formats, rounding and date serials into internal/numfmt | Dami | | +1228 | -1023 | | |
| Lay out a row's text with a small rowLayout type | Dami | | +224 | -171 | | |
| Give Theme pointer receivers so drawing doesn't copy every style | Dami | | +6 | -6 | | |
| Test the theme widgets on their own | Dami | | +44 | -0 | | |
| Move the UI theme and its widgets into internal/ui/theme | Dami | | +541 | -512 | | |
| Add stress benchmarks for parsing, value recognition and number formats | Dami | | +75 | -0 | | |
| Rewrap the decimal section of the formulas doc | Dami | | +4 | -3 | | |
| Add make lint: cognitive complexity at most 25, files at most 500 lines | Dami | | +36 | -1 | | |
| Drop the GitHub Actions workflow; the repo is hosted only | Dami | | +0 | -40 | | |
| Regenerate golden screens with sheet tabs after main's changes | Dami | | +14 | -14 | | |
| Document sheets in the user and developer docs | Dami | | +128 | -22 | | |
| Keep recalculation state on each sheet | Dami | | +66 | -48 | | |
| Keep named ranges and new tabs on the right sheet | Dami | | +33 | -3 | | |
| Skip the cross-sheet scan for sheets no formula names | Dami | | +49 | -2 | | |
| Test sheets end to end and add golden screens for tabs | Dami | | +606 | -130 | | |
| Draw sheet tabs as plain names beside a divider | Dami | | +20 | -10 | | |
| Add sheet tabs, sheet commands and pointing into other sheets | Dami | | +1328 | -171 | | |
| Add workbooks: several sheets with references between them | Dami | | +2333 | -515 | | |
| Document native OTLP export | Dami | | +107 | -28 | | |
| Show 012's OTLP traces and metrics in the observability stack | Dami | | +99 | -6 | | |
| Add --otlp to send telemetry to an OTLP endpoint | Dami | | +41 | -15 | | |
| Export telemetry over OTLP/HTTP JSON with the standard library | Dami | | +1493 | -54 | | |
| Move decimal arithmetic and demo notes into the docs | Dami | | +34 | -0 | | |
| Save PNG stills from the demos and size them for the README | Dami | | +39 | -7 | | |
| Add VHS demo tapes and make demos | Dami | | +515 | -2 | | |
| Add File > Settings > Decimal arithmetic | Dami | | +214 | -20 | | |
| Add opt-in decimal arithmetic to the engine | Dami | | +498 | -9 | | |
| Enter typed percentages as exact decimals | Dami | | +9 | -1 | | |
| Link limits and observability from the docs index | Dami | | +3 | -0 | | |
| Pick a comparable baseline in stress reports | Dami | | +12 | -5 | | |
| Format the e2e stress check with gofmt | Dami | | +2 | -2 | | |
| Document the bounds of support and how to observe them | Dami | | +422 | -2 | | |
| Build JEV cache keys by hand instead of with encoding/json | Dami | | +153 | -10 | | |
| Measure key press to screen on a big sheet through libghostty | Dami | | +145 | -0 | | |
| Add an observability stack: Collector, ClickHouse and Grafana | Dami | | +1033 | -2 | | |
| Fetch only clearly open datasets for stress tests | Dami | | +8 | -9 | | |
| Add make stress and make stress-report | Dami | | +411 | -1 | | |
| Instrument recalc, files, commands, JEV, charts and frames | Dami | | +302 | -15 | | |
| Add a telemetry package that writes JSON events with slog | Dami | | +457 | -0 | | |
| Benchmark imports of the real datasets and exports per format | Dami | | +111 | -0 | | |
| Add a script that fetches real datasets for stress tests | Dami | | +110 | -0 | | |
| Cache selection statistics and sum big ranges by iteration | Dami | | +45 | -8 | | |
| Build UI stress shapes lazily and add selection frames | Dami | | +28 | -10 | | |
| Sort named ranges by their keys | Dami | | +8 | -3 | | |
| Cut overflowing text into columns in one pass | Dami | | +78 | -1 | | |
| Add frame, keystroke and JEV stress benchmarks for the UI | Dami | | +232 | -0 | | |
| Find range users by column, and skip propagation in RecalcAll | Dami | | +155 | -28 | | |
| Stop allocating on every cell read by SUM and friends | Dami | | +14 | -8 | | |
| Add synthetic stress sheets and engine benchmarks behind the stress tag | Dami | | +469 | -0 | | |
| Run build, tests, oracle and e2e in GitHub Actions | Dami | | +40 | -0 | | |
| Loosen gallery line height so block glyphs join | Dami | | +1 | -1 | | |
| Write user and developer docs, and a README for GitHub | Dami | | +539 | -118 | | |
| Generate docs/functions.md from the function table | Dami | | +322 | -0 | | |
| Add the MIT license | Dami | | +21 | -0 | | |
| Use github.com/FelineStateMachine/012 as the module path | Dami | | +79 | -79 | | |
| Keep JEV on after File > New and Open, and notify after imports | Dami | | +35 | -4 | | |
| Test imports end to end and add golden screens for import and download | Dami | | +549 | -39 | | |
| Cancel imports at once and line up the import picker | Dami | | +36 | -19 | | |
| Add File > Import and Download, with progress while importing | Dami | | +913 | -16 | | |
| Import and export CSV, TSV, XLSX, SQLite, Parquet and Lotus .wk1 | Dami | | +3811 | -4 | | |
| Add Sheet.Load for loaders that build a sheet cell by cell | Dami | | +24 | -0 | | |
| Test that the file version follows the features a sheet uses | Dami | | +48 | -0 | | |
| Test freeze, sort, filter and fill end to end, with golden screens | Dami | | +643 | -96 | | |
| Scroll home when moving into frozen panes; a larger fill handle | Dami | | +17 | -7 | | |
| Freeze panes, sort, filter and a fill handle in the grid | Dami | | +1831 | -89 | | |
| Add sort, filter, frozen panes and fill series to the engine | Dami | | +1584 | -54 | | |
| Note the shelved live-sharing exploration in the roadmap | Dami | | +12 | -0 | | |
| Test charts, images, links and error marks end to end, with screens | Dami | | +712 | -60 | | |
| Float charts over the grid with an editor bar, and images on kitty terminals | Dami | | +1528 | -22 | | |
| Draw charts as text and as images for kitty graphics | Dami | | +1628 | -0 | | |
| Add HYPERLINK, cell links and error explanations to the engine | Dami | | +280 | -0 | | |
| Add charts to the engine: data, undo, rows and columns, file | Dami | | +632 | -4 | | |
| Test formula help, named ranges and tracing end to end, with golden screens | Dami | | +367 | -17 | | |
| Suggest functions and names while typing, name ranges, trace precedents | Dami | | +1174 | -19 | | |
| Add named ranges and tracing to the engine | Dami | | +691 | -34 | | |
| Update typesafe-go to v0.2.0 and check the service's limits early | Dami | | +57 | -7 | | |
| Test JEV end to end against a fake TypeSafe service | Dami | | +267 | -68 | | |
| Run JEV questions in the background and explain the answers | Dami | | +307 | -16 | | |
| Answer JEV functions with the TypeSafe SDK | Dami | | +433 | -0 | | |
| Add JEV functions to the engine | Dami | | +423 | -0 | | |
| Add find and replace as an incremental bar | Dami | | +851 | -64 | | |
| Rank palette results by fuzzy score across titles and paths | Dami | | +28 | -12 | | |
| Ignore .env files | Dami | | +2 | -0 | | |
| Rename the project to 012 | Dami | | +87 | -87 | | |
| Keep submenus readable and status stats uncrowded | Dami | | +56 | -43 | | |
| Merge main into the formats track | Dami | | +7823 | -1345 | | |
| Polish the shell on narrow and wide screens | Dami | | +171 | -48 | | |
| Replace full-screen help with a shortcuts overlay and function list | Dami | | +668 | -186 | | |
| Add right-click menus for cells and headers | Dami | | +438 | -121 | | |
| Add a command palette that searches every command | Dami | | +1407 | -770 | | |
| Add overlays and Sheets-style dropdown menus | Dami | | +1152 | -316 | | |
| Rework the control panel into menu bar, formula bar and context line | Dami | | +651 | -314 | | |
| Fuzz number format patterns | Dami | | +31 | -1 | | |
| Add differential tests against excelize | Dami | | +413 | -2 | | |
| Negate before exponentiation, as Sheets does | Dami | | +5 | -2 | | |
| Add golden screens of a formatted sheet | Dami | | +105 | -1 | | |
| Add Format commands, Sheets shortcuts and styled cells | Dami | | +661 | -66 | | |
| Route formatting through change and place for undo | Dami | | +254 | -85 | | |
| Make Replace all a single undo step | Dami | | +32 | -9 | | |
| Test copy, paste, undo, fill and insert end to end | Dami | | +324 | -3 | | |
| Add undo, clipboard, fill, insert and delete to the UI | Dami | | +969 | -42 | | |
| Describe undo steps so the UI can say what was undone | Dami | | +66 | -34 | | |
| Rewrite references on copy, move, insert and delete | Dami | | +1051 | -23 | | |
| Add an undo history to the engine | Dami | | +421 | -17 | | |
| Add finance functions | Dami | | +242 | -0 | | |
| Add date and time functions | Dami | | +414 | -0 | | |
| Add lookup functions | Dami | | +288 | -0 | | |
| Add logical and IS functions | Dami | | +127 | -0 | | |
| Add text functions | Dami | | +397 | -0 | | |
| Add statistical functions | Dami | | +274 | -0 | | |
| Add math functions with Sheets semantics | Dami | | +354 | -0 | | |
| Add number formats, date entry and cell styles to the engine | Dami | | +2504 | -109 | | |
| Prefer terminal-native patterns for Sheets' jobs | Dami | | +14 | -4 | | |
| Add find and replace to the engine | Dami | | +242 | -0 | | |
| Format mouse tests with gofmt | Dami | | +0 | -1 | | |
| Drive the mouse through libghostty in e2e tests | Dami | | +251 | -1 | | |
| Make mouse interaction work like Google Sheets | Dami | | +642 | -142 | | |
| Make Google Sheets the interaction target in docs | Dami | | +42 | -26 | | |
| Draw golden screens from libghostty's cell grid | Dami | | +761 | -689 | | |
| Make grid interaction behave like Google Sheets | Dami | | +1257 | -587 | | |
| Switch the engine to Google Sheets semantics | Dami | | +839 | -426 | | |
| Add used range, data-edge jumps and range stats to the engine | Dami | | +134 | -0 | | |
| Add UX bar and phase goals | Dami | | +75 | -1 | | |
| Add golden screen snapshots and review gallery | Dami | | +911 | -6 | | |
| Add semantic theme with light variant and fix contrast issues | Dami | | +117 | -45 | | |
| Route menu, keys and help through one command registry | Dami | | +150 | -52 | | |
| Add README and roadmap | Dami | | +119 | -0 | | |
| Add libghostty end-to-end test harness | Dami | | +490 | -0 | | |
| Add Bubble Tea v2 UI with 1-2-3 modes and slash menu | Dami | | +1556 | -0 | | |
| Add spreadsheet engine with 1-2-3 formula parser and recalc | Dami | | +1432 | -0 | | |