0.9.0
Speaking plainly — interface tiers and the plain-language layer
released 2026-08-26 · tag v0.9.0 · its changelog file · on the roadmap · manifest
Read at · spec at 76d46f3
Every repository's revision read
- brand@c2c6485
- integration-home-assistant@1ffa24e
- integration-mcp@71b97a7
- lemonfiber@8371555
- lemonfiber-companion@168bfe9
- lemonfiber-decline@21e9fe7
- lemonfiber-media-stack@a1d36db
- lemonfiber-plugins@7d88bbd
- lemonfiber-request-gate@fa76259
- lemonfiber-web@cfd74f7
- plugin-jellyfin@58fffca
- sdk-php@663b0b4
- sdk-python@645404a
- sdk-ts@eac8964
- spec@76d46f3
- tool-lfdev@93a3c56
New
Honour NO_COLOR #285
Give output one way out #287
builds G3-R9
Say what the words mean, where the words are used #288
Explain the words this product had not explained #292
builds G2-R13
Let setup use the glossary's words rather than its own #294
Give a script a failure it can parse #297
builds G1-R7
Let the last two commands answer a script too #298
builds G1-R7
Let a full screen say what its words mean #299
builds G2-R1
Let an operator turn the explanations off #302
builds G2-R7
Stop explaining a word you went and found out about #303
builds G2-R7
Opening the words is asking what they mean #305
builds G2-R7
Describe the wire once, so every SDK generates from it #309
builds ARCH-R56
Emit the command reference from what the binary parses #312
builds ARCH-R68
Emit the error-code reference from what the crates declare #315
builds ARCH-R69
A crate for the endpoints, and what they refuse #317
Answer the reads with the envelope the command already renders #318
builds ARCH-R46
The stream a browser leaves open, and what it hears on it #319
builds ARCH-R56ARCH-R63ARCH-R49ARCH-R50ARCH-R51ARCH-R61ARCH-R62
Describe every kind the server can emit #321
builds ARCH-R56
The actions endpoint, the embedded frontend, and the command that starts them #323
Run one check by the name its finding carries #344
Let a browser answer the questions a terminal asks #347
builds G1-R14
Say what a start is still waiting for #354
builds G3-R11
List the forms, redeem the name, refuse the argument nothing carries #365
builds G1-R1ARCH-R47ARCH-R48Q-R66
Serve the five reads a browser could not make #370
builds G1-R1
Let the dashboard act on what it shows #373
builds G1-R1
Answer what a word means in a browser #374
Reach the archives from a browser #377
builds G1-R1
Let the dashboard answer what it does not show #381
builds G1-R1
Serve what runs for minutes #398
builds G1-R1
Offer a repair from a browser #399
builds G1-R1
Carry the arguments the web could not reach #407
builds G1-R1
Let the terminal do the rest #401
builds G1-R1
Hand over the bundle, and list what is kept #409
builds G1-R1ARCH-R46
Reach the three the terminal could not #408
builds G1-R1
Offer the three the quality read was being made without #412
Ask for the checks that disturb, on their own #411
Let the list name several forms at once #414
builds G1-R1
Let the screen name one of the things it lists #413
builds G1-R1Q-R66
Ask the screen for the diagnosis, and for the checks that disturb #415
Offer the repair, and the consent that answers it #422
Let the screen name a service inside what it named #418
Choose how the surface is served before handing it over #428
builds G1-R1Q-R66
Narrow what the screen asks, and say what it holds #429
builds G1-R1Q-R66Q-R64
Fixed
Let a shortened value still say which one it is #286
builds G3-R10
A word in the plural is still the word #291
builds G2-R1
Stop a failure being able to drive the terminal #293
builds G2-R10
Stop folding what a parser reads #295
builds G3-R9
Keep the changelog the release generates #316
builds OPS-R3
One way to answer, and a token as wide as it claims #322
builds ARCH-R52
Keep in the backlog only what the backlog can hand back #325
builds ARCH-R51
Take the pre-push guard that still refuses the trunk #336
builds GOV-R12
Answer what the scanner had been saying here #338
builds Q-R64
Claim the stack for the two lifecycle paths that did not #345
builds G1-R12
Tell a script which flags, rather than asking it a question #348
builds G1-R4
Put back what a check disturbs, and say what a check spends #349
Ask the screen whether to draw, and print the help itself #352
builds G1-R3
Lay every row of the viewer out for the width it has #357
builds G3-R8
Keep both ends of a value and every word of an explanation #361
builds G3-R10
Keep both ends of a service's error body #363
builds G3-R10
Say the reach the rows carry, and read the summary back #364
builds G1-R1
Refuse every argument the command an action reaches cannot carry #366
builds G1-R1ARCH-R48
Say the tunnel sentence in the room the panel has #367
builds G3-R8
Describe the diagnosis a warn or fail carries #368
builds ARCH-R56
One answer to whether a name is a secret #375
builds A7-R3
Read a key, not a sentence #393
builds A7-R3Q-R26
Answer a refused read as the refusal it is #394
builds ARCH-R74
Take the query, not the parameter that looks like a key #395
builds A7-R3
Say what leaving the dashboard really does #396
A read refuses the parameter it does not take #404
builds ARCH-R74ARCH-R46ARCH-R47
One refusal, one status, whichever door it came through #419
builds ARCH-R74
Withhold the credential, not the first word #421
A name is a capability, and is minted like one #425
builds ARCH-R47
An archive is as private as what it holds #416
builds ARCH-R47
An agreement is bound to what was read #423
Withhold and make plain what the screens quote #427
An offer is what somebody reads before deciding #420
Maintenance
Cut a tag the same way twice #283
builds GOV-R12
Pin the actions the release build reaches for #284
builds GOV-R12
Keep output to one way out, and close the two leaks it found #289
builds G3-R9
Make the last two plain-language rules hold by test #290
Tidy what a sweep of today's code turned up #296
builds G3-R9
Keep what a keypress does apart from what the view is #300
builds GOV-R12
Record that numbers already carry their consequence #301
builds G2-R4
Refuse the two shapes a false picture usually takes #304
Run the shared gates as they stand today #306
builds GOV-R12
Say what this repo is at 0.8.0, and where the web surface went #307
builds GOV-R12
Link Discord by a name we control, not an invite code #308
builds GOV-R12
One pin for the shared gates #310
builds GOV-R12
Point the submodule at the name the stack now carries #311
builds GOV-R12
Take the markdownlint config from its one home #313
builds Q-R56
Follow the embedded stack to its new name #314
builds GOV-R12
Make a kind something only this module can name #324
builds ARCH-R56
Three promises the command kept with nothing watching #320
Cite the requirement each workflow rests on #326
builds GOV-R12
Record the web API the tracker had not heard of #327
builds ARCH-R46
Refuse a push that would empty the branch it lands on #328
builds GOV-R12
Stop promising an interface the binary does not carry #329
builds G1-R7
Check the installer's digest before running it #330
builds GOV-R12
Let only the job that writes hold a token that can #331
builds Q-R53
Read this repository's own workflows #333
builds Q-R53
Say what the surface already does, not what it waited for #332
builds GOV-R12
Give the release token to the job that writes a release #334
builds Q-R53
Turn the pre-push guard on from the command already run #335
builds GOV-R12
Install the hooks the config only described #339
builds OPS-R51
Say what is built, and un-tick what is not #337
builds OPS-R34
Take the shared definitions as they are now #340
builds GOV-R12
Verify every installer, and that the patches are still there #341
builds OPS-R1Q-R30
Take the shared definitions as they are now #342
builds GOV-R12
Refuse a fault named beside the person reading it #343
builds G4-R5
Record what 0.9.0 had already proved #346
builds G1-R12
Refuse a port on the network and a screen a terminal cannot draw #350
Say what the checks now hold, and what setup reaches #351
builds G1-R14
Hold the surface to loopback, and its words to the connection #355
Record what the web surface now holds #353
builds G1-R2
Four rows for work that has landed #356
builds G3-R11
A narrow terminal is a terminal, not a smaller one #359
builds G3-R8
Say what each surface reaches, and make a claim checkable #358
builds G1-R1
Assert a refusal names the flags, not merely that it refused #360
builds G1-R13
Four places shortened a value, not two #362
builds G3-R10
Tell the SDKs when the artefact they vendor has moved #369
builds ARCH-R64
Name the reading the artefact is held to #371
builds ARCH-R73
Refuse a setting whose value nothing decided to show #372
builds A7-R3Q-R26Q-R66
Hold the contract page to the reads this surface serves #376
builds Q-R66GOV-R12
A module counts the reads it declares #378
builds ARCH-R46
Nothing is reachable by mouse alone #379
builds G3-R4
Take the updates GitHub can open #380
builds GOV-R12Q-R55
Every read module counts itself #392
builds ARCH-R46
Read the summary sentence, not the page #382
builds G1-R1
Say where a problem lies #397
builds ARCH-R74
Move the codeql family as one #400
builds GOV-R12Q-R55
Give every stack its own credential file #406
builds Q-R28
Skip a scan a bot cannot authenticate #410
builds Q-R55Q-R61Q-R64Q-R66GOV-R12
Bump the codeql group across 1 directory with 4 updates #403
Take getrandom 0.4 #405
builds GOV-R12Q-R55
Say what the guard actually wraps #417
builds ARCH-R47
A guard watches for something that exists #426
builds Q-R66
A route this cannot read is not a route it may skip #424
builds Q-R66
Bump the workspace to 0.9.0 #430
builds GOV-R12
The goals it was gated on
C6-R1C6-R3C6-R6C6-R10C6-R12G1-R1G1-R2G1-R3G1-R4G1-R5G1-R6G1-R7G1-R8G1-R9G1-R10G1-R11G1-R12G1-R13G1-R14G2-R1G2-R2G2-R3G2-R4G2-R5G2-R6G2-R7G2-R8G2-R9G2-R10G2-R11G2-R12G2-R13G3-R1G3-R2G3-R3G3-R4G3-R5G3-R6G3-R7G3-R8G3-R9G3-R10G3-R11G3-R12G3-R13G3-R14