docs: revise REQ-010/163 for archive upload, add REQ-178/179

This commit is contained in:
Andrew-AAAA committed 2026-09-29 08:58:34 +07:00
1 parent 92360660c7
commit 15cc9777b9
3 files changed
+32 -5

No files matched your search

+3 -1
View File
@@ -155,7 +155,7 @@ GET /api/health REQ-073
GET /api/projects REQ-001
POST /api/projects REQ-001,002,004,005
GET /api/projects/{id} # includes label_type_locked: bool (REQ-002)
GET /api/projects/{id} # includes label_type_locked: bool (REQ-002), video_root_linux/video_root_windows (REQ-179)
DELETE /api/projects/{id}
PATCH /api/projects/{id} # class prompts, val_every (REQ-005)
POST /api/projects/{id}/classes # add new class {name, prompt} (REQ-008)
@@ -166,6 +166,8 @@ GET /api/projects/{id}/dataset/download # zip (REQ-054)
GET /api/projects/{id}/library # list of dates (REQ-011)
GET /api/projects/{id}/library/{date} # videos + duration/resolution (REQ-012)
POST /api/projects/{id}/library/dates?date= # create YYYY-MM-DD folder, 409 if it exists (REQ-178)
POST /api/projects/{id}/library/upload?date= # multipart `file`, streamed to disk (REQ-178)
GET /api/projects/{id}/video?rel=… # Range streaming (REQ-013)
POST /api/projects/{id}/batches # {rel, start_sec, end_sec, fps} → extract job
+13 -4
View File
@@ -62,8 +62,9 @@ changes.
## B. Video archive
- **REQ-010** — The video archive lives at a local path (disk or mount); videos are **not
uploaded** through the browser.
- **REQ-010** — The video archive lives at a local path (disk or mount). Videos may be
copied in from disk **or uploaded through the browser** into an existing date folder
(REQ-178).
- **REQ-011** — Archive structure: `<video_root>/<date>/<batch>.<ext>`. The system lists the
dates, and within each date the videos with their batch labels parsed from the filename.
- **REQ-012** — Each video shows its duration, resolution, and whether it has already been
@@ -71,6 +72,13 @@ changes.
- **REQ-013** — Videos play in the browser with seeking (HTTP Range), without copying the
file first.
- **REQ-178** — The Video Archive page can create a `YYYY-MM-DD` folder and upload videos
into it. Uploads are streamed to disk, never overwrite an existing file, and only accept
`video.VIDEO_EXTS`.
- **REQ-179** — The Video Archive page shows a button that copies the archive's host path
to the clipboard, as a Linux path and as a Windows (`\\wsl.localhost\<distro>\...`) path
when known.
## C. Trim & frame extraction
- **REQ-020** — The user sets the in/out range with a timeline slider on the player, and can
@@ -316,8 +324,9 @@ changes.
Each clip carries a sidecar with the server's start time, which the app trusts over reading
the burned-in overlay. Archive folder names remain calendar dates; the app derives cycles
from the real start time, so the folder name is never read as a date.
- **REQ-163** — Nothing in the archive is moved, renamed or written to; it is mounted
read-only. The grouping lives in an index beside it. Timestamps that could not be read, or
- **REQ-163** — Nothing existing in the archive is moved, renamed or deleted; only
user-initiated uploads and folder creation append to it. The grouping lives in an index
beside it. Timestamps that could not be read, or
were read with low confidence, are flagged and can be hand-entered; a hand-entered time
outranks any reading and is never overwritten by a rescan.
+16
View File
@@ -1207,6 +1207,22 @@ rather than direct (`zerotier-cli peers` — a `RELAY` row explains both the los
end to end, but the decode cost is identical to RTSP and it adds ICE and keyframe-loss
failure modes to the counting path. The saving was always on the browser side.
## Task — Archive upload and date folders (REQ-178) `[TODO]`
1. Upload + date-folder API/UI → verify: mkdir returns 200/409/400, upload returns
200/409/400, new file listed in cycle, no `.part` residue; folder+upload work from the
Video Archive page.
## Task — Copy-path buttons (REQ-179) `[TODO]`
1. Copy-path buttons → verify: project payload carries `video_root_linux`/`video_root_windows`;
both buttons copy the correct paths to the clipboard.
## Task — Infra: rw archive mount + nginx body size (REQ-178) `[TODO]`
1. rw mount + nginx body size → verify: compose archive mount is rw (no `RO`), nginx
accepts bodies >512m, `/api/health` 200 after rebuild.
## Known open points
- *Not closed by any task, by choice:* **any rebuild kills the running job.** Task 14's resume