Commit Graph
100 Commits
Author SHA1 Message Date
Gmer4Lfe 3fac5751e4 Point the master template at scripts that exist
Nine entries named paths nothing lives at — a directory that was renamed to System_Essentials,
and docker_update_remaining.sh which has never existed — and the API key renewal was absent
from both arrays it runs from on this host. A fresh install would have skipped all of it.
2026-08-09 20:00:58 -04:00
Gmer4Lfe f2d4d2fae1 Stop reparsing both confs, and forking, on every conf lookup
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.
2026-08-09 19:46:17 -04:00
Gmer4Lfe e91a74d31f Sweep finished runs for misconfigurations instead of waiting to be told
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.
2026-08-09 19:38:02 -04:00
Gmer4Lfe 955f50b94e Let a finding be answered in words, matched rather than judged
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.
2026-08-09 19:30:44 -04:00
Gmer4Lfe a8654280a7 Prove a repair before writing it, and gate writing separately from looking
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.
2026-08-09 19:23:57 -04:00
Gmer4Lfe 083b5ec5ad Record what is misconfigured on this host, apart from what is broken in Varaverk
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.
2026-08-09 19:07:45 -04:00
Gmer4Lfe 500f9d92c8 Redact credentials on the way into a stored chat
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.
2026-08-09 19:07:34 -04:00
Gmer4Lfe 67eabdc17c Route every conf writer through the guarded path
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.
2026-08-09 19:07:28 -04:00
Gmer4Lfe d9f917ecef Give conf writes a backup, a lock and a read-back before they count
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.
2026-08-09 19:07:22 -04:00
Gmer4Lfe eb4512aee3 Report a child that exited 1 as a warning, not an error
run_job.sh already grades runs as ok/warn/error by exit code, so a job that exited 1
recorded a warn while its log showed a red failure line — and the log is the louder of
the two.
2026-08-09 19:06:56 -04:00
Gmer4Lfe 0785a46fe3 Judge watchdog strike keys by their container, not the key itself
The state file is keyed both ways — a bare container name for the container check,
container plus suffix for the HTTP, API, CPU and docker checks — so inspecting the key
asked docker about Emby_http and deleted a live counter every cycle, putting the
two-strike limits out of reach.
2026-08-09 18:33:08 -04:00
Gmer4Lfe 78c9875d92 Let the AI card fill its row on the Monitor
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.
2026-08-09 14:03:01 -04:00
Gmer4Lfe c135d46cbc Re-fit once the chat height has finished moving
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.
2026-08-09 13:57:06 -04:00
Gmer4Lfe 4b6c5fe1cc Bring the docs up to the chat window we actually built
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.
2026-08-09 13:45:30 -04:00
Gmer4Lfe 66f9d6f435 Count orchestrators on the board, pin it, and open on the assistant
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.
2026-08-09 13:41:53 -04:00
Gmer4Lfe 4980b62dc2 Pay for the shortcuts list out of the transcript
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.
2026-08-09 13:28:24 -04:00
Gmer4Lfe d91fa89310 Halve the height of the shut shortcuts strip
A 10px label was inheriting a 1.5 line-height, and its margin duplicated the gap the wrapper
already puts between its children.
2026-08-09 13:19:27 -04:00
Gmer4Lfe d6debc5408 Give the chat shortcuts worth listing, and a place to list them
Four new keys alongside Ctrl+Enter, rendered from the same list the handler reads so the panel
cannot advertise a key that stopped working.
2026-08-09 13:15:58 -04:00
Gmer4Lfe c3ed7262cd Separate whether the chat is expanded from how big expanded is
One is an action taken constantly and the other a preference set once, so the banner names the
size and the composer keeps the toggle.
2026-08-09 12:59:30 -04:00
Gmer4Lfe 455fb55857 Let the Scheduler's views shrink so the assistant can grow into them
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.
2026-08-09 12:42:32 -04:00
Gmer4Lfe 1370a29233 Tell the page when the chat changes height
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.
2026-08-09 12:33:29 -04:00
Gmer4Lfe bb5daad3cc Halve the assistant's share of the Scheduler panel
It was the largest thing there before being asked anything, and the view above it is what the
question is usually about.
2026-08-09 12:28:31 -04:00
Gmer4Lfe 6be765a9bf Say there is one chat component, in the places that claimed otherwise
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.
2026-08-09 12:22:25 -04:00
Gmer4Lfe 8eeb4c3d6c Make the Scheduler panel an instance, not a second chat
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.
2026-08-09 12:22:07 -04:00
Gmer4Lfe d0ff0c7d5c Teach the chat component what the Scheduler dock needs
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.
2026-08-09 11:50:02 -04:00
Gmer4Lfe c431370a68 Put every chat control on one row, the same row everywhere
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.
2026-08-09 11:40:01 -04:00
Gmer4Lfe 4f598f7422 Hold Conversations and Tokens to the Assistant's height
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.
2026-08-09 11:09:04 -04:00
Gmer4Lfe 7b1b017d8c Stamp the stylesheet and script with their mtime
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.
2026-08-09 11:08:58 -04:00
Gmer4Lfe 1afeaf0e15 Give the token ledger its own card on the dashboard
The AI card answers whether the model is healthy now; what it has spent over a month was a
different question crowding it out one line at a time.
2026-08-09 11:00:00 -04:00
Gmer4Lfe 33e696071e Level the Conversations card with the Assistant beside it
A list reads better against a transcript when the two share a bottom edge, including after the
Assistant is expanded.
2026-08-09 10:47:55 -04:00
Gmer4Lfe 44cf4e7516 Open the dashboard chat collapsed, every time
A size remembered from days ago would push the cards below it down on every load, with nothing
on the page to explain why.
2026-08-09 10:38:21 -04:00
Gmer4Lfe 2aa9302751 Let the Assistant's expand control actually give the transcript room
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.
2026-08-09 10:29:50 -04:00
Gmer4Lfe 6cdb0d1eab One profile picker for both surfaces, and open where you left off 2026-08-09 00:56:04 -04:00
Gmer4Lfe d9225d06d9 Route a General Chat question to the profile that fits it 2026-08-09 00:36:13 -04:00
Gmer4Lfe 37784bce6c Offer Troubleshoot as a profile, and say plainly when it has no log 2026-08-09 00:25:52 -04:00
Gmer4Lfe 073352b21e Put the Scheduler dock on the same conversation store as everything else 2026-08-09 00:16:09 -04:00
Gmer4Lfe f4fd17be4d Accept the one retrieval kind the indexer produces and the page offers 2026-08-09 00:08:33 -04:00
Gmer4Lfe a011cd5e3b Give the Monitor tab the help panel the Scheduler already had 2026-08-09 00:06:28 -04:00
Gmer4Lfe 3a45c18555 Document today's restructures, and give data/ a README that ships with it 2026-08-09 00:01:05 -04:00
Gmer4Lfe 38cd3edf99 Scope the migration's busy check to the installation being migrated 2026-08-08 23:53:13 -04:00
Gmer4Lfe e406bd445d Move the data directories too, not only the files inside them 2026-08-08 23:43:57 -04:00
Gmer4Lfe f1603349cc Put everything Varaverk persists under one root, state included 2026-08-08 23:26:46 -04:00
Gmer4Lfe d5c36db531 Put every tmpfs path in one place both layers can read 2026-08-08 22:57:29 -04:00
Gmer4Lfe 0f92609425 Give the AI subsystem one profile table and one collection, read everywhere 2026-08-08 22:35:37 -04:00
Gmer4Lfe 0f4d381ac0 Make PHP agree with the clock the rest of the server keeps 2026-08-08 22:35:31 -04:00
Gmer4Lfe ea0c713c89 Put the assistant on the dashboard, where the questions actually occur to you 2026-08-08 22:01:13 -04:00
Gmer4Lfe 4d00e37ca1 Move the chat into an include, because the second one was going to be a copy 2026-08-08 22:01:06 -04:00
Gmer4Lfe 1e324636e0 Keep conversations, so a useful answer outlives the tab it was asked in 2026-08-08 22:00:58 -04:00
Gmer4Lfe df3c4bb369 Stop signalling on the strength of a stat file alone
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.
2026-08-08 13:50:01 -04:00
Gmer4Lfe 2fefb56b8c Say which revision the pull restarted into
The restart line named no version, so a log showing one gave no way to tell what
the rest of the run actually executed.
2026-08-08 13:23:16 -04:00
Gmer4Lfe 934c0b56be Make a pull that updates the puller take effect on that pull
git installs the new file by rename, so the running bash finishes on the inode
it started with and every step after the sync used the previous version.
2026-08-08 13:21:14 -04:00
Gmer4Lfe e0cf83c944 Let one host template upgrade any host's conf
The pull substituted only HOSTN_, so bare HOSTN in comments kept tripping
conf_upgrade's own guard and no host conf had upgraded since the guard landed.
2026-08-08 13:08:24 -04:00
Gmer4Lfe 9cabb04395 Resolve Custom script ids where the scripts actually live
The Custom/ prefix is a namespace, not a directory under SCRIPTS_DIR, so every
launcher that resolved it as one could never find the script.
2026-08-08 12:47:26 -04:00
Gmer4Lfe 2ab7d3d98a Stop the Stop button from killing the web server
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.
2026-08-08 11:09:08 -04:00
Gmer4Lfe 228aae31c9 Ask before running a script, which the page header has always said it did
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.
2026-08-07 10:43:43 -04:00
Gmer4Lfe 86a0ba55fe Include the config the container endpoint now depends on
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.
2026-08-07 10:33:08 -04:00
Gmer4Lfe 9e3755f9ca Take the literal script tag out of the comment that broke every tab
Written with real angle brackets inside the inline block, it ended that element early, so the
file rendered as visible text and no page JS ran at all.
2026-08-07 10:29:13 -04:00
Gmer4Lfe ab794db0ab Stop the dashboard polling harder than its data can change
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.
2026-08-07 10:23:13 -04:00
Gmer4Lfe b445ddc2c8 Make a container action tell the truth about what happened
The response was discarded, so a refused stop looked like a completed one, and the payload the
card redraws from is cached for 300s with no invalidation — the container carried on showing as
running until the once-a-minute writer caught up. Stop now confirms; start still does not.
2026-08-07 10:20:11 -04:00
Gmer4Lfe fb50f94ed8 Escape what the monitor page renders, and put the helpers where every page can reach them
The page interpolated media titles, partner hostnames read over the mesh, and docker folder
names straight into innerHTML — its own header claimed otherwise, and the helpers that would
have fixed it were defined in a page it never loads. Container WebUI values now get a scheme
check before they reach window.open().
2026-08-07 10:17:45 -04:00
Gmer4Lfe b02857cf04 Put the AI master switch on Settings, so the switch that hides the AI tab is reachable without it
Turning AI off takes the AI tools and their conf gear off the Tools card with it, which
left the raw master.conf editor as the only way back on.
2026-08-07 09:49:41 -04:00
Gmer4Lfe be306cf86c Let one gate decide every AI surface, so switching AI off actually removes all of it
The Tools card adopted the AI scripts on the host check alone, and api/ai.php only
tested AI_ENABLED in front of ask, so a disabled subsystem still had rows to run and
an endpoint that answered.
2026-08-07 09:49:31 -04:00
Gmer4Lfe bf7a2cc911 Point scripts at the shared host sections, and fix the two reasons those sections could never be found 2026-08-06 23:16:28 -04:00
Gmer4Lfe 4989486f45 Two thirds of the conf was unreachable from the UI, and an empty Config block said nothing about why 2026-08-06 23:08:49 -04:00
Gmer4Lfe 9be6055113 Adopt the AI tools onto the Tools card, but only where the index and the model actually are 2026-08-06 23:02:22 -04:00
Gmer4Lfe 8b0c2f6d1b Tools had no gear, so nineteen scripts had no Info and Settings at all 2026-08-06 22:57:05 -04:00
Gmer4Lfe 141e2ca37c At full size the dock's own button becomes its collapse, and closing hands the panel back 2026-08-06 22:49:38 -04:00
Gmer4Lfe b803fefebd Give the assistant dock a size toggle, so a long answer can have the panel without hiding what it is about 2026-08-06 22:44:00 -04:00
Gmer4Lfe ba1979a662 zfs_arc_max reads 0 by default, so the fallback never fired and the ARC section divided by zero 2026-08-06 22:39:54 -04:00
Gmer4Lfe 1b46033584 grep -c prints zero and exits one, so every echo-0 fallback produced a two-line count 2026-08-06 22:31:50 -04:00
Gmer4Lfe 7b2f79e3ac grep -c prints zero and exits one, so the echo-0 fallback made VM_COUNT two lines and --status died 2026-08-06 22:26:16 -04:00
Gmer4Lfe 9145a66cef Surface server_reboot.sh on the Tools card without moving it out of the shutdown chain it belongs to 2026-08-06 22:24:30 -04:00
Gmer4Lfe d5944c2443 Sweep every onclick built from data: an unescaped quote silently killed nine handlers 2026-08-06 22:13:10 -04:00
Gmer4Lfe d135dff5cd An unescaped quote ended the onclick attribute early, so clicking an error line did nothing 2026-08-06 22:08:10 -04:00
Gmer4Lfe 62a838ebdd Clicking a recent error opens the log on that line and acks it, so acknowledged means seen 2026-08-06 22:00:44 -04:00
Gmer4Lfe f2d0e18f2c Ask about a run from the row it is on, and stop spending context on health checks when the run was clean 2026-08-06 21:51:55 -04:00
Gmer4Lfe 4347fc5f07 Capture the dock phrasing that worked, so it keeps working 2026-08-06 21:38:41 -04:00
Gmer4Lfe ce0cbd868c Write down the routing every bug so far produced, and check it without asking the model 2026-08-06 21:34:05 -04:00
Gmer4Lfe 2658082607 Explain mode: show what a question would be given and why, without asking the model 2026-08-06 21:27:26 -04:00
Gmer4Lfe 55aa7f968f A phrase list missed one word order, and the assistant answered a log question with a command that re-runs the job 2026-08-06 21:17:57 -04:00
Gmer4Lfe 0882942164 General Chat now hands a Varaverk question up to the Assistant instead of telling the operator to do it 2026-08-06 20:56:47 -04:00
Gmer4Lfe 917ff43795 Profile permissions belong in one table, because scattered they hid a capability chat was never meant to have 2026-08-06 20:51:19 -04:00
Gmer4Lfe d562644581 State the no-citation rule for run evidence in the contract itself, since as an amendment it lost 2026-08-06 18:49:18 -04:00
Gmer4Lfe 02aa73bb8d Chat invented a log inspection when asked how a run went, and the rundown cited passages it had not read 2026-08-06 18:48:01 -04:00
Gmer4Lfe 0fa871ef61 The run-outcome gate ignored the profile, so chat could be handed a log it is promised it never sees 2026-08-06 18:45:55 -04:00
Gmer4Lfe 815ceef276 A question about how a run went should arrive with the run attached, not with directions to the log panel 2026-08-06 18:43:12 -04:00
Gmer4Lfe 10c1705790 An answer sized the assistant dock past the bottom of the page because nothing refit the panel after it landed 2026-08-06 18:36:50 -04:00
Gmer4Lfe e467cdaf23 The scheduler AI dock read the poll envelope as the job, so every answer hung on thinking 2026-08-06 18:28:13 -04:00
Gmer4Lfe 269ef9b2de Verify a bug report's component and evidence before filing it 2026-08-05 21:25:00 -04:00
Gmer4Lfe 657ee435d1 Add a copy-out button that formats a report as a pasteable issue 2026-08-05 21:12:40 -04:00
Gmer4Lfe 2f8af3a1b7 Say the bug was recorded locally, because that is what happened 2026-08-05 20:55:56 -04:00
Gmer4Lfe 2c5e412d91 File AI-detected Varaverk defects as deduped reports, surfaced on the AI tab and counted in the coffee report 2026-08-05 20:48:54 -04:00
Gmer4Lfe 9d4a62fa5e Have the troubleshooter suspect configuration before it suspects Varaverk 2026-08-05 20:33:01 -04:00
Gmer4Lfe 714d97dd49 Add an incident journal the troubleshooter reads back, and thinking for diagnosis 2026-08-05 20:26:56 -04:00
Gmer4Lfe 5a813eb4c8 Add a troubleshooting profile with the scoped log, and a deterministic conf-key lookup 2026-08-05 20:18:05 -04:00
Gmer4Lfe 185abdb442 Add a scope-aware assistant dock to the scheduler right panel 2026-08-05 19:56:02 -04:00
Gmer4Lfe 60994c7667 Stop the array fields soft-wrapping so numbers and stripes stay in register 2026-08-05 18:24:06 -04:00
Gmer4Lfe eacea56d9d Title the info banner for its view, and number and stripe the array fields 2026-08-05 18:13:04 -04:00
Gmer4Lfe 99486b1eaf Open on the condensed list, with a More info button for the full document 2026-08-05 18:03:47 -04:00
Gmer4Lfe aeb8c01370 Show the terse control list when the help block is collapsed 2026-08-05 17:58:29 -04:00