Repository navigation
v0.41.2
On the first quiet day of the soak, report --json said the comparison could not be made, because "no significant changes" was filed under the kind that means exactly that. This release makes an empty answer look empty: a comparison that found nothing returns [], no list anywhere comes back as null, and the two answers that used Go's field names as JSON keys use snake_case like every other. All of it changes what a caller receives, which is why it ships before 1.0 rather than after: 1.0 freezes these shapes, and they would have been frozen saying the wrong thing. A test now fails on a capitalised key, and another on a list that would reach a caller as null, so neither can come back.
⚠️ Behavior changes
- A report with nothing to say now has an empty
notable_changes(#308). It used to carry oneskippedline, which by its own definition meant the comparison could not be made: "No significant changes since last report" was filed under the kind for "could not compare". The terminal still prints that sentence;--jsonand the MCP tool now return[]. Found on the 0.40.0 soak, whose first quiet day saidskipped. A first run and an unreadable previous snapshot still carry theirskippedline, because for them the comparison really was not made needs_attentionandsuggested_actionsare[]when there is nothing in them, notnull(#308), and so isnotable_changes.nullsays the field is missing;[]says there is nothing in it. A caller that checked== nullfor "nothing to do" now has to check for an empty listinstall_list,GET /api/installand awatchincident'sflappinguse snake_case keys (#309). They were the only answers with capitalised keys:Name,DefaultPortand the rest for an app,IsFlapping,Countand the rest for flapping, because neither struct had JSON tags.install_listalso no longer carries each app's whole compose template. A caller reading the old keys breaks; it breaks now because 1.0 freezes key names, and these would otherwise have been frozen as Go's. Incidents already on disk with the old flapping keys are still read- No list in any answer is
null(#310).alerts_historyon a machine with no history answerednullover MCP while--jsonprinted[]for the same thing, and a list nested in an answer —system.diskswhen no disk could be read — could benullwherever nothing had been appended to it. MCP, the HTTP routes and--jsonnow pass every answer through one function that writes an empty list or map wherenullwould have been, at any depth. A field withomitemptyand a nil pointer still mean "absent" and are left alone
🐛 Fixes
- the dashboard's report card showed a bare
skippedchip on a quiet day (#308). It now says No significant changes since last report. when the list is empty