~bigbes/sr-ht-dolt · events

99k2a7kvltel42v3nb4g0rfa8iv03prl · 71 rows

idissue_idevent_typeactorold_valuenew_valuecommentcreated_at
019ff9bb-7aec-73ff-99c6-710ddece43bdsr-ht-dolt-0qf.8status_changedEugene 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"}NULL2026-08-13T09:07:21Z
019ff9cb-fd64-7caa-8c35-bc9f53418f83sr-ht-dolt-0qf.6closedEugene BlikhLanded 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.NULL2026-08-13T09:25:23Z
019ff9cc-16ea-7914-a029-0c9b0bf69d22sr-ht-dolt-0qf.8closedEugene BlikhLanded 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.NULL2026-08-13T09:25:29Z
019ff9cd-f3de-7e48-a5a8-f6f948a3e15bsr-ht-dolt-0qf.7status_changedEugene 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"}NULL2026-08-13T09:27:31Z
019ff9ce-0d9d-763d-97ba-bbd519700187sr-ht-dolt-44n.6status_changedEugene 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"}NULL2026-08-13T09:27:38Z
019ff9ce-0f48-75e3-9b86-b1c4e7714b6dsr-ht-dolt-ux7status_changedEugene 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"}NULL2026-08-13T09:27:38Z
019ff9d4-c836-7e2c-aca6-98b555761b98sr-ht-dolt-ux7closedEugene BlikhLanded 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.NULL2026-08-13T09:34:59Z
019ff9d4-e311-72ee-bf9a-99b01cc740dasr-ht-dolt-tcicreatedEugene BlikhNULL2026-08-13T09:35:06Z
019ff9dd-2548-7854-bad1-bb6ac111eeb4sr-ht-dolt-44n.5closedEugene BlikhLanded 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.NULL2026-08-13T09:44:07Z
019ff9dd-4128-7dfe-83af-6aa3af4d5360sr-ht-dolt-0qf.7closedEugene BlikhLanded 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.NULL2026-08-13T09:44:14Z
019ff9f1-9ba7-7947-8427-e9e40287a0f3sr-ht-dolt-tcistatus_changedEugene 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"}NULL2026-08-13T10:06:28Z
019ff9f1-c8a1-763d-b7ec-e82743e20275sr-ht-dolt-0dfstatus_changedEugene 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"}NULL2026-08-13T10:06:40Z
019ff9f1-ca7a-78a6-bbde-b02cee16b5c0sr-ht-dolt-3s9createdEugene BlikhNULL2026-08-13T10:06:40Z
019ff9f2-313a-7111-960d-ea5d976fdd11sr-ht-dolt-44n.6closedEugene BlikhLanded 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.NULL2026-08-13T10:07:06Z
019ff9f2-3377-763d-9c7a-2be75c8bef77sr-ht-dolt-0qfclosedEugene BlikhAll 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.NULL2026-08-13T10:07:07Z
019ff9f2-3580-7b5e-9ea7-aeeb8db63f89sr-ht-dolt-44nclosedEugene BlikhAll 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.NULL2026-08-13T10:07:08Z
019ff9f3-4e81-7059-8cf5-fcc644256f01sr-ht-dolt-q8cstatus_changedEugene 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"}NULL2026-08-13T10:08:19Z
019ff9f3-6d0b-75e3-b9db-1c668ac0bb4asr-ht-dolt-7tastatus_changedEugene 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"}NULL2026-08-13T10:08:27Z
019ff9f3-6e8e-795a-8ccb-15a7e7e6495csr-ht-dolt-2wostatus_changedEugene 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"}NULL2026-08-13T10:08:28Z
019ff9f4-e471-762a-9a10-c456a6529b98sr-ht-dolt-tciclosedEugene BlikhLanded 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.NULL2026-08-13T10:10:03Z
019ff9f5-00b6-7530-b46f-cf5b470df83esr-ht-dolt-5ywcreatedEugene BlikhNULL2026-08-13T10:10:11Z