1 Commits
Author SHA1 Message Date
clawbot f665ab17bc fix(backend): give each report file a name of its own (closes #61)
check / check (push) Successful in 49s
Report files were named by a millisecond timestamp and created with
O_EXCL, so two flushes in the same millisecond, such as a flush for
size and the final flush at shutdown, got the same name and the second
failed, losing its reports. Each name now carries a number after the
timestamp that goes up by one for each file the server starts to
write, so names still sort by time and never repeat within a run; a
failed write leaves a gap in the numbers. The buffer reads the time
through a clock the new test stops, so its two flushes share one
timestamp on every run; the 1 ms pauses earlier tests used to dodge
the collision are gone.

Model: opus-5-5
2026-09-29 04:23:25 +00:00
2 changed files with 10 additions and 8 deletions
+5 -4
View File
@@ -24,10 +24,11 @@ latest run passes.
# Completed Steps # Completed Steps
- 2026-09-29: report file names can no longer collide (issue #61): each is - 2026-09-29: report file names can no longer collide (issue #61): each is
`reports-<timestamp>-<number>.jsonl.zst`, where the number counts the files `reports-<timestamp>-<number>.jsonl.zst`, where the number goes up by one for
written since the server started, so two flushes in the same millisecond, such each file the server starts to write, so two flushes in the same millisecond,
as a flush for size and the final flush at shutdown, each get a file of their such as a flush for size and the final flush at shutdown, each get a file of
own instead of the second one failing their own instead of the second one failing. A failed write leaves a gap in
the numbers.
- 2026-09-29: nginx listens on `PORT` (issue #26), 8080 when unset or empty: the - 2026-09-29: nginx listens on `PORT` (issue #26), 8080 when unset or empty: the
nginx image renders `nginx.conf` as a template at container start, filling in nginx image renders `nginx.conf` as a template at container start, filling in
`PORT` and no other variable. `bin/entrypoint.sh` refuses to start when `PORT` `PORT` and no other variable. `bin/entrypoint.sh` refuses to start when `PORT`
+5 -4
View File
@@ -104,10 +104,11 @@ which `netwatch` owns.
Reports are written as `reports-<timestamp>-<number>.jsonl.zst` files in Reports are written as `reports-<timestamp>-<number>.jsonl.zst` files in
`DATA_DIR`. The timestamp is in UTC to the millisecond, so the names sort by `DATA_DIR`. The timestamp is in UTC to the millisecond, so the names sort by
time; the number counts the files the server has written since it started, so time. The number starts at 1 when the server starts and goes up by one for each
two files written in the same millisecond still get different names. Each file file the server starts to write, so two files written in the same millisecond
contains one JSON object per line, compressed with zstd. Files are created with still get different names, and a failed write leaves a gap in the numbers. Each
`O_EXCL` to prevent overwrites. file contains one JSON object per line, compressed with zstd. Files are created
with `O_EXCL` to prevent overwrites.
### Report limits ### Report limits