Repository navigation
docs(spec): specify the sheet content type (S1 design) - #236
Open
rabbitson87 wants to merge 2 commits into
Open
rabbitson87 wants to merge 2 commits into
rabbitson87 wants to merge 2 commits into
Conversation
Add the product spec and the technical design of the sheet content type: a workbook of worksheets that people and agents edit live in a cell grid, with formulas that follow Excel and xlsx and CSV import and export. Both pages have the status planned. The change adds no code, no guide topic and no tool. The design answers the ten design decisions of issue 233. It rests on the S0 prototype reports and on small probes that measured the dirty mark, the xlsx reader and writer, and find in the bundled SQLite. Reviewers of other models reviewed the text in eight rounds and accepted it. One of them assessed the last delta. Refs #233
…sign The requester decided the open questions of the sheet spec on 2026-11-14 and changed two of them. A sort of 100,001 to 2,000,000 cells is now a large sort: a job that plans while people keep editing and applies in one writer item. A digest of the sort keys, the structure sequence and the merged ranges guard the apply, and a failed guard changes no content. The `ids` record of the apply names the columns of the range, so `refs` gets a second index on the source column. A whole-column reference now covers the whole grid, as in Excel. A function that reads it directly costs only the rows that exist. An array expression over it counts every position toward the work limit, and the array limit is 4,194,304 values. The spec lists questions 3 to 17 as decided. Reviewers of other models reviewed the change in four more rounds and accepted it. Refs #233
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the S1 design of the
sheetcontent type from issue #233, as two spec pages and one index row in each of the two indexes:docs/spec/sheet.md: the product spec. A workbook of worksheets that people and agents edit live, formulas that follow Excel, xlsx and CSV import and export, revisions, agent tools, Public read-only access. Status: planned.docs/spec/sheet-technical-design.md: the technical design. Storage, formulas and the dirty mark, calculation, jobs, the xlsx reader and writer, the live protocol, the agent interface, limits, validation plan and open technical questions. Status: planned.This is the design stage only. The change adds no code, no guide topic, no tool and no generated reference. Nothing is implemented, and nothing here is released.
Refs #233. It does not close the issue.
What the design decides
archive/zip, with no new module. Import, export, rollback and large duplication are jobs with progress and cancel.conflictif a sort key or the structure changed after the plan.ROWS(A:A)is 1,048,576.Decisions of the requester
The requester read the effect of each open question on 2026-11-14 and decided them. Questions 3 to 13 and 15 to 17 of the spec stand as the design wrote them. The requester changed two:
SUMPRODUCT(--(A:A="")), holds all 1,048,576 positions and costs their time, as in Excel. A lazy array that skips the empty positions would remove that cost, and it is a new mechanism that the design does not have. The requester has not decided it.Two consequences need the requester's attention:
#LIMIT!from an array over whole columns, or from an array of more than 4,194,304 values, is left out of the formula conformance criterion.Evidence
go.mod, measured: the eager dirty mark (3.98 s for 1,000,000 dependents), a marker in slices (slice p95 17 to 19 ms), xlsx read (8.8 s for 18.7 million cells with a minimal scanner, 62.6 s with excelize) and write (4.2 s and 18 MiB for 20 million cells), and FTS5 (works in the bundled SQLite; 22.9 bytes for each distinct string withdetail=none).Review record
Stage: design, standalone. Candidate verdict: accepted by reviewers of a different model, as described below. Implementation and testing are not assessed. Publication is this PR. Merging is not authorized by this description.
claude-fable-5-2(first documents and probes) andclaude-sonnet-5-5(all corrections).claude-opus-5-5(reviewer A) andclaude-haiku-5-5(reviewer B).unavailableafter 10 minutes with no content changed. Spec rule 41 and the Large sort criterion do not say so.timerecord, so an export that did not ask for a look can wait up to 10 minutes and then fail (technical design 13.4 and 8.4).timerecord is open, because its budget is 0 (technical design 8.4, spec rules 23 and 77).timerecord is open, a time formula and a formula that reads it can show different times on one screen.flats-unslopdiscourages.Checks
make docs-check,make docs-audit, the documentation tests (./docs/...,./plugins/...,./internal/mcpx/...,./internal/doccheck/...and the two runtime documentation tests), compiling every package, andgo vet ./...all pass on this tree.makeis not installed on the author's Windows machine, so the Makefile commands ran directly.