Ticket index

The prose on this site cites issue ids like improvise-9c8c. They are this project's own tracker ids, kept in-repo with beads; there is no public issue URL to link to, so this page is what they resolve to. Titles come from .beads/issues.jsonl, a passive export that lags the database — an id it does not carry is listed here without a title and is not linked from the prose.

639 ids are cited, of which 628 resolve.

IdStatusTitle
improvise-0629closeda_help_row_the_browser_cannot_run_is_drawn_marked does not see an ex row drawn plain
improvise-08wbclosed[bug] A refused ClientFrame::Commands keeps the commands before the refusal
improvise-0aiclosedgp-tree: expose a fit/evolve entry point in the library
improvise-0bfclosedInconsistent float-equality tolerance in formula eval
improvise-0dbkclosed#266 and #279 each add ClientState::notify: their merge does not compile, and #266's rebase() skips #279's settle_status
improvise-0hbdeferredMake Sequence bindings transactional at command level
improvise-0j0fclosedThe inline editor claims its basis at commit, not open: a value another client wrote while the editor was open is silently overwritten
improvise-0jw5closedNothing guards that viewport::grid_body shares one FoldMemo: a per-cell fresh memo there passes the whole suite
improvise-0o6xclosedA group header first on its axis is never drawn, so a leading collapsed group has no way back
improvise-0r01closedinnermost_group walks and clones the whole axis per z keypress since open_runs became the one reader (Codex P2 on #263)
improvise-0v8lclosed23 of 27 refusal conversions in #185 are unpinned: reverting any one to set_status leaves the suite green
improvise-0wn3closedcheck-ci-graph: a multi-line flow value with an open string is not refused, and a key-shaped closer makes its content read as a counted run:
improvise-0x9uclosedA click cannot move the grid selection while an editor is open
improvise-0ygdopen[bug] Tab on the +measure column silently discards the commit that Enter accepts
improvise-0yq8closedMove ClientState and keys.rs::step into improvise-protocol
improvise-1125closedRow-header width is computed per frame in the widget
improvise-12haopenMulti-tab browser editing: a SharedWorker cannot host OpfsFs (measured), so pick a shape
improvise-17akclosedTUI help popup footer hand-writes its paging keys (l/Tab, h/S-Tab, q/Esc): a second key table no guard reads
improvise-1be2closedcheck-ci-graph counts a --ci step whose run: is a plain multi-line scalar: a continuation line (|| true, ; exit 0) is appended to the call and never read
improvise-1c5mclosedBrowser help overlay covers #hint once the app bar wraps, and Welcome no longer says how to page (PR #180 removed the tip)
improvise-1c9closedExportPrompt mode shows no status-bar hint
improvise-1czclosedexport_csv emits unquoted CSV — commas in values corrupt output
improvise-1eyopenBrowser frontend MVP: end-to-end working demo
improvise-1l9oclosedfurnished_client hand-builds a basis instead of taking the server's
improvise-1qaaclosedpr-watch waits the full timeout on a MERGED or CLOSED PR, which GitHub reports as UNKNOWN/UNKNOWN
improvise-1wftclosedBrowser boot failures have no diagnosis channel, so five different causes all read as silence
improvise-1wl0closedAxisFrame::first is serde(default), so a frame with no origin claims it leads the axis
improvise-1x9hclosedBrowser: a status written while a minibuffer is open hides after TOAST_MS (6s) with the prompt still open — su4u's bug on the toast timer (latent behind cl7y)
improvise-1xfbopenEpic: CI, checkers and repository tooling
improvise-2054closedAn editor edited back to its seed writes nothing: untouched() compares content, so a deliberate re-entry over a concurrent write is silently dropped (#205)
improvise-20ekclosedA coordinate-rename retry after RecordGone renames whichever record moved under the cursor (browser, fdk1)
improvise-21dclosedEpic: Integrate gp-tree — fit interpretable decision trees as computed measures
improvise-23qdclosedThe Projection::Basis record set is derived twice, and the second copy is the tests' yardstick
improvise-24lzclosedpr-watch: a PR whose head moved and then merged exits 5, not 2; exit-5 ordering against the head checks is unpinned
improvise-25bfopenThe category panel's Space cycles the axis silently while the tile route announces it
improvise-26dmclosedThe fourth length-not-completeness list: cases.len() == 13 in ui/effect.rs
improvise-29w2closedpr-watch-test: the CLOSED case no longer exercises the wait; closed PR #46 reports green MERGEABLE/BLOCKED and a rival passes 52/52
improvise-2avlclosedlayout_version moved outside the effect loop and neither abort arm is tested
improvise-2bacclosedcommit-cell-edit from a script or : line ignores its value and coords and commits the empty edit buffer to the cursor cell (fourth two-arm demotion, post-6uva)
improvise-2cw9closedImport silently overwrites repeated coordinate tuples with the last row
improvise-2hiclosedExtract AppMode dispatch methods (mode_label, mode_style, mode_key)
improvise-2iwsclosedShipped-document walk parses trace output sent to stdout as paths
improvise-2lhclosedMigrate name-string comparisons to CategoryKind enum checks
improvise-2mqzopenSaveAs and ExportCsv have no wire form, which is why two prompts are stranded
improvise-2oxtclosedThe landing page's casts predate the records columns and show the recorder's shell prompt
improvise-2wmclosedWizardKey effect embeds the import-wizard state machine inside Effect::apply
improvise-2wu3closedA commit from the inline editor addresses the current cache while the screen is frozen
improvise-2yc2closedDataStore::live_records walks a HashMap -- decide its order before writing the caller
improvise-2zqclosedRecords mode has no inline way to add a category, unlike the + column for measures
improvise-31oeopenEpic: Command layer — everything is a command (ADR 006), Cmd/Effect hygiene and the CLI
improvise-349mclosedformat_md/parse_md is not idempotent when a .improv file has two Category sections with the same name
improvise-35eclosedTemporary adapter: RenderCache::from_app bridge for incremental widget migration
improvise-368hclosed[bug] No client on any transport can ask its host to save
improvise-3al1openADR-001 c: a rejected batch keeps its values staged, and class-1 force re-composes
improvise-3b2bclosedDeleting a virtual category from the category panel disables records mode
improvise-3gyclosed4.2 Enable GitHub Pages
improvise-3h9wclosedA captured editor's Enter is refused by the cursor's cell: refused_here runs before the capture is consulted (#274 after merging #286)
improvise-3ij0closedhtl6's 'pins the key' assertion calls composed() by command name, so the ',' it passes is ignored: rebinding view-forward off ',' leaves it green
improvise-3j70closedThe GIT_CONFIG_GLOBAL/NOSYSTEM nulls in run_git have no witness: vwjj's -c core.excludesFile=/dev/null masks the excludes-based one
improvise-3kfcclosedClientState::refused never settles the unawaited entries it leaves at the front of in_flight, so the next answer pops the wrong entry (#246 relays make it reachable)
improvise-3t5xclosedevery_advertised_command_answers_in_its_own_mode counts a refusal as an answer
improvise-3tilclosedApp::restore's rebuild-after-view_state order is unguarded: rebuilding before view_state is restored passes the suite
improvise-3tt4closedTab at the rightmost column reopens the browser editor on the stale pre-write cache value, so typing overwrites the value just committed (#227 regression)
improvise-3uowclosedpr-reviews-test hard-codes /bin/sleep and /bin/date, absent on the NixOS CI runner: the kb job goes red on it once #296 lands
improvise-3uzgopenUnder prune_empty, a commit that prunes its own row reopens the browser editor on the renumbered neighbour's stale cache value (#227 regression)
improvise-3vrclosedvb4 step 1: scaffold ModelState and ViewState types
improvise-3x3uclosedResolve the two unaddressed nullary wire variants before concurrency lands
improvise-3yv3closedSaving reorders category items when grouped and ungrouped items are interleaved
improvise-3zqclosedRecords-mode Enter/Tab at bottom-right: persist empty record, re-enter editing
improvise-40j4closedA client DeleteView of an absent view, and AddFormula into an absent category, are still accepted (bok4 residue)
improvise-44adclosedColWidths is redundant under the label fold, and the test that would change is gotcha 33(c)'s evidence
improvise-465tclosedThe touched reset on an editor reopened by commit-and-advance is unpinned on both front ends (a stale touched survives the whole suite)
improvise-48jdopenPaste inside a drill is declined, and the aggregate decline tells the user to drill in to paste
improvise-492xclosedFormula parser defaults unknown operators silently
improvise-4bwaclosedThree bindings improvise-e24v listed as needing no enrichment do need it
improvise-4cb5closed#227: an awaited seed settles after Esc, writing the landed cell's text into the edit buffer in Normal mode
improvise-4daaclosedfirst_non_item clones every item name per coordinate per cell: grid_of ~10x slower in pivot, ~140x in records mode (#265 regression)
improvise-4dpjclosedThe RecordsNormal-to-Normal arm of settle_normal_mode has zero coverage, and it is live
improvise-4h8aclosedSix of AppSnapshot's eight restored fields are unguarded; the rival fix passes the suite
improvise-4imgclosedPR #188's clear variant is refused as RecordMoved, not RecordGone as its evidence reasons; it has no test
improvise-4juclosedMake EditOrDrill mode-agnostic; delete EnterEditMode
improvise-4k1jclosedBrowser H under nested row categories hides a group name: hidden_row_item's fold test is the nearest group, not the row's fold
improvise-4klpclosedDuplicate-category name check against date-derived categories is untested
improvise-4kttclosedThe js job's bundle-freedom is a convention, not a gate
improvise-4lgjclosedParser wildcards silently ignore unknown grammar rules
improvise-4pgclosedExtract panel mode keymap template
improvise-4s8closedExtract a gp-tree feature matrix from a View's records
improvise-4w09closedA NaN cell never quiesces: CellDisplay's PartialEq makes the grid diff resend it every projection and breaks folded(seed)==cache
improvise-4ycclosedMalformed numbers in .improv file silently become 0.0
improvise-4zl7closedA fitted tree must route per record and aggregate the results, not route on the aggregate
improvise-514oclosedFive of ImportJsonHeadless's refuse_and_stop aborts fail no test when the abort is dropped
improvise-52eqclosedDead-ID audit recipe reads a bd that never ran as all-resolve; its environment note inverts which forms the guard refuses
improvise-52odclosedNo test separates opening_tile's 'first regular' rule from 'first tile on Row'
improvise-53zzclosedThe shipped-documents scratch-repo tests inherit the caller's repository env and global config, so under a worktree hook they stage files into the real index
improvise-54g1closedPaste onto a formula-owned (Derived) cell writes in the TUI and declines in the browser
improvise-55l5closeddispatch swallows interactive() errors silently
improvise-55v2closedNonfinite CellValue numbers serialize into JSON that the wire cannot read
improvise-56ekclosedSetPanelOpen maps a Panel to a field twice, in two crates
improvise-59nwnot exportedCited in the prose; the committed tracker export does not carry it.
improvise-59q8closedsource_scan::strip_test_items hides all following production code after a multi-line test-only item; cfg(all(test,not(..))) and #![cfg(test)] read as production
improvise-5hfhclosedDuplicate CSV headers silently overwrite earlier columns
improvise-5j9closedImportPipeline silently skips records missing category values
improvise-5jm5closedModel::evaluate_aggregated takes a list it only tests for emptiness
improvise-5jnaclosedThe browser page does not paint the title bar it is now told about
improvise-5jxtclosedpr-reviews dies with 'jq: Argument list too long' on a PR with many comments (#210)
improvise-5kdrclosedevery_grid_move_lands_where_its_binding_says sees only the sign of a move: 3x3-from-centre clamps every step, so Ctrl-d moving 1 row and PgDn ignoring the page pass the workspace
improvise-5m9zclosedBrowser advance past the announced window opens the editor on an unprojected cell
improvise-5r8cnot exportedCited in the prose; the committed tracker export does not carry it.
improvise-5rayclosedcheck-evidence ignores #### headings and every browser-test entry uses them
improvise-5ubsclosedA cyclic-successor all() can silently omit a variant while its doc says it cannot
improvise-5waiclosed#227's browser +cat commit clear is unpinned: dropping cleared() from create_column leaves the workspace green
improvise-5xbqclosedNo test compares a page-scroll landing between host and browser: halving page_rows, or paging by window_cols, passes the whole workspace (lockstep.rs covers only j and G)
improvise-60zclosedVirtual views _Records and _Drill should not be persisted to .improv files
improvise-61fclosedAdd invariant test for command registry name mapping
improvise-636dopenIntroduce a global keymap that almost all modes inherit from
improvise-6562closed3t5x's Acts classifier counts a no-op as acting, and the fixture's edges make ~20 advertised keys no-ops: $ sent to column 0 passes the whole workspace
improvise-65kfclosedADR 005 clause 9: '#[serde(transparent)]' cannot load legacy JSON's numeric ids if Q1's string ids are chosen
improvise-669bclosedThe harness spec and the page can still disagree about HANDSHAKE_TIMEOUT_MS through a stale assemble
improvise-6c6qclosed[bug] apply_switch relays a refused switch to everyone but the asker
improvise-6eqiclosedub4o's toggle-group tests all sit at data row 0: z ignoring the cursor row passes the whole workspace
improvise-6kjclosedPest parse errors lack file:line context for users
improvise-6mqclosedIntroduce Storage/VFS abstraction in persistence layer
improvise-6nsdclosedA prune-by-write renumbers the grid without moving layout_version -- ADR 001 middle tier
improvise-6osclosedO(n^2) stem deduplication in recompute_formulas
improvise-6oy4closedNumbers do not survive the JSON wire: serde_json lacks float_roundtrip, so browser yy/p and typed numbers land 1 ULP off
improvise-6p8qclosedTUI yy/p in records mode use the synthetic (_Index,_Dim) key: yank gets None, paste writes a junk _Dim/_Index cell into the document
improvise-6qetclosed[bug] z collapses the neighbouring group and can never re-expand one: a GroupHeader is drawn but has no data row to address it from
improvise-6r2yopenRecordRewrite::of's unwritable check over RENAMED categories is unpinned: dropping .chain(renames.keys()) leaves the suite green
improvise-6sqclosedMerge EditOrDrill and EnterEditAtCursorCmd into EnterEdit{mode}
improvise-6t3closedUnify Commit{Formula,CategoryAdd,ItemAdd} into CommitBuffer(kind)
improvise-6u6sclosede265's enumeration has no non-contiguous group, so remark's run identity by header position (h0iv) is unguarded: a name-keyed rival passes all three tests
improvise-6uvaclosedimprovise script cannot move the cursor: every Move resolves through the pure-parse arm
improvise-6yvgclosedJSON import parses numbers 1 ULP off: the TUI build has no float_roundtrip
improvise-6zf1closedcheck-ci-graph: the quote tracker closes a multi-line string on an escaped \" or doubled '', so a later quote reopens it over a real if:
improvise-711nclosedparse_number_format silently yields 0 decimals for the ,.2f spelling our own docs show
improvise-748fclosedA drill exited with no edits, and view-back, mark the document dirty
improvise-75ldclosedA refused or no-op AddCategory still bumps layout_version and raises dirty
improvise-764closedMigrate import wizard widget and state to consume RenderCache
improvise-771eclosedThe browser tile bar says 'Pag': short_label is a TUI column-width device, not a browser one
improvise-78v6closedPR #61 deleted the help-overlay spec and nothing replaced it
improvise-7epnclosedpr-reviews --wait: no test pins polling past the second poll (post-poll deadline check replaceable by break)
improvise-7fl8closedpr-reviews-test: timeout case asserts >=5 polls where the fake clock makes it exactly 6; a loop stopping one tick early passes
improvise-7gf8closedRender failure causes infinite retry loop (painted not updated)
improvise-7gipclosed[bug] OpfsFs::open's dedicated-worker guard checks WorkerGlobalScope, which a SharedWorker satisfies
improvise-7iwwclosedCached circular formula publishes the last iteration as a valid number
improvise-7kvwclosedSetPageSelection renumbers the grid under prune_empty and does not reset the cursor
improvise-7mroclosedBrowser keys resolved while a scroll is unanswered read the cache through the new offsets: pipelined $ i 7 Enter writes Jan/Revenue where the TUI writes Feb/Revenue
improvise-7naclosedDecide whether fitted gp-tree models are persisted alongside the formula
improvise-7v62closedChecked does not bind the App it was checked against
improvise-7xyxclosedFrameGroup::cat is dead in both front ends and its doc comment promises an echo nobody composes
improvise-7ybzclosedThe browser category panel has no pointer affordance at all
improvise-7yxclosedClose test gaps flagged by deep review
improvise-80rmclosedADR 005 Q3 rests on a false premise: the CSV importer writes 'Name(token)' headers today, and header_decl would silently orphan their data
improvise-864aopenConcurrent merges to main race on one Pages environment and the superseded deploys fail
improvise-86nwclosedWorker startup failure leaves page in silent dead state
improvise-8ec3closedimprovise-io's test binary breaches the 2s per-binary rule on some machines, and the pinned figure is not reproducible
improvise-8fyclosedIntroduce simple_effect! macro for single-field setter effects
improvise-8id2openAn old record surrogate resolves through the HOST's layout: [RenameRecordCoordinate(r), SetCell(r)] re-creates r on a pivot host, ChainBroken on a records host
improvise-8jk6openEpic: Import, export and .improv persistence
improvise-8l0cclosedFormula panel truncation panics on a valid Unicode formula
improvise-8nd9closedViewBack and ViewForward carry swzk's hazard and are safe only via forget_view
improvise-8phwclosedA keyboard value-edit retry after a crossing LayoutMoved writes the cell now under the cursor (8xq0's crossing twin, 9ww8 for values)
improvise-8qlrclosedColumn-group run coalescing is derived twice, and the agreement test does not pin the TUI arm
improvise-8shuclosedConstrain the .improv grammar generator's strategy; improvise-io's lib binary is the run's outlier
improvise-8tkclosedZZ / :wq quits even when the save fails, silently discarding the model
improvise-8tk5openADR 005 clause 3: with no persisted high-water mark, ids are reused after a reload and collide on merge, which defeats the out-of-session identity persistence was for
improvise-8uj8closedevery_rejection_message_says_the_edit_did_not_land covers five of seven variants
improvise-8uzclosedCursor and scroll are per-client state stored in the shared View
improvise-8wy9closedApp::restore's layout rebuild is unguarded: removing it leaves the workspace green
improvise-8xhyclosed[bug] A fit over a categorical feature emits an unevaluable formula
improvise-8xq0closedThe keyboard editor's commit writes whatever record is under the cursor at Enter, not the one being edited (2wu3's sibling)
improvise-907closedImport wizard step machine: validate early, allow going back, make the terminal step real
improvise-90eaclosedfmt-workspaces-test never dirties the root package: a script that skips improvise's own src/ passes 17/17
improvise-94x2closedvocabulary_is_complete misses a simple_effect! written with a doc comment or line break: a new unlisted effect passes all 5 tests
improvise-955nclosed[bug] Host::commands applies a batch partially before rejecting
improvise-98pdopenThree first-party sources still write non-item coordinates: set-cell, undeclared Data item, stale page selection
improvise-9bitclosedImport collision check counts records with disjoint measures as colliding
improvise-9c8cclosedMove the reasoning out of code comments into context/ prose, cap comments at two lines
improvise-9c9oclosedA geometry effect right after a mid-batch SwitchView skips the cursor check entirely
improvise-9cmaclosed[bug] Invalid ?doc= yields blank UI and only generic watchdog text
improvise-9cnclosedIntroduce register_cmd! macro to prevent name drift
improvise-9fplclosedEight of bok4's refusals (AddItemInGroup, AddFormula parse, ImportJsonHeadless) fail no test when reverted
improvise-9ixclosedSQLite persistence format (alternative save/restore)
improvise-9iyvopenThe route-then-aggregate fold's cost, measured
improvise-9mo9closed[bug] Geometry effects that renumber the grid but never reset the cursor
improvise-9pfsclosedpr-watch-test has no case for a failed check under MERGEABLE/BLOCKED, the state a failed required check reports
improvise-9trlopenThe script remove-formula refusing a missing formula is untested, and it turns a script's exit status from 0 to 1
improvise-9v0jopenview_frame and view_shape are separated by example, not by property
improvise-9ww8closedA coordinate-rename retry after a crossing LayoutMoved renames whichever record is under the cursor (20ek's fix pins only RecordGone)
improvise-9x6closedWorker-hosted server bundle (wasm, MessageChannel transport)
improvise-9za9closedDemoting an evidence heading to prose is an unguarded escape hatch
improvise-a0i3closedshipped_documents_load: GIT_LITERAL_PATHSPECS or GIT_GLOB_PATHSPECS in the caller's env fail 9 of 10 tests
improvise-a2xclosedDerive Serialize/Deserialize for the ViewState field types
improvise-a36cclosed[test] count_aggregation assertion is >= 1.0 instead of exact value
improvise-aawclosedReplace CreateAndSwitchView with Binding::Sequence
improvise-ac2zclosedA host's none_cats leak into another view's grid: formula columns vanish
improvise-ahdfclosedrepo-map gotchas 36 and 43 still name Sessions::apply as the production door
improvise-anr9closedProject the five grid-frame facts: unblocks H, z, gz and fixes Food/Alice at once
improvise-aopaclosedresolve.rs tests fold client-composed commands through fold (the host door), latent like xoxh's renaming test
improvise-asztclosedevery_keys_row_drawn_is_one_the_builders_asked_for compares counts, so a self::keys bypass that also drops a real row passes the workspace
improvise-azhbopenDecide who sets a document's default view now that a switch does not
improvise-b114closedWire SetCell to a collapsed _Measure-group fold is accepted and stores a non-item _Measure coordinate (#217's stored arm skips the projection)
improvise-b4ksclosedThe documented opfs-contract fmt gate exits 1 as a usage error, indistinguishable from a real failure
improvise-b5dpclosedwm20 rulings (1) and (2) disagree for a formula column: a row's div/0 is drawn in the column and the total under it is a clean pooled number
improvise-b5zhclosedprune_axis_items: close_pending_run's 'header whose run saw no item is collapsed' arm is unreachable since 6qet
improvise-b8otopenDelegate DOM events: one handler per surface on the stable root, not one per node
improvise-b9f2closedDeterminism law's width guard measures the argument list, not the drills the comparison built
improvise-bbwaclosedcheck-ci-graph counts a --ci step in a job that needs: a job which can be skipped; the dependent job is skipped and a skipped check reads as passing
improvise-bckopenStandalone web MVP: end-to-end offline demo
improvise-bd9oclosedThe browser reaches records mode through the tile bar, and everything it can do there is silent
improvise-bgtfclosedThe landing page is served by the harness and asserted by nothing
improvise-bidqclosedTwo answers to 'is this category virtual', four lines apart in view/types.rs
improvise-bok4closedA failing effect narrates instead of reporting, so a frame containing it is accepted
improvise-bpq2closedClient-side key resolution: what must the projections carry?
improvise-bqm0closedopening_tile falls back to _Index when a view has no Regular category, so T Enter still empties that grid
improvise-btywclosedDeterminism width guard counts applied drill state, but the law compares Debug text: an order-eliding Debug blinds the law with the guard green
improvise-bw4pnot exportedCited in the prose; the committed tracker export does not carry it.
improvise-byzclosedrecords_display returns Some("") for out-of-bounds columns instead of None
improvise-c0ajclosedThe shipped-documents walk reads only root !dir/*.improv lines, so a single-file un-ignore, .improv.gz or nested un-ignore is skipped silently
improvise-c5ipclosedA scripted commit-cell-edit whose advance aborts exits 1 silently after saving the write
improvise-c5vclosedImprove records view data entry by making each measure a normal value column (wide format instead of synthetic Value column)
improvise-c6jclosedWizardStep::Done is unreachable from the UI
improvise-c7muclosedvocabulary_is_composed counts a comment naming Command::X as a composer: delete the real composer, leave a comment, 4/4 pass
improvise-cflyclosedThe wave ships view history with no key that reaches it: declined() still refuses view-back
improvise-cgqtclosedImport collision policy should be a wizard step, not a fixed default
improvise-ciw8closedHost resolve_cell resolves a collapsed fold's surrogate via record_in_layout: a wire SetCell stores Month=Q2 and the frame is Accepted
improvise-cj4uclosedNew views pivot Label categories that were explicitly excluded from pivot axes
improvise-cl7yclosedA browser reports "Formula added" for a formula only the host can parse
improvise-clsoopenCtrl-S saves and also opens the browser's own save dialog
improvise-cotaclosedbd-audit-ids skips an absent --assume-unchanged file as deleted: ls-files -d lists it, git status does not
improvise-cq1qopenEpic: Stable identities — implementing ADR 007
improvise-cq3dclosedA standing status_msg hides the derived key hint in every TUI mode: nothing clears it
improvise-cqiclosedExtract improvise-protocol crate (Command, ViewState, reduce_view)
improvise-cqqclosedServer-side projection emission layer + per-client viewport tracking
improvise-cr3closedDOM renderer for browser grid (reads ViewState + render cache)
improvise-ct5closedi on an empty records grid reports 'cannot drill', leaking a pivot-mode concept
improvise-cwfjclosedThe remaining set_status declines: panel.rs (3) and keymap dispatch's arg-error arm should refuse
improvise-cz8dclosed#181's refused() aborts and #185's App::refuse does not: reconcile to one writer, with the abort as a separate choice
improvise-d0n6openHierarchical date import: an unparsed raw value shares the item namespace with generated months/years and silently merges (latent)
improvise-d44sclosedgp_tree::data::preprocess writes to stderr from library code
improvise-d7ajclosedNo test pins the fold memo's key granularity: a memo keyed by formula alone passes the whole suite
improvise-dak5closedNothing checks that every checkers.sh suite runs in CI: ci.yml names the suites by hand
improvise-df2wclosedOpen empty formula panel is invisible: RenderModel encodes closed as empty rows
improvise-djcnclosedModel's hand-written Debug is not exhaustive, and the Debug fingerprint is not canonical across instances (DataStore/View HashMaps)
improvise-djmclosedStandalone main-thread bundle: wasm-client + worker transport
improvise-djnclosedAddCategory effect silently swallows failures
improvise-djooclosedPublish the context/ prose as a documentation site folded into GitHub Pages
improvise-dkqnclosedgp-tree::fit should take one slice of rows, not parallel x/y slices
improvise-dnduclosedPR #245's merge of #228 dropped the check-harness-lock --allow-network CI step; CI now runs only the checker's self-test
improvise-dqnclosedCyclePanelFocus does not actually cycle between panels
improvise-drgclosedvb4 step 5: narrow Effect::apply signatures where one-slice
improvise-dsxqclosedBrowser yy yanks the rounded display text re-parsed, not the value: 1.23456789 pastes as 1.2346, Text 007 as Number 7
improvise-dy3jclosedA Label category is not persisted, so a document with 12 categories plus a label can never be reopened
improvise-dz8closedAdd Axis::Filter for drill-fixed coordinates
improvise-dz8cclosedThe float_roundtrip check names its three crates by hand, so a new frame-parsing crate is not caught
improvise-e0exclosedA ratio renders as an integer: number_format is per view, which is too coarse for one grid
improvise-e1smclosedDeterminism law passes about 14% of the time with gotcha 18 re-injected, and cannot see nondeterminism inside Effect::apply
improvise-e24vclosedSecond tranche of client-side key resolution: ~15 bindings needing no enrichment
improvise-e265closedprune_empty changes a surviving row's group on a two-level grouped axis: GroupEnd carries no level, so #200's pruned axis puts North/Mar in Upper where the unpruned one says no group
improvise-e5pfclosedCommand::ChangeMode(Normal) is on the wire and reduce_view folds it without the records resolution
improvise-e8noclosedA wide numeric category now refuses a fit that used to ignore it
improvise-eaheclosedshipped_documents_load test binary exceeds the 2s tripwire: one child process per env setting
improvise-ecclclosedA collapsed group folds a ratio formula by summing the members' ratios (Margin 1.00 where Month-on-None gives 0.50)
improvise-edpclosedEstablish ViewModel layer: derived data between RenderCache and widgets
improvise-edplclosedpr-watch exits 0 when mergeability is UNKNOWN
improvise-ehzclosedEnterEditAtCursor effect calls rebuild_layout and builds a CmdContext inside apply
improvise-el9hclosedThe server's mirror settles its mode once and never again, so it diverges from the client it mirrors
improvise-en4sclosedNo guard that a client's formula panel loses a formula its target item's deletion removed
improvise-enz6closed[bug] Enter-to-advance onto a collapsed group's row opens the editor and commits a write to the group coordinate
improvise-ep5oopenHeadless q on a dirty document says Unsaved changes and then saves anyway
improvise-eteclosedAdd Model/Category getter methods to absorb .unwrap().items/groups chains
improvise-ew0closedvb4 step 3: move UI session fields into ViewState
improvise-exdgclosedA records-mode coordinate cell projects id: None, which the contract says means no cell
improvise-f2ooclosedCollapsing a group with a hidden member changes the column total; the fold shows hidden values only while a sibling is visible
improvise-f86qclosedRe-adding an existing category at the 12-category limit is refused with a false message
improvise-f9qfclosedPin the shell: macOS bash 3.2 hid two bugs that failed 17/19 in CI on the same commit
improvise-fd0jclosedpr-reviews-test watchdog needs bash 5.1 but checkers.sh pins only major 5
improvise-fdk1closedA records coordinate rename has no wire form, and the surrogate is why
improvise-fdt6closedA browser cannot add a formula, so FormulaEdit is a room that swallows typing
improvise-feloopenEpic: Core model, layout and formula evaluation
improvise-fkfgclosedADR-001 b: ModelCommand carries its basis; Applied gains a rejected case
improvise-fo0wclosedThree black-hole keys are resolvable today over vocabulary that already exists
improvise-fujclosedTwo effects read files directly instead of going through Storage
improvise-fy9oclosedEnter twice clears the cell the first Enter advanced onto: the welded clear-buffer blanks the reopened editor
improvise-fz77openCategories and items cannot be renamed from the category panel
improvise-g0fclosedDecide whether two clients may view different views
improvise-g3noclosed[bug] d on a _Measure formula target deletes nothing and reports success
improvise-g6s1closedWizardStep::Preview has no characterization fixture
improvise-gcvbclosedThe browser cannot commit a records-mode creating column, though it is now nameable
improvise-gd28closedDrill in the browser: the view stack is client-local, so what does the server still owe?
improvise-gd83closedAxisEntry carries no group-end boundary, so group_of gives an ungrouped item the preceding group
improvise-gdlclosedSetBuffer effect special-cases the "search" buffer name
improvise-gfqclosedImport wizard defers the 'no category accepted' failure to the very last keystroke
improvise-gho5closedRolled-back-load tests pass against a host that never ran the load; the evidence's generation-check claim is false
improvise-gitclosedReplace SaveAndQuit with Binding::Sequence in keymap
improvise-gj5popenR in a saved records layout says Pivot mode and changes nothing; the document opens in Normal over a records grid
improvise-gjatclosed[test] sequence-associativity test proves a mathematical tautology
improvise-gk51closedWire writes to a records-mode row with a non-item coordinate are projected as Record and then refused (#252 regression)
improvise-gkyoclosedADR 005 wire clauses: in-frame removal (ChainBroken analogue), Rejection losing Copy under string ids, create variants that address a parent, and create-then-address frames are unaddressed
improvise-gtn7openEpic: TUI and shared front-end UX
improvise-gv9rclosed[bug] A wire model command never marks the document dirty
improvise-gvnbclosed[bug] A geometry command resets the App cursor but not the session mirrors
improvise-gw18closeddrill-into-cell (>) on a collapsed group's row opens an empty drill, and o in it writes a record at the group coordinate
improvise-gxiclosedDefine unified reduce_full(&mut App, &Command) -> Vec<Command>
improvise-h04zopenDecide whether UI glyphs move to the protocol, as short_label() did
improvise-h074openTwo edges of App::resolve_view: a worse panic message, and a host-side DeleteView bypass
improvise-h0bclosedEvict wizard and drill_state from ViewState (bootstrap-snapshot hygiene)
improvise-h0ivclosedgroup_runs coalesces by name alone, so two runs under different headers merge
improvise-h3cvopencommand.md says tile select's fallback is always _Measure, but in _Drill _Measure is on Filter and the Label/_Index ranks are live and untested
improvise-h3niclosedpr-watch-test has no case for a head that moves during the UNKNOWN wait
improvise-h3y7closedThe wire vocabulary must be complete against what needs the server, not merely correct
improvise-h6z1closedFold evaluation still ~6x gh/main: the per-cell memo re-derives the formula chain for every column
improvise-hexbopenADR 007 clause 12: the regression test commits UNEDITED text (a no-op commit passes it), and which side holds the captured mapping is unstated
improvise-hkbcclosedGuard the position-free ModelCommand vocabulary, which 6nsd's answer silently depends on
improvise-hkr8closedA click that cannot compose its activation keeps the prefix and drops the payload
improvise-hkt6closedThree small totality gaps found in review
improvise-hmuclosedTAB/Enter on bottom-right of records view should insert record below (TAB→first cell, Enter→same column); o inserts below cursor
improvise-hmwsclosedStorage cannot expose an async seam through Box<dyn Storage>
improvise-hoxyclosednames_its_column accepts CellId::Derived on any measure column, and records_app has no formula, so the arm only loosens the enumeration
improvise-hrjznot exportedCited in the prose; the committed tracker export does not carry it.
improvise-hs0uclosed[bug] gg is implemented in the resolver and unreachable from any browser key
improvise-hsoeclosedcheck-evidence cannot see a duplicate heading, and three exist
improvise-htl6closedview-forward is bound in no keymap, in either front end
improvise-hv0rclosed#230's echo is unpinned on its audience and its offset arms: echoing to every session, or only SetSelected, leaves the workspace green
improvise-hwpiclosedThe browser shell fails quietly, and never reads a key
improvise-hzjoclosedDeterminism law over two independently built, equal contexts, for every registered command
improvise-i0n7openADR 005: _Measure's formula-target rows have no ItemId for CategoryRow, and ViewState's expanded_cats and view history are name-keyed too
improvise-i0v9closed[bug] a second browser tab on the same document is dead and silent, and blames the browser
improvise-i2m5closedimprovise-io still carries its own pipe-quoting copy, without the keyword guard
improvise-i34closedOPFS-backed Storage implementation for wasm target
improvise-i3o5closedRefusals still written through set_status in panel.rs, keymap dispatch and draw.rs exit 0
improvise-i5tkclosedNarrow the TUI's GridCache to its viewport -- benchmark first
improvise-i5z6closedimprovise-formula lib test binary measured over the 2s tripwire under load (2.2-5.5s)
improvise-igxpclosedThe browser help overlay's rows are asserted as present, never as content
improvise-ih3kclosedkb completeness guard cannot see one of two clauses sharing a key (work_done/3, decision/3, work_followup/3)
improvise-iioiclosedThe view and formula panels have no pointer affordance while the category panel does
improvise-ijqlclosedcheck-comment-runs.py --check-evidence silently skips the comment-run cap it is named for
improvise-ik6lclosedBrowser Enter on a touched editor over a declined cell is a silent Upstream: no write, no message, editor stays open (#282's kept editor)
improvise-ilvlin_progressADR 006: everything is a command, and a recorded sequence replays the whole system
improvise-iobcclosed[bug] Bad/missing ?seed= creates empty doc with no loud error
improvise-iot6closedrender_csv builds GridLayout::new, so CSV export carries rows the view prunes
improvise-ipquclosedThe FitOutcome::warnings order stated in two places is checked in none
improvise-ir7lclosed[bug] A formula cell is offered as editable and silently reverts
improvise-ixxxclosedAn untouched edit of a text cell that reads as a number (Text 007) commits Number(7): typed() cannot know the cell was text
improvise-izkclosedgp-tree step 1: emit a fitted Tree as an improvise formula string
improvise-j31xclosedServer hosts several documents: a registry above Sessions
improvise-j49rclosedcheck-ci-graph: a job header with a trailing comment is accepted but never opened, so its if: and the job itself vanish from both rules
improvise-j4qtclosedA read-only browser tab accepts edits, paints them, and loses them
improvise-j6x8closedimprovise cmd discards every status message and exits 0, so a refusal is indistinguishable from success
improvise-j7v6closedThe typed-string classification lives in two crates, and its guard test asserts by hand
improvise-jc8closedEvict host-only state from ViewState: flip the transient-keymap Arc
improvise-jc95closedCSV nonfinite and overflowing numeric tokens are silently replaced with zero
improvise-jcfsclosedDate format detection ignores disambiguating values after row 10
improvise-jgzwclosedThe tile bar offers _Index and _Dim, because every call site passes category_names()
improvise-jhdfclosedonly_the_edit_key_is_captioned_as_editing_the_cell matches one exact phrase, so a paraphrased edit caption on Enter passes
improvise-jibpclosedThe mouse editor has no touched flag: a click-edit typed back to its seed over a concurrent write is still dropped silently
improvise-jjxclosedScrolled grid suppresses first visible row-header label
improvise-jkxrclosedparse_duplicate_categories is vacuous: cannot fail for a merge that drops half the items
improvise-jmjzclosedgrid_of evaluates the whole grid three times per frame; compute_col_widths is ~45% of it
improvise-jmticlosedAn advance reopens the cell editor on a formula-owned or aggregate cell that edit-or-drill refuses
improvise-joedclosedA commit declined as 'still waiting' loses the typed text: Enter's welded clear-buffer still runs
improvise-jpbaclosedA client refusal replays from a settled slice that never folded the host's relays: after a reframe, the next refused frame splits the client cursor from its mirror
improvise-jq0mclosedA collapsed group's fold scans every item of its category: grid of collapsed small groups is quadratic, ~25x pre-#239 at 1000 items (yb4b fix regression)
improvise-jq8lclosedweb/app.js never calls scrollIntoView, so a selection can sit outside the window
improvise-jytmclosedSplit active_view: document default vs per-client authoritative (improvise-g0f)
improvise-jz6wclosedKeyOutcome cannot express 'send a frame', so Ctrl-S cannot reach the ClientFrame::Save that already exists
improvise-k099closedAppMode::hint_text/label put terminal UI strings on a serde wire enum
improvise-k2i4closedThe two nullary model commands are unaddressed and act on one client's staged state
improvise-k69yclosed[bug] draw_status reads the document's active view, not the client's
improvise-k844closedimportance_ranking overflows to inf for a large importance: 100.0 * imp / total multiplies first
improvise-k84eclosedClause 4 rollback of a frame containing LoadModel: the rebase-then-undo case is untested
improvise-k8hclosedTie MinibufferConfig.buffer_key to the keymap's buffer name
improvise-k8iclosedCSV import silently drops columns when row widths mismatch
improvise-kb1dclosedRenaming a non-_Measure formula leaves the old target as a ghost item and appends the new one at the end (km71)
improvise-kc7nclosedimprovise-ws-server never checks Origin, so any page a user visits can drive their session
improvise-kdpclosedDuplicated aggregation dispatch block
improvise-kh8closedPhase 4: Landing page (optional)
improvise-kimwclosedAn empty-record write naming a non-host view re-derives that view's layout (and, with formulas, clones + recomputes the model) ~5x per command
improvise-kkcyopenBrowser p on a records coordinate or creating column is a silent Upstream; the TUI declines out loud since #184
improvise-km71closedA formula cannot be edited from the formula panel
improvise-kmgsclosedDerive the model half of the Command vocabulary from the EffectKind::Model effects
improvise-kndqopenA records rename onto an existing record silently overwrites it (plain records mode and drill alike)
improvise-koh6closed[bug] Following the help overlay's N to add a category overwrites a data cell
improvise-kosclosed_Dim and _Index should work as pivot axes outside Records/Drill view; must default to None axis on non-records views including empty models
improvise-kpnropenimprovise-ws-server has no authentication, and the documented sharing path now exposes it
improvise-ksstclosedA gp-tree fit records its seed but not its GA config
improvise-ktlkclosedEditing overlay with an absent buffer now SHOWS the cell but Enter still CLEARS it (xg1z fixed the paint, not the commit)
improvise-ktv1closedMove the help content into the shared layer so a browser can show help
improvise-l1f5closedA blank numeric CSV field makes the entire measure a Label
improvise-l2b8in_progressADR 005: exact decimal arithmetic for formulas, on Scheme numeric-tower promotion rules
improvise-l4mpclosedPasteCell writes SetCell onto an aggregate cell: a None-axis aggregate or a collapsed group's fold
improvise-l4qxclosed[bug] A text cell is invisible whenever any category is on the None axis
improvise-l8rhclosedThe ambiguous-date heuristic reads American-first, so a European CSV imports with days and months swapped
improvise-laeclosedZZ / :wq with no file path should prompt for a path instead of only erroring
improvise-lasdopenwe1a's abort-implies-refuse table is hand-listed: a new Model effect that aborts without refusing leaves the workspace green
improvise-le4popenADR 007: an id 'format' cannot be written as a view reference — format_line wins the ordered choice, and id_ref has no quoting arm
improvise-lhi4closedprune_empty drops a collapsed group's header, so the group cannot be re-expanded from the grid
improvise-llttclosed[bug] A view-scoped ModelCommand names no view, so it lands on the host's
improvise-lm5eclosed[test] Debug-string tests verify effect names, not correctness
improvise-lnkbclosedIS on a folded category is true on the fold row and false on every row it replaces and on Axis::None
improvise-lnshclosedharness/build.sh: a stale opfs-contract lock prints cargo's hint to remove --locked, not the real remedy
improvise-lpzuclosedimprovise import should accept a folder of CSV files
improvise-lqs0closedbd-audit-ids: a file grep cannot read passes the audit (xargs 123 read as no-match); two exit-code mismatches
improvise-lrrxclosedView history survives a document swap: install_workbook clears cursors but not the back/forward stacks, so < walks the old document's views in the new one
improvise-ls3yclosed[bug] A wire-driven SwitchView does not push the view history; the effect does
improvise-lut7closed[bug] p is composed by the browser and can never do anything, so the name-level derivation lies
improvise-lx7wclosedclear-cell (x) in TUI records mode is a silent no-op; the browser clears the real record
improvise-lxg0closedA fresh or rebased client's Snapshot carries a phantom back-stack frame naming "Default"
improvise-lyycclosedcheck-evidence is one-directional: a test citing the evidence file can have no entry
improvise-m0sxclosedCommand::ClearBuffer is invented, and disagrees with the only implementation of its own name
improvise-m4rvclosedLoading a document invents a Default view the file does not contain, and saving writes it back
improvise-m56iopenADR 007 leaves formula identity unspecified: no formula-line grammar, formula id vs target item id, where a _Measure target's display lives, filter-value strings
improvise-m6opclosedCross-instance Debug fingerprint: Model.measure_agg's sort is pinned by no test
improvise-m91deferred(Stretch) Command log + native undo/replay
improvise-maaxclosedcheck-ci-graph suites_run fails open: non-command mentions, --list, and --self-test's discarded names read as suites run
improvise-maeclosedTag existing effects as model / view / projection-emitting
improvise-mai9closedA status message written while a minibuffer is open is never drawn
improvise-mcq4openThe frame fingerprint is a 4x regression on the held-key path improvise-748f just optimized
improvise-mdfcclosedAn untouched commit reopens from the cache while an earlier write is unanswered: pipelined Tab Tab at the right edge overwrites the value just committed (#227)
improvise-metfclosedprune_empty evaluates every cell with a fresh fold memo
improvise-mgisclosedOpenedEditor::awaiting is serde(default), against 1wl0's doctrine, and unpinned: deleting the attribute leaves the workspace green (#227)
improvise-milrclosedRenameRecordCoordinate overwrites a destination record records_named does not name: a concurrent write to it is lost with no Rejection
improvise-mkbpclosedharness/build.sh rewrites harness/opfs-contract/Cargo.lock on every run (pest 2.9.1 -> 2.9.2)
improvise-mzvclosedImport wizard does not pre-check 12-category limit
improvise-n0pbclosedA relay heard while a frame is in flight erases the rejection sentence (PR #266 rebases view from settled, and the sentence is only in view)
improvise-n10closedMigrate GridWidget to consume RenderCache + ViewState (not &App)
improvise-n3wtclosedprune_axis_items: keep-slice length invariant is only a debug_assert
improvise-n4i9openType-ahead into an awaiting cell editor replaces the value the TUI extends: fast Tab Tab 5 stores 5 where the TUI stores 5095 (#227)
improvise-n6t8closedHeader layout must be reserved, not fitted: the mode pill, the hint and the status all reflow
improvise-n89zclosedThree Projection mutations have no producer
improvise-n8vhopenThe category and view panels never truncate, so a long name overwrites the panel border
improvise-nacdclosedWire SetCell on a stored record with a _Measure that is no item (unknown name, or a parent-only group) is accepted and stores a non-item coordinate
improvise-ni6kclosedInvalidate the cursor by observing the grid frame, not by a per-effect table
improvise-nn4sin_progressADR 004: an Emacs-like face system, so a theme is UI-agnostic data the front ends apply
improvise-nrsclosedDuplicated find_item_category helper in eval paths
improvise-nvq4closedHidden/collapsed items with slash in name corrupt on persistence round-trip
improvise-nwgkopenModel::remove_item returns unit, so a wire RemoveItem naming nothing still reports success
improvise-nxahclosedOptimistic fold is not rolled back on server rejection
improvise-nynkclosedadopt_cursor_epoch resets every client's cursor, including clients on a view nothing reshaped
improvise-nzeuclosedA deserialized TargetModel can still carry a non-finite affine map
improvise-o1cclosedImport wizard has no way back; Esc discards all field decisions silently
improvise-o1y0closedA collapsed group's formula re-evaluates every shared reference: exponential in the formula DAG, 3x-300x on the held-key path
improvise-o31uclosedThe landing page's casts render at a 4.8px font on a phone, and it is now the site root
improvise-o9q7openA drill commit refused for a removed category reports a later row's blank-coordinate refusal instead, so the user is never told every staged edit was discarded
improvise-o9uqclosedo in records mode edits someone else's record and can rename it away
improvise-oaqclosedRedundant file re-read in ImportJsonHeadless effect
improvise-obtuopenThe aggregate-addressing seam: a view-naming command resolved against that view's layout
improvise-ociyclosedWebSocket transport: CLOSING send can throw; non-OPEN drops silently
improvise-odbcclosed[bug] bank-info.improv in the repo root does not parse
improvise-ondjclosed[bug] reduce_full/apply_command apply a Command::Model without the basis check
improvise-opboclosedGridLayout::evaluate_in/column_total accept a FoldMemo built by another layout and silently use its aggregation and hidden set
improvise-oplpclosedTile select opens on _Index, so T then Enter (or T then r) empties a pivot grid, and the browser persists it at once
improvise-oyaaclosedNEEDS_THE_HOST completeness is checked only where a help row names the key
improvise-p003openADR 007 namespace gaps: _Records/_Drill ids, _Index/_Dim items under global uniqueness, active_view, collapsed: by group name, CheckedBatch's create exemption
improvise-p1ymclosedProject the page-axis item lists so [ and ] work in a browser
improvise-p6v6closedAn editor opened with i/a while an earlier write is unanswered seeds from the stale cache: i 9 Tab Esc i 5 Enter stores 15 where the TUI stores 195
improvise-p7lhclosed[bug] No UI at all for page-level dimensions: page_coords reaches the browser's cache and stops there
improvise-pb30closedThe column group toggle's cursor-follow is unguarded: three rivals in landing/place_cursor pass the whole workspace
improvise-pc3bclosedEffect-classification Debug fingerprint is order-sensitive over formula_cache (latent flake, PR #224)
improvise-pcaclosedMigrate panel widgets (category/formula/view/tile_bar) to consume RenderCache
improvise-pcjeopenRender parity: the browser drops col_widths, column ancestry, every AxisColor and the tile overflow
improvise-pczvclosed.improv section headers are a second, unquoted naming rule
improvise-pdvmclosedAddItem/RemoveItem reshape the grid but declare CellData, so layout_version and cursor_epoch disagree
improvise-phg1closedRecordRewrite: the lone-cell, sparse-row and read-before-clear branches have no test that can fail
improvise-pikkclosedformat_f64 renders a large finite number as inf
improvise-piypclosedevery_bound_command_name_is_registered is blind to prefix sub-bindings and F-keys
improvise-plcxclosedThe browser harness needs a grouped, multi-level fixture — the demo has neither
improvise-pnf5closedSaving while an unfinished records row exists writes an unreadable .improv file
improvise-pntuclosedFoldMemo's key omits the aggregation and the covers predicate: one memo shared across two covers returns the first answer
improvise-poiaclosedThe records-mode + column has no projected identity
improvise-ppruclosedNondefault measure aggregation is lost by the .improv roundtrip
improvise-pqf1not exportedCited in the prose; the committed tracker export does not carry it.
improvise-pr3iclosedScratch repos inherit info/exclude from GIT_TEMPLATE_DIR
improvise-pr8tclosed#235's same-name-item exemption in group_refusal is unpinned: removing it refuses a real item and the workspace stays green
improvise-pubtclosed[bug] display_value_in reads the host's drill edits against a foreign layout
improvise-pv3gclosedfit-measure panics on a document whose target values are large but finite
improvise-q08closedimprovise-ws-server binary (tokio + tungstenite session wrapper)
improvise-q0vbclosedPad the import wizard's hint line to the panel width
improvise-q2mqclosedRecordRewrite: a blank edit on a measure a renamed drill row lacks clears at the renamed key, and no test can fail on it
improvise-q914closedimprovise cmd advertises JSON it does not accept, and swallows every effect error at exit 0
improvise-q9egclosedPR #197: TUI p in records mode refuses a record that lacks a coordinate (e.g. after +cat) as an 'aggregate'; the browser pastes
improvise-qddodeferredMake DataStore an implementation of a source trait, not the implementation
improvise-qf57closedThe formula-row click test lost its no-editor-opened assertion in the #61 relocation
improvise-qlrhclosedevery_shipped_document_loads does not walk harness/fixtures
improvise-qnpiclosedpr-reviews-test 'an inline comment arriving mid-wait is seen' is flaky under load (failed 1 of 2 identical runs)
improvise-qnryclosedTab-commit's rightmost-column clamp in the browser resolver is unasserted: dropping .min(col_max) passes the whole workspace
improvise-qsmpclosedApp::cmd_context's panel-open propagator is untested: C cannot open a closed panel and nothing fails
improvise-qu4aclosedView::prune_empty is never persisted, so hide-empty is lost on every save
improvise-qx1zclosedhidden_items and collapsed_groups outlive the item or category they name
improvise-qz9pclosedA drill commit into a category removed mid-drill refuses and still writes an orphan cell
improvise-r08uclosedIS and WHERE differ on trailing word boundary in formula.pest
improvise-r4loclosedTwo answers to what a typed string means, and they are adjacent
improvise-r4nfclosedserde_json failures in wasm exports are silent drops, not errors
improvise-res9closedDoc site: derive the published set, so an unpublished context/ doc fails the build
improvise-rjaaclosedcheck-ci-graph: a needed job whose keys are indented past 4 is read as content, so its if:/needs: are missed and nothing is refused
improvise-rkeqclosedDecide RenderCache's shape: grid-only wire type vs per-widget sub-caches
improvise-rm4sclosedThe evidence check accepts headings naming tests that never run
improvise-rmlclosedConsolidate Axis display into a method on Axis
improvise-rmvxclosedSix advertised keys do nothing in the browser, and the guard is scoped to one mode
improvise-rnaknot exportedCited in the prose; the committed tracker export does not carry it.
improvise-rq3fclosedBrowser Tab-commit's advance-right and the tile cursor's upper clamp are unasserted: breaking either passes the whole workspace
improvise-rr8nclosedThe tile bar's permanent hint is false, and the status bar contradicts the wizard on four of eight steps
improvise-rtudclosedcommand.md says every refuse_and_stop site has a key-path table case; load, import-json absent.json and AddFormula parse do not
improvise-rucfopenRead arbitrary SQLite databases as a data source
improvise-rw6lclosedPage bar: clicking a page category should open a menu of its items, with a down-arrow affordance
improvise-rxz9closedADR 005's id_token uses ASCII_ALPHANUMERIC, which the grammar generator emits as nothing: 1.4% of generated files are rejected; formula ids are unreachable by the generator
improvise-ry89closedcv_regress/cv_classify with k=1 now return plausible numbers instead of NaN
improvise-s08tclosedUnknown names inside aggregate formulas silently select unrelated data
improvise-s13closedDelete mode-entry shim commands; use enter-mode with arg
improvise-s17oclosedreduce_full and apply_command's view-slice arm have no production caller
improvise-s1lxopenRecords-mode yy over a blank cell yanks Text("") on both ends; p then writes an empty text cell
improvise-s2gbclosedevery_silent_binding_is_on_the_list walks only Normal and search: a silent binding in a panel mode passes the whole suite
improvise-s2w3closedSUM of a computed measure ignores its formula and returns zero
improvise-s8h7closed[bug] i on an aggregate cell drills in the TUI and refuses in the browser, while help advertises it as edit
improvise-sbozclosedADR: stable identities for categories, items and formulas (transient is acceptable)
improvise-seikclosedClient::viewport is kept for a reason web/app.js falsified in the same wave
improvise-sfwyclosed[test] records_mode_resolve_display asserts non-empty instead of expected value
improvise-shbcnot exportedCited in the prose; the committed tracker export does not carry it.
improvise-shytclosed[bug] Records-mode row order is not stable across processes
improvise-sihrclosedEvery minibuffer mode entered from records mode exits to plain Normal while the layout is still records
improvise-sjdbclosedWire SetCell into an empty cell beside a collapsed _Measure group is refused: aggregate_refusal judges the record at the fold's column
improvise-sk32openRecords-mode layout build is quadratic in records: RecordRow::group scans rows linearly per cell
improvise-ssoeclosedA builder calling KeyRow::looked_up directly draws a row help_bindings never records: a lying 'edit' caption on x passes the whole workspace
improvise-st8qclosedcheck-ci-graph fails open on a bare checkers.sh line inside a heredoc, multi-line string, or folded/plain-multiline run: scalar
improvise-su4uclosedA minibuffer refusal (formula parse error) vanishes on the first correcting keystroke under #233's status expiry
improvise-swreopengrid_of recomputes an unchanged grid every frame; memoise on the tiers that already exist
improvise-swzkclosedA failed :view corrupts the TUI's own view history
improvise-sx7hclosed#257's su4u restore survives commit-and-advance: Editing/RecordsEditing re-enter an equal mode, so a stale message follows the editor onto the next cell
improvise-sxsfopencargo test -- --list cannot name the binary, so two crates could share a full test path
improvise-szi8openProtocol version in the client/server handshake
improvise-t0maclosedrecords_steps is guarded by one incidental test
improvise-t14dclosedThe TUI title bar drops '?:help :q quit' when the document name is long: fill_line gives the left segment priority
improvise-t219open_Drill is one shared view, so two clients drilling contend
improvise-t3uxclosedcv_regress and cv_classify are O(n-squared)
improvise-t6dbclosedgrid_in ignored prune_empty for a non-active view, hiding a staleness bug
improvise-t8ownot exportedCited in the prose; the committed tracker export does not carry it.
improvise-t8sclosedView::axis_of panics on missing category
improvise-taxxclosed[bug] The socket close listener overwrites a precise error with disconnected
improvise-tdfdclosedbd-audit-ids silently skips a tracked file absent by skip-worktree or sparse checkout, not only a deleted one
improvise-tej1closedBrowser can now compose delete-formula-at-cursor: FormulaCache carries ids since km71
improvise-tg27closed[bug] Narrow window clips grid columns without usable horizontal scroll
improvise-th7mclosedDead F(1) binding: bound to bare 'enter-mode' then immediately rebound
improvise-thpeclosedhelp::compact discriminates a chord by parsing a string it formatted
improvise-tk51not exportedCited in the prose; the committed tracker export does not carry it.
improvise-tm6openEpic: Standalone static-web deployment via wasm + VFS storage
improvise-tocclosedEffect::changes_mode() is a static flag but ViewBack/ViewForward/StartImportWizard change the mode conditionally
improvise-tom1closedDrill pending edits are invisible to remote clients, and there are now three answers to 'what text is in this cell'
improvise-tpm8openimport --extract on a field with no detected date format is silently ignored and exits 0
improvise-trd3openHelp pages clamp at both ends; decide whether they should wrap
improvise-tt22closedRemove the legacy JSON document format: .improv is the only native format
improvise-tvtclosedRoute mutations through Workbook facade instead of app.workbook.model chains
improvise-tvteclosedcheck-ci-graph counts a checkers.sh invocation that never runs on a PR: step/job if: conditions and shell control flow are ignored
improvise-u2lenot exportedCited in the prose; the committed tracker export does not carry it.
improvise-u6gcclosedprune_empty drops a GroupEnd whose header was pruned, so an ungrouped item inherits the earlier group
improvise-ub4oclosed[test] toggle-group-involution test doesn't apply effects between calls
improvise-udt2closedA status message carries no severity, so a headless refusal cannot set a non-zero exit
improvise-uej8closed[bug] the category panel cursor does not follow a shrinking list, so d deletes the next category
improvise-ugj4closedA click-edit opened from a stale paint shows old text but captures the current seed and version, so an untouched Enter overwrites the newer value
improvise-uln5closedThe help overlay advertises 8 black-hole keys and a stranded command page, and no guard sees it
improvise-umi4closedTUI edit seeds its buffer from CellValue Display, so i then Enter on an unchanged 1.23456789 commits 1.2346
improvise-uo2pclosedApplyAndClearDrill applies staged edits in hash order: a measure edit plus a category rename on one row writes a ghost record
improvise-up8gclosedViewport extent is an external input on BOTH front ends, and it changes which record an edit writes
improvise-ususclosedscripts/kb writes onto a truncated kb.pl and reports success: consistency is not completeness
improvise-ut7pclosedimprovise-gp fit_from_gen0 is a third copy of the GA loop
improvise-uv9eclosedtoggle-group-under-cursor ignoring the cursor passes the whole workspace: every test sits at selected (0,0)
improvise-v29mclosedwk18's guard reads only HelpLine::Literal: a hand-built HelpLine::Keys naming an unbound key passes the whole workspace
improvise-v4hgclosedAddItem/AddFormula errors don't abort the effect batch
improvise-v8abclosedNo test pins a fresh session's Snapshot slice equal to the host's startup ViewState; lockstep.rs seeds from app.view_state and bypasses fresh_view
improvise-vav0closedShipped-document walk is polluted by a trace2 target set in config
improvise-vep8closedConnection hang has no watchdog coverage (ready never resolves)
improvise-vhczclosed[bug] OpfsFs::list disagrees with the other backends on path shape
improvise-vjmsclosedDecide whether a category panel shows the virtual categories
improvise-vndiclosedAn inline edit opened before a document swap is accepted into the new document: EditTarget does not capture document_generation
improvise-vvl3closedA headless browser harness: run storage_contract and the shell assertions under Playwright
improvise-vw47closedCreating a view after deleting another silently resets a surviving view
improvise-vwjjclosedThe scratch-repo tests still read the user's default excludes file (XDG git/ignore), so a *.gz there fails a_gzipped_document_is_walked despite GIT_CONFIG_GLOBAL=/dev/null
improvise-vx3closedfit-measure command: fit a tree and add it as a formula
improvise-vyrxclosedeval_bool_cached uses wildcard match on BinOp instead of exhaustive arms
improvise-w0j4closedcheck-ci-graph fails open on quoted, anchored or multi-line needs: and on quoted/spaced if:/continue-on-error keys
improvise-w1buclosed#196's whole-grid enumeration asserts no None, so a coordinate mis-projected as an editable Record passes
improvise-w3qclosedExtract text-entry keymap template for minibuffer modes
improvise-w7qdclosedevery_grid_move_lands_where_its_binding_says omits scroll-rows/page-scroll and its floor lets the jumps vanish: reversed Ctrl-d/u and PgUp/PgDn pass the whole workspace
improvise-wd6nclosedA fit may still not split on col.missing or a date sub-feature
improvise-wdmpclosedThe browser cursor jumps to the origin after the client's own records rename (and any reframing browser write)
improvise-we1aclosedHost::mutating_frame's || last_batch_aborted() arm is unwitnessed: removing it leaves the workspace green
improvise-wiewclosed[ and ] should probably be in the global keymap: decide whether 'global' means every mode or every grid mode
improvise-wk18closed[bug] the advertised-key guard cannot see help.rs literal() lines, so 17 keys are unchecked
improvise-wm20closedThe totals strip sums a formula column's results: a ratio column totals 1.50 where the formula over the totalled inputs is the answer
improvise-wpxrclosedA wire write to an empty record resolves through the HOST's layout: refused RecordGone when the host sits on a view hiding it
improvise-wsawclosedThe browser ignores category_panel_open, so C toggles nothing visible
improvise-wv3hclosed#205's stale-seed guards are unpinned: dropping SetOpenedEditor(None) on enter-mode (TUI or browser) leaves the workspace green
improvise-x0xdopenThe browser records-mode creating columns are explicitly dead and could be live
improvise-x1nsclosedencoded_width undercounts a forced category that has a missing coordinate
improvise-x2cclosedvb4 step 2: move workbook/file_path/dirty into ModelState
improvise-x7cqclosedA kb.pl inconsistency can still reach the published site
improvise-x7swclosedWhich-key hints have no protocol home (the open half of improvise-jb3)
improvise-xd3qclosedA relayed ResetCursor clobbers the placement of a frame the asker sent before the reframe was answered: client cursor splits from its mirror, and the next write lands on another record
improvise-xf1deferredVerify OpfsFs against Safari — Chromium and Firefox are covered
improvise-xg1zclosedediting mode with missing buffer renders empty overlay instead of cell content
improvise-xgraclosedpr-reviews is blind to inline review comments
improvise-ximfclosedfmt-workspaces.sh help says exit 2 names NO file, but the new orphan arm names a Cargo.toml
improvise-xks6closedOne home for the client/server frame envelopes
improvise-xoxhclosedlockstep.rs deliver() folds host-sent frames through fold_outgoing, and one merged-in test still folds its own commands through fold
improvise-xps8closedThe handshake watchdog overwrites a genuine mid-session disconnect eight seconds later
improvise-xpzhclosedcheck-ci-graph splits lines on \n only; YAML also breaks at U+0085/2028/2029, so a job if: after one is invisible
improvise-xur5closedWire SetCell on a collapsed-fold RECORD with an undrawn measure (hidden, unknown or none) is accepted and stores the group name as a coordinate: #217's whole-key lookup reads 'not drawn' as 'not refused'
improvise-xwi6closedConcurrent edits: basis check (ADR 001, layer 1 — the correctness floor)
improvise-xz2zclosedThe keyboard cell commit claims its basis at commit, not open: a value another client wrote while the editor was open is silently overwritten (0j0f's other door)
improvise-y01kclosedws-server silently drops ServerFrame/ClientFrame/closed-doc traffic
improvise-y1avclosedlm5e's at-cursor assertions sit on cursor 0 of a one-element list: delete-formula-at-cursor ignoring its cursor passes the whole workspace
improvise-y4xgclosedCmdContext carries a fourth Panel-to-field mapping, and it is completely unguarded
improvise-y5ebclosedBrowser settle_declined_editor reads the pre-scroll cache: a Down-wrap from a scrolled window closes an editor the TUI opens, naming a formula not under the cursor (#282)
improvise-y5eoclosedA document that opens on a records view starts the host in Normal: App::with_storage never settles the mode, and a fresh client gets RecordsNormal
improvise-yae4closedColumn width overflows before clamping a 65535-column text value
improvise-yb4bclosed#239's spanning-fold totals ~double the TUI keypress path (paid twice per key); at 4.8k cells a held key stops keeping up, and h6z1 as filed does not reach stored-measure totals
improvise-ybumclosedbrowser_round_trip's tile_to and column walk are unbounded loops: a stuck tile/column cursor hangs the binary instead of failing
improvise-yc9rclosedTUI opens the editor on a NonItem cell and refuses only at commit, stranding the user in Editing; the TUI/browser NonItem declines are unpinned (#265)
improvise-ychclosedNull category values become the literal item "null" on import
improvise-yd2topenPage cycling ([ and ]) steps onto hidden items and draws an empty grid
improvise-yea8closedA stale kb rm ledger entry excuses a later non-rm loss of that clause (restore or branch switch does not prune it)
improvise-yf7pclosedA registry contextualize may overwrite a parsed field on any command but commit-cell-edit, and nothing fails
improvise-yk2sclosedH (hide-selected-row-item) on a collapsed group's row hides a nonexistent item named like the group: silent no-op, ghost hidden entry persisted
improvise-yqpdclosedTransactional rollback: a frame of mutations applies whole or not at all (ADR 001 clause 4)
improvise-yss5closedextract_date_component silently drops a row whose date does not match the detected format
improvise-ywdclosedWasm compatibility audit and fixes across core/formula/command/io
improvise-z05hclosedEvery documented spelling of :formula fails, and the refusal names a command the user did not type
improvise-z05rclosedCommitExport does not bail on an empty path, and ExportCsv does not abort the batch
improvise-z2vrnot exportedCited in the prose; the committed tracker export does not carry it.
improvise-z336closed[bug] A page selection is never cleared, so cycling a category's axis hides a filter and cycling back restores it
improvise-z5egclosedGate improvise-gp in the CI wasm job
improvise-z754closedDocument name, dirty flag and file path have no home a client can read
improvise-za97closedkb completeness guard docs: refusal suggests committing the loss, kb skill not updated, residue paragraph wrong
improvise-zgbclosed.improv formula loader mis-splits category suffix via rfind(" [")
improvise-zkkwclosedThe browser shell is only ever run on Chromium, but improvise-bck's criterion says Firefox too
improvise-zlj2closedpr-watch judges a healthy PR BLOCKED in the needs: gap before the required browser check registers
improvise-zre1closedAuto-persist failure in worker not communicated to client
improvise-zs2rclosedA manifest-only change to a path dependency stales harness/opfs-contract/Cargo.lock, and no fast gate sees it
improvise-zv8tclosedfit_measure never tells preprocess which columns are categories, so a numeric- or date-valued category is unspellable
improvise-zx8tcloseddraw.rs::mode_style matches AppMode with a wildcard, so the repo map's exhaustiveness promise is false there