l87u7okr7dacvedt4qjgoa33nf3hl5c8 · 110 rows
| id | issue_id | event_type | actor | old_value | new_value | comment | created_at |
|---|---|---|---|---|---|---|---|
| 019ff9bb-7aec-73ff-99c6-710ddece43bd | sr-ht-dolt-0qf.8 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-0qf.8","title":"mcpsrv: list_memories over the shared memory projection","description":"The MCP beads tools ship without list_memories because the memory projection and its revision walk are landing in beads/ under sr-ht-dolt-b08 at the same time. Add the tool once that API exists: slug, text, and the revision each memory was last written at, with an optional q substring filter — the same reading the Memory view renders, not a second one.","design":"docs/DESIGN.mcp.md §9.2. Share beads/ with the web view; the walk is bounded there and this surface inherits the bound rather than restating it.","status":"open","priority":2,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-13T05:46:27Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T05:46:27Z"} | {"status":"in_progress"} | NULL | 2026-08-13T09:07:21Z |
| 019ff9cb-fd64-7caa-8c35-bc9f53418f83 | sr-ht-dolt-0qf.6 | closed | Eugene Blikh | Landed in 57adcc0: /mcp mounted on the web listener before web.Register and outside its CSRF group, bearer validator from [tokens.sr.ht] (absent = nil validator, daemon boots, working tokens refused), config.example.ini and README documented, authn/ctx.go now names four flows. Measured: anonymous tools/list POST to /mcp = 200 even with a foreign Origin; a cross-origin POST to /create = 403. | NULL | 2026-08-13T09:25:23Z | |
| 019ff9cc-16ea-7914-a029-0c9b0bf69d22 | sr-ht-dolt-0qf.8 | closed | Eugene Blikh | Landed in dba72f5: list_memories over beads.BuildMemories. An unresolved revision is JSON null beside a null age_days, never a zero-valued object (mutation-checked); staleness carried three ways so the threshold is visible. 302 tests. | NULL | 2026-08-13T09:25:29Z | |
| 019ff9cd-f3de-7e48-a5a8-f6f948a3e15b | sr-ht-dolt-0qf.7 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-0qf.7","title":"mcpsrv: ready_work across every visible beads database","description":"ready_work with no database named answers the ready set across every beads database the caller may see, sharing the /ready aggregator and its cache; the page and the tool differ in rendering only.","design":"docs/DESIGN.mcp.md §9.2 and docs/DESIGN.views.md ch.4 — one implementation, two surfaces.","acceptance_criteria":"The tool and the page answer the same set for the same caller.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-12T20:11:52Z","created_by":"Eugene Blikh","updated_at":"2026-08-12T20:11:52Z"} | {"status":"in_progress"} | NULL | 2026-08-13T09:27:31Z |
| 019ff9ce-0d9d-763d-97ba-bbd519700187 | sr-ht-dolt-44n.6 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-44n.6","title":"Cross-database issue links in rendered text","description":"A global-tracker issue naming artifacts-nex.2 is pointing at a row in another database, and the reader has to find it by hand. Recognise \u003cprefix\u003e-\u003csuffix\u003e in descriptions, design, acceptance criteria, notes, comments and event summaries, and link those whose prefix belongs to a database the caller may browse — prefixes come from each tracker config.issue_prefix, indexed on the same head-hash/TTL basis as /ready.","design":"docs/DESIGN.views.md ch.5. Escape first, then wrap the matches, and only then mark the result template.HTML: marking stored text as HTML and running a regexp over it is how a stored payload becomes a rendered one. A prefix in a database the caller cannot see is not linked and its existence is not revealed.","acceptance_criteria":"An id in a visible database links, one in an invisible database renders as plain text, \u003cscript\u003e in a description stays escaped, an unknown prefix is left alone.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-12T20:11:51Z","created_by":"Eugene Blikh","updated_at":"2026-08-12T20:11:51Z"} | {"status":"in_progress"} | NULL | 2026-08-13T09:27:38Z |
| 019ff9ce-0f48-75e3-9b86-b1c4e7714b6d | sr-ht-dolt-ux7 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-ux7","title":"browse.Log reports an unparseable start hash as an internal failure","description":"browse.Log classifies a from-hash that is not a parseable dolt hash with a plain fmt.Errorf and has no sentinel for it, so a caller that hands over a mistyped cursor is told the service broke rather than that the ref does not exist. Found while building the MCP get_commit_log cursor (7a77409): mcpsrv cannot classify it without parsing a hash format that browse/ owns, so the fix belongs in browse/.","design":"Wrap the MaybeParse arm of Log in ErrRefNotFound, the sentinel the package already uses for \"this ref names nothing\". mcpsrv then answers it as the ordinary miss it is, through the refMiss classifier that already exists.","acceptance_criteria":"browse test: a garbage from-hash returns an error satisfying errors.Is(err, ErrRefNotFound); the MCP tool answers it as a miss rather than an internal error.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T05:46:20Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T05:46:20Z"} | {"status":"in_progress"} | NULL | 2026-08-13T09:27:38Z |
| 019ff9d4-c836-7e2c-aca6-98b555761b98 | sr-ht-dolt-ux7 | closed | Eugene Blikh | Landed in 2c8903f: the MaybeParse arm plus two more the agent found by testing rather than inspection — a well-formed but nonexistent from-hash reaching the topological iterator, and the same shape in resolveCommit — all wrapped in ErrRefNotFound via datas.ErrCommitNotFound. Genuine failures stay unwrapped, so 'not there' and 'could not answer' remain distinguishable. | NULL | 2026-08-13T09:34:59Z | |
| 019ff9d4-e311-72ee-bf9a-99b01cc740da | sr-ht-dolt-tci | created | Eugene Blikh | NULL | 2026-08-13T09:35:06Z | ||
| 019ff9dd-2548-7854-bad1-bb6ac111eeb4 | sr-ht-dolt-44n.5 | closed | Eugene Blikh | Landed in 043b0fd: GET /ready over beads.ReadyAcross with the three bounds (head-hash gate, 60s TTL, 64-database ceiling), per-group freshness, filters. Mutation-checked by dropping the cache consultation and watching the read counters go 4->8. | NULL | 2026-08-13T09:44:07Z | |
| 019ff9dd-4128-7dfe-83af-6aa3af4d5360 | sr-ht-dolt-0qf.7 | closed | Eugene Blikh | Landed in 4038ec2: ready_work with both arms over the shared beads.ReadyCache (one per server, built in New). The arms are proved to agree by decoding both answers and comparing the whole group struct. Two mutation checks: a per-call cache reddens the head-hash-gate test with counted reads, and disabling core.Allowed reddens the access-rule test. | NULL | 2026-08-13T09:44:14Z | |
| 019ff9f1-9ba7-7947-8427-e9e40287a0f3 | sr-ht-dolt-tci | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-tci","title":"mcpsrv: the get_commit_log cursor comment is now stale","description":"mcpsrv/browse.go:527 says browse classifies an unparseable from-hash as a fault of its own \"(it has no sentinel for it)\", so a hand-written cursor takes the protocol arm. That stopped being true in 2c8903f: browse.Log now wraps it in ErrRefNotFound, and the call already routes through refMiss, so the behaviour is already right — only the comment is wrong. Fix the comment and add the test that pins the new behaviour (a garbage cursor is a tool-result miss, not an internal error).","design":"A comment next to code is a claim, and this one now reads as a limitation the code no longer has.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-13T06:35:06Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T06:35:06Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:06:28Z |
| 019ff9f1-c8a1-763d-b7ec-e82743e20275 | sr-ht-dolt-0df | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-0df","title":"A stored \"NULL\" string is indistinguishable from a real NULL","description":"browse renders a real NULL cell as the literal string \"NULL\" (placeholderNull), so a row that genuinely stores the text NULL reads identically. beads.cell() then flattens both to the empty string. Harmless on a rendered page, misleading through the MCP read_rows tool, where an agent gets strings and no schema hint (7a77409 states it in the tool description rather than papering over it).","design":"Options, cheapest first: keep the placeholder for the HTML pages and give RowPage a parallel per-cell null mask that read_rows exposes; or render JSON null through the tool path. Whatever is chosen, the beads projection must keep treating a real NULL as empty — that behaviour is depended on.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T05:46:26Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T05:46:26Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:06:40Z |
| 019ff9f1-ca7a-78a6-bbde-b02cee16b5c0 | sr-ht-dolt-3s9 | created | Eugene Blikh | NULL | 2026-08-13T10:06:40Z | ||
| 019ff9f2-313a-7111-960d-ea5d976fdd11 | sr-ht-dolt-44n.6 | closed | Eugene Blikh | Landed in dc91829: PrefixesAcross + PrefixIndex.Scan, escape-then-wrap rendering, the index bounded by the same projectionCache the ready page uses (ReadyCache was refactored onto it, so the numbers exist once). A database the caller may not browse is never opened and its ids render as plain text indistinguishable from an unknown prefix. An ambiguous prefix links to neither — a guess rendered as a fact is worse than plain text. | NULL | 2026-08-13T10:07:06Z | |
| 019ff9f2-3377-763d-9c7a-2be75c8bef77 | sr-ht-dolt-0qf | closed | Eugene Blikh | All eight tasks landed: the beads/ extraction, the bearer plane, the mcpsrv skeleton, the generic tools, the beads tools, the daemon wiring, list_memories and ready_work. docs/DESIGN.mcp.md is implemented end to end. | NULL | 2026-08-13T10:07:07Z | |
| 019ff9f2-3580-7b5e-9ea7-aeeb8db63f89 | sr-ht-dolt-44n | closed | Eugene Blikh | All six chapters of docs/DESIGN.views.md landed: the stream layout, the memory view with its revision walk, the freshness line, the /ready page, cross-database links and the copy-ready bd commands. | NULL | 2026-08-13T10:07:08Z | |
| 019ff9f3-4e81-7059-8cf5-fcc644256f01 | sr-ht-dolt-q8c | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-q8c","title":"loadRepoForBrowse reports a database outage as a missing database","description":"web/router.go loadRepoForBrowse treats ANY error from GetRepoByOwnerAndName as not-found, so a Postgres outage renders the 404 page — a reader is told their database does not exist when the truth is that the service cannot answer right now. Found while writing mcpsrv/errors.go (dcdc979), which deliberately does not copy the conflation, so the two surfaces now differ on this one point.","design":"Distinguish db.ErrNotFound from every other error: the sentinel keeps the existing 404 (and the PRIVATE masking that depends on it), anything else is a 500 through a.fail. The masking rule is untouched — a private database must still be indistinguishable from a missing one.","acceptance_criteria":"A fake store returning a non-sentinel error renders 500, not 404; the PRIVATE-masking tests stay green.","status":"open","priority":2,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T05:24:29Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T05:24:29Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:08:19Z |
| 019ff9f3-6d0b-75e3-b9db-1c668ac0bb4a | sr-ht-dolt-7ta | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-7ta","title":"The overview page echoes a raw browse error to the reader","description":"web/handlers_repo.go renders the browse layer's error text into the overview page. Those strings carry dolt internals and on-disk paths, which nothing else on this surface discloses. Noticed while writing the MCP surface (dcdc979), which is careful never to let a store error reach a caller verbatim.","acceptance_criteria":"The page shows a fixed sentence; the detail goes to the log with the repo id.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T05:24:30Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T05:24:30Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:08:27Z |
| 019ff9f3-6e8e-795a-8ccb-15a7e7e6495c | sr-ht-dolt-2wo | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-2wo","title":"The detail and milestone projections drop the truncation signal","description":"beads.Build's detail branch never sets Data.Truncated and BuildMilestones discards the table totals with _, so on a tracker larger than beads.Max (2000 rows) an id in the tail reads as simply absent and a milestone rollup is computed over the first 2000 rows — with nothing saying so. The board path does report its clip; these two do not. Found while building the MCP get_issue and list_milestones tools (e4bc922), which cannot detect it without a second row read and state the limitation in a package comment instead.","design":"Return the totals from those two entry points the way the board path already does, and let both surfaces render them. The alternative — each surface re-reading to check — is the second reading of the schema the beads package exists to prevent.","acceptance_criteria":"A fixture tracker past the cap: get_issue on a tail id says the read was clipped rather than claiming the issue does not exist; a milestone rollup over a clipped read is marked.","status":"open","priority":2,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T06:05:05Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T06:05:05Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:08:28Z |
| 019ff9f4-e471-762a-9a10-c456a6529b98 | sr-ht-dolt-tci | closed | Eugene Blikh | Landed in cdb9195. The agent also found the mcpsrv fake itself was wrong — its Log returned an unwrapped error for a bad cursor, i.e. it reproduced the very bug the stale comment described, so the comment fix alone would not have made the new test pass. | NULL | 2026-08-13T10:10:03Z | |
| 019ff9f5-00b6-7530-b46f-cf5b470df83e | sr-ht-dolt-5yw | created | Eugene Blikh | NULL | 2026-08-13T10:10:11Z | ||
| 019ff9f6-698c-70bf-971e-d58f3126668b | sr-ht-dolt-0df | closed | Eugene Blikh | browse half landed in 5b00a51: RowPage.Nulls parallel to Rows, filled from the td.IsNull the renderer already called (no extra tuple read). Rendered strings unchanged, so every existing consumer keeps reading what it read. Mutation-checked by making the mask believe the rendered string. Adoption by mcpsrv and beads is sr-ht-dolt-3s9. | NULL | 2026-08-13T10:11:43Z | |
| 019ff9f7-5059-74b3-8cb9-405f20d3db72 | sr-ht-dolt-5yw | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-5yw","title":"A bad commit-log cursor is reported without naming the cursor","description":"In mcpsrv get_commit_log, when from is set the ref is never resolved (it is only resolved when from is empty), so the miss message reads: ~alice/notes has no branch or commit \"\" — it names an empty string instead of the cursor the caller actually sent. The classification is right (an ordinary miss since cdb9195); the sentence is unhelpful. Found while pinning that classification.","design":"Name what was actually asked for: when from is set, the miss is about the cursor, not about a branch. Two different sentences, or one that carries whichever value was supplied.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T07:10:11Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T07:10:11Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:12:42Z |
| 019ff9fa-6459-72e2-bf63-86255842eb85 | sr-ht-dolt-5yw | closed | Eugene Blikh | Landed in c1d1a17: a cursor miss gets its own sentence naming the cursor and pointing at the 'next' hash a previous page returned; a ref miss keeps naming the ref and pointing at list_branches. The ref is still not resolved just to have something to print. | NULL | 2026-08-13T10:16:04Z | |
| 019ff9fb-d5a7-74a7-9cc0-9241bfb0b101 | sr-ht-dolt-2wo | closed | Eugene Blikh | Landed in ebbd30f: Truncated/ShownOf are now set in every mode (no new fields, no changed meanings), plus IssuesClipped/Missing/MissingBeyondCap so a surface can tell 'no such issue' from 'not in the rows I read'. Fixture clips through a seam that honours limit rather than lowering Max. | NULL | 2026-08-13T10:17:38Z | |
| 019ff9fb-f0e1-73f7-93c4-1f73466bf9a6 | sr-ht-dolt-djw | created | Eugene Blikh | NULL | 2026-08-13T10:17:45Z | ||
| 019ff9fb-f2c6-72af-8586-f27c78e8f4f9 | sr-ht-dolt-xsc | created | Eugene Blikh | NULL | 2026-08-13T10:17:46Z | ||
| 019ff9fb-f4af-7ef0-8755-a4a352370511 | sr-ht-dolt-bcp | created | Eugene Blikh | NULL | 2026-08-13T10:17:46Z | ||
| 019ff9fc-ea3b-73a9-87ca-87f1529b472e | sr-ht-dolt-3s9 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-3s9","title":"Adopt browse's NULL mask in the readers","description":"Once browse can say which cells are actually NULL (sr-ht-dolt-0df), the readers should use it: mcpsrv read_rows should render a real NULL as JSON null instead of the string \"NULL\" and drop the warning from its tool description, and beads.cell() should keep treating a real NULL as empty while no longer flattening a stored \"NULL\" string to empty. The browse half is deliberately separate so the placeholder rendering the HTML pages depend on does not change under them.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-13T07:06:41Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T07:06:41Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:18:49Z |
| 019ff9fd-95b3-75d0-a98e-5b8fe43633b7 | sr-ht-dolt-q8c | closed | Eugene Blikh | Landed in bee2050: repoLookupFailed splits db.ErrNotFound (404, masking untouched) from every other error (500, detail logged and never rendered). The same conflation in loadRepoForAdmin was fixed with it. Mutation check: routing the PRIVATE arm through the 500 path reddens three masking tests. | NULL | 2026-08-13T10:19:33Z | |
| 019ff9fd-b0fd-7121-8484-b83c6d503516 | sr-ht-dolt-7ta | closed | Eugene Blikh | Landed in 11c622f: the overview carries a bool, not an error string, so no browse text can reach the dot; the page says 'Could not read history.' and the detail goes to the log with the database id. The empty-database state (No commits./No branches.) was kept — it was never the error path. | NULL | 2026-08-13T10:19:40Z | |
| 019ff9fd-b333-755f-9cda-5d025cfc2eb5 | sr-ht-dolt-9c6 | created | Eugene Blikh | NULL | 2026-08-13T10:19:41Z | ||
| 019ff9ff-0eec-786c-800a-2b818a24fa24 | sr-ht-dolt-9c6 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-9c6","title":"The settings POST writes store paths into the response","description":"web/handlers_settings.go:201,206 responds with \"database record removed but store deletion failed: \"+err.Error() and \"store deleted but cache eviction failed: \"+err.Error(). That is the same leak 11c622f removed from the overview, one path along: the browse/storage error text carries on-disk paths, and the owner is shown them. Found while fixing the overview.","design":"Same shape as 11c622f: a fixed sentence to the reader, the detail to slog with the database id. The distinction that matters to the owner — the record is gone but the store may not be — should survive in the sentence without the path.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T07:19:41Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T07:19:41Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:21:10Z |
| 019ffa04-0b67-78c6-b149-cba5e73c9ccf | sr-ht-dolt-9c6 | closed | Eugene Blikh | Landed in 35875ff: two fixed sentences that keep the distinction the owner needs (record gone but store may remain / store gone but a cached handle may survive), detail to slog with the database id. The agent also checked handlers_keys.go and left its 'Invalid public key: <err>' alone — those errors describe the caller's own submitted string, not the storage layer, which is a different class. | NULL | 2026-08-13T10:26:36Z | |
| 019ffa0d-3420-76f1-b48d-4b016f001b29 | sr-ht-dolt-3s9 | closed | Eugene Blikh | Landed in 6307350 (read_rows cells are [][]*string — a real NULL is JSON null on the wire, asserted on the marshalled payload; the description's warning removed) and c82f106 (beads rowCells binds a row to its mask, so cell() reads the mask and ~100 call sites did not move). A hand-built page with no mask keeps the older reading, documented and pinned rather than left implicit. | NULL | 2026-08-13T10:36:37Z | |
| 019ffa0e-cae2-71d8-8994-ebb3dd1375d8 | sr-ht-dolt-djw | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-djw","title":"Render the clipped-read signal on the two surfaces","description":"beads now reports a clipped read from the detail and milestone projections (ebbd30f) and can tell \"not in what was read\" from \"does not exist\" (Data.MissingBeyondCap). Nothing renders it yet: mcpsrv get_issue still answers a tail id with the flat noSuchIssue sentence, and the web detail pane draws no banner (the board banner is inside the board branch). Both should say the read was partial rather than claim absence.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-13T07:17:46Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T07:17:46Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:38:21Z |
| 019ffa0e-e7f2-75a1-a4ff-59642aae74d3 | sr-ht-dolt-bcp | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-bcp","title":"The ready, memory and prefix projections discard their row totals","description":"beads/ready.go, beads/memory.go and beads/prefixes.go still drop the table totals with _, so a clipped read is invisible in the cross-database ready set, in the memory list and in the prefix index. Same shape as ebbd30f fixed for the detail and milestone paths; each has its own view struct, so each needs its own field rather than a shared one (ReadyView.Capped is a different cap — it counts databases).","status":"open","priority":4,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T07:17:47Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T07:17:47Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:38:28Z |
| 019ffa19-21da-79df-b241-c28c9cf3eb39 | sr-ht-dolt-bcp | closed | Eugene Blikh | Landed in 8dfe078: per-database ReadyTruncation (recorded BEFORE the empty-group skip, so a tracker whose whole ready set sits past the cap is still named, and surviving a cache hit — both pinned), MemoryView.ConfigTruncated/ConfigShownOf named after the table so they cannot be confused with WalkTruncated (a bound in commits), PrefixIndex.Truncated. Minor known duplication: readyRead mirrors build.go's readClip because the file boundary I set forbade widening the latter's doc comment. | NULL | 2026-08-13T10:49:38Z | |
| 019ffa1f-c4de-7ee0-9f10-58391939e08b | sr-ht-dolt-djw | closed | Eugene Blikh | Landed in a419499 (mcpsrv: get_issue answers issue:null with table_truncated/table_total for an id past the cap, and the two misses are told apart by the payload rather than by prose — the ordinary miss carries no structured content at all) and 82d997d (the web detail pane says the read was clipped, and the miss says the id may sit in the tail this page never saw). Spec amended in the follow-up commit. | NULL | 2026-08-13T10:56:53Z | |
| 019ffa1f-e0d7-7182-9b3d-d06ce2cf958d | sr-ht-dolt-4y6 | created | Eugene Blikh | NULL | 2026-08-13T10:57:01Z | ||
| 019ffa20-b7da-760e-91e2-033cd8d3cdbb | sr-ht-dolt-xsc | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-xsc","title":"A clipped labels table degrades the board silently","description":"The board raises Truncated for a clipped issues or dependencies table, but a clipped labels table degrades every card and the label filter with nothing said. Noticed while making the other projections honest (ebbd30f), which deliberately left the board rule byte-for-byte unchanged and pinned it with a test.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T07:17:46Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T07:17:46Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:57:56Z |
| 019ffa20-d14d-78e5-9144-4eeed7efcab6 | sr-ht-dolt-4y6 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-4y6","title":"The milestones page presents a partial rollup as whole-tracker arithmetic","description":"web/templates/milestones.html renders MilestoneView with no clip notice, so on a tracker past the 2000-row cap the per-milestone totals read as facts about the whole tracker. beads reports the clip (ebbd30f) and the other two surfaces render it (82d997d, a419499); this is the third and last one.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T07:57:01Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T07:57:01Z"} | {"status":"in_progress"} | NULL | 2026-08-13T10:58:02Z |
| 019ffa2d-bfe3-7a6b-819f-f3519910554d | sr-ht-dolt-xsc | closed | Eugene Blikh | Landed in 96b5e53: Data.Clipped []ClippedTable (table, shown, total, and the effect written at the read), board mode only. Truncated/ShownOf keep their exact meaning, so mcpsrv's table_truncated is untouched. The board now names each clipped table it draws from and what that costs; comments never appears because the board does not read it. One behaviour change beyond addition: the count line is gated on IssuesClipped, so a deps-only clip no longer prints 'the first 4 of 4 issues'. | NULL | 2026-08-13T11:12:10Z | |
| 019ffa2d-da0c-7f2a-8d5d-21b2fd96f285 | sr-ht-dolt-4y6 | closed | Eugene Blikh | Landed in bbaaa1f: the detail pane's sentence and markup verbatim, placed outside the milestones/no-milestones branch — 'No milestones.' over a clipped read is the reading most easily mistaken for a fact. | NULL | 2026-08-13T11:12:16Z | |
| 019ffa2d-dd43-71a5-ba2d-b6a672b4b1c3 | sr-ht-dolt-0qf.9 | created | Eugene Blikh | NULL | 2026-08-13T11:12:17Z | ||
| 019ffa2f-e2ac-7059-9a31-057a5b256c42 | sr-ht-dolt-16t | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-16t","title":"Show the original object on the issue detail page","description":"The issue detail pane (`/view/beads?issue=\u003cid\u003e`) renders a curated subset of an\nissue: the fields the card model carries, the dependency trees, and the\nComments / History tabs. Everything the view does not model — columns bd added\nthat BeadIssue has no field for, custom metadata, the exact stored strings\nbehind the humanized events — is invisible without leaving for the generic\ntable browser and hunting for the row by hand.\n\nShow the original object on the detail page: the raw stored row(s) behind the\nissue, as read from the tables, so the rendering can be checked against what is\nactually in the database.\n","design":"- Carry the raw data on BeadsData in detail/epic mode: the `issues` row as an\n ordered column → value list (column order as read, NULLs kept distinct from\n empty strings — `cell` currently flattens the browse NULL placeholder to \"\",\n so read the row directly rather than through it), plus the matching rows from\n the satellite tables the pane already reads (labels, dependencies, comments,\n events) when they add anything.\n- Render it as a third tab in the existing activity switch next to\n Comments / History — the switch is a pure-CSS radio group, so a third radio +\n label + panel needs no JS — or as a `\u003cdetails\u003e` block under the field table if\n the tab strip gets crowded. Keep it collapsed by default: it is a debugging\n surface, not the main reading.\n- Present it as a key/value table plus the row as JSON, both escaped; values can\n be long free text (descriptions, design notes) and must wrap rather than blow\n the layout out horizontally.\n- Reuse the read that already happens in Build — the detail pane loads these\n tables anyway, so this must not cost another Rows call.\n- Tests in web/beads_test.go: raw block present in detail mode and absent in\n board mode, a column with no BeadIssue field still shows up, NULL renders\n distinctly from \"\".\n","acceptance_criteria":"On /view/beads?issue=\u003cid\u003e the raw stored row behind the issue is visible without leaving for the table browser: every column of the issues row (including ones the view models no field for) with NULL distinguishable from an empty string, collapsed by default, long values wrapping instead of widening the page.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-08-10T11:13:36Z","created_by":"Eugene Blikh","updated_at":"2026-08-10T11:13:36Z"} | {"status":"in_progress"} | NULL | 2026-08-13T11:14:30Z |
| 019ffa2f-fffd-7547-b4e8-b0b8504699ea | sr-ht-dolt-0qf.9 | status_changed | Eugene Blikh | {"id":"sr-ht-dolt-0qf.9","title":"mcpsrv: carry the per-table clip list on list_issues","description":"The web board now names every clipped table it draws from and what each clip costs (beads.Data.Clipped, commit 96b5e53). mcpsrv list_issues still reports only data.Truncated as table_truncated, so an MCP client sees nothing about a clipped labels or custom_statuses read — the same blind spot the board just lost. Data.Clipped is already there to be carried.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-13T08:12:18Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T08:12:18Z"} | {"status":"in_progress"} | NULL | 2026-08-13T11:14:37Z |
| 019ffa37-9e31-7733-a251-3da54b10a43e | sr-ht-dolt-0qf.9 | closed | Eugene Blikh | Landed in 07c2a63: list_issues carries clipped[] with table/shown/total/effect, empty list rather than null on a complete read. The agent added a dedicated fixture instead of growing the shared bulk one (whose exact counts other tests assert), which also isolates the case that matters: a labels-only clip fires 'clipped' while table_truncated stays false. | NULL | 2026-08-13T11:22:56Z | |
| 019ffa3b-fed1-7088-a452-47bb027e419a | sr-ht-dolt-16t | closed | Eugene Blikh | Landed in 60fdb6d: beads.RawTable/RawRow/RawCell carried in detail and epic mode, rendered as a collapsed <details> section. The three states (absent / stored "NULL" / empty) are three distinct renderings, and rowCells.isNull became the single site deciding whether a cell holds a value, so the raw view cannot drift from the fields. Linkification deliberately NOT applied — a rewritten value is not the stored value — and a test proves that is a choice, not a broken linkifier. | NULL | 2026-08-13T11:27:43Z | |
| 01a0048f-78d9-7a29-a133-7c3f8528ad74 | sr-ht-dolt-5s7 | created | Eugene Blikh | NULL | 2026-08-15T11:35:06Z |