dashboard.html — Feed and Timeline swap places; Feed is every platform's capture now, not Twitter intel, so rows carry their own platform glyph and an unknown platform renders neutral rather than being dropped. A row whose ts is really first_seen reads "seen X ago": saying "just now" for a post of unknown age is a lie that sorts it to the top. dashboard.json — regenerated by the refresher; _yt_caveat dropped, the activate fix made it stale. deploy/home — dash, openbridge, refresh service and timer for this desktop. Refresh every 30min with --skip-foreground, not kdmirah's 10min full pass: there is a human at this box and the metrics table only needs enough resolution to watch engagement move. No Restart= on the oneshot — a down browser is a waiting state the refresher records and exits 0 for. NAPKIN.md — the whiteboard: measured delay budget, the background-render table, the three landmines earned (a DOM signal is a rendering question, %z cannot come back out of struct_time, a pure time sort is not a feed), and the open calls. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
16 lines
511 B
SYSTEMD
16 lines
511 B
SYSTEMD
[Unit]
|
|
Description=socialmag refresh every 30 minutes
|
|
|
|
[Timer]
|
|
# 2 min after boot so Brave has a chance to be up; a pass that finds no browser
|
|
# still records the unknown state rather than skipping.
|
|
OnBootSec=2min
|
|
OnUnitActiveSec=30min
|
|
# A pass takes ~28s with --skip-foreground. 30min is the desktop number, not
|
|
# kdmirah's 10min: this box has a human at it, and the metrics table only needs
|
|
# enough resolution to watch engagement move, not to watch it live.
|
|
Persistent=true
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|