mcpsrv: report the projection's clip on get_issue and list_milestones
Max clips every table read at 2000 rows. list_issues has always said so
(table_truncated, table_total); the other two answers computed over the
same read said nothing, so a rollup over a prefix of the tracker read as
arithmetic about the whole of it, and an id in the tail of a big tracker
was answered "no such issue" — a claim neither read can support.
get_issue now carries the two fields on every answer and splits the
miss: a complete read keeps the plain refusal, a clipped one says the id
was not among the rows read, names the cap and the true total, and ships
the payload (issue: null beside table_truncated) so the two misses are
one field apart rather than one adjective apart. list_milestones carries
the same two fields.
beads: report a clipped read from the remaining projections
docs: read_rows answers strings or null
beads: stop flattening a stored NULL string
mcpsrv: answer a real NULL as null
web: stop printing store paths to the owner
web: stop printing browse errors to the reader
The overview rendered the browse layer's own error text into the page, under
"Could not read history: " — dolt internals and the store's path on our disk,
which nothing else on this surface discloses and which a reader can do nothing
with.
The page now carries a fixed sentence and the reason goes to the log with the
database id (slog + scribe.Err). The view field is a bool rather than a message,
so no error string can reach the template by being assigned to it later. The
empty-database state the page already reported ("No commits.") is untouched:
that is a fact about the database, not a failure.
web: tell a database outage from a missing database
loadRepoForBrowse turned any error from GetRepoByOwnerAndName into a 404, so a
metadata store that could not answer told every reader on the instance that
their database does not exist — for as long as Postgres was down, in the voice
reserved for "there is nothing here". loadRepoForAdmin did the same on the
settings page.
Both classify through repoLookupFailed now: db.ErrNotFound keeps the 404, and
it stays the same 404 the visibility rule renders for a PRIVATE database the
caller may not see, so a masked database and a missing one remain
indistinguishable. Anything else is a 500 through the shared error page, with
the cause logged (slog + scribe.Err) and never rendered.
beads: report a clipped read from every projection
mcpsrv: name the cursor a commit-log miss was asked about
browse: say which cells are actually NULL
mcpsrv: a bad commit-log cursor is a miss, not a fault
web: link issue ids to the tracker that owns them
mcpsrv: answer what is ready across every tracker
browse: report an unparseable start hash as a missing ref
remoteapi: gofmt the integration test
doltsrht: serve /mcp on the web listener
mcpsrv: list the memories a tracker holds
web: drop the author from a memory's revision line
web: answer what is ready across every tracker