Tags: SysAdminDoc/project-nomad-desktop
Tags
ci: xvfb-run wrap for Linux pytest + resilient release-job Linux build was failing on `import nomad` -> `_check_deps()` -> `import webview` -> Xlib.error.DisplayNameError because the runner has no display server. Wrap pytest in xvfb-run so pywebview's Xlib import has a virtual display. Also make the release-job tolerate one OS matrix job failing — copy whichever artifacts exist instead of bailing on the first missing one. This unblocks releases when (e.g.) macOS signing or Linux deps fail.
release: v7.65.0 Factory-loop 3-iteration run closes H-14 (create_app thinning), H-09 / V8-11 (lazy blueprint registration), and the latent _broadcast SSE silent-failure bug for Emergency-mode + Family check-in. 11 new test assertions (7 lazy-blueprint concurrency + 4 broadcast regression). Boot time median drops 514 → 474 ms (~40 ms / 8%) on the 3-subprocess sample. create_app() body shrinks 1243 → 663 lines.
postflight [LOW]: encodeURIComponent(packId) in dfInstall/dfUninstall… …Pack Postflight security sweep flagged that the H-05 delegated listener reads packId from a DOM data-attribute and string-concatenates it into the API URL without encodeURIComponent. Current registry schema keeps pack_id safe (alphanum + dashes), but a future registry change (or a server-side drift) that introduces '/', '?', or '#' into a pack_id would silently shift the POST target to an unintended endpoint. Add encodeURIComponent() on both paths — no-op for current pack IDs, harden against drift. Matches the defensive encoding pattern already used elsewhere in the codebase (api.get(…ancodeURIComponent(q))).
v7.61.0: test coverage + roadmap convergence (V8-10/14/16/22/23 done)
Five V8 items close in a single pass. Two (V8-10 template cache, V8-22
auto-update checksum parity) were already shipped and are verified + marked
Done with file:line evidence after this iteration's audit. Three required
real work:
- V8-14: hoisted inline allowed={} sets in emergency.py, maps.py, media.py
to module-level frozenset constants; regression-pinned in
tests/test_allowlists.py (committed separately).
- V8-16: new tests/test_db_integration_file.py exercises init_db() +
create_app() against a file-backed SQLite DB and pins WAL mode,
schema-version gate, core tables, and pool reuse (committed separately).
- V8-23: explicit seed fixtures already landed in tests/conftest.py
(seed_upc_entry / seed_rag_scope_row / assert_*_seeded) — marked Done.
No behavior changes. Version strings synced across config.py, pyproject.toml,
README badge line, CHANGELOG entry, and ROADMAP status table.
v7.59.0 — V8-19 mobile prep nav + V8-20 MkDocs docs site V8-19: Replace button sub-tab strip with <select> at <=600px viewport. _syncMobileSubSelect() rebuilds options when lane changes; switchPrepSub() keeps select value in sync. Scenario grid: 2-col at 480-600px, 1-col below 420px. Workbench strip stacks vertically; resume/pin still visible. V8-20: MkDocs Material docs site with 41-section guide extracted from showHelp() in _app_ops_support.js. docs/guide/ has one markdown file per section. mkdocs.yml covers all 41 sections plus schema/atlas developer docs. GitHub Actions docs.yml deploys to GitHub Pages on master push. scripts/extract_guide_to_docs.py is idempotent extraction helper.
v7.58.0: V8-12 — frontend unit tests (vitest, 48 tests) Add vitest + jsdom test suite for core JS utility functions. Tests cover escapeHtml, formatBytes, timeAgo, parseInventoryCommand, and parseSearchBang — 48 tests, 0 failures. tests/js/utils.js: pure-logic extraction of template functions tests/js/utils.test.js: 48 tests across 5 describe blocks vitest.config.mjs: jsdom environment, tests/js/**/*.test.js glob
v7.57.0: V8-06/V8-09/V8-11 — blueprint tests, middleware module, blue… …print registry - V8-06: 15 new test files, 131 tests covering contacts, tasks, checklists, notes, medical, weather, power, services, security, agriculture, evac_drills, readiness_goals, group_ops, health_family, daily_living - V8-09/V8-11: extract middleware (web/middleware.py) and blueprint registration (web/blueprint_registry.py) from create_app(); reduce app.py by 460 lines setup_middleware(app): rate limiting, CSRF, host validation, LAN auth, security headers, DB cleanup, error handlers — all in one module. MUTATING_METHODS, _CSP_POLICY are module-level constants. register_blueprints(app): deferred imports for all 72 blueprints + alert engine, scheduler, plugin loader.
v7.28.0 — Auth foundation + validation expansion H4 require_auth decorator (desktop-default, opt-in multi-user) + H2 schemas for medical_phase2 + vehicles + M1 pagination for 4 more blueprints + M2 activity logging for checklists + weather See CHANGELOG.md for full details.
PreviousNext