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.

254 ids are cited, of which 254 resolve.

IdStatusTitle
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-0hbdeferredMake Sequence bindings transactional at command level
improvise-0o6xclosedA group header first on its axis is never drawn, so a leading collapsed group has no way back
improvise-0x9uclosedA click cannot move the grid selection while an editor is open
improvise-0yq8closedMove ClientState and keys.rs::step into improvise-protocol
improvise-1125closedRow-header width is computed per frame in the widget
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-1wl0closedAxisFrame::first is serde(default), so a frame with no origin claims it leads the axis
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-26dmclosedThe fourth length-not-completeness list: cases.len() == 13 in ui/effect.rs
improvise-2avlclosedlayout_version moved outside the effect loop and neither abort arm is tested
improvise-2hiclosedExtract AppMode dispatch methods (mode_label, mode_style, mode_key)
improvise-2lhclosedMigrate name-string comparisons to CategoryKind enum checks
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-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-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-3gyclosed4.2 Enable GitHub Pages
improvise-3vrclosedvb4 step 1: scaffold ModelState and ViewState types
improvise-3x3uclosedResolve the two unaddressed nullary wire variants before concurrency lands
improvise-3zqclosedRecords-mode Enter/Tab at bottom-right: persist empty record, re-enter editing
improvise-44adclosedColWidths is redundant under the label fold, and the test that would change is gotcha 33(c)'s evidence
improvise-4bwaclosedThree bindings improvise-e24v listed as needing no enrichment do need it
improvise-4dpjclosedThe RecordsNormal-to-Normal arm of settle_normal_mode has zero coverage, and it is live
improvise-4juclosedMake EditOrDrill mode-agnostic; delete EnterEditMode
improvise-4kttclosedThe js job's bundle-freedom is a convention, not a gate
improvise-4pgclosedExtract panel mode keymap template
improvise-4s8closedExtract a gp-tree feature matrix from a View's records
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-56ekclosedSetPanelOpen maps a Panel to a field twice, in two crates
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-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-60zclosedVirtual views _Records and _Drill should not be persisted to .improv files
improvise-61fclosedAdd invariant test for command registry name mapping
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-6kjclosedPest parse errors lack file:line context for users
improvise-6mqclosedIntroduce Storage/VFS abstraction in persistence layer
improvise-6nsdopenA prune-by-write renumbers the grid without moving layout_version -- ADR 001 middle tier
improvise-6osclosedO(n^2) stem deduplication in recompute_formulas
improvise-6sqclosedMerge EditOrDrill and EnterEditAtCursorCmd into EnterEdit{mode}
improvise-6t3closedUnify Commit{Formula,CategoryAdd,ItemAdd} into CommitBuffer(kind)
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-78v6closedPR #61 deleted the help-overlay spec and nothing replaced it
improvise-7kvwclosedSetPageSelection renumbers the grid under prune_empty and does not reset the cursor
improvise-7naclosedDecide whether fitted gp-tree models are persisted alongside the formula
improvise-7v62closedChecked does not bind the App it was checked against
improvise-7ybzclosedThe browser category panel has no pointer affordance at all
improvise-7yxclosedClose test gaps flagged by deep review
improvise-864aopenConcurrent merges to main race on one Pages environment and the superseded deploys fail
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-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-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-8xhyclosed[bug] A fit over a categorical feature emits an unevaluable formula
improvise-907closedImport wizard step machine: validate early, allow going back, make the terminal step real
improvise-955nclosed[bug] Host::commands applies a batch partially before rejecting
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-9cnclosedIntroduce register_cmd! macro to prevent name drift
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-9v0jopenview_frame and view_shape are separated by example, not by property
improvise-9x6closedWorker-hosted server bundle (wasm, MessageChannel transport)
improvise-9za9closedDemoting an evidence heading to prose is an unguarded escape hatch
improvise-a2xclosedDerive Serialize/Deserialize for the ViewState field types
improvise-aawclosedReplace CreateAndSwitchView with Binding::Sequence
improvise-ac2zopenA 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-azhbopenDecide who sets a document's default view now that a switch does not
improvise-bckopenStandalone web MVP: end-to-end offline demo
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-bpq2closedClient-side key resolution: what must the projections carry?
improvise-byzclosedrecords_display returns Some("") for out-of-bounds columns instead of None
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-cl7yclosedA browser reports "Formula added" for a formula only the host can parse
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-d44sclosedgp_tree::data::preprocess writes to stderr from library code
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-dqnclosedCyclePanelFocus does not actually cycle between panels
improvise-drgclosedvb4 step 5: narrow Effect::apply signatures where one-slice
improvise-dz8closedAdd Axis::Filter for drill-fixed coordinates
improvise-e24vclosedSecond tranche of client-side key resolution: ~15 bindings needing no enrichment
improvise-e5pfopenCommand::ChangeMode(Normal) is on the wire and reduce_view folds it without the records resolution
improvise-e8noopenA wide numeric category now refuses a fit that used to ignore it
improvise-edpclosedEstablish ViewModel layer: derived data between RenderCache and widgets
improvise-ehzclosedEnterEditAtCursor effect calls rebuild_layout and builds a CmdContext inside apply
improvise-eteclosedAdd Model/Category getter methods to absorb .unwrap().items/groups chains
improvise-ew0closedvb4 step 3: move UI session fields into ViewState
improvise-fdt6closedA browser cannot add a formula, so FormulaEdit is a room that swallows typing
improvise-fkfgclosedADR-001 b: ModelCommand carries its basis; Applied gains a rejected case
improvise-fujclosedTwo effects read files directly instead of going through Storage
improvise-g0fclosedDecide whether two clients may view different views
improvise-g6s1closedWizardStep::Preview has no characterization fixture
improvise-gcvbclosedThe browser cannot commit a records-mode creating column, though it is now nameable
improvise-gd28openDrill over the wire needs the addressed command form
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-gitclosedReplace SaveAndQuit with Binding::Sequence in keymap
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-gxiclosedDefine unified reduce_full(&mut App, &Command) -> Vec<Command>
improvise-h04zopenDecide whether UI glyphs move to the protocol, as short_label() did
improvise-h074in_progressTwo 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-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-hsoeclosedcheck-evidence cannot see a duplicate heading, and three exist
improvise-hwpiclosedThe browser shell fails quietly, and never reads a key
improvise-i2m5closedimprovise-io still carries its own pipe-quoting copy, without the keyword guard
improvise-i34closedOPFS-backed Storage implementation for wasm target
improvise-i5tkclosedNarrow the TUI's GridCache to its viewport -- benchmark first
improvise-igxpclosedThe browser help overlay's rows are asserted as present, never as content
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-iot6closedrender_csv builds GridLayout::new, so CSV export carries rows the view prunes
improvise-ir7lclosed[bug] A formula cell is offered as editable and silently reverts
improvise-izkclosedgp-tree step 1: emit a fitted Tree as an improvise formula string
improvise-j31xclosedServer hosts several documents: a registry above Sessions
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-jjxclosedScrolled grid suppresses first visible row-header label
improvise-jmjzclosedgrid_of evaluates the whole grid three times per frame; compute_col_widths is ~45% of it
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-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-k8hclosedTie MinibufferConfig.buffer_key to the keymap's buffer name
improvise-k8iclosedCSV import silently drops columns when row widths mismatch
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-kmgsclosedDerive the model half of the Command vocabulary from the EffectKind::Model effects
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-ktv1closedMove the help content into the shared layer so a browser can show help
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-llttopen[bug] A view-scoped ModelCommand names no view, so it lands on the host's
improvise-lyycclosedcheck-evidence is one-directional: a test citing the evidence file can have no entry
improvise-m91deferred(Stretch) Command log + native undo/replay
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-mzvclosedImport wizard does not pre-check 12-category limit
improvise-n10closedMigrate GridWidget to consume RenderCache + ViewState (not &App)
improvise-n3wtclosedprune_axis_items: keep-slice length invariant is only a debug_assert
improvise-n89zclosedThree Projection mutations have no producer
improvise-ni6kclosedInvalidate the cursor by observing the grid frame, not by a per-effect table
improvise-nrsclosedDuplicated find_item_category helper in eval paths
improvise-nynkclosedadopt_cursor_epoch resets every client's cursor, including clients on a view nothing reshaped
improvise-o1cclosedImport wizard has no way back; Esc discards all field decisions silently
improvise-o31uclosedThe landing page's casts render at a 4.8px font on a phone, and it is now the site root
improvise-oaqclosedRedundant file re-read in ImportJsonHeadless effect
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-p1ymclosedProject the page-axis item lists so [ and ] work in a browser
improvise-pcaclosedMigrate panel widgets (category/formula/view/tile_bar) to consume RenderCache
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-plcxclosedThe browser harness needs a grouped, multi-level fixture — the demo has neither
improvise-poiaclosedThe records-mode + column has no projected identity
improvise-pubtclosed[bug] display_value_in reads the host's drill edits against a foreign layout
improvise-q08closedimprovise-ws-server binary (tokio + tungstenite session wrapper)
improvise-q0vbclosedPad the import wizard's hint line to the panel width
improvise-qf57closedThe formula-row click test lost its no-editor-opened assertion in the #61 relocation
improvise-qsmpclosedApp::cmd_context's panel-open propagator is untested: C cannot open a closed panel and nothing fails
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-res9closedDoc site: derive the published set, so an unpublished context/ doc fails the build
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-rucfdeferredRead arbitrary SQLite databases as a data source
improvise-ry89closedcv_regress/cv_classify with k=1 now return plausible numbers instead of NaN
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-seikclosedClient::viewport is kept for a reason web/app.js falsified in the same wave
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-sxsfopencargo test -- --list cannot name the binary, so two crates could share a full test path
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-t8sclosedView::axis_of panics on missing category
improvise-taxxclosed[bug] The socket close listener overwrites a precise error with disconnected
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-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-trd3openHelp pages clamp at both ends; decide whether they should wrap
improvise-tvtclosedRoute mutations through Workbook facade instead of app.workbook.model chains
improvise-ut7pclosedimprovise-gp fit_from_gen0 is a third copy of the GA loop
improvise-vhczclosed[bug] OpfsFs::list disagrees with the other backends on path shape
improvise-vjmsclosedDecide whether a category panel shows the virtual categories
improvise-vvl3closedA headless browser harness: run storage_contract and the shell assertions under Playwright
improvise-vx3closedfit-measure command: fit a tree and add it as a formula
improvise-w3qclosedExtract text-entry keymap template for minibuffer modes
improvise-wd6nclosedA fit may still not split on col.missing or a date sub-feature
improvise-wsawclosedThe browser ignores category_panel_open, so C toggles nothing visible
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-xf1deferredVerify OpfsFs against Safari — Chromium and Firefox are covered
improvise-xks6closedOne home for the client/server frame envelopes
improvise-xps8closedThe handshake watchdog overwrites a genuine mid-session disconnect eight seconds later
improvise-xwi6closedConcurrent edits: basis check (ADR 001, layer 1 — the correctness floor)
improvise-y4xgclosedCmdContext carries a fourth Panel-to-field mapping, and it is completely unguarded
improvise-ychclosedNull category values become the literal item "null" on import
improvise-ywdclosedWasm compatibility audit and fixes across core/formula/command/io
improvise-z05rclosedCommitExport does not bail on an empty path, and ExportCsv does not abort the batch
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-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-zv8tclosedfit_measure never tells preprocess which columns are categories, so a numeric- or date-valued category is unspellable