Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
de8b050
dash: the spreadsheet gestures — selection, keyboard, freeze, 3D
nyblnet Aug 4, 2026
9b58660
dash: cell formulas, and a header you can read
nyblnet Aug 4, 2026
c42ab60
dash: references that follow their cells — and two bugs found doing it
nyblnet Aug 5, 2026
f288679
dash: cut moves a formula, it does not rewrite it
nyblnet Aug 5, 2026
925f345
dash: About dialog, splash handling, and a docId that exists
nyblnet Aug 5, 2026
4387dee
dash: side panels — sheets on the left, properties on the right
nyblnet Aug 5, 2026
7774394
dash: save menu, thumbnail preview — and a build that silently lost i…
nyblnet Aug 5, 2026
90e80dc
dash: a viewport of zero is not a phone
nyblnet Aug 5, 2026
a93ec1f
dash: the functions people open Excel for — 53 to 89
nyblnet Aug 5, 2026
3942c93
dash: filtering never worked, and a cast is why
nyblnet Aug 5, 2026
b1e01d1
dash: data story — a workbook that presents itself
nyblnet Aug 5, 2026
25249d4
dash: linked dashboards with cross-filtering
nyblnet Aug 5, 2026
bcc67b1
dash: pivot tables — and sheet kinds that survive a round trip
nyblnet Aug 5, 2026
289bced
dash: xlsx in and out, no dependency
nyblnet Aug 5, 2026
b255327
dash: rids that are never reused, and a watermark that converges
nyblnet Aug 5, 2026
90c08b2
dash/sync: two convergence bugs closed, two still open
nyblnet Aug 5, 2026
9faf63a
dash: a toolbar that fits, and a grid that reads as a grid
nyblnet Aug 5, 2026
a619e9a
dash: Excel row density, 30px → 22px
nyblnet Aug 5, 2026
9250320
dash: row height 22px → 20px, Excel's exact default
nyblnet Aug 5, 2026
dfc1b63
dash: dense-pro restyle and a dark theme
nyblnet Aug 5, 2026
feb2fca
dash: a pivot sheet that says what it is
nyblnet Aug 5, 2026
7ace3f3
dash/sync: no open convergence failures
nyblnet Aug 5, 2026
de0426f
dash: rid partitioning, and collab wired in
nyblnet Aug 5, 2026
590eda3
dash/sync: no open convergence failures
nyblnet Aug 5, 2026
9726c94
dash: beforePatch, so undo ships ops and not a snapshot
nyblnet Aug 5, 2026
67aaea6
dash: the last collab divergences, and sheets you can undo
nyblnet Aug 5, 2026
b8a72cf
dash: rule the empty grid, and dock the People chip
nyblnet Aug 5, 2026
45eb8aa
Merge remote-tracking branch 'origin/main' into worktree-bento-dash
nyblnet Aug 6, 2026
eebec40
ci: run every dash rig, not two of them
nyblnet Aug 6, 2026
d31ac39
dash: pin the row numbers, and stop theming colours somebody chose
nyblnet Aug 6, 2026
b2f4c8a
dash: the four things a workbook needs before you trust it with real …
nyblnet Aug 6, 2026
1be1ade
dash: a locked workbook that imports a file is not locked
nyblnet Aug 6, 2026
e1aba2e
dash: eight languages, and a footer total that means what it says
nyblnet Aug 6, 2026
726113c
dash: a boot screen that says "spreadsheet", and one that survives a …
nyblnet Aug 6, 2026
bebf9d0
dash: tabs along the bottom, a Find the virtualiser cannot lie to, an…
nyblnet Aug 9, 2026
079e93e
docs: what is left before a first dash release
nyblnet Aug 10, 2026
4bdb1b9
dash: one mark on the active tab, not four
nyblnet Aug 10, 2026
400e6d4
docs: database mode — SQL as a surface, not an engine
nyblnet Aug 10, 2026
45a449e
dash: a release path, and a launch check that stays quiet on a file n…
nyblnet Aug 10, 2026
2002e95
dash: the footer total is a control, and the three readouts stop lying
nyblnet Aug 10, 2026
1736035
docs: the grid ends at the data, and pretends otherwise
nyblnet Aug 11, 2026
e78e298
docs: two kinds of sheet — spreadsheets typed by cell, datasets typed…
nyblnet Aug 11, 2026
a28fb4a
docs: export — Excel already has both kinds, so the mapping is a tran…
nyblnet Aug 11, 2026
bbdf4b1
dash 0.3.0: changelog, version, and the decisions this week settled
nyblnet Aug 11, 2026
0f6d8ad
ignore worktrees checked out inside the repo, in the shared file
nyblnet Aug 12, 2026
a80a06d
docs: correction — the spreadsheet kind already exists, and it is 'ca…
nyblnet Aug 12, 2026
9c1c43b
dash: the patch that writes a spreadsheet cell
nyblnet Aug 12, 2026
cf75e8e
dash: the step engine runs, after describing itself since commit one
nyblnet Aug 12, 2026
1f53938
dash: cross-sheet formula references, and the canvas key I got wrong
nyblnet Aug 12, 2026
f6052c6
dash: SQL, compiled to steps rather than evaluated
nyblnet Aug 12, 2026
19a82a4
dash: the spreadsheet kind opens, and =SUM below the data lands
nyblnet Aug 14, 2026
99c60e9
dash: stop ⌘D eating data, put the cell controls in, and close the dr…
nyblnet Aug 14, 2026
04e7201
docs: mark the CSV-sheet and cell-formatting items done
nyblnet Aug 14, 2026
f7b2e43
dash: spreadsheet cells sync per cell, keyed by their address
nyblnet Aug 14, 2026
6110974
dash: the bridge between the two kinds, a panel that lines up, and ta…
nyblnet Aug 15, 2026
877cb3b
dash: the footer stops chanting TOTAL TOTAL TOTAL
nyblnet Aug 15, 2026
c1d8919
guard the relay protocol against a fork nobody would notice
nyblnet Aug 15, 2026
943980d
docs: dash's share of the offline-mode advisory, measured not assumed
nyblnet Aug 15, 2026
c904e91
docs: correct the mechanism behind the offline gate lying
nyblnet Aug 15, 2026
a613a06
Merge main: dash's network call goes through the kernel's one door
nyblnet Aug 15, 2026
4e3443d
The Offline switch says whether it will survive a reload
nyblnet Aug 15, 2026
db373c3
dash: a 400k-row workbook must not blow the argument list
nyblnet Aug 17, 2026
92c34b6
dash: write the workbook back to its own file, and say so when it cannot
nyblnet Aug 17, 2026
03a37e7
backlog: two hazards found while adding file write-back
nyblnet Aug 17, 2026
36cc2b1
dash: a name belongs to a sheet, not to a dataset
nyblnet Aug 17, 2026
791fb6a
dash: a sheet reorder costs its id list, not its sheets
nyblnet Aug 17, 2026
6dadf71
dash: print the whole view, not the window
nyblnet Aug 17, 2026
1a85664
Merge branch 'dash-print' into worktree-bento-dash
nyblnet Aug 17, 2026
2bce380
dash: the grid stops pretending, to the eye and to a screen reader
nyblnet Aug 17, 2026
17f78cc
dash: About's version restore is undoable, like the recovery banner's
nyblnet Aug 17, 2026
a0e9bd9
Merge branch 'dash-grid' into worktree-bento-dash
nyblnet Aug 17, 2026
6d1d27c
Merge dash-correctness: four defects, and one that was not in the brief
nyblnet Aug 17, 2026
1da3263
A dropped workbook is adopted, the way a booted one is
nyblnet Aug 17, 2026
c8120ec
dash: both kinds of sheet can format a cell, and neither can format a…
nyblnet Aug 17, 2026
37b23bf
Merge branch 'dash-cellfmt' into worktree-bento-dash
nyblnet Aug 17, 2026
67d0eb6
grid.ts takes the appearance hook, and a rig proves it is called
nyblnet Aug 17, 2026
181c8f4
CI runs the five new rigs, and a guard so the next one cannot be forg…
nyblnet Aug 17, 2026
37dbf9a
dash has the app mark in its topbar, and keeps it at phone width
nyblnet Aug 17, 2026
83f9385
dash: a number can be named, and an array can land where it belongs
nyblnet Aug 18, 2026
5b9abb1
dash: a rule about what may be typed, and a reject that cannot eat a …
nyblnet Aug 18, 2026
953914e
grid.ts paints spilled cells, and the rig now REQUIRES it rather than…
nyblnet Aug 18, 2026
d1398ad
Merge branch 'dash-validation' into worktree-bento-dash
nyblnet Aug 18, 2026
ed56edf
The spill rig imports the real grid.ts instead of a rewritten copy
nyblnet Aug 18, 2026
30740e7
dash: paste what you meant, and cut a column into the columns it alre…
nyblnet Aug 18, 2026
cc58e0e
Merge dash-datain: paste special and text-to-columns
nyblnet Aug 18, 2026
452f84f
A bounce test: four Excel jobs done in dash, and where they stop
nyblnet Aug 18, 2026
0813322
Merge branch 'dash-bounce' into worktree-bento-dash
nyblnet Aug 18, 2026
7772e81
Setting a column's type converts its storage, or refuses and changes …
nyblnet Aug 18, 2026
f62080b
A refused type change says so, instead of arguing with itself on screen
nyblnet Aug 18, 2026
01ffff1
xlsx: a defined name no longer walks through the live-formula gate an…
nyblnet Aug 18, 2026
70bfa35
xlsx: a spanning title stops being read as the header, and the sheet …
nyblnet Aug 18, 2026
91fd5bc
A dataset reaches another sheet from a cell, and never from a column
nyblnet Aug 18, 2026
b155131
xlsx: carry the freeze, the cell formatting and the totals row, inste…
nyblnet Aug 18, 2026
00b59dd
The dataset grid recalculates through the workbook, so a cross-sheet …
nyblnet Aug 18, 2026
cfa0fcb
xlsx: installNames — the caller's half of the names contract, in one …
nyblnet Aug 18, 2026
1091a79
A formula column is typed by what it returns, not by a constant
nyblnet Aug 18, 2026
e41c614
Merge branch 'dash-import' into worktree-bento-dash
nyblnet Aug 18, 2026
7eec09a
All six conditional-format rules can be reached, not just two
nyblnet Aug 18, 2026
7ad0f65
Merge branch 'dash-uireach' into worktree-bento-dash
nyblnet Aug 18, 2026
43398cf
Both import doors carry defined names, in one commit on purpose
nyblnet Aug 18, 2026
fc975e2
gap doc: the seven broken/block findings are closed, the friction tie…
nyblnet Aug 18, 2026
e10f762
The drop door reports findings the way the menu door already did
nyblnet Aug 18, 2026
40772b9
dash: the twelve functions the gap list measured missing, and the tot…
nyblnet Aug 18, 2026
7d41287
gap doc: finding 17, AVG of an empty view reports 0
nyblnet Aug 18, 2026
084da64
dash: a filter menu with the values in it, and the operators to say t…
nyblnet Aug 18, 2026
86fa750
The two gutters are where row and column work lives, so they answer now
nyblnet Aug 18, 2026
39a3c04
Merge branch 'dash-gutters' into worktree-bento-dash
nyblnet Aug 18, 2026
d4fc6c2
Merge branch 'dash-filterui' into worktree-bento-dash
nyblnet Aug 18, 2026
1148cf1
Undo refuses after a sort, instead of reversing something else
nyblnet Aug 18, 2026
f9013df
The panel says when a pattern is doing nothing
nyblnet Aug 18, 2026
d3bf3ba
Both doors into the column menu reach the new one
nyblnet Aug 18, 2026
caad370
Print: the page header repeats, and margins are a choice
nyblnet Aug 18, 2026
4eb4e93
gap doc: finding 18, the SUBTOTAL-sees-the-filter decision, unwired o…
nyblnet Aug 18, 2026
508fa3d
Merge branch 'dash-honesty' into worktree-bento-dash
nyblnet Aug 18, 2026
b112f77
gap doc: the friction tier is closed too
nyblnet Aug 18, 2026
c7f25e3
release backlog: strike the ten items closed today
nyblnet Aug 19, 2026
5890ba3
Merge main: the sync transport moved into the kernel, and dash did no…
nyblnet Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 26 additions & 6 deletions .claude/launch.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,41 @@
{
"version": "0.0.1",
"configurations": [
{
"name": "dash-dev",
"cwd": "dash",
"runtimeExecutable": "npm",
"comment": "LOOPBACK ONLY, see spaces-dev.",
"runtimeArgs": [
"run",
"dev",
"--",
"--host",
"127.0.0.1",
"--port",
"5188",
"--strictPort"
],
"port": 5188
},
{
"name": "serve-dash-wt",
"runtimeExecutable": "python3",
"comment": "LOOPBACK ONLY, see serve-spaces-built.",
"runtimeArgs": [
"-m",
"http.server",
"5188",
"--bind",
"127.0.0.1",
"--directory",
"/Users/andy/devel/bento/.claude/worktrees/bento-dash/dash/dist-single"
"dash/dist-single"
],
"port": 5188
},
{
"name": "spaces-dev",
"comment": "LOOPBACK ONLY. Vite already defaults to loopback, but the flag is written out so every entry in this file states its interface \u2014 the one entry that stayed silent is the one that kept binding the wildcard.",
"comment": "LOOPBACK ONLY. Vite already defaults to loopback, but the flag is written out so every entry in this file states its interface the one entry that stayed silent is the one that kept binding the wildcard.",
"cwd": "spaces",
"runtimeExecutable": "npm",
"runtimeArgs": [
Expand All @@ -32,7 +52,7 @@
},
{
"name": "serve-spaces-built",
"comment": "LOOPBACK ONLY. http.server defaults to 0.0.0.0 (measured: TCP *:<port> LISTEN, reachable from the LAN), so every entry here pins the interface \u2014 a preview server has no reason to be a LAN service, whatever it happens to be serving today.",
"comment": "LOOPBACK ONLY. http.server defaults to 0.0.0.0 (measured: TCP *:<port> LISTEN, reachable from the LAN), so every entry here pins the interface a preview server has no reason to be a LAN service, whatever it happens to be serving today.",
"runtimeExecutable": "python3",
"runtimeArgs": [
"-m",
Expand Down Expand Up @@ -80,7 +100,7 @@
},
{
"name": "serve-testing",
"comment": "LOOPBACK ONLY, and the highest-value of the http.server entries after working/: .gitignore describes testing/ as 'local test decks \u2014 never committed (may contain confidential content)'. It bound the wildcard until now (measured: TCP *:5197 LISTEN, LAN curl 200).",
"comment": "LOOPBACK ONLY, and the highest-value of the http.server entries after working/: .gitignore describes testing/ as 'local test decks never committed (may contain confidential content)'. It bound the wildcard until now (measured: TCP *:5197 LISTEN, LAN curl 200).",
"runtimeExecutable": "python3",
"runtimeArgs": [
"-m",
Expand Down Expand Up @@ -125,7 +145,7 @@
},
{
"name": "serve-working",
"comment": "LOOPBACK ONLY. working/ is the gitignored secrets drawer \u2014 the live guestbook ADMIN_KEY bearer token and the room's owner ECDSA private key sit in it, and http.server serves a directory listing. http.server defaults to 0.0.0.0, so without --bind anyone on the same cafe/office LAN could walk the listing and take both while this entry runs.",
"comment": "LOOPBACK ONLY. working/ is the gitignored secrets drawer the live guestbook ADMIN_KEY bearer token and the room's owner ECDSA private key sit in it, and http.server serves a directory listing. http.server defaults to 0.0.0.0, so without --bind anyone on the same cafe/office LAN could walk the listing and take both while this entry runs.",
"runtimeExecutable": "python3",
"runtimeArgs": [
"-m",
Expand All @@ -140,7 +160,7 @@
},
{
"name": "serve-working2",
"comment": "LOOPBACK ONLY, same secrets as serve-working. `serve -l 5193` listens on the WILDCARD (measured: `*:5193`) while logging 'Accepting connections at http://localhost:5193' \u2014 the line reads as loopback and is not, so the misconfiguration is invisible. The tcp://host:port form is the only way to pin the interface.",
"comment": "LOOPBACK ONLY, same secrets as serve-working. `serve -l 5193` listens on the WILDCARD (measured: `*:5193`) while logging 'Accepting connections at http://localhost:5193' the line reads as loopback and is not, so the misconfiguration is invisible. The tcp://host:port form is the only way to pin the interface.",
"runtimeExecutable": "npx",
"runtimeArgs": [
"--yes",
Expand Down
Loading
Loading