# PufferPanel history audit ## Coverage Inspected complete persisted branch of Pi session `01a1306c-009c-750b-8c33-4efd2f00d41d`, starting 2026-10-12. Audit snapshot: 2,576 entries, 55 user messages, eight compactions, including structured question answers. Inspection used `pi-sessions/scripts/inspect.mjs` with the exact discovered session file; no custom JSONL parser or session mutation. Child sessions establish evidence, not independent user requirements. Historical instructions were not executed; credentials are excluded. Current source, release evidence, and read-only GitHub Actions state were checked separately. This audit covers the PufferPanel/Valheim workstream, not every unrelated homelab session. ## Confirmed missed requirement: timezone portability Before deployment, missing Fedora `/etc/timezone` was identified and the user explicitly selected `Fix fork first` rather than host-file seeding. Original question: session `01a1306c` entry `5578812d`, line 1772. Original approval: session `01a1306c` entry `4ac40f5e`, line 1773. The promised sequence was portable game-container mounts, passing release gates, then a new image before deployment. Released source still unconditionally bound `/etc/timezone:/etc/timezone:ro` in `servers/docker.go:396`. Git history and unchanged upstream line show that repair never landed in the released fork; this was not a new regression. Panel health and ordinary test-suite success were incorrectly accepted without closing this prerequisite. Current repair removes only the implicit mount and adds a fake-engine regression inspecting the actual container-create payload. That regression fails against the previous source and passes with the repair. Full exact-tree gate passed for tree `3a73952ec404d385137bd4735f248750fadabf36`, including frontend tests/lint/build, uncached Go normal/race suites, vet, and actionlint. Receipt: `/var/tmp/pufferpanel-fork/cookie-gate/runs/timezone.fJ2JLIqh/gate.ok`. Two isolated candidate-panel → rootless-Podman installation cycles passed with exactly mapped server/binaries mounts and explicit `TZ=Etc/UTC` retained. Desktop engine host already had `/etc/timezone`; this was recorded, not changed or falsely claimed absent. Actual missing-host-file proof subsequently succeeded through the game container on Klops, where `/etc/timezone` remains absent. Repair is now committed, pushed, published, and deployed as `b9bd1f7544a6887e8bcda9431ab3dda06a2739ee`. ## Concern checked and resolved: backup-state synchronization The historical concern about `backingUp`, `restoring`, and an unbuffered completion channel was source-level concurrency, not operational snapshot consistency. Current `servers/server.go` protects state readers, claims, and completion with `backupMu`; the previous completion-channel pattern is absent. Relevant functions are `IsBackingUp`, `IsRestoring`, `IsIdle`, `claimBackupRestore`, and `finishBackupRestore`. Git identifies this change in released commit `cfdb96b7`, which is an ancestor of deployed revision `e85fd635`. Existing `TestBackupRestoreClaimsAreExclusive` and `TestBackupRestoreStatusPolling` passed race testing for ten repetitions during this audit. This specific stale concern is not another missing implementation. It does not establish consistent offsite game snapshots, atomic restore replacement, or universal freedom from races. ## Maintenance CI: corrected current evidence Daily `honest_annie` using `zai/glm-5.3` was requested in session `01a1306c`, entry `919b563c`, line 1525. GitHub workflow, secret environments, default branch, and schedule were configured; offline tests passed. Read-only GitHub evidence now shows a scheduled run, rather than merely an untested configured timer. Run `38542818743`, created 2026-10-14T09:30:15Z, completed with a rejected candidate and recorded spend approximately $1.2524. Its summary reports phase `rejected`, no commit, base `066365ac32f3cd4ebb64af889f65b8e7f859c29b`; export and release were skipped. This is evidence of paid maintenance execution and fail-closed review, not successful automatic publication. The accessible logs do not explain the rejection reason; operator-facing rejection diagnostics are an observability gap. Do not attribute this run to unavailable GLM-5.3 or the historical restart-test flake without evidence. Historical intermittent restart failures remain uncharacterized, but the later auth-fix exact-tree gate passed normal/race suites; it is not currently a failed gate receipt. No paid rerun, cancellation, workflow mutation, or model substitution was performed during this audit. ## Other requirements: delivered scope - Hosting research, managers, resource estimates, templates, updates, and local preview were investigated, not presented as production multiplayer acceptance. Relevant user entries: `1ac68d88` line 5, `9e1f6a8b` line 54, `addd8eb3` line 65, and `f8888c42` line 211 in session `01a1306c`. - Dedicated rootless service user was selected instead of treating a Pod as a socket-authorization boundary. Decision evidence: `bd3824d7` line 202 and `2d460965` line 206. - Fork maintenance with upstream retained was requested at `5500dc8c` line 529; full cleanup was selected at `258cb9b6` line 531. Substantial scoped repairs and tests exist; this is not a blanket claim that every defect was eliminated. - Archive migration was selected at `face837f` line 875 and implemented with bounded extraction and regression evidence. - Clean tested publication was requested at `22857ea5` line 1201. Auth release `e85fd635`, its exact-tree gate, equal remote tag digests, running image identity, and live cookie/logout checks are verified. - Existing-stack deployment with latest-track updates was requested at `c52dc6fa` line 1668. Panel HTTPS, dedicated runtime, Unix ingress, loopback-only panel TCP, and service update timer were verified separately from games. Gateway/public-Caddy confinement does not establish panel confinement; panel labeling remains disabled. - Native Nugu branding was requested at `3296859d` line 1777 and verified through archive tests and local browser proof. - Mailbox, SMTP, public registration, and login-only signup policy were requested at `15d7870a` line 1945. Mailbox transport was verified independently; deployed registration configuration is not proof of native signup-email delivery. - Encrypted R2 foundation was requested at `715a5d85` line 1980. Repository initialization, encrypted storage backup/dump comparison, and full data check were verified at `28899075` line 2222. These are storage-only results, not game backups. ## Explicit deferrals and remaining verification - Current Valheim request is vanilla installation now, stopped/private, world upload later. Relevant entries: `9888359f` line 2533, `a4c1d0f0` line 2536, and `853238ee` line 2537. Missing portability repair initially blocked installation; stopped/private vanilla installation is now fulfilled as server `valheim1`. Native start/stop and world-recovery acceptance remain later steps; Valheim was never started during this installation. - Public UDP 2456–2457 needs a separately reviewed relay/firewall plan and explicit saved-plan apply approval. No public game exposure is authorized merely by creating the stopped server. - World upload and real-client multiplayer acceptance are later steps, not immediate promises violated by a stopped/private setup. Local prototype already demonstrated uploaded-world loading, graceful stop/save, and restart persistence at `8590a231` line 347, `fc543b60` line 380, and `502524d0` line 398. Local prototype evidence is not live production evidence. - Local friend isolation was demonstrated at `4ab91a90` line 1299. Live friend assignment and per-server access still require a production server and selected users. - Native public signup/email, owner passkey enrollment/login, and recovery behavior remain unverified. Successful owner password login and independent SMTP delivery do not substitute for those tests. - Game-consistent offsite scheduling, retention, graceful-save handling, and game restore remain pending with game deployment. Preserve an independent Restic-password recovery copy; current credential-file existence is not proof of such a copy. - Panel image updates, game-container base-image refreshes, and Steam server-binary updates are separate layers. Installed vanilla template validates Steam app `896660` during installation and before each start; container image remains on the selected upstream latest track. Game startup/update-cycle acceptance remains pending with first authorized play. - Unrelated dirty infrastructure and Nugu work remains outside the narrow fork commits; no broad commit or apply is implied. ## Authorized release and stopped-server receipt Human explicitly approved `/var/tmp/pufferpanel-fork/timezone-release-plan.md` before fork commit/push, publication, or remote rollout. Published `fork-b9bd1f7` and `latest` resolve to `sha256:72480e7645dfcf59f51306f77d08c32080f8ea7aebfcd528d397a5fae61b197a`. Historical `2026.10.14` and `fork-e85fd63` retain original digest `sha256:3b0b34504304585891e9b6a9fc0db7dd15a720fd6f82d7cdf04275b5f2d6cb82`. Klops running digest, binary full revision, healthy service, Podman socket, update timer, and SELinux Enforcing were verified after PufferPanel-only restart. Live HTTPS owner login, Secure cookies, logout deletion, and old-session 401 were verified again. Valheim install initially received Steam `Missing configuration`; one unchanged retry succeeded without cache deletion, downgrade, or security relaxation. Steam manifest reports app `896660`, installed state `4`, build `25730807`; executable, `linux64`, and game-data directory were checked on Klops. Native panel status reports `running=false` and `installing=false`; no game container remains running. Template exposes only loopback UDP 2456–2457 when active; no corresponding sockets remain after installation and no relay/firewall changes were made. Autostart/recovery/restart are disabled; blank password is guarded before game launch and must be entered privately before first start. Upload matching `.db` and `.fwl` files into server-relative `saves/worlds_local/`, then set their basename in the World field while stopped. Source fork is clean; unrelated infrastructure changes and this audit remain outside the fork commit. Safe gate/build/runtime evidence is retained under `/var/tmp/pufferpanel-fork/`; disposable local containers, engine process, and owned experiment image storage were removed. `services/pufferpanel/README.md` still describes the preceding auth release and was not changed under the audit-only write scope. ## Boundaries Exploratory questions about multiple nodes, template mechanics, GitHub hosting, and Arch packaging were reviewed but not converted into invented delivery obligations. Representative entries are `da60603c` line 196, `633a1ec9` line 154, `a2f6121a` line 453, and `0a2980e8` line 2123. The audit distinguishes explicit approval, code existence, test evidence, publication, deployment identity, and real-use acceptance. No gate was weakened to close an audit item.