cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

Collect the roadmap ahead: hardening, Sheets features, scale, macros and keys, upkeep

Dami committed 82eb79a
commit
82eb79a0a0b3ee0071cdb1cad8cf68c9a9cac68e
parent
47f309838e5ce74e99c69bc1e4ba08cbde2aa082
author
Dami <dami.etoile@gmail.com>
1 file changed, +59 -5
MROADMAP.md64++++++++++++++++++++++++++++--
M ROADMAP.md +59 -5
@@ -93,12 +93,66 @@ measured steps (see [docs/limits.md](docs/limits.md)):
9393 | C | A streaming or binary file format next to the readable JSON one | Open and save scale with the data |9494 | Later | Linked, paged read-only ranges over Parquet and SQLite that feed pivots and formulas by streaming | Sources too big for any grid |9595 96-## Suggested order96+## Ahead9797 98-1. Command log + undo, Copy/Move with ref adjustment, Range Format.99-2. Command palette, autocomplete, status line stats.100-3. CSV and XLSX import/export.101-4. Charts (text first, then kitty placeholders).98+Collected after phase 5 from the docs, the limits, and what each piece of99+work left open. Sizes: S (a day or two), M (about a week), L (weeks).100+101+### 1. Finish and harden what shipped102+103+| Item | Why | Size |104+|---|---|---|105+| Open 012's XLSX output in real Excel and LibreOffice (a round-trip corpus, run by hand before releases) | The new writer is checked only by excelize and 012's reader | S |106+| Column and row formats travel with copy, cut and move; formulas reading blanks of a newly formatted column re-infer at once | Left open by step A | S |107+| Save as onto another existing file asks before replacing (local and `012 serve`) | Only the open file is checked today | S |108+| XLSX sheet names with characters Excel forbids: rewrite formulas that name them, not just the sheet | Formulas keep the old name today | S |109+| Replace current sheet keeps its charts; Insert new sheet(s) goes after the current tab | Import location details | S |110+| Precedent tracing explains when every precedent is on a hidden sheet | Says "no formula" today | S |111+| Settings > JEV API key checks the key with a test call | Left open by the config work | S |112+| `012 serve`: open a file from the ssh command line (`ssh -t host file.012` as a request, not exec), and save unsaved work to a recovery file on shutdown or idle timeout | Sessions start empty; unsaved work is lost today | M |113+| Decide whether 012 honors OTEL_* variables it inherits from the desktop session, or only its own config | A GUI-launched 012 exports to whatever the session's variables name | S |114+115+### 2. Spreadsheet features Sheets users reach for116+117+| Item | Notes | Size |118+|---|---|---|119+| Dynamic arrays: FILTER, SORT, UNIQUE, SEQUENCE, spill ranges, `#SPILL!`; then LET and LAMBDA | The biggest gap in the function library; spills need engine support for ranges a formula owns | L |120+| Text and regex: TEXTJOIN, SPLIT, REGEXMATCH, REGEXEXTRACT, REGEXREPLACE | Sheets staples | S |121+| Conditional formatting (color scales, rules on values and formulas), drawn in theme roles | Visual; must read under all 349 schemes | M |122+| Data validation: dropdown lists (a picker in the cell), number and date rules, checkboxes | Pairs with the filter picker | M |123+| Wrap text, row heights, borders, merged cells | Layout changes in the grid renderer | M to L |124+| Notes on cells (shown on hover and in the context line) | | S |125+| Locale: decimal comma, date order, list separator in formulas | Sheets' File > Settings > Locale | M |126+| Charts: scatter, area, stacked columns and bars, axis options, a legend position | Registry entries in `internal/chart` | M |127+| Pivot tables: column subtotals, renaming value columns, check the "(blank)" label against Sheets | Left open by pivots | S |128+| Protected ranges and sheets (warn on edit) | | S |129+130+### 3. Scale (see "Next: vast data" above and docs/limits.md)131+132+| Item | Result | Size |133+|---|---|---|134+| Step B: compact column storage behind `cellStore` | 10 M+ cells in a few hundred MB, cell reads 2 to 3 ns | L |135+| Step C: streaming and compact `.012` format | Open and save scale with the data | M |136+| Smaller undo steps: formatting changes as diffs | More history in the same memory | S |137+| Linked, paged read-only ranges over Parquet and SQLite feeding pivots and formulas | Sources too big for any grid | L |138+139+### 4. Macros and keys140+141+| Item | Size |142+|---|---|143+| Record dialog choices (sort bar, filter picker, find and replace, chart editor) and chart drags; let scripts run commands that open dialogs, with answers | M |144+| Vim: `.` repeat, registers, marks, `cc`/`s`, command-line history, `:w!`, `:wq file` quitting | M |145+| Remaining overlays get narrow hosts: filter picker, sort and choice bars, chart editor, shortcuts, named ranges, cell entry and prompts | M |146+147+### 5. Distribution and upkeep148+149+| Item | Size |150+|---|---|151+| Version tags and release notes; prebuilt binaries attached to tags (built locally, since the repo is hosting only) | S |152+| `make check`: vet, lint, tests, oracle, e2e in one target, run before every push | S |153+| `make stress-report` thresholds that flag regressions over a set percentage against the last release | S |154+| Grafana: a trace panel for the nested spans | S |155+| Accessibility: a high-contrast theme, and every state readable without color (already a UX rule; audit it) | S |102156 103157 ## Later: sharing a live sheet (shelved)104158