~bigbes/sr-ht-dolt · issues

flnqntm7rm2meag4leem23oo4cullluu · 58 rows

idcontent_hashtitledescriptiondesignacceptance_criterianotesstatuspriorityissue_typeassigneeestimated_minutescreated_atcreated_byownerupdated_atclosed_atclosed_by_sessionexternal_refspec_idcompaction_levelcompacted_atcompacted_at_commitoriginal_sizesenderephemeralwisp_typepinnedis_templatemol_typework_typesource_systemmetadatasource_repoclose_reasonevent_kindactortargetpayloadawait_typeawait_idtimeout_nswaitershook_beadrole_beadagent_statelast_activityrole_typerigdue_atdefer_untilno_historystarted_atis_blocked
sr-ht-dolt-tmz.205996767b9032bc267f64d6457d0519f3e86a6507f61c77d2a3c725bc50fe864The read gate: bearer auth and per-database visibility/query must answer exactly what the caller may see. Reuse authn's bearer resolution (the /mcp plane: meta PAT with dolt.sr.ht/repos:RO, tokens.sr.ht working token with dolt:read) and apply core.Allowed per database, with anonymous a normal caller that sees the PUBLIC set. A PRIVATE database the caller may not see is null, never forbidden.closed2taskNULLNULL2026-08-15T09:43:01ZEugene Blikhbigbes@gmail.com2026-08-15T10:19:36Z2026-08-15T10:19:36ZNULL0NULLNULLNULL000�{}Closed0NULLNULLNULL0NULL0
sr-ht-dolt-tmz.3a1eddafafaa23ea9929a74e8bde6236a8fa6f58335ac3345d1dca730b596c271Browse fields: branches, commit log, table listDatabase.branches, Database.log(from,limit) and Database.tables(ref) over the same browse.Open session the web pages use. Rows and diffs are deliberately out of scope for v1.closed2taskNULLNULL2026-08-15T09:43:02ZEugene Blikhbigbes@gmail.com2026-08-15T10:19:36Z2026-08-15T10:19:36ZNULL0NULLNULLNULL000�{}Closed0NULLNULLNULL0NULL0
sr-ht-dolt-tmz.427890cf801b4c4286fd767224977561eeeb70f932e5f450f1d63fd40345d3d50Wire /query into the daemon, api-meta.json scopes and docsMount the schema on core-go's authenticated router, serve /query/api-meta.json with a NON-NULL scopes list (a null there 500s meta.sr.ht's personal-token page for the whole instance), add api-origin to config.example.ini and README, and document federating into api.sr.ht.closed2taskNULLNULL2026-08-15T09:43:03ZEugene Blikhbigbes@gmail.com2026-08-15T10:19:36Z2026-08-15T10:19:36ZNULL0NULLNULLNULL000�{}Closed0NULLNULLNULL0NULL0
sr-ht-dolt-u2bf5120a5915edd32830478ece9e2fbc0dbf8f91c85460d25f3737aaec0ae44ac5Add bind-address config key and replace static-dir with go:embedWhat is wrong, in two parts. (a) `sourcehut-dolt/config.example.ini` has `remotesapi-listen=127.0.0.1:5306`, `credsapi-listen=127.0.0.1:5308`, and `static-dir=/usr/share/sourcehut/dolt.sr.ht/static`, but no `bind-address` key — the web listener's bind address is settable only through the `-b` command-line flag (`cmd/doltsrht/main.go` calls `server.New(serviceName, defaultWebAddr, conf, os.Args)`), not through the shared `bind-address` config key every sibling service uses. (b) dolt is the one service in the family that serves its stylesheet from an on-disk `static-dir` rather than compiling it into the binary with `go:embed` — every sibling's `config.example.ini` carries the sentence "There is no static-dir key: CSS and JS are compiled into the binary with go:embed", and dolt is the reason that sentence has to be written at all. Why it matters: (a) the containerized deployment relies on the config key to set `0.0.0.0:<port>` in exactly one place — every entrypoint's comment says repeating the port on the command line "is how a unit and its config drift apart", and dolt is one of only two services (with specs) where this can happen. (b) an on-disk static tree means a version-skewed package can serve a stylesheet from a different build than the binary running — exactly what `check-embedded-css` prevents everywhere else, and dolt is separately missing that gate (see D12) and does not clean up old hashed files either (see D22), compounding the risk. Sibling that already does it correctly: every other sibling service, on both halves — they read `bind-address` from config and `go:embed` their static assets. Fix: add a `bind-address` key to dolt's `[dolt.sr.ht]` config section and read it in `validateConfig`; convert dolt's `static/` tree to `go:embed` and drop the `static-dir` config key entirely. Status: verified — confirmed directly by reading dolt's `config.example.ini` and `cmd/doltsrht/main.go` (this was one of two contradictory claims across the source reports and was settled by reading the code). Audit: D20 (cross-repo audit, 2026-08-17) open2taskNULLNULL2026-08-17T20:39:26ZEugene Blikhbigbes@gmail.com2026-08-17T20:39:26ZNULLNULL0NULLNULLNULL000�{}0NULLNULLNULL0NULL0
sr-ht-dolt-ux74b1926735da5ca79103be3182a885d250e69d467de48e359793621e66cb29728browse.Log reports an unparseable start hash as an internal failurebrowse.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/.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.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.closed3bugNULLNULL2026-08-13T05:46:20ZEugene Blikhbigbes@gmail.com2026-08-13T06:35:00Z2026-08-13T06:35:00ZNULL0NULLNULLNULL000�{}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.0NULLNULLNULL02026-08-13T06:27:39Z0
sr-ht-dolt-w9p9dda36b62370ee29df3aecaf80b94cc108302d1c9c2493aeedd3a8a64016ac54Mount middleware.PrivateCache on the /query GraphQL routeWhat is wrong: the chi Group mounting `/query` in `sourcehut-dolt/cmd/doltsrht/main.go` carries RealIP/log/config/database middleware but never `middleware.PrivateCache`. dolt's GraphQL schema answers per-credential and also answers anonymous callers, so the same URL can yield different response bodies to different viewers with nothing marking that in the response headers. Why it matters: ranked as a lower-severity correctness risk than the REST equivalent (D03) because POST bodies are not normally cached by intermediaries — but it becomes live risk the moment GET-query support or a GraphQL-aware cache sits in front of the service. Sibling that already does it correctly: `sourcehut-curator/graph/graph.go::Mount` and `sourcehut-artifacts/graph/graph.go::privateCache`, both of which set `no-store` + `Vary: Authorization, Cookie` on the `/query` route. Fix: add `r.Use(middleware.PrivateCache)` to the chi Group mounting `/query` in `cmd/doltsrht/main.go`. Status: verified by the underlying report. Audit: D14 (cross-repo audit, 2026-08-17) open2bugNULLNULL2026-08-17T20:39:10ZEugene Blikhbigbes@gmail.com2026-08-17T20:39:10ZNULLNULL0NULLNULLNULL000�{}0NULLNULLNULL0NULL0
sr-ht-dolt-x5f263bd20b7887ab90a687973c7d3683fae1294e1f0e58657601709ca497c8f10eResolve favicon via assets.Resolve instead of hardcoded fs.Stat + literal nameWhat is wrong: `sourcehut-dolt/web/router.go` links its favicon by a hardcoded literal name (`const faviconFile = "logo.svg"`), guarded by `fs.Stat`, plus `NormalizePrefix(...) + faviconFile`, instead of resolving it through `assets.Resolve` like the rest of the family. Why it matters: dolt's `fs.Stat` guard does avoid a 404-on-every-page failure if the file goes missing, but it keeps two spellings of the same decision live in the family, and — unlike `assets.Resolve` — it will not pick up a hashed/renamed icon. specs' own layout comment argues the general case explicitly: "a path a template asserts is one that 404s on every page load if the file is ever renamed or hashed." Behaviorally equivalent to the correct pattern today, but structurally divergent and fragile to a future rename. Sibling that already does it correctly: tokens, coverage, specs, and artifacts all resolve their favicon through `assets.Resolve`. Fix: replace the `fs.Stat` + literal-name logic with `assets.Resolve(static, "logo.*svg", assets.DefaultPrefix)`. Status: verified. Audit: D36 (cross-repo audit, 2026-08-17) open3taskNULLNULL2026-08-17T20:39:52ZEugene Blikhbigbes@gmail.com2026-08-17T20:39:52ZNULLNULL0NULLNULLNULL000�{}0NULLNULLNULL0NULL0
sr-ht-dolt-xsc434e870e68beb866ff78324b80edf5e757977794d577a8b7851b7eeca021da92A clipped labels table degrades the board silentlyThe 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.closed3bugNULLNULL2026-08-13T07:17:46ZEugene Blikhbigbes@gmail.com2026-08-13T08:12:10Z2026-08-13T08:12:10ZNULL0NULLNULLNULL000�{}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'.0NULLNULLNULL02026-08-13T07:57:56Z0