We were retrying failed kelvin upgrades as many times as we had apps
that needed to be suspended, because suspending an app triggers an
attempt to run the next kelvin upgrade. This suspends all those apps in
one batch move, and then tries the next kelvin upgrade only once at the
end.
Fixes#6407
Partially addresses #6285
Adds a "mode" to channels, which can be set to either %json (current
behavior) or %jam. For %jam channels, aside from the SSE framing, all
communication happens through @uw-encoded jammed nouns. This applies to
both outgoing channel events, as well as incoming channel requests.
We choose @uw-style encoding because raw bytestreams are fragile and
cannot work inside the SSE stream context.
Currently, a separate endpoint (/~/channel-jam/etc) is used to indicate
%jam as the desired mode for a channel. We will probably want to make
this a bit cleaner, not least because it's not currently implemented as
a formal standalone endpoint, but also to give it stronger aesthetic
equivalence with the existing channel endpoint. Putting the mode in the
file extension is a tempting option here, but semantically not quite
right.
Connecting to the same channel across multiple modes is currently
supported, but it's untested, and unclear whether this is desirable or
not.
In the `+ape` parser constructor, we were providing `0` as the parsing result
for the zero character. Hoon syntax dictates this is a `@ud` however,
resulting in a parsing output type of `?(@ud etc)`. Since `+ape` is commonly
used for parsing atoms of various kinds, one might end up with a result
of `?(@ud @)`, which would fail to nest directly under, say, `@uv`, requiring
parsers to add a casting step.
Here, we simply cast the zero result to `@` to make it perfectly generic. This
should alleviate the need for a casting step in parsers that need to fit their
output into a specific aura.
(The output type in the common case (ie, `+hex:ag`, `+viz:ag`) is now `?(@ @)`,
which is still somewhat strange, but should have better ergonomics.)
Since `@` can be used in any place `@ud` is accepted, this is a non-breaking
change.
Marks it as deprecated in lull with a comment, and removes the verbosity
toggle state from dill. Filtering should now happen at the edges where
%crud error messages get printed.
We don't remove it from lull just yet, because that would necessitate a
kelvin bump, even though the rest of this changeset doesn't.