phase: 154_sync_status_freshness
Build and Push Containers / build-and-push-app (push) Successful in 2m26s
Build and Push Containers / build-and-push-db (push) Successful in 16s

All 4 task files exist in `complete/`, and only `00_phase.md` remains in `todo/`. This is the final verification pass. I'll read through the task files and check the current state of the code.
This commit is contained in:
2026-10-04 14:24:33 -04:00
parent 966c4b0540
commit c275735db4
36 changed files with 2526 additions and 99 deletions
+16 -3
View File
@@ -306,6 +306,15 @@ first).
- Re-uploading the same filename replaces the source **in place** (no
second folder, no duplicate row).
- After the 202 the form settles into the ready-for-sync line
"Uploaded <source> (<stamp>) — press Sync sources to import it." —
the completion stamp (phase 154: the same date-qualified freshness
rule as the sync badge — `HH:MM` on the same local day,
`M/D, h:MM AM/PM` otherwise, `M/D/YYYY` across years) rides the
line on EVERY render path, so a line that outlives its upload is
self-dating: after a reload the source name is gone (it was
page-local) but the stamp survives, coming from the server
payload's `finished_at`.
- Zip-bomb guard: absolute member paths, `..` traversal, and symlinks
escaping the unpack folder are rejected.
- Archives unpack under `BOR_UPLOAD_DIR` (default `~/bor-sources/uploads`).
@@ -358,9 +367,13 @@ whole git-source refresh in one click:
pre-phase result-line announcer into the box). At settle the box
STAYS visible to carry the result line — the counts line
("N added · …") after a success, "Sync cancelled" after a cancel —
and the button leaves the running state (the "Synced HH:MM" pill
after a success, the retry-ready "Sync sources" pill after a
failure); the box hides only when its text is empty (a failed sync
and the button leaves the running state (the "Synced <stamp>" pill
after a success — the date-qualified freshness stamp (phase 154):
`HH:MM` on the same local day, `M/D, h:MM AM/PM` otherwise
(`M/D/YYYY` across years — a badge that tells the owner *when*),
the bare "Synced" when the stamp is missing — the retry-ready
"Sync sources" pill after a failure); the box hides only when its
text is empty (a failed sync
— the banner + modal carry the error — and the true idle). No
client-side timeout — a clone + embed can legitimately take minutes.
- One sync at a time: a second trigger while a run is in flight gets a