Commit graph

  • 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