vv_conf_vars() read and regex-parsed ~1,900 lines per call and reached a shell fork through
vv_detect_host(); the repair sweep asks it for a key per log line. Keyed on a hash of the
contents rather than mtime and size, which missed a same-second rewrite to the same length.
Nothing in Varaverk fires when a job ends, so this picks up run records that completed
since the last pass rather than adding a hook to forty scripts. Ahead of stability in the
cycle on purpose: a wrong port is not fixed by rebooting the machine.
The reply to "shall I fix it" ends in a conf write, so the three actions are matched by
pattern with an ambiguity refusal instead of being inferred — and a phrase that supports
two readings asks again rather than picking one.
A model can be confident a port should be 8686; a probe can report that 8686 answered, and
only the second is a fact. Detecting and repairing are also separate things to trust, so
the feature runs read-only until the write switch is turned on under it.
A bug stays open until the code changes and nothing here can close it; a finding closes
itself when the probe that proved the fault starts passing, so the two cannot share a
store. Acknowledging one is scoped to the value it was acknowledged at.
A stored transcript is replayed into a later prompt when reopened, so a key typed while
changing a setting would be handed back to the model on every subsequent turn.
Eleven call sites wrote master.conf with tmp+rename and nothing else — no backup, no
parse check, no audit — including the two toggles the UI uses most and the raw editor
that installs a whole hand-edited file.
These files are gitignored, so a bad write had nothing to go back to; the escaping order
also stored any value containing a quote truncated but still parseable, which only a
read-back can catch.
The Assistant spans both rows and grid gives a spanning item's surplus to the tracks it spans, so
at Large the card sat at the top of a row much taller than it needed.
The transcript animates, so a page measuring it one frame later sized itself from a box caught
mid-collapse and left a dead strip the height the chat was shrinking from.
The readmes still described a single expand glyph and a chevron for saved chats, and neither knew
about the banner, the two expanded sizes or the shortcuts list.
Counting every step reported a fully scheduled system as 10 of 82, and reopening the last thread
brought its profile with it, so the tab came up as Troubleshoot pointed at nothing.
The toggle joins the other window controls in the banner, and opening the list now costs the
conversation its rows rather than costing the page more height.
Flex items default to min-height:auto, so a view holding a log ignored the height it was given
and pushed the composer out of a panel that clips instead of scrolling.
The Scheduler sizes the views above the panel from what the chat leaves, so a chat that resizes
silently grew off the bottom and took its own composer with it.
Several headers argued the Scheduler dock was deliberately separate, and the Scheduler's help
never mentioned the assistant at all — including the fix flow that just changed shape.
It kept its own bar, send loop and poll, which is why a thread there died on reload while the
other two were saved and why its controls had drifted from the same controls everywhere else.
Offers, a settable subject, runtime heights and a profile hook — everything the dock does that
the shared component could not, so it can stop being a second implementation.
The picker sat above the transcript and the buttons below it, so the same component read
differently on each surface; size is the only thing a placement should get to choose.
A stretched grid item is measured before it is stretched, so a long card grew the row it was
meant to fit inside and then filled it; the ceiling is taken from the Assistant instead.
A pull changes the files but not their URLs, so a browser kept serving the old stylesheet to new
markup — which is how the Monitor AI row lost its layout.
The AI cards sat in the monitor grid, which caps every row at a quarter of the viewport and
clips the card, so expanding grew the transcript inside a box the row had already sized.
A job killed hard never corrects its own record, so 'running' outlives the
process and the pid can since belong to something else; array-start jobs get
setsid too, so Stop can reach past their direct children.
UI-launched jobs inherited php-fpm's process group, so stopping one that was
actually running group-killed the WebGUI; setsid makes the job its own group
leader and stop.php now refuses to signal any group it does not lead.
Run was the only mutating control here that did not confirm, and it is the one that executes
shell as root — the library holds cleaners that delete files, and six Run buttons sit a row apart
in a dense tree.
vv_cache_clear() went in without it, so every start and stop fatalled on the line after the
docker command had already run — the action succeeded and the page was told it failed.
Every poll after the first asked for ?live=1, so the page paid a full collection — partner SSH
timeouts included — every two seconds while the tmpfs cache it was built around went unused.
Polls are now guarded against overlap and stop while the tab is hidden, repeated failures say so
instead of leaving the last good reading on screen, and two functions nothing called are gone.