21 Commits
Author SHA1 Message Date
omar 57958b3fe6 Fence key issuance against session reset and restrict write-only job responses 2026-09-26 01:21:03 +03:00
omar 87a501f507 Add scoped personal API keys, OpenAPI documentation and security regressions 2026-09-26 01:02:02 +03:00
omar 9bb6ed29ac Read mutable Windows JSON without locking atomic writers and salvage Defender evidence 2026-09-25 22:11:52 +03:00
omar 95d11b54d4 Set probe macvlan ownership explicitly inside its target namespace 2026-09-25 17:59:40 +03:00
omar 1bbf542262 Add fresh disposable owner and network isolation revalidation probes 2026-09-25 17:55:57 +03:00
omar 72bc2a7b41 Exercise reservation cleanup regression with valid ISO inventory 2026-09-25 14:40:39 +03:00
omar ea12458bc6 Keep strict network renewals fast and handle transient evidence sharing locks 2026-09-25 14:32:19 +03:00
omar 7d5619cca4 Fence network-relevant VM configuration without rejecting normal media delivery 2026-09-25 02:19:10 +03:00
omar 7031a9a8ee Keep network renewals responsive and serialize bounded signed readiness 2026-09-25 01:04:46 +03:00
omar 21d42e6caa Never reuse sandbox addresses across allocation generations 2026-09-25 00:38:48 +03:00
omar e34f3f85d1 Omit empty DHCP domain-search options rejected by Windows 2026-09-25 00:30:33 +03:00
omar 68ce579884 Verify reciprocal PVE firewall veth names from actual iproute2 JSON 2026-09-25 00:27:07 +03:00
omar db11fb8819 Preserve executable gateway hook mode in canonical checkout 2026-09-25 00:21:42 +03:00
omar a96e141ffd Use fixed namespace udhcpc hook without altering host AppArmor 2026-09-25 00:21:15 +03:00
omar 32312548ea Enforce required per-job IPv4 allowlists with leased isolated network broker 2026-09-25 00:18:35 +03:00
omar b3373373e8 Handle occupied VMID holes and recover read-only runner updates 2026-09-24 18:20:08 +03:00
omar dfb285fc2e Run owner jobs in parallel with atomic reservations and harden recovery
Worker
- Per-owner max_active_attempts (default 1, <= concurrent) replaces the
  one-active-attempt-per-owner claim rule; claims fill free slots each tick
  in deterministic created_at/profile_name/id order and record claimed_at.
- Disk, memory and artifact reservations are admitted and inserted in one
  owner-locked transaction; clones reserve measured source disk bytes and
  source RAM plus overhead; pending clone storage and aggregate artifact
  headroom are accounted.
- nextid lock is released right after the allocation reservation; source
  lock waits follow the caller context (20 min ceiling) with specific text.
- Shared settleJobSQL for worker and watchdog; cancellation is reported as
  cancelled instead of failed/error.
- Safety deadline is refreshed when collection starts so the watchdog
  cannot take over a live collection.
- Evidence release continues past failures, keeps the original error and
  stops retrying until an admin re-requests.
- Job ISO media is reconciled after all attempts finish (fixes leaks and the
  parallel-finish race); readiness errors carry the last guest/transport
  cause and distinguish cancellation/lease loss.
- Watchdog prunes expired sessions, login limits and old orphan events;
  worker health events are throttled.

PVE client
- Bounded retries for idempotent GETs on transport errors/5xx only; task
  polling starts at 250 ms; task exitstatus is logged for operators;
  QGA file reads use 1 MiB chunks.

API/store
- Indexes for hot job/claim/quota queries; claimed_at column.
- Native UUID path comparisons with early 404; deterministic run ordering;
  queue_ahead; admin held-attempts listing; stale revision publish guard;
  retry refused while any attempt is unfinished.
- Uploads stream outside the DB transaction with a short locked quota
  recheck; explicit pool sizes; `otche healthcheck` CLI mode.

Recorder
- Network reads and FFmpeg writes happen outside the framebuffer lock;
  wall-clock frame pacing with bounded catch-up and explicit gaps; fsync at
  most once per second after the first durable fragment.

Windows runner
- UTC-safe timestamp parsing everywhere; readiness checks desktop first and
  computes the baseline once; per-nonce probe results; collector publishes
  initial telemetry immediately and reads event logs incrementally.
- Baseline records UAC, Smart App Control, Secure Boot and Device Guard
  registry state; installer stores the LSA secret last and gains read-only
  -Verify and signed -UpdateRunner maintenance modes.
2026-09-24 17:55:13 +03:00
omar 529dcd4026 Store manual profile names and freeze historical run labels 2026-09-23 17:57:09 +03:00
omar 823b048e7c Fix exact-size QGA EOF reads and adopt canonical Git workflow 2026-09-23 17:28:28 +03:00
omar ba93722a0e Remove duplicate ignore patterns without changing exclusions 2026-09-23 17:20:56 +03:00
omar ccb09de352 Publish reviewed standalone otche-backend sources 2026-09-23 17:15:07 +03:00