[2026-08-24] eagle: personal/projects/personal-os/eagle-dashboard.md personal/tech/bilety-oxota-interaktiv.md

This commit is contained in:
Alexey Martemyanov
2026-08-24 15:32:37 +06:00
parent 975e6ed687
commit c8988eb058
2 changed files with 66 additions and 0 deletions
@@ -314,6 +314,7 @@ When a launchd cron is created and `launchctl print gui/<uid>/<label>` shows `la
## History
|- 2026-08-24: **bilety.html added to Pages.** Deployed interactive hunting-license exam page (`/Library/WebServer/Documents/bilety.html`, ~894 KB). 176 question cards, 532 answer buttons. All markup embedded in the HTML: each answer is a `<button class="whale-a" data-correct="N" data-n="M" onclick="...">`, correct-answer number hidden from display (lives only in `data-correct`), inline onclick colors wrong=red / correct=green. No JS-builder script — everything static. Built from `~/Downloads/origen_raw.html` via `~/Downloads/gen2.py`. Pitfalls learned: (1) `_read_page_metadata()` reads files live — no dashboard restart needed; (2) webroot is root-owned, `sudo cp` needed unless perms loosened; (3) relative `href`/`src` deps must sit in webroot too.
|- 2026-06-25 (round 10): **Launchd status — PID/exit code from launchctl list.** Added PID parsing (next-format "PID" = N) and LastExitStatus parsing in `_list_launchd_crons()`. `last_status` is None for running processes, integer exit code otherwise. Frontend shows `· exit <code>` or `· never run`. Legacy tab-separated format no longer supported. macOS launchctl returns next-format plist (not JSON) — regex parsing, not json.loads.
|- 2026-06-25 (round 9): **RunAtLoad checkbox for launchd crons.** Added `RunAtLoad` field to launchd plist creation. Backend: `main.py` line 636 changed from `pd["RunAtLoad"] = False` to `pd["RunAtLoad"] = body.get("run_at_load", False)`. Frontend: checkbox "Run on load" in cron modal, shown only for source=launchd via `x-show`; `openAddCron()`, `openCronEdit()`, `saveCronModal()` all wired. Backend `_list_launchd_crons()` returns `run_at_load` for edit modal. **Also fixed:** `_msg` auto-dismiss bug — stale object reference after `fetchCrons()` replaced with `find` in fresh array (both crons and services).
- 2026-06-25 (round 7): **Launchd schedule — source-dependent validation.** `validateSchedule()` now takes `source` param. For `launchd`: only `every Ns/m/h/d` accepted; cron and ISO rejected with explicit message. For Eagle/Whale: all three formats. Hints, placeholders, and `prettySchedule()` also differ by source. `Query` import added to FastAPI.