← 1.0.0 scope ISS-36

The shell has a line limit nobody wrote down, and it refuses in Go's words

Status
Open
Found while
answering a question about storing 10 MB files as 2 KB rows
Triage
Defer
Component
server

What was measured

An invoke typed into the operator shell with a value about a megabyte long:

main> invoke chunk.put id=big/1048576 b=aaaa…
  bufio.Scanner: token too long

The limit is real and deliberate — internal/cli/shell.go builds its reader with lines.Buffer(make([]byte, 0, 64<<10), 1<<20), so a line may be up to 1 MiB and no further. Nothing on that path is broken.

What is wrong with it

The refusal names a Go standard-library type. It does not say there is a line limit, what the limit is, that it belongs to the shell rather than to the store, or that the same value would be accepted by a client. An operator reading it learns that something inside the program is called bufio.Scanner.

This project treats a refusal as documentation — the learn site says as much, and ISS-21 was opened because a refusal reached a caller as "failed". This is the same shape one layer out: the message is accurate to the implementation and useless to the reader.

It is also the only limit of its kind that is not written down. A value has no declared maximum at all, which is SAPE-31's problem; this one is a maximum that exists, applies only to one entry point, and is invisible until it fires.

Why Defer

It loses no data, breaks no promise on a public surface, and stops nobody installing or running anything. The value is refused, not truncated — the write does not happen, and the operator can see it did not. A client is unaffected: the limit is the shell's line reader and nothing else.

What closing it would mean

Out of scope