kind says which payload an envelope carries, so a
consumer can branch before parsing data. The contract artefact describes
fifty-three of them, and each entry is the whole envelope with that kind’s
payload in place rather than the payload alone — a generator wants the shape it
will actually parse.
The set is closed. A kind is named in one place in the source and nowhere else, it
cannot be constructed outside that place, and the contract is generated from the
same list — so a kind that reaches the wire without a schema, or a schema for a
kind nobody emits, fails the build rather than reaching a client.
| Kind |
data carries |
In one line |
admission |
A session |
The secret a session is carried by, and the moment it stops being one |
adoption |
An adoption report |
What adopting a setup already here came to, or would come to |
alerts |
An alert report |
What the operator will be told about, and what changing that came to |
archives |
The archives kept here |
Every backup this machine has kept, newest first, by the name a restore asks for |
backup |
A capture report |
Where the archive went, what it covers, and which older ones retention pruned |
bandwidth |
A sharing of the line |
How the line is shared, what the stack takes, and what that costs |
beside |
A standing-beside report |
What standing lemonfiber beside a setup already here came to |
bundle |
A bundle description |
What a support bundle holds, how large it is, and where it is if it was written |
clients |
The client guidance |
Which app to watch on, for each kind of device somebody in the house has |
config |
A configuration answer |
The settings asked about, and what a change did to them |
credentials |
A credential inventory |
Every credential the stack holds and where each stands — never a value |
dashboard |
A dashboard snapshot |
One moment of what the stack is doing, as the dashboard assembles it |
doctor |
A diagnosis |
What the diagnostic checks found |
error |
A problem |
A command could not do what was asked |
forms |
The form catalogue |
Every form the stack declares |
front-door |
A front-door report |
The one address to send somebody who lives here, and why the others are not it |
glossary |
The whole vocabulary |
Every word this product explains, for somebody who asked what there is to ask about |
hosting |
A hosting report |
What this machine keeps running on lemonfiber’s behalf |
household |
A household view |
What the household asked for, member by member |
import |
An import report |
What copying an operator’s own records across came to, or would come to |
invitation |
One invitation |
An account somebody can claim: the name, the address, and how long it stands |
job |
A job’s name |
The name given to work that outlives the request that started it |
lifecycle |
A lifecycle report |
What a lifecycle command did, or would have done |
log |
A log line |
One line of one service’s output |
migration |
A migration report |
What is already on this machine, before anything is proposed |
music |
A music-format report |
The music format chosen, and what became of applying it |
outbound |
What leaves this machine |
Every request lemonfiber makes on its own account, and the ones the services make |
preview |
A preview |
What starting or stopping would do, before it is done |
pull |
A line of text |
One line the container engine wrote while pulling images |
quality |
A quality report |
The quality choice, what it means, and what a command did with it |
removal |
A household removal |
What removing somebody costs, and what it did |
repair |
A repair report |
What a repairing run offered, and what it did |
replacement |
A replacement report |
What standing in place of a setup already here came to |
reset |
A reset report |
What a full reset did, or would do |
restore |
A restoration |
What restoring an archive would overwrite, and whether it did |
seed |
A seeding report |
What seeding wired, and what it left for a re-run |
setup |
A setup report |
What setup settled on |
space |
A reckoning of the disk |
Where the disk stands, what is on it, and what could be got back |
start |
A line of text |
One line the container engine wrote while starting services |
status |
A stack reading |
What each service is doing |
step |
A narrated line |
One step of a walkthrough, and what was specifically true of it |
stop-seeding |
A letting-go |
One completed download, what letting it go costs, and what became of it |
stored |
What is kept here |
Everything lemonfiber keeps on this machine, and what became of it |
stuck |
The stuck items |
The items whose downloads are stuck |
trace |
One item’s progress |
Where one item is in the pipeline |
undo |
A reversal |
What putting back the last repair came to |
uninstall |
A removal |
What taking lemonfiber off this machine would take, or took |
upgrade |
An upgrade report |
What upgrading existing content did, or would do |
version |
The versions in play |
The binary, and the stack it can operate |
walkthrough |
A walkthrough report |
What a first-content walk did, narrated line by line |
watch |
A supervision report |
What a watch saw, once the data root it was guarding was lost |
wizard |
A wizard report |
Where a setup run stands, and what it is still asking for |
word |
A glossary term |
One word this product uses, and what it means |
pull and start are the two whose data is not an object. Both are a single
string: one line the container engine wrote, emitted as it was written, because a
pull that takes ten minutes has to say something before it ends.
Six of them are set out field by field below — the ones a client meets first, and
the ones whose payloads are small enough to read as a table. The other forty-seven
are in the artefact in full, and both SDKs generate a type per kind from it, so
nothing here is the only place their shapes are written down. Everything below is
generated from the types that serialise the reply, so a field here is a field on
the wire.
Something that went wrong, in the form an operator can act on. This is the kind a
failed run emits on the error stream.
| Field |
Type |
Required |
What it is |
code |
string |
yes |
The stable identifier for this kind of problem |
severity |
enum |
yes |
How much it matters |
state |
enum |
yes |
Where it stands with respect to being fixed |
summary |
string |
yes |
What happened, in one plain sentence |
meaning |
string |
yes |
What it means for the operator |
remedies |
array |
yes |
What to do, most likely first |
detail |
string or null |
no |
The underlying technical detail, available but never leading |
cause |
problem or null |
no |
The problem that produced this one, where several share a root |
cause is a problem of the same shape, so a symptom can name the root it came
from without a second type existing to say so.
A code is stable on purpose: an operator who searches for one should find the
same answer a year later. Codes are declared beside the code that raises them and
are never recycled.
| Field |
Type |
Required |
What it is |
action |
string |
yes |
The action, phrased as something to do rather than something to know |
detail |
string or null |
no |
Where to look, when that helps |
Four levels, deliberately. More would not be applied consistently, and
inconsistent severity is worse than coarse severity.
| Value |
Meaning |
advisory |
Informational; nothing is required |
warning |
Degraded or risky, still working |
error |
Something is broken |
critical |
Consequences outside the machine, or data at risk |
| Value |
Meaning |
actionable |
A remedy is available here |
guided |
The operator must act, somewhere else |
remediable |
lemonfiber can fix this itself |
unknown |
No known remedy; escalation is offered instead |
suppressed |
Acknowledged, and not re-shown until it recurs |
One line of output from one service. A log stream emits one envelope of this kind
per line.
| Field |
Type |
Required |
What it is |
service |
string |
yes |
The Compose service it came from |
stream |
enum |
yes |
stdout or stderr |
line |
string |
yes |
The line, without its trailing newline |
at |
string or null |
no |
When the container itself says it wrote the line, where it said so |
at is kept verbatim and unparsed. Containers disagree with the host clock and
with each other, and the only defensible ordering is each container’s own account
of itself — which a reader can apply only if it is carried rather than replaced
by an arrival time.
What a setup run came to, and what it settled on.
| Field |
Type |
Required |
What it is |
outcome |
enum |
yes |
How the run ended |
protocols |
object |
yes |
Which ways of downloading the stack was set up for |
data_root |
string or null |
no |
Where the library was put, where a location was chosen |
service_user |
string or null |
no |
The user the services run as, as uid:gid, where one was set |
outcome |
Meaning |
applied |
The reviewed answers were written |
abandoned |
The plan was seen and not applied; nothing was written |
already-set-up |
Nothing was asked, because this machine was already set up |
| Field |
Type |
Required |
What it is |
usenet |
boolean |
yes |
A Usenet provider is configured |
torrent |
boolean |
yes |
A VPN and torrent client are configured |
This report is deliberately not the settings themselves. Setup writes an
indexer key and a service password among them, and a report a script can read is
a report a script can log — into a file, a CI transcript, somebody’s terminal
history. So it says what was decided and never what was entered, and its fields
are chosen one at a time rather than by serialising a struct that might later
gain a secret.
What a first-content walkthrough did: the whole of it, narrated line by line as
it happened.
| Field |
Type |
Required |
What it is |
shape |
enum |
yes |
Which walk this was |
state |
enum |
yes |
Where it ended up |
proves |
string |
yes |
What it set out to prove, said so the operator knows what they watched |
lines |
array |
yes |
Every line it said, in order |
suggestions |
array of string |
yes |
What could have been walked instead, where nothing was chosen |
in_background |
boolean |
yes |
Whether the download was handed to the background rather than waited out |
already_here |
boolean |
yes |
Whether what was asked for was already here, and so was not acquired again |
item |
string or null |
no |
What it walked, where it got as far as choosing something |
link |
enum or null |
no |
What the import did with the file, where it got that far |
stopped |
object or null |
no |
Where and why it stopped, where it did |
handover |
object or null |
no |
Where it leaves the operator, where it worked |
shape |
Meaning |
pipeline |
The full walk: search, grab, download, import, and see it in the library |
library-only |
The walk for a stack that acquires nothing: point at media already on disk and confirm the media server can see it |
state |
Meaning |
offered |
Presented at the end of setup, not yet answered |
skipped |
Declined, and available later, carrying no penalty |
searching |
Looking for releases |
grabbing |
Sending a release to the download client |
downloading |
The download is running |
importing |
Moving the finished download into the library |
complete |
It is in the library and playable |
failed |
Stopped at a named step, with a diagnosis |
abandoned |
The operator left part-way; whatever was in flight stays in flight |
link |
Meaning |
hardlinked |
The library entry and the download are the same file under two names, which costs no extra disk |
copied |
The file was copied, so it exists twice. Works, but every import costs its own size again |
| Field |
Type |
Required |
What it is |
step |
enum |
yes |
The step being narrated |
said |
string |
yes |
What it is doing, in plain language |
detail |
string |
yes |
What was specifically true, or empty where there is nothing particular to say |
One step of the walk, ordered from picking something to watching it play.
| Value |
Meaning |
choosing |
Picking something to add, and confirming it is not already here |
searching |
The indexers are being searched for releases |
grabbing |
A release is being sent to the download client |
downloading |
The download is running |
importing |
The library manager is moving the finished download into the library |
scanning |
The media server is being told to look at what arrived |
available |
It is in the library and playable |
| Field |
Type |
Required |
What it is |
step |
enum |
yes |
The step it stopped at |
reason |
enum |
yes |
Why |
logs |
array of string |
yes |
What the services involved were saying at the time |
remedy |
string |
yes |
The one thing to try |
reason |
Meaning |
no-indexers |
No indexer is configured, so there is nothing to search |
indexers-failed |
The search could not be run: the indexers, or the service holding them, would not answer |
nothing-matched |
The search ran cleanly and matched nothing — an entirely different problem from the one above |
none-met-the-preset |
Releases exist, but none meets the chosen quality preset |
tunnel-down |
Torrents are in play and the tunnel is not verified up. Nothing is grabbed |
not-grabbed |
The release was never handed to a download client |
stalled |
The download stopped making progress |
import-failed |
The download finished and the library manager would not take it |
no-media-server |
There is no media server in the running form to make it playable |
not-visible |
It was imported, the media server was told, and it still cannot be found there |
| Field |
Type |
Required |
What it is |
next |
array of enum |
yes |
What to do next, in order |
next |
Meaning |
more-content |
Add more content, now that the shape of it is understood |
household |
Let the rest of the household ask for things themselves |
client-apps |
Watch it somewhere other than the machine it is running on |
What a watch saw, once the data root it was guarding was lost.
| Field |
Type |
Required |
What it is |
forms |
array of string |
yes |
The forms that were being watched, and are now stopped |
reason |
string |
yes |
Why the watch ended: the data root vanished, or a different volume took its place |
stopped |
boolean |
yes |
Whether stopping the services succeeded |
A word this product uses, and what somebody meeting it needs to know.
| Field |
Type |
Required |
What it is |
word |
string |
yes |
The word as it appears in the interface |
short |
string |
yes |
One sentence: what it is for, and what it costs or gains |
also_called |
array of string |
yes |
What other services in this stack call the same thing |
deep |
string or null |
no |
More, for somebody who asks — never needed in order to act |
short is enough to act on: somebody who reads only that should not be stuck.
also_called exists because the services do not agree on words, and an operator
moving between their screens should not have to work out that two of them are
one.
Every kind in the table above is in the contract artefact with its full schema,
including the forty-seven not expanded here. Their payloads are larger — a
dashboard carries eleven panels, each with its own shape; a lifecycle report
carries ten fields — and transcribing them into this page would create a second
place their shapes are written down, which is the one thing the artefact exists to
prevent.
Read them from contract/web-api.contract.json, or let a generated client do it:
the TypeScript SDK and the PHP SDK both
emit one type per kind from that file, so the shapes arrive typed rather than
transcribed.
The wrapper these sit inside is the envelope. To read them
from code without transcribing any of the above, use
the TypeScript SDK or the PHP SDK, both
of which generate one type per kind. Error codes have their own reference in
every error by code.