-
429fee3868
docs/plan: trim retry-backoff tuple to match attempts-1
mwiegand
2026-05-11 23:21:10 +0200
-
8cc7f84801
deploy: schedule daily workshop refresh via systemd timer
mwiegand
2026-05-11 23:20:13 +0200
-
f614ac05f0
tests/cli: cover running+cancelling idempotency, tighten app-context scope
mwiegand
2026-05-11 23:18:54 +0200
-
0ab54b4a7d
cli: add workshop-refresh subcommand for scheduled global refresh
mwiegand
2026-05-11 23:15:05 +0200
-
653e3212b9
tests: harden refresh-hidden-during-build with positive assertion
mwiegand
2026-05-11 23:13:39 +0200
-
25b38e633d
overlay_detail: add 'Refresh from Steam' button for workshop overlays
mwiegand
2026-05-11 23:10:27 +0200
-
e1b189ad3c
workshop_routes: narrow refresh's steam exception handler
mwiegand
2026-05-11 23:08:41 +0200
-
f5094c2d9d
workshop_routes: add per-overlay refresh endpoint
mwiegand
2026-05-11 23:03:48 +0200
-
81c6863cca
overlay_builders: restore symlink overwrite guards + nits
mwiegand
2026-05-11 23:01:38 +0200
-
16adc5c1fe
overlay_builders: download missing/stale workshop items inline
mwiegand
2026-05-11 22:56:09 +0200
-
6fc7f87943
overlay_builders: address code-review nits on retry helpers
mwiegand
2026-05-11 22:48:28 +0200
-
13bd2e48f6
overlay_builders: add _download_with_retry + _sleep_with_cancel helpers
mwiegand
2026-05-11 22:43:22 +0200
-
532b4c4469
docs: implementation plan for workshop auto-download
mwiegand
2026-05-11 22:34:31 +0200
-
fef8cc4ea6
docs: design for workshop auto-download
mwiegand
2026-05-11 22:28:20 +0200
-
c5758487a9
Revert "AGENTS: harden the spec+plan commit rule"
mwiegand
2026-05-11 22:26:47 +0200
-
9c01d4b702
AGENTS: harden the spec+plan commit rule
mwiegand
2026-05-11 22:23:58 +0200
-
ccd3b36319
docs: design for profile page with self-service password change
mwiegand
2026-05-11 22:21:40 +0200
-
cb52a69faf
tests/test_profile: hoist sqlalchemy import to module top
mwiegand
2026-05-11 22:01:29 +0200
-
f643246a84
cli: apply min-length password policy in create-user
mwiegand
2026-05-11 22:00:16 +0200
-
224b023ca0
profile: rate-limit test for POST /profile/password
mwiegand
2026-05-11 21:58:46 +0200
-
47722dbb19
profile: happy-path + cross-session invalidation tests
mwiegand
2026-05-11 21:58:26 +0200
-
d25fb57f30
profile: POST /profile/password validation branches
mwiegand
2026-05-11 21:57:11 +0200
-
eef85f36a9
profile: GET /profile page with change-password form
mwiegand
2026-05-11 21:55:34 +0200
-
e75f379dcb
auth: reject sessions older than user.password_changed_at
mwiegand
2026-05-11 21:54:13 +0200
-
84dc672180
auth: stamp password_changed_at marker in session on login
mwiegand
2026-05-11 21:46:20 +0200
-
26a6a9d7b0
rate-limit: extract generic helper, reuse from login
mwiegand
2026-05-11 21:45:51 +0200
-
a5982941df
auth: validate_new_password helper (min length 8)
mwiegand
2026-05-11 21:45:03 +0200
-
2353378b23
alembic: add users.password_changed_at column
mwiegand
2026-05-11 21:44:39 +0200
-
eb1f2b82eb
models: add User.password_changed_at
mwiegand
2026-05-11 21:43:25 +0200
-
6eb9bd0ab3
docs: plan for profile page with self-service password change
mwiegand
2026-05-11 21:41:25 +0200
-
e1149704c8
job_worker: don't duplicate streamed stderr on HostCommandError
mwiegand
2026-05-10 22:52:54 +0200
-
363f429c7a
l4d2host: LEFT4ME_STEAMCMD env var for steamcmd path
mwiegand
2026-05-10 22:46:21 +0200
-
c594d4b5e8
tests: admin user management
mwiegand
2026-05-10 21:19:03 +0200
-
bcea450e98
admin: deactivate/activate/delete endpoints for /admin/users
mwiegand
2026-05-10 21:15:52 +0200
-
3490be5fb7
auth: reject inactive users at login + invalidate existing sessions
mwiegand
2026-05-10 21:13:31 +0200
-
726acfa4ff
models: add User.active column for soft-delete (deactivation)
mwiegand
2026-05-10 21:12:27 +0200
-
0811d22c44
deploy/README: mark as historical reference, point at ckn-bw
mwiegand
2026-05-10 18:25:23 +0200
-
a987304358
fix(deploy): make iproute2 explicit + document disable recipe
mwiegand
2026-05-10 01:29:22 +0200
-
9f0b51b455
docs(deploy): document network-shaping defaults + opt-in network knobs
mwiegand
2026-05-10 01:09:28 +0200
-
26f3d270b0
feat(deploy): wire nft marking + CAKE shaper into deploy script
mwiegand
2026-05-10 01:04:12 +0200
-
a9ca90537b
feat(deploy): left4me-cake.service oneshot wrapping apply-cake helper
mwiegand
2026-05-10 00:58:42 +0200
-
878639147a
feat(deploy): left4me-apply-cake helper with apply/clear modes
mwiegand
2026-05-10 00:52:16 +0200
-
d783449d05
feat(deploy): cake.env template with documented uplink knobs
mwiegand
2026-05-10 00:49:08 +0200
-
fbb342db87
feat(deploy): systemd unit to load/clear left4me_mark nftables table
mwiegand
2026-05-10 00:35:27 +0200
-
076bfb72ca
feat(deploy): nftables uid-based DSCP-EF + skb-priority marking for srcds
mwiegand
2026-05-10 00:32:53 +0200
-
e822e9fbc7
feat(deploy): extend sysctls with udp_*_min, fq_codel default, BBR
mwiegand
2026-05-10 00:28:24 +0200
-
e1add4fffa
docs(plans): l4d2 network shaping & marking — implementation plan
mwiegand
2026-05-10 00:10:40 +0200
-
0cc92f2c17
docs(specs): l4d2 network shaping & marking — design
mwiegand
2026-05-10 00:05:44 +0200
-
62d6d4cbcd
ui(files-overlay): label root row as "/" instead of "(overlay root)"
mwiegand
2026-05-09 19:50:14 +0200
-
2bba1f31d0
fix(files-overlay): post-deploy bug sweep + root-as-row UX
mwiegand
2026-05-09 19:46:19 +0200
-
76cd7ddda0
fix(files-overlay): fall back to getAsFile when webkitGetAsEntry returns null
mwiegand
2026-05-09 19:11:41 +0200
-
2d3c98866a
feat(files-overlay): user-managed file content as a third overlay type
mwiegand
2026-05-09 18:59:32 +0200
-
36d3d83de6
docs: postmortem for the overlay-umount EBUSY rabbit hole
mwiegand
2026-05-09 15:50:41 +0200
-
87d56a0910
fix(web): event-delegate modal triggers so HTMX-swapped buttons work
mwiegand
2026-05-09 15:18:27 +0200
-
5eac51a93e
fix(deploy): wrap overlay helper with nsenter so it doesn't pin the unit's mount namespace
mwiegand
2026-05-09 15:13:59 +0200
-
936c8bb81c
fix(deploy): ExecStart srcds_run from merged overlay, not installation/
mwiegand
2026-05-09 14:03:12 +0200
-
ddf73c4d27
test(deploy): drop stale web.env lifecycle assertions
mwiegand
2026-05-09 13:33:05 +0200
-
59771f91c4
fix(deploy): drop deleted l4d2host.fs from pyproject + use nproc --all
mwiegand
2026-05-09 13:11:19 +0200
-
ff6ce7b091
refactor(l4d2-host): unmount via ExecStopPost — single code path mirroring mount
mwiegand
2026-05-09 13:09:52 +0200
-
fc371711ec
fix(deploy): StartLimit* directives belong in [Unit], not [Service]
mwiegand
2026-05-09 12:56:54 +0200
-
a982995d5b
fix(deploy): ExecStartPre runs overlay helper with
+ prefix, not sudo
mwiegand
2026-05-09 12:55:16 +0200
-
56f5c30296
refactor(l4d2-host): unit's ExecStartPre is the sole code path to the mount
mwiegand
2026-05-09 12:54:05 +0200
-
3d9b7ef771
fix(deploy): WorkingDirectory= prefix
- so ExecStartPre can mount the overlay
mwiegand
2026-05-09 12:51:58 +0200
-
519567e156
fix(l4d2-host): mount overlay via ExecStartPre so enabled units boot cleanly
mwiegand
2026-05-09 12:47:20 +0200
-
b62fc08127
docs(specs): l4d2 cpu pinning — decision record (deferred)
mwiegand
2026-05-09 12:41:40 +0200
-
67b5521eb6
feat(l4d2-web): periodic state poller refreshes Server.actual_state
mwiegand
2026-05-09 12:31:28 +0200
-
8552c559d3
feat(l4d2-host): server lifecycle uses systemctl enable --now / disable --now
mwiegand
2026-05-09 12:28:44 +0200
-
1dd674714a
docs(specs): perf baseline lifecycle — premise check on system vs user units
mwiegand
2026-05-09 12:25:34 +0200
-
3b0bde9b50
docs(plans): l4d2 server lifecycle reboot-and-drift — implementation plan
mwiegand
2026-05-09 12:21:59 +0200
-
72cd7ca1ef
docs(specs): l4d2 server lifecycle reboot-and-drift — design
mwiegand
2026-05-09 12:21:59 +0200
-
20604dd79c
docs(deploy): document CPU isolation in performance-tuning section
mwiegand
2026-05-09 11:06:59 +0200
-
af3171102a
feat(deploy): cgroup-v2 cpuset drop-ins pin system to core 0, game to rest
mwiegand
2026-05-09 11:06:34 +0200
-
c91c029c38
docs(plans): l4d2 cpu isolation — implementation plan
mwiegand
2026-05-09 11:03:37 +0200
-
17b7c2ff10
docs(specs): l4d2 cpu isolation — design
mwiegand
2026-05-09 11:03:37 +0200
-
e5126c8c0b
docs(deploy): tighten perf-tuning escape hatches
mwiegand
2026-05-09 10:15:45 +0200
-
9e0f6f17ef
docs(deploy): performance-tuning escape-hatch section in README
mwiegand
2026-05-09 10:09:40 +0200
-
928519fa34
feat(deploy): install slice + sysctl artifacts and apply via sysctl --system
mwiegand
2026-05-09 10:05:41 +0200
-
7e4a5691ed
feat(deploy): script-sandbox runs in l4d2-build.slice + OOMScoreAdjust=500
mwiegand
2026-05-09 10:01:38 +0200
-
b3fca4772c
feat(deploy): host sysctls for UDP buffers + netdev backlog/budget
mwiegand
2026-05-09 09:53:07 +0200
-
66d83a0282
docs(deploy): point slice files at perf baseline spec
mwiegand
2026-05-09 09:51:48 +0200
-
ad7d73608e
feat(deploy): l4d2-game.slice + l4d2-build.slice with 100:1 weight ratio
mwiegand
2026-05-09 09:48:41 +0200
-
7193163488
feat(deploy): perf-baseline directives on left4me-server@.service
mwiegand
2026-05-09 09:44:12 +0200
-
851e6629aa
docs(plans): l4d2 server host perf baseline — implementation plan
mwiegand
2026-05-09 09:39:12 +0200
-
b6574e308b
docs(specs): perf baseline — fix transient-service phrasing
mwiegand
2026-05-09 09:39:12 +0200
-
db3b149045
docs(specs): l4d2 server host perf baseline — design
mwiegand
2026-05-09 09:31:05 +0200
-
965b67e6fc
fix(l4d2-host): script-sandbox normalizes file perms so web user can read
mwiegand
2026-05-09 01:44:26 +0200
-
c16e780283
feat(l4d2-web): server file tree — enable download symmetric with overlay tree
mwiegand
2026-05-09 01:40:04 +0200
-
aacd95012e
feat(l4d2-web): blueprint rename moves to footer modal — matches overlay/server pattern
mwiegand
2026-05-09 01:37:29 +0200
-
ed12280cf0
feat(l4d2-web): server detail — directory tree of the runtime merged view
mwiegand
2026-05-09 01:35:09 +0200
-
fa686f11e3
feat(l4d2-web): server + overlay detail — live-refresh via HTMX, restructured
mwiegand
2026-05-09 01:27:30 +0200
-
3c4bd6880a
refactor(l4d2-web): detail-page UI — single panel, soft border, footer Delete
mwiegand
2026-05-09 01:26:57 +0200
-
985df970f8
feat(l4d2-web): per-overlay server.cfg aliases — expose checkbox + auto-exec
mwiegand
2026-05-09 01:26:31 +0200
-
c2cf723911
docs(agents): require specs and plans to live in this repo
mwiegand
2026-05-08 21:37:17 +0200
-
a4e9f6cd26
feat(l4d2-web): blueprint overlay picker — drag-list + add-dropdown
mwiegand
2026-05-08 21:37:11 +0200
-
dec4fed809
docs(specs): blueprint overlay picker — drag-list + add-dropdown
mwiegand
2026-05-08 21:32:45 +0200
-
01760a31f5
fix(l4d2-web): textareas — monospace font, consistent rows on blueprint forms
mwiegand
2026-05-08 20:52:12 +0200
-
7b31390b4c
fix(l4d2-web): file tree — uniform vertical spacing across all rows
mwiegand
2026-05-08 20:49:05 +0200
-
4619a91f45
fix(l4d2-web): file tree layout — wrap children to next line, align names
mwiegand
2026-05-08 20:44:41 +0200
-
caa8b83cf0
chore(deploy): rewrite web.env every deploy with machine-id-derived SECRET_KEY
mwiegand
2026-05-08 20:39:02 +0200
-
c958d0352a
fix(l4d2-web): show empty-state when overlay dir is empty, not just missing
mwiegand
2026-05-08 20:32:09 +0200