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.
| Id | Status | Title |
|---|---|---|
| improvise-0629 | closed | a_help_row_the_browser_cannot_run_is_drawn_marked does not see an ex row drawn plain |
| improvise-08wb | closed | [bug] A refused ClientFrame::Commands keeps the commands before the refusal |
| improvise-0ai | closed | gp-tree: expose a fit/evolve entry point in the library |
| improvise-0bf | closed | Inconsistent float-equality tolerance in formula eval |
| improvise-0dbk | closed | #266 and #279 each add ClientState::notify: their merge does not compile, and #266's rebase() skips #279's settle_status |
| improvise-0hb | deferred | Make Sequence bindings transactional at command level |
| improvise-0j0f | closed | The inline editor claims its basis at commit, not open: a value another client wrote while the editor was open is silently overwritten |
| improvise-0jw5 | closed | Nothing guards that viewport::grid_body shares one FoldMemo: a per-cell fresh memo there passes the whole suite |
| improvise-0o6x | closed | A group header first on its axis is never drawn, so a leading collapsed group has no way back |
| improvise-0r01 | closed | innermost_group walks and clones the whole axis per z keypress since open_runs became the one reader (Codex P2 on #263) |
| improvise-0v8l | closed | 23 of 27 refusal conversions in #185 are unpinned: reverting any one to set_status leaves the suite green |
| improvise-0wn3 | closed | check-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-0x9u | closed | A click cannot move the grid selection while an editor is open |
| improvise-0ygd | open | [bug] Tab on the +measure column silently discards the commit that Enter accepts |
| improvise-0yq8 | closed | Move ClientState and keys.rs::step into improvise-protocol |
| improvise-1125 | closed | Row-header width is computed per frame in the widget |
| improvise-12ha | open | Multi-tab browser editing: a SharedWorker cannot host OpfsFs (measured), so pick a shape |
| improvise-17ak | closed | TUI help popup footer hand-writes its paging keys (l/Tab, h/S-Tab, q/Esc): a second key table no guard reads |
| improvise-1be2 | closed | check-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-1c5m | closed | Browser help overlay covers #hint once the app bar wraps, and Welcome no longer says how to page (PR #180 removed the tip) |
| improvise-1c9 | closed | ExportPrompt mode shows no status-bar hint |
| improvise-1cz | closed | export_csv emits unquoted CSV — commas in values corrupt output |
| improvise-1ey | open | Browser frontend MVP: end-to-end working demo |
| improvise-1l9o | closed | furnished_client hand-builds a basis instead of taking the server's |
| improvise-1qaa | closed | pr-watch waits the full timeout on a MERGED or CLOSED PR, which GitHub reports as UNKNOWN/UNKNOWN |
| improvise-1wft | closed | Browser boot failures have no diagnosis channel, so five different causes all read as silence |
| improvise-1wl0 | closed | AxisFrame::first is serde(default), so a frame with no origin claims it leads the axis |
| improvise-1x9h | closed | Browser: 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-1xfb | open | Epic: CI, checkers and repository tooling |
| improvise-2054 | closed | An 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-20ek | closed | A coordinate-rename retry after RecordGone renames whichever record moved under the cursor (browser, fdk1) |
| improvise-21d | closed | Epic: Integrate gp-tree — fit interpretable decision trees as computed measures |
| improvise-23qd | closed | The Projection::Basis record set is derived twice, and the second copy is the tests' yardstick |
| improvise-24lz | closed | pr-watch: a PR whose head moved and then merged exits 5, not 2; exit-5 ordering against the head checks is unpinned |
| improvise-25bf | open | The category panel's Space cycles the axis silently while the tile route announces it |
| improvise-26dm | closed | The fourth length-not-completeness list: cases.len() == 13 in ui/effect.rs |
| improvise-29w2 | closed | pr-watch-test: the CLOSED case no longer exercises the wait; closed PR #46 reports green MERGEABLE/BLOCKED and a rival passes 52/52 |
| improvise-2avl | closed | layout_version moved outside the effect loop and neither abort arm is tested |
| improvise-2bac | closed | commit-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-2cw9 | closed | Import silently overwrites repeated coordinate tuples with the last row |
| improvise-2hi | closed | Extract AppMode dispatch methods (mode_label, mode_style, mode_key) |
| improvise-2iws | closed | Shipped-document walk parses trace output sent to stdout as paths |
| improvise-2lh | closed | Migrate name-string comparisons to CategoryKind enum checks |
| improvise-2mqz | open | SaveAs and ExportCsv have no wire form, which is why two prompts are stranded |
| improvise-2oxt | closed | The landing page's casts predate the records columns and show the recorder's shell prompt |
| improvise-2wm | closed | WizardKey effect embeds the import-wizard state machine inside Effect::apply |
| improvise-2wu3 | closed | A commit from the inline editor addresses the current cache while the screen is frozen |
| improvise-2yc2 | closed | DataStore::live_records walks a HashMap -- decide its order before writing the caller |
| improvise-2zq | closed | Records mode has no inline way to add a category, unlike the + column for measures |
| improvise-31oe | open | Epic: Command layer — everything is a command (ADR 006), Cmd/Effect hygiene and the CLI |
| improvise-349m | closed | format_md/parse_md is not idempotent when a .improv file has two Category sections with the same name |
| improvise-35e | closed | Temporary adapter: RenderCache::from_app bridge for incremental widget migration |
| improvise-368h | closed | [bug] No client on any transport can ask its host to save |
| improvise-3al1 | open | ADR-001 c: a rejected batch keeps its values staged, and class-1 force re-composes |
| improvise-3b2b | closed | Deleting a virtual category from the category panel disables records mode |
| improvise-3gy | closed | 4.2 Enable GitHub Pages |
| improvise-3h9w | closed | A captured editor's Enter is refused by the cursor's cell: refused_here runs before the capture is consulted (#274 after merging #286) |
| improvise-3ij0 | closed | htl6's 'pins the key' assertion calls composed() by command name, so the ',' it passes is ignored: rebinding view-forward off ',' leaves it green |
| improvise-3j70 | closed | The GIT_CONFIG_GLOBAL/NOSYSTEM nulls in run_git have no witness: vwjj's -c core.excludesFile=/dev/null masks the excludes-based one |
| improvise-3kfc | closed | ClientState::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-3t5x | closed | every_advertised_command_answers_in_its_own_mode counts a refusal as an answer |
| improvise-3til | closed | App::restore's rebuild-after-view_state order is unguarded: rebuilding before view_state is restored passes the suite |
| improvise-3tt4 | closed | Tab 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-3uow | closed | pr-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-3uzg | open | Under prune_empty, a commit that prunes its own row reopens the browser editor on the renumbered neighbour's stale cache value (#227 regression) |
| improvise-3vr | closed | vb4 step 1: scaffold ModelState and ViewState types |
| improvise-3x3u | closed | Resolve the two unaddressed nullary wire variants before concurrency lands |
| improvise-3yv3 | closed | Saving reorders category items when grouped and ungrouped items are interleaved |
| improvise-3zq | closed | Records-mode Enter/Tab at bottom-right: persist empty record, re-enter editing |
| improvise-40j4 | closed | A client DeleteView of an absent view, and AddFormula into an absent category, are still accepted (bok4 residue) |
| improvise-44ad | closed | ColWidths is redundant under the label fold, and the test that would change is gotcha 33(c)'s evidence |
| improvise-465t | closed | The touched reset on an editor reopened by commit-and-advance is unpinned on both front ends (a stale touched survives the whole suite) |
| improvise-48jd | open | Paste inside a drill is declined, and the aggregate decline tells the user to drill in to paste |
| improvise-492x | closed | Formula parser defaults unknown operators silently |
| improvise-4bwa | closed | Three bindings improvise-e24v listed as needing no enrichment do need it |
| improvise-4cb5 | closed | #227: an awaited seed settles after Esc, writing the landed cell's text into the edit buffer in Normal mode |
| improvise-4daa | closed | first_non_item clones every item name per coordinate per cell: grid_of ~10x slower in pivot, ~140x in records mode (#265 regression) |
| improvise-4dpj | closed | The RecordsNormal-to-Normal arm of settle_normal_mode has zero coverage, and it is live |
| improvise-4h8a | closed | Six of AppSnapshot's eight restored fields are unguarded; the rival fix passes the suite |
| improvise-4img | closed | PR #188's clear variant is refused as RecordMoved, not RecordGone as its evidence reasons; it has no test |
| improvise-4ju | closed | Make EditOrDrill mode-agnostic; delete EnterEditMode |
| improvise-4k1j | closed | Browser 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-4klp | closed | Duplicate-category name check against date-derived categories is untested |
| improvise-4ktt | closed | The js job's bundle-freedom is a convention, not a gate |
| improvise-4lgj | closed | Parser wildcards silently ignore unknown grammar rules |
| improvise-4pg | closed | Extract panel mode keymap template |
| improvise-4s8 | closed | Extract a gp-tree feature matrix from a View's records |
| improvise-4w09 | closed | A NaN cell never quiesces: CellDisplay's PartialEq makes the grid diff resend it every projection and breaks folded(seed)==cache |
| improvise-4yc | closed | Malformed numbers in .improv file silently become 0.0 |
| improvise-4zl7 | closed | A fitted tree must route per record and aggregate the results, not route on the aggregate |
| improvise-514o | closed | Five of ImportJsonHeadless's refuse_and_stop aborts fail no test when the abort is dropped |
| improvise-52eq | closed | Dead-ID audit recipe reads a bd that never ran as all-resolve; its environment note inverts which forms the guard refuses |
| improvise-52od | closed | No test separates opening_tile's 'first regular' rule from 'first tile on Row' |
| improvise-53zz | closed | The 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-54g1 | closed | Paste onto a formula-owned (Derived) cell writes in the TUI and declines in the browser |
| improvise-55l5 | closed | dispatch swallows interactive() errors silently |
| improvise-55v2 | closed | Nonfinite CellValue numbers serialize into JSON that the wire cannot read |
| improvise-56ek | closed | SetPanelOpen maps a Panel to a field twice, in two crates |
| improvise-59nw | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-59q8 | closed | source_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-5hfh | closed | Duplicate CSV headers silently overwrite earlier columns |
| improvise-5j9 | closed | ImportPipeline silently skips records missing category values |
| improvise-5jm5 | closed | Model::evaluate_aggregated takes a list it only tests for emptiness |
| improvise-5jna | closed | The browser page does not paint the title bar it is now told about |
| improvise-5jxt | closed | pr-reviews dies with 'jq: Argument list too long' on a PR with many comments (#210) |
| improvise-5kdr | closed | every_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-5m9z | closed | Browser advance past the announced window opens the editor on an unprojected cell |
| improvise-5r8c | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-5ray | closed | check-evidence ignores #### headings and every browser-test entry uses them |
| improvise-5ubs | closed | A cyclic-successor all() can silently omit a variant while its doc says it cannot |
| improvise-5wai | closed | #227's browser +cat commit clear is unpinned: dropping cleared() from create_column leaves the workspace green |
| improvise-5xbq | closed | No 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-60z | closed | Virtual views _Records and _Drill should not be persisted to .improv files |
| improvise-61f | closed | Add invariant test for command registry name mapping |
| improvise-636d | open | Introduce a global keymap that almost all modes inherit from |
| improvise-6562 | closed | 3t5x'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-65kf | closed | ADR 005 clause 9: '#[serde(transparent)]' cannot load legacy JSON's numeric ids if Q1's string ids are chosen |
| improvise-669b | closed | The harness spec and the page can still disagree about HANDSHAKE_TIMEOUT_MS through a stale assemble |
| improvise-6c6q | closed | [bug] apply_switch relays a refused switch to everyone but the asker |
| improvise-6eqi | closed | ub4o's toggle-group tests all sit at data row 0: z ignoring the cursor row passes the whole workspace |
| improvise-6kj | closed | Pest parse errors lack file:line context for users |
| improvise-6mq | closed | Introduce Storage/VFS abstraction in persistence layer |
| improvise-6nsd | closed | A prune-by-write renumbers the grid without moving layout_version -- ADR 001 middle tier |
| improvise-6os | closed | O(n^2) stem deduplication in recompute_formulas |
| improvise-6oy4 | closed | Numbers do not survive the JSON wire: serde_json lacks float_roundtrip, so browser yy/p and typed numbers land 1 ULP off |
| improvise-6p8q | closed | TUI 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-6qet | closed | [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-6r2y | open | RecordRewrite::of's unwritable check over RENAMED categories is unpinned: dropping .chain(renames.keys()) leaves the suite green |
| improvise-6sq | closed | Merge EditOrDrill and EnterEditAtCursorCmd into EnterEdit{mode} |
| improvise-6t3 | closed | Unify Commit{Formula,CategoryAdd,ItemAdd} into CommitBuffer(kind) |
| improvise-6u6s | closed | e265'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-6uva | closed | improvise script cannot move the cursor: every Move resolves through the pure-parse arm |
| improvise-6yvg | closed | JSON import parses numbers 1 ULP off: the TUI build has no float_roundtrip |
| improvise-6zf1 | closed | check-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-711n | closed | parse_number_format silently yields 0 decimals for the ,.2f spelling our own docs show |
| improvise-748f | closed | A drill exited with no edits, and view-back, mark the document dirty |
| improvise-75ld | closed | A refused or no-op AddCategory still bumps layout_version and raises dirty |
| improvise-764 | closed | Migrate import wizard widget and state to consume RenderCache |
| improvise-771e | closed | The browser tile bar says 'Pag': short_label is a TUI column-width device, not a browser one |
| improvise-78v6 | closed | PR #61 deleted the help-overlay spec and nothing replaced it |
| improvise-7epn | closed | pr-reviews --wait: no test pins polling past the second poll (post-poll deadline check replaceable by break) |
| improvise-7fl8 | closed | pr-reviews-test: timeout case asserts >=5 polls where the fake clock makes it exactly 6; a loop stopping one tick early passes |
| improvise-7gf8 | closed | Render failure causes infinite retry loop (painted not updated) |
| improvise-7gip | closed | [bug] OpfsFs::open's dedicated-worker guard checks WorkerGlobalScope, which a SharedWorker satisfies |
| improvise-7iww | closed | Cached circular formula publishes the last iteration as a valid number |
| improvise-7kvw | closed | SetPageSelection renumbers the grid under prune_empty and does not reset the cursor |
| improvise-7mro | closed | Browser 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-7na | closed | Decide whether fitted gp-tree models are persisted alongside the formula |
| improvise-7v62 | closed | Checked does not bind the App it was checked against |
| improvise-7xyx | closed | FrameGroup::cat is dead in both front ends and its doc comment promises an echo nobody composes |
| improvise-7ybz | closed | The browser category panel has no pointer affordance at all |
| improvise-7yx | closed | Close test gaps flagged by deep review |
| improvise-80rm | closed | ADR 005 Q3 rests on a false premise: the CSV importer writes 'Name(token)' headers today, and header_decl would silently orphan their data |
| improvise-864a | open | Concurrent merges to main race on one Pages environment and the superseded deploys fail |
| improvise-86nw | closed | Worker startup failure leaves page in silent dead state |
| improvise-8ec3 | closed | improvise-io's test binary breaches the 2s per-binary rule on some machines, and the pinned figure is not reproducible |
| improvise-8fy | closed | Introduce simple_effect! macro for single-field setter effects |
| improvise-8id2 | open | An 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-8jk6 | open | Epic: Import, export and .improv persistence |
| improvise-8l0c | closed | Formula panel truncation panics on a valid Unicode formula |
| improvise-8nd9 | closed | ViewBack and ViewForward carry swzk's hazard and are safe only via forget_view |
| improvise-8phw | closed | A keyboard value-edit retry after a crossing LayoutMoved writes the cell now under the cursor (8xq0's crossing twin, 9ww8 for values) |
| improvise-8qlr | closed | Column-group run coalescing is derived twice, and the agreement test does not pin the TUI arm |
| improvise-8shu | closed | Constrain the .improv grammar generator's strategy; improvise-io's lib binary is the run's outlier |
| improvise-8tk | closed | ZZ / :wq quits even when the save fails, silently discarding the model |
| improvise-8tk5 | open | ADR 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-8uj8 | closed | every_rejection_message_says_the_edit_did_not_land covers five of seven variants |
| improvise-8uz | closed | Cursor and scroll are per-client state stored in the shared View |
| improvise-8wy9 | closed | App::restore's layout rebuild is unguarded: removing it leaves the workspace green |
| improvise-8xhy | closed | [bug] A fit over a categorical feature emits an unevaluable formula |
| improvise-8xq0 | closed | The keyboard editor's commit writes whatever record is under the cursor at Enter, not the one being edited (2wu3's sibling) |
| improvise-907 | closed | Import wizard step machine: validate early, allow going back, make the terminal step real |
| improvise-90ea | closed | fmt-workspaces-test never dirties the root package: a script that skips improvise's own src/ passes 17/17 |
| improvise-94x2 | closed | vocabulary_is_complete misses a simple_effect! written with a doc comment or line break: a new unlisted effect passes all 5 tests |
| improvise-955n | closed | [bug] Host::commands applies a batch partially before rejecting |
| improvise-98pd | open | Three first-party sources still write non-item coordinates: set-cell, undeclared Data item, stale page selection |
| improvise-9bit | closed | Import collision check counts records with disjoint measures as colliding |
| improvise-9c8c | closed | Move the reasoning out of code comments into context/ prose, cap comments at two lines |
| improvise-9c9o | closed | A geometry effect right after a mid-batch SwitchView skips the cursor check entirely |
| improvise-9cma | closed | [bug] Invalid ?doc= yields blank UI and only generic watchdog text |
| improvise-9cn | closed | Introduce register_cmd! macro to prevent name drift |
| improvise-9fpl | closed | Eight of bok4's refusals (AddItemInGroup, AddFormula parse, ImportJsonHeadless) fail no test when reverted |
| improvise-9ix | closed | SQLite persistence format (alternative save/restore) |
| improvise-9iyv | open | The route-then-aggregate fold's cost, measured |
| improvise-9mo9 | closed | [bug] Geometry effects that renumber the grid but never reset the cursor |
| improvise-9pfs | closed | pr-watch-test has no case for a failed check under MERGEABLE/BLOCKED, the state a failed required check reports |
| improvise-9trl | open | The script remove-formula refusing a missing formula is untested, and it turns a script's exit status from 0 to 1 |
| improvise-9v0j | open | view_frame and view_shape are separated by example, not by property |
| improvise-9ww8 | closed | A coordinate-rename retry after a crossing LayoutMoved renames whichever record is under the cursor (20ek's fix pins only RecordGone) |
| improvise-9x6 | closed | Worker-hosted server bundle (wasm, MessageChannel transport) |
| improvise-9za9 | closed | Demoting an evidence heading to prose is an unguarded escape hatch |
| improvise-a0i3 | closed | shipped_documents_load: GIT_LITERAL_PATHSPECS or GIT_GLOB_PATHSPECS in the caller's env fail 9 of 10 tests |
| improvise-a2x | closed | Derive Serialize/Deserialize for the ViewState field types |
| improvise-a36c | closed | [test] count_aggregation assertion is >= 1.0 instead of exact value |
| improvise-aaw | closed | Replace CreateAndSwitchView with Binding::Sequence |
| improvise-ac2z | closed | A host's none_cats leak into another view's grid: formula columns vanish |
| improvise-ahdf | closed | repo-map gotchas 36 and 43 still name Sessions::apply as the production door |
| improvise-anr9 | closed | Project the five grid-frame facts: unblocks H, z, gz and fixes Food/Alice at once |
| improvise-aopa | closed | resolve.rs tests fold client-composed commands through fold (the host door), latent like xoxh's renaming test |
| improvise-aszt | closed | every_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-azhb | open | Decide who sets a document's default view now that a switch does not |
| improvise-b114 | closed | Wire SetCell to a collapsed _Measure-group fold is accepted and stores a non-item _Measure coordinate (#217's stored arm skips the projection) |
| improvise-b4ks | closed | The documented opfs-contract fmt gate exits 1 as a usage error, indistinguishable from a real failure |
| improvise-b5dp | closed | wm20 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-b5zh | closed | prune_axis_items: close_pending_run's 'header whose run saw no item is collapsed' arm is unreachable since 6qet |
| improvise-b8ot | open | Delegate DOM events: one handler per surface on the stable root, not one per node |
| improvise-b9f2 | closed | Determinism law's width guard measures the argument list, not the drills the comparison built |
| improvise-bbwa | closed | check-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-bck | open | Standalone web MVP: end-to-end offline demo |
| improvise-bd9o | closed | The browser reaches records mode through the tile bar, and everything it can do there is silent |
| improvise-bgtf | closed | The landing page is served by the harness and asserted by nothing |
| improvise-bidq | closed | Two answers to 'is this category virtual', four lines apart in view/types.rs |
| improvise-bok4 | closed | A failing effect narrates instead of reporting, so a frame containing it is accepted |
| improvise-bpq2 | closed | Client-side key resolution: what must the projections carry? |
| improvise-bqm0 | closed | opening_tile falls back to _Index when a view has no Regular category, so T Enter still empties that grid |
| improvise-btyw | closed | Determinism width guard counts applied drill state, but the law compares Debug text: an order-eliding Debug blinds the law with the guard green |
| improvise-bw4p | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-byz | closed | records_display returns Some("") for out-of-bounds columns instead of None |
| improvise-c0aj | closed | The 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-c5ip | closed | A scripted commit-cell-edit whose advance aborts exits 1 silently after saving the write |
| improvise-c5v | closed | Improve records view data entry by making each measure a normal value column (wide format instead of synthetic Value column) |
| improvise-c6j | closed | WizardStep::Done is unreachable from the UI |
| improvise-c7mu | closed | vocabulary_is_composed counts a comment naming Command::X as a composer: delete the real composer, leave a comment, 4/4 pass |
| improvise-cfly | closed | The wave ships view history with no key that reaches it: declined() still refuses view-back |
| improvise-cgqt | closed | Import collision policy should be a wizard step, not a fixed default |
| improvise-ciw8 | closed | Host resolve_cell resolves a collapsed fold's surrogate via record_in_layout: a wire SetCell stores Month=Q2 and the frame is Accepted |
| improvise-cj4u | closed | New views pivot Label categories that were explicitly excluded from pivot axes |
| improvise-cl7y | closed | A browser reports "Formula added" for a formula only the host can parse |
| improvise-clso | open | Ctrl-S saves and also opens the browser's own save dialog |
| improvise-cota | closed | bd-audit-ids skips an absent --assume-unchanged file as deleted: ls-files -d lists it, git status does not |
| improvise-cq1q | open | Epic: Stable identities — implementing ADR 007 |
| improvise-cq3d | closed | A standing status_msg hides the derived key hint in every TUI mode: nothing clears it |
| improvise-cqi | closed | Extract improvise-protocol crate (Command, ViewState, reduce_view) |
| improvise-cqq | closed | Server-side projection emission layer + per-client viewport tracking |
| improvise-cr3 | closed | DOM renderer for browser grid (reads ViewState + render cache) |
| improvise-ct5 | closed | i on an empty records grid reports 'cannot drill', leaking a pivot-mode concept |
| improvise-cwfj | closed | The remaining set_status declines: panel.rs (3) and keymap dispatch's arg-error arm should refuse |
| improvise-cz8d | closed | #181's refused() aborts and #185's App::refuse does not: reconcile to one writer, with the abort as a separate choice |
| improvise-d0n6 | open | Hierarchical date import: an unparsed raw value shares the item namespace with generated months/years and silently merges (latent) |
| improvise-d44s | closed | gp_tree::data::preprocess writes to stderr from library code |
| improvise-d7aj | closed | No test pins the fold memo's key granularity: a memo keyed by formula alone passes the whole suite |
| improvise-dak5 | closed | Nothing checks that every checkers.sh suite runs in CI: ci.yml names the suites by hand |
| improvise-df2w | closed | Open empty formula panel is invisible: RenderModel encodes closed as empty rows |
| improvise-djcn | closed | Model's hand-written Debug is not exhaustive, and the Debug fingerprint is not canonical across instances (DataStore/View HashMaps) |
| improvise-djm | closed | Standalone main-thread bundle: wasm-client + worker transport |
| improvise-djn | closed | AddCategory effect silently swallows failures |
| improvise-djoo | closed | Publish the context/ prose as a documentation site folded into GitHub Pages |
| improvise-dkqn | closed | gp-tree::fit should take one slice of rows, not parallel x/y slices |
| improvise-dndu | closed | PR #245's merge of #228 dropped the check-harness-lock --allow-network CI step; CI now runs only the checker's self-test |
| improvise-dqn | closed | CyclePanelFocus does not actually cycle between panels |
| improvise-drg | closed | vb4 step 5: narrow Effect::apply signatures where one-slice |
| improvise-dsxq | closed | Browser yy yanks the rounded display text re-parsed, not the value: 1.23456789 pastes as 1.2346, Text 007 as Number 7 |
| improvise-dy3j | closed | A Label category is not persisted, so a document with 12 categories plus a label can never be reopened |
| improvise-dz8 | closed | Add Axis::Filter for drill-fixed coordinates |
| improvise-dz8c | closed | The float_roundtrip check names its three crates by hand, so a new frame-parsing crate is not caught |
| improvise-e0ex | closed | A ratio renders as an integer: number_format is per view, which is too coarse for one grid |
| improvise-e1sm | closed | Determinism law passes about 14% of the time with gotcha 18 re-injected, and cannot see nondeterminism inside Effect::apply |
| improvise-e24v | closed | Second tranche of client-side key resolution: ~15 bindings needing no enrichment |
| improvise-e265 | closed | prune_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-e5pf | closed | Command::ChangeMode(Normal) is on the wire and reduce_view folds it without the records resolution |
| improvise-e8no | closed | A wide numeric category now refuses a fit that used to ignore it |
| improvise-eahe | closed | shipped_documents_load test binary exceeds the 2s tripwire: one child process per env setting |
| improvise-eccl | closed | A collapsed group folds a ratio formula by summing the members' ratios (Margin 1.00 where Month-on-None gives 0.50) |
| improvise-edp | closed | Establish ViewModel layer: derived data between RenderCache and widgets |
| improvise-edpl | closed | pr-watch exits 0 when mergeability is UNKNOWN |
| improvise-ehz | closed | EnterEditAtCursor effect calls rebuild_layout and builds a CmdContext inside apply |
| improvise-el9h | closed | The server's mirror settles its mode once and never again, so it diverges from the client it mirrors |
| improvise-en4s | closed | No guard that a client's formula panel loses a formula its target item's deletion removed |
| improvise-enz6 | closed | [bug] Enter-to-advance onto a collapsed group's row opens the editor and commits a write to the group coordinate |
| improvise-ep5o | open | Headless q on a dirty document says Unsaved changes and then saves anyway |
| improvise-ete | closed | Add Model/Category getter methods to absorb .unwrap().items/groups chains |
| improvise-ew0 | closed | vb4 step 3: move UI session fields into ViewState |
| improvise-exdg | closed | A records-mode coordinate cell projects id: None, which the contract says means no cell |
| improvise-f2oo | closed | Collapsing a group with a hidden member changes the column total; the fold shows hidden values only while a sibling is visible |
| improvise-f86q | closed | Re-adding an existing category at the 12-category limit is refused with a false message |
| improvise-f9qf | closed | Pin the shell: macOS bash 3.2 hid two bugs that failed 17/19 in CI on the same commit |
| improvise-fd0j | closed | pr-reviews-test watchdog needs bash 5.1 but checkers.sh pins only major 5 |
| improvise-fdk1 | closed | A records coordinate rename has no wire form, and the surrogate is why |
| improvise-fdt6 | closed | A browser cannot add a formula, so FormulaEdit is a room that swallows typing |
| improvise-felo | open | Epic: Core model, layout and formula evaluation |
| improvise-fkfg | closed | ADR-001 b: ModelCommand carries its basis; Applied gains a rejected case |
| improvise-fo0w | closed | Three black-hole keys are resolvable today over vocabulary that already exists |
| improvise-fuj | closed | Two effects read files directly instead of going through Storage |
| improvise-fy9o | closed | Enter twice clears the cell the first Enter advanced onto: the welded clear-buffer blanks the reopened editor |
| improvise-fz77 | open | Categories and items cannot be renamed from the category panel |
| improvise-g0f | closed | Decide whether two clients may view different views |
| improvise-g3no | closed | [bug] d on a _Measure formula target deletes nothing and reports success |
| improvise-g6s1 | closed | WizardStep::Preview has no characterization fixture |
| improvise-gcvb | closed | The browser cannot commit a records-mode creating column, though it is now nameable |
| improvise-gd28 | closed | Drill in the browser: the view stack is client-local, so what does the server still owe? |
| improvise-gd83 | closed | AxisEntry carries no group-end boundary, so group_of gives an ungrouped item the preceding group |
| improvise-gdl | closed | SetBuffer effect special-cases the "search" buffer name |
| improvise-gfq | closed | Import wizard defers the 'no category accepted' failure to the very last keystroke |
| improvise-gho5 | closed | Rolled-back-load tests pass against a host that never ran the load; the evidence's generation-check claim is false |
| improvise-git | closed | Replace SaveAndQuit with Binding::Sequence in keymap |
| improvise-gj5p | open | R in a saved records layout says Pivot mode and changes nothing; the document opens in Normal over a records grid |
| improvise-gjat | closed | [test] sequence-associativity test proves a mathematical tautology |
| improvise-gk51 | closed | Wire writes to a records-mode row with a non-item coordinate are projected as Record and then refused (#252 regression) |
| improvise-gkyo | closed | ADR 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-gtn7 | open | Epic: TUI and shared front-end UX |
| improvise-gv9r | closed | [bug] A wire model command never marks the document dirty |
| improvise-gvnb | closed | [bug] A geometry command resets the App cursor but not the session mirrors |
| improvise-gw18 | closed | drill-into-cell (>) on a collapsed group's row opens an empty drill, and o in it writes a record at the group coordinate |
| improvise-gxi | closed | Define unified reduce_full(&mut App, &Command) -> Vec<Command> |
| improvise-h04z | open | Decide whether UI glyphs move to the protocol, as short_label() did |
| improvise-h074 | open | Two edges of App::resolve_view: a worse panic message, and a host-side DeleteView bypass |
| improvise-h0b | closed | Evict wizard and drill_state from ViewState (bootstrap-snapshot hygiene) |
| improvise-h0iv | closed | group_runs coalesces by name alone, so two runs under different headers merge |
| improvise-h3cv | open | command.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-h3ni | closed | pr-watch-test has no case for a head that moves during the UNKNOWN wait |
| improvise-h3y7 | closed | The wire vocabulary must be complete against what needs the server, not merely correct |
| improvise-h6z1 | closed | Fold evaluation still ~6x gh/main: the per-cell memo re-derives the formula chain for every column |
| improvise-hexb | open | ADR 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-hkbc | closed | Guard the position-free ModelCommand vocabulary, which 6nsd's answer silently depends on |
| improvise-hkr8 | closed | A click that cannot compose its activation keeps the prefix and drops the payload |
| improvise-hkt6 | closed | Three small totality gaps found in review |
| improvise-hmu | closed | TAB/Enter on bottom-right of records view should insert record below (TAB→first cell, Enter→same column); o inserts below cursor |
| improvise-hmws | closed | Storage cannot expose an async seam through Box<dyn Storage> |
| improvise-hoxy | closed | names_its_column accepts CellId::Derived on any measure column, and records_app has no formula, so the arm only loosens the enumeration |
| improvise-hrjz | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-hs0u | closed | [bug] gg is implemented in the resolver and unreachable from any browser key |
| improvise-hsoe | closed | check-evidence cannot see a duplicate heading, and three exist |
| improvise-htl6 | closed | view-forward is bound in no keymap, in either front end |
| improvise-hv0r | closed | #230's echo is unpinned on its audience and its offset arms: echoing to every session, or only SetSelected, leaves the workspace green |
| improvise-hwpi | closed | The browser shell fails quietly, and never reads a key |
| improvise-hzjo | closed | Determinism law over two independently built, equal contexts, for every registered command |
| improvise-i0n7 | open | ADR 005: _Measure's formula-target rows have no ItemId for CategoryRow, and ViewState's expanded_cats and view history are name-keyed too |
| improvise-i0v9 | closed | [bug] a second browser tab on the same document is dead and silent, and blames the browser |
| improvise-i2m5 | closed | improvise-io still carries its own pipe-quoting copy, without the keyword guard |
| improvise-i34 | closed | OPFS-backed Storage implementation for wasm target |
| improvise-i3o5 | closed | Refusals still written through set_status in panel.rs, keymap dispatch and draw.rs exit 0 |
| improvise-i5tk | closed | Narrow the TUI's GridCache to its viewport -- benchmark first |
| improvise-i5z6 | closed | improvise-formula lib test binary measured over the 2s tripwire under load (2.2-5.5s) |
| improvise-igxp | closed | The browser help overlay's rows are asserted as present, never as content |
| improvise-ih3k | closed | kb completeness guard cannot see one of two clauses sharing a key (work_done/3, decision/3, work_followup/3) |
| improvise-iioi | closed | The view and formula panels have no pointer affordance while the category panel does |
| improvise-ijql | closed | check-comment-runs.py --check-evidence silently skips the comment-run cap it is named for |
| improvise-ik6l | closed | Browser 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-ilvl | in_progress | ADR 006: everything is a command, and a recorded sequence replays the whole system |
| improvise-iobc | closed | [bug] Bad/missing ?seed= creates empty doc with no loud error |
| improvise-iot6 | closed | render_csv builds GridLayout::new, so CSV export carries rows the view prunes |
| improvise-ipqu | closed | The FitOutcome::warnings order stated in two places is checked in none |
| improvise-ir7l | closed | [bug] A formula cell is offered as editable and silently reverts |
| improvise-ixxx | closed | An untouched edit of a text cell that reads as a number (Text 007) commits Number(7): typed() cannot know the cell was text |
| improvise-izk | closed | gp-tree step 1: emit a fitted Tree as an improvise formula string |
| improvise-j31x | closed | Server hosts several documents: a registry above Sessions |
| improvise-j49r | closed | check-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-j4qt | closed | A read-only browser tab accepts edits, paints them, and loses them |
| improvise-j6x8 | closed | improvise cmd discards every status message and exits 0, so a refusal is indistinguishable from success |
| improvise-j7v6 | closed | The typed-string classification lives in two crates, and its guard test asserts by hand |
| improvise-jc8 | closed | Evict host-only state from ViewState: flip the transient-keymap Arc |
| improvise-jc95 | closed | CSV nonfinite and overflowing numeric tokens are silently replaced with zero |
| improvise-jcfs | closed | Date format detection ignores disambiguating values after row 10 |
| improvise-jgzw | closed | The tile bar offers _Index and _Dim, because every call site passes category_names() |
| improvise-jhdf | closed | only_the_edit_key_is_captioned_as_editing_the_cell matches one exact phrase, so a paraphrased edit caption on Enter passes |
| improvise-jibp | closed | The mouse editor has no touched flag: a click-edit typed back to its seed over a concurrent write is still dropped silently |
| improvise-jjx | closed | Scrolled grid suppresses first visible row-header label |
| improvise-jkxr | closed | parse_duplicate_categories is vacuous: cannot fail for a merge that drops half the items |
| improvise-jmjz | closed | grid_of evaluates the whole grid three times per frame; compute_col_widths is ~45% of it |
| improvise-jmti | closed | An advance reopens the cell editor on a formula-owned or aggregate cell that edit-or-drill refuses |
| improvise-joed | closed | A commit declined as 'still waiting' loses the typed text: Enter's welded clear-buffer still runs |
| improvise-jpba | closed | A 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-jq0m | closed | A 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-jq8l | closed | web/app.js never calls scrollIntoView, so a selection can sit outside the window |
| improvise-jytm | closed | Split active_view: document default vs per-client authoritative (improvise-g0f) |
| improvise-jz6w | closed | KeyOutcome cannot express 'send a frame', so Ctrl-S cannot reach the ClientFrame::Save that already exists |
| improvise-k099 | closed | AppMode::hint_text/label put terminal UI strings on a serde wire enum |
| improvise-k2i4 | closed | The two nullary model commands are unaddressed and act on one client's staged state |
| improvise-k69y | closed | [bug] draw_status reads the document's active view, not the client's |
| improvise-k844 | closed | importance_ranking overflows to inf for a large importance: 100.0 * imp / total multiplies first |
| improvise-k84e | closed | Clause 4 rollback of a frame containing LoadModel: the rebase-then-undo case is untested |
| improvise-k8h | closed | Tie MinibufferConfig.buffer_key to the keymap's buffer name |
| improvise-k8i | closed | CSV import silently drops columns when row widths mismatch |
| improvise-kb1d | closed | Renaming a non-_Measure formula leaves the old target as a ghost item and appends the new one at the end (km71) |
| improvise-kc7n | closed | improvise-ws-server never checks Origin, so any page a user visits can drive their session |
| improvise-kdp | closed | Duplicated aggregation dispatch block |
| improvise-kh8 | closed | Phase 4: Landing page (optional) |
| improvise-kimw | closed | An 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-kkcy | open | Browser p on a records coordinate or creating column is a silent Upstream; the TUI declines out loud since #184 |
| improvise-km71 | closed | A formula cannot be edited from the formula panel |
| improvise-kmgs | closed | Derive the model half of the Command vocabulary from the EffectKind::Model effects |
| improvise-kndq | open | A records rename onto an existing record silently overwrites it (plain records mode and drill alike) |
| improvise-koh6 | closed | [bug] Following the help overlay's N to add a category overwrites a data cell |
| improvise-kos | closed | _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-kpnr | open | improvise-ws-server has no authentication, and the documented sharing path now exposes it |
| improvise-ksst | closed | A gp-tree fit records its seed but not its GA config |
| improvise-ktlk | closed | Editing overlay with an absent buffer now SHOWS the cell but Enter still CLEARS it (xg1z fixed the paint, not the commit) |
| improvise-ktv1 | closed | Move the help content into the shared layer so a browser can show help |
| improvise-l1f5 | closed | A blank numeric CSV field makes the entire measure a Label |
| improvise-l2b8 | in_progress | ADR 005: exact decimal arithmetic for formulas, on Scheme numeric-tower promotion rules |
| improvise-l4mp | closed | PasteCell writes SetCell onto an aggregate cell: a None-axis aggregate or a collapsed group's fold |
| improvise-l4qx | closed | [bug] A text cell is invisible whenever any category is on the None axis |
| improvise-l8rh | closed | The ambiguous-date heuristic reads American-first, so a European CSV imports with days and months swapped |
| improvise-lae | closed | ZZ / :wq with no file path should prompt for a path instead of only erroring |
| improvise-lasd | open | we1a's abort-implies-refuse table is hand-listed: a new Model effect that aborts without refusing leaves the workspace green |
| improvise-le4p | open | ADR 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-lhi4 | closed | prune_empty drops a collapsed group's header, so the group cannot be re-expanded from the grid |
| improvise-lltt | closed | [bug] A view-scoped ModelCommand names no view, so it lands on the host's |
| improvise-lm5e | closed | [test] Debug-string tests verify effect names, not correctness |
| improvise-lnkb | closed | IS on a folded category is true on the fold row and false on every row it replaces and on Axis::None |
| improvise-lnsh | closed | harness/build.sh: a stale opfs-contract lock prints cargo's hint to remove --locked, not the real remedy |
| improvise-lpzu | closed | improvise import should accept a folder of CSV files |
| improvise-lqs0 | closed | bd-audit-ids: a file grep cannot read passes the audit (xargs 123 read as no-match); two exit-code mismatches |
| improvise-lrrx | closed | View 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-ls3y | closed | [bug] A wire-driven SwitchView does not push the view history; the effect does |
| improvise-lut7 | closed | [bug] p is composed by the browser and can never do anything, so the name-level derivation lies |
| improvise-lx7w | closed | clear-cell (x) in TUI records mode is a silent no-op; the browser clears the real record |
| improvise-lxg0 | closed | A fresh or rebased client's Snapshot carries a phantom back-stack frame naming "Default" |
| improvise-lyyc | closed | check-evidence is one-directional: a test citing the evidence file can have no entry |
| improvise-m0sx | closed | Command::ClearBuffer is invented, and disagrees with the only implementation of its own name |
| improvise-m4rv | closed | Loading a document invents a Default view the file does not contain, and saving writes it back |
| improvise-m56i | open | ADR 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-m6op | closed | Cross-instance Debug fingerprint: Model.measure_agg's sort is pinned by no test |
| improvise-m91 | deferred | (Stretch) Command log + native undo/replay |
| improvise-maax | closed | check-ci-graph suites_run fails open: non-command mentions, --list, and --self-test's discarded names read as suites run |
| improvise-mae | closed | Tag existing effects as model / view / projection-emitting |
| improvise-mai9 | closed | A status message written while a minibuffer is open is never drawn |
| improvise-mcq4 | open | The frame fingerprint is a 4x regression on the held-key path improvise-748f just optimized |
| improvise-mdfc | closed | An 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-metf | closed | prune_empty evaluates every cell with a fresh fold memo |
| improvise-mgis | closed | OpenedEditor::awaiting is serde(default), against 1wl0's doctrine, and unpinned: deleting the attribute leaves the workspace green (#227) |
| improvise-milr | closed | RenameRecordCoordinate overwrites a destination record records_named does not name: a concurrent write to it is lost with no Rejection |
| improvise-mkbp | closed | harness/build.sh rewrites harness/opfs-contract/Cargo.lock on every run (pest 2.9.1 -> 2.9.2) |
| improvise-mzv | closed | Import wizard does not pre-check 12-category limit |
| improvise-n0pb | closed | A 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-n10 | closed | Migrate GridWidget to consume RenderCache + ViewState (not &App) |
| improvise-n3wt | closed | prune_axis_items: keep-slice length invariant is only a debug_assert |
| improvise-n4i9 | open | Type-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-n6t8 | closed | Header layout must be reserved, not fitted: the mode pill, the hint and the status all reflow |
| improvise-n89z | closed | Three Projection mutations have no producer |
| improvise-n8vh | open | The category and view panels never truncate, so a long name overwrites the panel border |
| improvise-nacd | closed | Wire 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-ni6k | closed | Invalidate the cursor by observing the grid frame, not by a per-effect table |
| improvise-nn4s | in_progress | ADR 004: an Emacs-like face system, so a theme is UI-agnostic data the front ends apply |
| improvise-nrs | closed | Duplicated find_item_category helper in eval paths |
| improvise-nvq4 | closed | Hidden/collapsed items with slash in name corrupt on persistence round-trip |
| improvise-nwgk | open | Model::remove_item returns unit, so a wire RemoveItem naming nothing still reports success |
| improvise-nxah | closed | Optimistic fold is not rolled back on server rejection |
| improvise-nynk | closed | adopt_cursor_epoch resets every client's cursor, including clients on a view nothing reshaped |
| improvise-nzeu | closed | A deserialized TargetModel can still carry a non-finite affine map |
| improvise-o1c | closed | Import wizard has no way back; Esc discards all field decisions silently |
| improvise-o1y0 | closed | A collapsed group's formula re-evaluates every shared reference: exponential in the formula DAG, 3x-300x on the held-key path |
| improvise-o31u | closed | The landing page's casts render at a 4.8px font on a phone, and it is now the site root |
| improvise-o9q7 | open | A 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-o9uq | closed | o in records mode edits someone else's record and can rename it away |
| improvise-oaq | closed | Redundant file re-read in ImportJsonHeadless effect |
| improvise-obtu | open | The aggregate-addressing seam: a view-naming command resolved against that view's layout |
| improvise-ociy | closed | WebSocket transport: CLOSING send can throw; non-OPEN drops silently |
| improvise-odbc | closed | [bug] bank-info.improv in the repo root does not parse |
| improvise-ondj | closed | [bug] reduce_full/apply_command apply a Command::Model without the basis check |
| improvise-opbo | closed | GridLayout::evaluate_in/column_total accept a FoldMemo built by another layout and silently use its aggregation and hidden set |
| improvise-oplp | closed | Tile select opens on _Index, so T then Enter (or T then r) empties a pivot grid, and the browser persists it at once |
| improvise-oyaa | closed | NEEDS_THE_HOST completeness is checked only where a help row names the key |
| improvise-p003 | open | ADR 007 namespace gaps: _Records/_Drill ids, _Index/_Dim items under global uniqueness, active_view, collapsed: by group name, CheckedBatch's create exemption |
| improvise-p1ym | closed | Project the page-axis item lists so [ and ] work in a browser |
| improvise-p6v6 | closed | An 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-p7lh | closed | [bug] No UI at all for page-level dimensions: page_coords reaches the browser's cache and stops there |
| improvise-pb30 | closed | The column group toggle's cursor-follow is unguarded: three rivals in landing/place_cursor pass the whole workspace |
| improvise-pc3b | closed | Effect-classification Debug fingerprint is order-sensitive over formula_cache (latent flake, PR #224) |
| improvise-pca | closed | Migrate panel widgets (category/formula/view/tile_bar) to consume RenderCache |
| improvise-pcje | open | Render parity: the browser drops col_widths, column ancestry, every AxisColor and the tile overflow |
| improvise-pczv | closed | .improv section headers are a second, unquoted naming rule |
| improvise-pdvm | closed | AddItem/RemoveItem reshape the grid but declare CellData, so layout_version and cursor_epoch disagree |
| improvise-phg1 | closed | RecordRewrite: the lone-cell, sparse-row and read-before-clear branches have no test that can fail |
| improvise-pikk | closed | format_f64 renders a large finite number as inf |
| improvise-piyp | closed | every_bound_command_name_is_registered is blind to prefix sub-bindings and F-keys |
| improvise-plcx | closed | The browser harness needs a grouped, multi-level fixture — the demo has neither |
| improvise-pnf5 | closed | Saving while an unfinished records row exists writes an unreadable .improv file |
| improvise-pntu | closed | FoldMemo's key omits the aggregation and the covers predicate: one memo shared across two covers returns the first answer |
| improvise-poia | closed | The records-mode + column has no projected identity |
| improvise-ppru | closed | Nondefault measure aggregation is lost by the .improv roundtrip |
| improvise-pqf1 | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-pr3i | closed | Scratch repos inherit info/exclude from GIT_TEMPLATE_DIR |
| improvise-pr8t | closed | #235's same-name-item exemption in group_refusal is unpinned: removing it refuses a real item and the workspace stays green |
| improvise-pubt | closed | [bug] display_value_in reads the host's drill edits against a foreign layout |
| improvise-pv3g | closed | fit-measure panics on a document whose target values are large but finite |
| improvise-q08 | closed | improvise-ws-server binary (tokio + tungstenite session wrapper) |
| improvise-q0vb | closed | Pad the import wizard's hint line to the panel width |
| improvise-q2mq | closed | RecordRewrite: a blank edit on a measure a renamed drill row lacks clears at the renamed key, and no test can fail on it |
| improvise-q914 | closed | improvise cmd advertises JSON it does not accept, and swallows every effect error at exit 0 |
| improvise-q9eg | closed | PR #197: TUI p in records mode refuses a record that lacks a coordinate (e.g. after +cat) as an 'aggregate'; the browser pastes |
| improvise-qddo | deferred | Make DataStore an implementation of a source trait, not the implementation |
| improvise-qf57 | closed | The formula-row click test lost its no-editor-opened assertion in the #61 relocation |
| improvise-qlrh | closed | every_shipped_document_loads does not walk harness/fixtures |
| improvise-qnpi | closed | pr-reviews-test 'an inline comment arriving mid-wait is seen' is flaky under load (failed 1 of 2 identical runs) |
| improvise-qnry | closed | Tab-commit's rightmost-column clamp in the browser resolver is unasserted: dropping .min(col_max) passes the whole workspace |
| improvise-qsmp | closed | App::cmd_context's panel-open propagator is untested: C cannot open a closed panel and nothing fails |
| improvise-qu4a | closed | View::prune_empty is never persisted, so hide-empty is lost on every save |
| improvise-qx1z | closed | hidden_items and collapsed_groups outlive the item or category they name |
| improvise-qz9p | closed | A drill commit into a category removed mid-drill refuses and still writes an orphan cell |
| improvise-r08u | closed | IS and WHERE differ on trailing word boundary in formula.pest |
| improvise-r4lo | closed | Two answers to what a typed string means, and they are adjacent |
| improvise-r4nf | closed | serde_json failures in wasm exports are silent drops, not errors |
| improvise-res9 | closed | Doc site: derive the published set, so an unpublished context/ doc fails the build |
| improvise-rjaa | closed | check-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-rkeq | closed | Decide RenderCache's shape: grid-only wire type vs per-widget sub-caches |
| improvise-rm4s | closed | The evidence check accepts headings naming tests that never run |
| improvise-rml | closed | Consolidate Axis display into a method on Axis |
| improvise-rmvx | closed | Six advertised keys do nothing in the browser, and the guard is scoped to one mode |
| improvise-rnak | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-rq3f | closed | Browser Tab-commit's advance-right and the tile cursor's upper clamp are unasserted: breaking either passes the whole workspace |
| improvise-rr8n | closed | The tile bar's permanent hint is false, and the status bar contradicts the wizard on four of eight steps |
| improvise-rtud | closed | command.md says every refuse_and_stop site has a key-path table case; load, import-json absent.json and AddFormula parse do not |
| improvise-rucf | open | Read arbitrary SQLite databases as a data source |
| improvise-rw6l | closed | Page bar: clicking a page category should open a menu of its items, with a down-arrow affordance |
| improvise-rxz9 | closed | ADR 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-ry89 | closed | cv_regress/cv_classify with k=1 now return plausible numbers instead of NaN |
| improvise-s08t | closed | Unknown names inside aggregate formulas silently select unrelated data |
| improvise-s13 | closed | Delete mode-entry shim commands; use enter-mode with arg |
| improvise-s17o | closed | reduce_full and apply_command's view-slice arm have no production caller |
| improvise-s1lx | open | Records-mode yy over a blank cell yanks Text("") on both ends; p then writes an empty text cell |
| improvise-s2gb | closed | every_silent_binding_is_on_the_list walks only Normal and search: a silent binding in a panel mode passes the whole suite |
| improvise-s2w3 | closed | SUM of a computed measure ignores its formula and returns zero |
| improvise-s8h7 | closed | [bug] i on an aggregate cell drills in the TUI and refuses in the browser, while help advertises it as edit |
| improvise-sboz | closed | ADR: stable identities for categories, items and formulas (transient is acceptable) |
| improvise-seik | closed | Client::viewport is kept for a reason web/app.js falsified in the same wave |
| improvise-sfwy | closed | [test] records_mode_resolve_display asserts non-empty instead of expected value |
| improvise-shbc | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-shyt | closed | [bug] Records-mode row order is not stable across processes |
| improvise-sihr | closed | Every minibuffer mode entered from records mode exits to plain Normal while the layout is still records |
| improvise-sjdb | closed | Wire SetCell into an empty cell beside a collapsed _Measure group is refused: aggregate_refusal judges the record at the fold's column |
| improvise-sk32 | open | Records-mode layout build is quadratic in records: RecordRow::group scans rows linearly per cell |
| improvise-ssoe | closed | A builder calling KeyRow::looked_up directly draws a row help_bindings never records: a lying 'edit' caption on x passes the whole workspace |
| improvise-st8q | closed | check-ci-graph fails open on a bare checkers.sh line inside a heredoc, multi-line string, or folded/plain-multiline run: scalar |
| improvise-su4u | closed | A minibuffer refusal (formula parse error) vanishes on the first correcting keystroke under #233's status expiry |
| improvise-swre | open | grid_of recomputes an unchanged grid every frame; memoise on the tiers that already exist |
| improvise-swzk | closed | A failed :view corrupts the TUI's own view history |
| improvise-sx7h | closed | #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-sxsf | open | cargo test -- --list cannot name the binary, so two crates could share a full test path |
| improvise-szi8 | open | Protocol version in the client/server handshake |
| improvise-t0ma | closed | records_steps is guarded by one incidental test |
| improvise-t14d | closed | The TUI title bar drops '?:help :q quit' when the document name is long: fill_line gives the left segment priority |
| improvise-t219 | open | _Drill is one shared view, so two clients drilling contend |
| improvise-t3ux | closed | cv_regress and cv_classify are O(n-squared) |
| improvise-t6db | closed | grid_in ignored prune_empty for a non-active view, hiding a staleness bug |
| improvise-t8ow | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-t8s | closed | View::axis_of panics on missing category |
| improvise-taxx | closed | [bug] The socket close listener overwrites a precise error with disconnected |
| improvise-tdfd | closed | bd-audit-ids silently skips a tracked file absent by skip-worktree or sparse checkout, not only a deleted one |
| improvise-tej1 | closed | Browser can now compose delete-formula-at-cursor: FormulaCache carries ids since km71 |
| improvise-tg27 | closed | [bug] Narrow window clips grid columns without usable horizontal scroll |
| improvise-th7m | closed | Dead F(1) binding: bound to bare 'enter-mode' then immediately rebound |
| improvise-thpe | closed | help::compact discriminates a chord by parsing a string it formatted |
| improvise-tk51 | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-tm6 | open | Epic: Standalone static-web deployment via wasm + VFS storage |
| improvise-toc | closed | Effect::changes_mode() is a static flag but ViewBack/ViewForward/StartImportWizard change the mode conditionally |
| improvise-tom1 | closed | Drill pending edits are invisible to remote clients, and there are now three answers to 'what text is in this cell' |
| improvise-tpm8 | open | import --extract on a field with no detected date format is silently ignored and exits 0 |
| improvise-trd3 | open | Help pages clamp at both ends; decide whether they should wrap |
| improvise-tt22 | closed | Remove the legacy JSON document format: .improv is the only native format |
| improvise-tvt | closed | Route mutations through Workbook facade instead of app.workbook.model chains |
| improvise-tvte | closed | check-ci-graph counts a checkers.sh invocation that never runs on a PR: step/job if: conditions and shell control flow are ignored |
| improvise-u2le | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-u6gc | closed | prune_empty drops a GroupEnd whose header was pruned, so an ungrouped item inherits the earlier group |
| improvise-ub4o | closed | [test] toggle-group-involution test doesn't apply effects between calls |
| improvise-udt2 | closed | A status message carries no severity, so a headless refusal cannot set a non-zero exit |
| improvise-uej8 | closed | [bug] the category panel cursor does not follow a shrinking list, so d deletes the next category |
| improvise-ugj4 | closed | A 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-uln5 | closed | The help overlay advertises 8 black-hole keys and a stranded command page, and no guard sees it |
| improvise-umi4 | closed | TUI edit seeds its buffer from CellValue Display, so i then Enter on an unchanged 1.23456789 commits 1.2346 |
| improvise-uo2p | closed | ApplyAndClearDrill applies staged edits in hash order: a measure edit plus a category rename on one row writes a ghost record |
| improvise-up8g | closed | Viewport extent is an external input on BOTH front ends, and it changes which record an edit writes |
| improvise-usus | closed | scripts/kb writes onto a truncated kb.pl and reports success: consistency is not completeness |
| improvise-ut7p | closed | improvise-gp fit_from_gen0 is a third copy of the GA loop |
| improvise-uv9e | closed | toggle-group-under-cursor ignoring the cursor passes the whole workspace: every test sits at selected (0,0) |
| improvise-v29m | closed | wk18's guard reads only HelpLine::Literal: a hand-built HelpLine::Keys naming an unbound key passes the whole workspace |
| improvise-v4hg | closed | AddItem/AddFormula errors don't abort the effect batch |
| improvise-v8ab | closed | No 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-vav0 | closed | Shipped-document walk is polluted by a trace2 target set in config |
| improvise-vep8 | closed | Connection hang has no watchdog coverage (ready never resolves) |
| improvise-vhcz | closed | [bug] OpfsFs::list disagrees with the other backends on path shape |
| improvise-vjms | closed | Decide whether a category panel shows the virtual categories |
| improvise-vndi | closed | An inline edit opened before a document swap is accepted into the new document: EditTarget does not capture document_generation |
| improvise-vvl3 | closed | A headless browser harness: run storage_contract and the shell assertions under Playwright |
| improvise-vw47 | closed | Creating a view after deleting another silently resets a surviving view |
| improvise-vwjj | closed | The 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-vx3 | closed | fit-measure command: fit a tree and add it as a formula |
| improvise-vyrx | closed | eval_bool_cached uses wildcard match on BinOp instead of exhaustive arms |
| improvise-w0j4 | closed | check-ci-graph fails open on quoted, anchored or multi-line needs: and on quoted/spaced if:/continue-on-error keys |
| improvise-w1bu | closed | #196's whole-grid enumeration asserts no None, so a coordinate mis-projected as an editable Record passes |
| improvise-w3q | closed | Extract text-entry keymap template for minibuffer modes |
| improvise-w7qd | closed | every_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-wd6n | closed | A fit may still not split on col.missing or a date sub-feature |
| improvise-wdmp | closed | The browser cursor jumps to the origin after the client's own records rename (and any reframing browser write) |
| improvise-we1a | closed | Host::mutating_frame's || last_batch_aborted() arm is unwitnessed: removing it leaves the workspace green |
| improvise-wiew | closed | [ and ] should probably be in the global keymap: decide whether 'global' means every mode or every grid mode |
| improvise-wk18 | closed | [bug] the advertised-key guard cannot see help.rs literal() lines, so 17 keys are unchecked |
| improvise-wm20 | closed | The 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-wpxr | closed | A wire write to an empty record resolves through the HOST's layout: refused RecordGone when the host sits on a view hiding it |
| improvise-wsaw | closed | The browser ignores category_panel_open, so C toggles nothing visible |
| improvise-wv3h | closed | #205's stale-seed guards are unpinned: dropping SetOpenedEditor(None) on enter-mode (TUI or browser) leaves the workspace green |
| improvise-x0xd | open | The browser records-mode creating columns are explicitly dead and could be live |
| improvise-x1ns | closed | encoded_width undercounts a forced category that has a missing coordinate |
| improvise-x2c | closed | vb4 step 2: move workbook/file_path/dirty into ModelState |
| improvise-x7cq | closed | A kb.pl inconsistency can still reach the published site |
| improvise-x7sw | closed | Which-key hints have no protocol home (the open half of improvise-jb3) |
| improvise-xd3q | closed | A 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-xf1 | deferred | Verify OpfsFs against Safari — Chromium and Firefox are covered |
| improvise-xg1z | closed | editing mode with missing buffer renders empty overlay instead of cell content |
| improvise-xgra | closed | pr-reviews is blind to inline review comments |
| improvise-ximf | closed | fmt-workspaces.sh help says exit 2 names NO file, but the new orphan arm names a Cargo.toml |
| improvise-xks6 | closed | One home for the client/server frame envelopes |
| improvise-xoxh | closed | lockstep.rs deliver() folds host-sent frames through fold_outgoing, and one merged-in test still folds its own commands through fold |
| improvise-xps8 | closed | The handshake watchdog overwrites a genuine mid-session disconnect eight seconds later |
| improvise-xpzh | closed | check-ci-graph splits lines on \n only; YAML also breaks at U+0085/2028/2029, so a job if: after one is invisible |
| improvise-xur5 | closed | Wire 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-xwi6 | closed | Concurrent edits: basis check (ADR 001, layer 1 — the correctness floor) |
| improvise-xz2z | closed | The 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-y01k | closed | ws-server silently drops ServerFrame/ClientFrame/closed-doc traffic |
| improvise-y1av | closed | lm5e'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-y4xg | closed | CmdContext carries a fourth Panel-to-field mapping, and it is completely unguarded |
| improvise-y5eb | closed | Browser 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-y5eo | closed | A 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-yae4 | closed | Column width overflows before clamping a 65535-column text value |
| improvise-yb4b | closed | #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-ybum | closed | browser_round_trip's tile_to and column walk are unbounded loops: a stuck tile/column cursor hangs the binary instead of failing |
| improvise-yc9r | closed | TUI 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-ych | closed | Null category values become the literal item "null" on import |
| improvise-yd2t | open | Page cycling ([ and ]) steps onto hidden items and draws an empty grid |
| improvise-yea8 | closed | A stale kb rm ledger entry excuses a later non-rm loss of that clause (restore or branch switch does not prune it) |
| improvise-yf7p | closed | A registry contextualize may overwrite a parsed field on any command but commit-cell-edit, and nothing fails |
| improvise-yk2s | closed | H (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-yqpd | closed | Transactional rollback: a frame of mutations applies whole or not at all (ADR 001 clause 4) |
| improvise-yss5 | closed | extract_date_component silently drops a row whose date does not match the detected format |
| improvise-ywd | closed | Wasm compatibility audit and fixes across core/formula/command/io |
| improvise-z05h | closed | Every documented spelling of :formula fails, and the refusal names a command the user did not type |
| improvise-z05r | closed | CommitExport does not bail on an empty path, and ExportCsv does not abort the batch |
| improvise-z2vr | not exported | Cited in the prose; the committed tracker export does not carry it. |
| improvise-z336 | closed | [bug] A page selection is never cleared, so cycling a category's axis hides a filter and cycling back restores it |
| improvise-z5eg | closed | Gate improvise-gp in the CI wasm job |
| improvise-z754 | closed | Document name, dirty flag and file path have no home a client can read |
| improvise-za97 | closed | kb completeness guard docs: refusal suggests committing the loss, kb skill not updated, residue paragraph wrong |
| improvise-zgb | closed | .improv formula loader mis-splits category suffix via rfind(" [") |
| improvise-zkkw | closed | The browser shell is only ever run on Chromium, but improvise-bck's criterion says Firefox too |
| improvise-zlj2 | closed | pr-watch judges a healthy PR BLOCKED in the needs: gap before the required browser check registers |
| improvise-zre1 | closed | Auto-persist failure in worker not communicated to client |
| improvise-zs2r | closed | A manifest-only change to a path dependency stales harness/opfs-contract/Cargo.lock, and no fast gate sees it |
| improvise-zv8t | closed | fit_measure never tells preprocess which columns are categories, so a numeric- or date-valued category is unspellable |
| improvise-zx8t | closed | draw.rs::mode_style matches AppMode with a wildcard, so the repo map's exhaustiveness promise is false there |