All notable changes to SentinelID are documented in this file.
- Advanced the SentinelID release line to
v2.6.0across release-critical docs, Make help text, desktop package/config metadata, pilot evidence targets, and cloud API metadata. - Added canonical Make wrappers for developer setup and doc validation (
make install-dev,make check-version-consistency,make check-docs-consistency,make check-fresh-clone) so local and CI guidance can point to one command set. - Rewrote the runbook beginner path around
make install-dev,make demo-up,make demo-verify,make demo, andmake demo-down, and updated.env.examplewith dev-safe admin auth defaults so fresh clones no longer require manual env debugging. - Added
scripts/release/check_docs_consistency.shto failmake release-checkwhen key docs drift back to raw script invocations, obsolete env var names, or legacy phase-doc clutter. - Created
docs/archive/policy guidance and added coverage that rootdocs/stays free ofphase*.mdfiles.
- Advanced the SentinelID release line to
v2.5.0across release-critical docs, Make help text, desktop package/config metadata, pilot evidence targets, and cloud API metadata. - Added a dedicated runtime invariant smoke report (
scripts/check_invariants.py) covering loopback binding, bearer enforcement, admin token enforcement, and support-bundle endpoint behavior, with release-check and evidence-pack integration. - Added a desktop warning-noise budget parser (
scripts/ci/check_desktop_warning_budget.py) driven byDESKTOP_WARNING_BUDGET, with structured JSON output for release diagnostics and evidence capture. - Reduced release-check noise by capturing desktop cargo output into diagnostics, surfacing only concise warning-budget summaries and actionable failure tails during triage.
- Updated operator documentation to explain the invariant report, desktop warning budget output, and how to interpret the new evidence artifacts during release failure analysis.
- Advanced the SentinelID release line to
v2.4.0across release docs, recovery/packaging guides, Make help text, desktop package metadata, pilot evidence targets, and cloud API metadata. - Extended release version consistency enforcement to cover
docs/PACKAGING.md,docs/RECOVERY.md,docs/PILOT_FREEZE.md, andapps/cloud/main.pyso release assets, operator docs, and reported API metadata cannot drift. - Added a
.envpreflight guard to failmake release-checkwhen secret values contain unescaped$, and updated admin auth guidance to prefer single-quoted bcrypt hashes orADMIN_UI_PASSWORD_HASH_B64for Docker Compose. - Hardened edge secret storage so production keypair/master-key initialization now fails clearly when OS keychain access is unavailable, unless
ALLOW_KEYCHAIN_FALLBACK=1is set for controlled debugging. - Restricted edge CORS methods/headers to the explicit desktop/admin client set instead of wildcard allowances, with regression coverage for required preflight headers.
- Advanced release line to
v2.3.7across release-critical headers, Make help banner, and desktop package metadata. - Extended release version consistency enforcement to include
apps/desktop/src-tauri/tauri.conf.json(package.version) so release docs and packaged desktop version cannot drift. - Added a release preflight quarantine step for untracked duplicate artifact pairs (
<name>+<name> <n>) under desktop bundled-edge resources to reduce local release-check brittleness without mutating tracked files. - Updated release-tag workflow concurrency policy to avoid canceling in-progress runs for the same ref (
cancel-in-progress: false) and reduce release asset publish interruption risk. - Added a local Cargo patch override for
wry(apps/desktop/src-tauri/vendor/wry) to stabilize Linux CI desktop checks againstwebkit2gtk::SettingsExttrait resolution failures.
- Advanced release line to
v2.3.6across release-critical headers, packaging metadata, and operator-facing docs. - Validated release integrity on
mainafter merge with fresh CI parity andrelease-tagworkflow-dispatch proof. - Regenerated pilot evidence index to reference current PR/main parity URLs and latest manual release-tag validation run.
- Hardened desktop support-bundle flow to use a Tauri backend command with server-side admin token injection, removing renderer-side admin token requirements.
- Added release checks to enforce no admin token leakage in desktop web bundles.
- Hardened release scripts to keep tracked workspace state stable during bundling smoke and to verify tracked git status remains unchanged at the end of
make release-check. - Improved support-bundle collection fallback behavior and added local support-bundle sanitization validation in release preflight.
- Reduced bundling smoke log noise by default while preserving failure diagnostics and optional verbose mode (
BUNDLE_VERBOSE=1). - Added
make check-local-support-bundleas a first-class operator/CI command for validating local support bundle artifacts outside full release preflight. - Extended
make demo-verifyto generate and validate a local support bundle artifact for better parity with release preflight. - Added
make check-release-tagas a direct wrapper for strict tag-to-HEAD alignment checks. - Made support-bundle validation deterministic in
release-checkanddemo-verifyby passing the exact generated artifact path to local validation. - Set desktop workspace resolver to Cargo resolver v2 to eliminate repeated virtual-workspace resolver warnings in build/check output.
- Hardened local support-bundle sanitization to inspect non-JSON text artifacts for unredacted bearer strings and live credential values.
- Persisted edge auth lockout state to local disk (
SENTINELID_LOCKOUT_STATE_PATH) so lockout survives process restart, with regression tests and threat-model updates. - Added repository-root runtime ignore (
/.sentinelid/) to keep local lockout/audit state files out of git status noise. - Added telemetry ingest transport validation: in
EDGE_ENV=prod, non-loopbackCLOUD_INGEST_URLmust use HTTPS (with test coverage and runbook/threat-model updates). - Added automatic telemetry outbox retention sweep: old
SENTrows now expire by policy (TELEMETRY_SENT_RETENTION_DAYS, default 30 days) on a configurable interval. - Encrypted edge audit payloads at rest with backward-compatible legacy row reads and hash-chain verification across both encrypted and plaintext historical entries.
- Added optional telemetry mTLS support (
TELEMETRY_MTLS_CERT_PATH+TELEMETRY_MTLS_KEY_PATH) and custom CA bundle support (TELEMETRY_TLS_CA_BUNDLE_PATH) with strict startup validation. - Added optional telemetry certificate pinning (
TELEMETRY_TLS_CERT_SHA256_PINS) with HTTPS-only validation and runtime peer-certificate fingerprint checks before export. - Added production pin-rollout guardrails for telemetry pinning: overlapping pins required by default (
TELEMETRY_TLS_MIN_PIN_COUNT_PROD=2) with explicit single-pin override (TELEMETRY_TLS_ALLOW_SINGLE_PIN_PROD=1). - Added a live telemetry transport preflight command (
make check-telemetry-transport) plus optional startup preflight (TELEMETRY_TRANSPORT_PREFLIGHT_ON_START) to verify TLS/pinning connectivity before export loops begin. - Added optional
release-checkintegration for transport preflight viaRUN_TELEMETRY_TRANSPORT_PREFLIGHT=1so operators can enforce live TLS/pinning validation in release gates when needed. - Hardened edge bundling to avoid unnecessary network-dependent OpenCV headless reinstalls when
cv2remains healthy after GUI wheel removal, reducing flaky release-check failures under transient proxy/network issues.
- Added release duplicate-pair guard
scripts/release/check_no_duplicate_pairs.shto block accidental<name> 2artifacts when the original path exists. - Integrated duplicate guard into
make release-checkand exposed it asmake check-no-duplicates. - Added
*.tsbuildinfoto.gitignoreto suppress transient TypeScript build artifacts from polluting release worktrees.
- Fixed
publish-release-assetsin.github/workflows/release-tag.ymlby setting explicitGH_REPOcontext forgh releasecommands in non-checkout jobs. - Preserved idempotent evidence asset staging for tag-stable tarballs (
evidence_pack,pilot_evidence,runbook_lock) during release-tag runs.
- Fixed
.github/workflows/release-tag.ymlasset staging to avoid failing when a source artifact already matches the tag-stable destination path. - Hardened evidence asset preparation with idempotent copy behavior for
evidence_pack,pilot_evidence, andrunbook_locktarballs.
- Added stable-tag release publishing for evidence bundles:
evidence_pack_<tag>.tar.gz,pilot_evidence_<tag>.tar.gz, andrunbook_lock_<tag>.tar.gz. - Added known-good runbook lock artifact generation (
make runbook-lock) with checksum manifest and docs snapshot. - Extended pilot evidence index generation to include runbook lock artifact capture and source-path traceability.
- Updated release-facing version headers to
v2.3.2across runbook, release guide, demo checklist, and Make help banner. - Aligned desktop Tauri package metadata version to
2.3.2.
- Completed pilot freeze runbook alignment and evidence workflow for Docker-first self-hosted validation.
- Hardened
scripts/release/build_pilot_evidence_index.shto auto-detect latest successfulrelease-parityrun URLs for pull requests andmainpushes when not provided explicitly. - Extended pilot evidence capture to include successful
release-tagworkflow_dispatchrun proof URLs (auto-detected onmainwhen available, or injected viaRELEASE_TAG_DISPATCH_URL). - Standardized release-facing version headers to
v2.3.1for pilot tag readiness. - Added manual
workflow_dispatchsupport and concurrency controls for.github/workflows/release-tag.ymlto allow post-release pipeline validation without creating a new tag. - Extended
.github/workflows/release-tag.ymlfor stable tags to run release evidence generation and uploadevidence_pack_<tag>.tar.gzandpilot_evidence_<tag>.tar.gzassets to the GitHub release automatically. - Added runbook lock artifact generation (
make runbook-lock) and integratedrunbook_lock_<tag>.tar.gzinto pilot evidence plus stable-tag release asset publishing.
- Migrated edge Poetry config from deprecated
[tool.poetry.dev-dependencies]to[tool.poetry.group.dev.dependencies]to remove Poetry deprecation warnings in local/CI runs. - Added targeted pytest warning filters for third-party
asyncio.iscoroutinefunctiondeprecation noise emitted by current FastAPI/Starlette internals on newer Python runtimes.
- Replaced placeholder edge package author metadata with the project maintainer identity.
- Updated cloud service API metadata version to
2.3.0to match current release line and reduce release/docs drift.
- Tightened cloud bind defaults in
apps/cloud/scripts/start_cloud.sh:- uses
127.0.0.1for non-container local runs whenCLOUD_BIND_HOSTis unset - uses
0.0.0.0for container runtime (/.dockerenvorCONTAINER_RUNTIME=1) - still respects explicit
CLOUD_BIND_HOSToverrides
- uses
- Added release-check failure diagnostic capture in
scripts/release/checklist.sh, including summary metadata, edge log tails, and docker compose state/log snapshots underoutput/ci/logs/. - Added cloud smoke and recovery smoke diagnostic exports under
output/ci/logs/for failed health/recovery runs.
- Hardened
.github/workflows/release-parity.ymlwith explicit read-only workflow permissions and branch/ref concurrency control. - Added retry-aware parity runner
scripts/ci/run_release_parity.shto rerunmake release-checkonce after a failed attempt, with compose cleanup between attempts. - Updated parity workflow to collect and upload deterministic diagnostics (
output/ci/logs/release_check_attempt_*.log, composepsand compose logs) alongside existing release artifacts.
- Documented and enforced
release-parityas the required release-integrity gate while preserving existing fast CI workflows (edge-tests,cloud-tests,desktop-build,docker-build) for rapid feedback.
- Updated release-facing version headers to
v2.1.1acrossRUNBOOK.md,docs/RELEASE.md,docs/DEMO_CHECKLIST.md, and the Makefile help banner. - Extended
scripts/release/check_version_consistency.shto enforce version alignment fordocs/DEMO_CHECKLIST.mdin addition to changelog/runbook/release guide/Make help text. - Updated release documentation to explicitly define the canonical orphan check command path (
scripts/check_no_orphan_edge.sh) and retain the release-path wrapper as compatibility-only.
- Switched
scripts/release/checklist.shandscripts/demo_verify.shto invoke the canonical orphan check path directly to avoid operator ambiguity.
- Replaced public-token admin proxy model with server-side session authentication.
- Added admin session routes:
POST /api/admin/session/login,POST /api/admin/session/logout, andGET /api/admin/session/me. - Added middleware protection for admin routes and cloud proxy routes.
- Updated proxy behavior to reject unauthenticated access, strip browser-provided
X-Admin-Token, and inject server-sideADMIN_API_TOKEN. - Added login page and shell sign-out action for authenticated admin access.
- Removed
NEXT_PUBLIC_ADMIN_TOKENfrom runtime config paths. - Added server-only admin auth env vars:
ADMIN_UI_USERNAME,ADMIN_UI_PASSWORD_HASH,ADMIN_UI_SESSION_SECRET, andADMIN_UI_SESSION_TTL_MINUTES. - Added
CLOUD_BIND_HOSTsupport with safer local default (127.0.0.1) and explicit container bind override (0.0.0.0).
- Added
scripts/release/check_version_consistency.shand integrated it intomake release-check. - Added reusable support bundle sanitization validator:
scripts/check_support_bundle_sanitization.sh. - Added release-path wrapper
scripts/release/check_no_orphan_edge.shfor consistent orphan-check invocation. - Added client bundle exposure check:
scripts/release/check_no_public_admin_token_bundle.sh. - Added release evidence pack builder:
scripts/release/build_evidence_pack.shandmake release-evidence. - Added pilot evidence index builder:
scripts/release/build_pilot_evidence_index.shandmake pilot-evidence. - Hardened release checklist to enforce:
- no
NEXT_PUBLIC_ADMIN_TOKENin runtime config - no admin token leakage in client build artifacts
- compose admin auth wiring
- reliability SLO report generation
- support bundle artifact capture and evidence pack generation
- no
- Added
.github/workflows/release-parity.ymlfor PR +mainrelease-hardening parity. - Release parity workflow now executes full
make release-checkand uploads evidence artifacts. - Added manual
demo-desktop-verifyworkflow for GUI-capable runners to validate scripted demo close behavior.
- Removed deprecated
datetime.utcnow()usage in edge/cloud runtime paths. - Migrated Pydantic v2 config patterns from legacy
class ConfigtoConfigDict/SettingsConfigDict. - Hardened
scripts/perf/bench_edge.pywith retry handling and deterministic diagnostics for transient429/502/503/504and retryable network failures.
- Updated runbook env/auth guidance for session-based admin auth.
- Replaced outdated release guide content with v2.1.0 release process and required evidence model.
- Added non-interactive
make demo-verifyflow, optional scripted desktop close verification, and explicit demo exit semantics in docs. - Added pilot readiness freeze guide and pilot evidence index instructions.
- Hardened edge process cleanup in smoke and checklist scripts to reduce stale local
uvicornedge processes after demo/test flows. - Tightened release checklist behavior around process lifecycle so failed or interrupted runs are less likely to leave residual local state.
- Kept release scope focused on stability and cleanup; no protocol or API contract changes.
- Added one-command demo targets:
make demo-up,make demo-desktop,make demo, andmake demo-down. - Added
docs/DEMO_CHECKLIST.mdwith a strict 10-step operator regression flow for portfolio demos. - Added
make demo-checklistto print/open the checklist quickly.
- Extended
scripts/release/checklist.shwith a mandatory demo-readiness section. - Demo gating now requires: demo stack health, cloud recovery smoke, support-bundle sanitization checks, and desktop bundling smoke.
- Hardened camera initialization handling with explicit paths for blocked permissions, missing camera devices, and device-in-use errors.
- Added stronger retry/cancel paths across login/enroll state transitions to avoid deadlock states.
- Added TypeScript state-machine recovery assertions and switched Tauri dev edge spawn to Poetry-backed
edge_env.shlauncher to avoid wrong-venv leakage.
- Added admin demo badge and top-bar correlation-id usage hint.
- Added events quick actions for
Last 15 minand filtering by current device id.
- Updated
README.md,RUNBOOK.md,docs/PACKAGING.md, anddocs/RECOVERY.mdfor demo-first onboarding.
- Replaced the single-screen desktop experience with explicit
Login,Enroll, andSettingstabs. - Added a persistent bottom status strip with service status, camera status, and diagnostics-driven last sync information.
- Added a clear step-up handoff view (
Additional check required) before automatic continuation of secondary challenges.
- Improved login and enrollment states with progress bars, challenge instructions, quality feedback, and result summaries.
- Added centralized reason-code to user-message mapping for auth/enrollment outcomes and quality gates.
- Added guarded runtime handling so browser-opened UI shows a friendly desktop-runtime-required message instead of raw Tauri internals errors.
- Standardized desktop API error handling into network/auth/config/server classes with actionable user-facing copy.
- Expanded Settings tab with Demo Mode, telemetry toggle/status, outbox/DLQ counters, last export error summary, and identity reset flow.
- Added desktop-triggered support bundle download action against cloud admin endpoint (when desktop env vars are configured).
- Added optional desktop support env vars and screenshot placeholder documentation for release QA.
- Hardened
make dev-edgeto always run through Poetry-managed edge runtime with explicit dependency preflight (pydantic_settings,uvicorn) to prevent wrong-venv leakage. - Added
make check-edge-preflightandmake edge-shellfor consistent edge environment checks and troubleshooting. - Added edge import smoke test to catch startup-time dependency regressions (
pydantic_settings+ app import path).
- Added
make check-tauri-configplus JSON validation for required Tauri metadata in both desktop config files. - Fixed
make dev-desktoppathing so Tauri dev/build execute fromsrc-tauriconsistently (no package-info config mismatch). - Standardized desktop Tauri config versions to
1.8.0.
- Standardized admin cloud env wiring to
NEXT_PUBLIC_CLOUD_BASE_URLandNEXT_PUBLIC_ADMIN_TOKEN. - Updated Docker Compose to use in-network cloud URL (
http://cloud:8000) for admin container runtime. - Added admin-side cloud proxy route (
/api/cloud/...) so browser clients use same-origin requests while server resolves cloud service name. - Improved admin API error message when cloud base URL config is missing.
- Updated release checklist with devx checks (edge preflight, tauri config validation, compose admin env wiring).
- Added optional cloud recovery smoke toggle in release checklist (
RUN_CLOUD_RECOVERY_SMOKE=1). - Updated RUNBOOK and
.env.exampleto document hardened env vars, preflight targets, and venv footgun warning. - Updated admin smoke script to verify UI proxy path and cloud connectivity through admin server.
- Added a stable admin shell with left navigation (
Overview,Events,Devices,Support) and a shared top bar for time range (24h,7d,30d) and search. - Rebuilt the overview dashboard with real API-backed cards and charts (events over time, outcome breakdown, exporter lag trends).
- Upgraded events exploration with richer filters (
device_id,request_id,session_id,outcome,reason_code, time range/search), pagination controls, and an event detail drawer with copy affordances. - Upgraded devices view with reliability columns and per-device drill-down (
/devices/{device_id}) showing recent events and outcome/reliability trends. - Added support operations page with token-protected support bundle generation and direct download flow.
- Extended
/v1/admin/eventsfiltering withreason_code,start_ts,end_ts, and free-textq. - Added
/v1/admin/events/seriesfor chart-friendly timeseries aggregation. - Extended
/v1/admin/statsto support windowed metrics and reliability totals. - Added
/v1/admin/devices/{device_id}for drill-down details. - Added
/v1/admin/support-bundlefor sanitized tarball generation in-cloud.
- Added cloud integration coverage for new admin endpoints and support-bundle response validation.
- Hardened
scripts/smoke_test_admin.shto validate series/device-detail/support-bundle paths.
- Standardized
X-Request-Idpropagation on edge and cloud request middleware. - Added request/session correlation fields through edge audit + telemetry payloads.
- Cloud now persists
request_idandsession_idon telemetry events and supports admin filtering by both.
- Added structured logging configuration for edge and cloud with
LOG_FORMAT=json|textandLOG_LEVEL. - Logs now emit consistent fields (
ts,level,service,request_id,session_id,device_id,event_id). - Added log redaction for token/signature-style fields and bearer credentials.
- Extended cloud admin stats with ingest reliability counters and per-device health summaries.
- Added supportability fields from telemetry (
outbox_pending_count,dlq_count,last_error_summary) for exporter lag visibility.
- Added
scripts/support_bundle.shto generate sanitized support tarballs underscripts/support/out/. - Updated runbook and recovery docs with support bundle usage.
- Hardened smoke scripts to assert and print request correlation headers.
- Extended outbox durability metadata with persisted
last_attempt_at,last_success_at, and sanitizedlast_errorsummaries. - Added jittered exponential retry scheduling and restart-safe replay semantics for
PENDING/DLQtransitions. - Added localhost-only, bearer-protected DLQ replay endpoint:
POST /api/v1/admin/outbox/replay-dlq.
- Updated ingest handling to accept duplicate retry batches idempotently (existing
event_idrows are counted as duplicates, not reinserted). - Preserved uniqueness guarantees (
event_idconstraint) while avoiding retry-induced duplicate writes.
- Expanded edge diagnostics with reliability-first fields:
outbox_pending_count,dlq_countlast_attempt,last_success,last_error_summarytelemetry_flags
- Added outage recovery smoke script:
scripts/smoke_test_cloud_recovery.sh. - Updated release checklist to include cloud-down recovery validation.
- Updated
RUNBOOK.mdanddocs/RECOVERY.mdwith replay and recovery flow details.
- Hardened Tauri edge lifecycle to recover from crashed child process by restarting with a fresh port/token on the next command path.
- Updated desktop API client to refresh edge connection metadata and retry once across edge restarts.
- Added edge coverage for jittered retry metadata, error sanitization, bulk DLQ replay, replay endpoint behavior, and diagnostics reliability fields.
- Added cloud ingest idempotency coverage (retry of same payload does not create duplicate rows).
- Standardized bundled edge launcher at
apps/desktop/resources/edge/run_edge.shwith loopback-only startup and runtime env wiring (EDGE_PORT,EDGE_AUTH_TOKEN,EDGE_ENV). - Updated Tauri production startup to launch bundled edge resources (not Poetry) while preserving existing dev-mode source startup.
- Added edge process shutdown handling on desktop app exit to avoid orphaned child processes.
- Reworked
scripts/bundle_edge_venv.shto build a clean bundled venv, install deterministic runtime dependencies, install edge wheel, and verifyuvicorn. - Added bundled fallback source copy under
apps/desktop/resources/edge/app/for controlled runtime import fallback. - Updated ignore rules to keep bundled runtime artifacts local-only (
pyvenv/,app/).
- Hardened
scripts/smoke_test_bundling.shinto a deterministic distribution smoke path with dynamic port selection, health waits, explicit auth-gating assertion (401), and timeout-based failure output.
- Updated
RUNBOOK.mdwith distribution build guidance, dev vs production edge startup behavior, and no-Poetry runtime sanity command. - Updated
docs/PACKAGING.mdwith bundled layout, clean-machine verification steps, and troubleshooting guidance (Gatekeeper, permissions, port conflicts).
- Updated PR and
mainCI workflows for edge tests, cloud tests, desktop build checks, and docker image builds with dependency caching. - Added tag-triggered release workflow (
v*.*.*) that reruns gating checks and uploads edge benchmark artifacts (scripts/perf/out/*.json, optional logs).
- Hardened release checklist orchestration with explicit step tracking, strict exit behavior, and concise pass/fail summary output.
- Aligned release-check path with CI parity commands (
test-edge,test-cloud,build-desktop-web,check-desktop-rust,docker-build) plus smoke/perf validation.
- Hardened smoke scripts for deterministic behavior:
- required env var validation
- service health wait loops
- strict assertions and clear failure messages
- Standardized benchmark output artifacts under
scripts/perf/out/and added ignore rules for generated JSON/log files.
- Updated
RUNBOOK.mdto keep Docker Compose as the beginner-first path and document cloud local-dev Python constraints (3.11to3.13) with pyenv setup guidance.
- Made fallback embeddings explicit: production now rejects model-unavailable verification with
MODEL_UNAVAILABLEinstead of silently degrading. - Added
ALLOW_FALLBACK_EMBEDDINGS(dev-only opt-in). When fallback is used, responses includeFALLBACK_EMBEDDING_USED. - Extended reason-code catalog for model availability and explicit fallback reporting.
- Tightened enrollment/verification quality gating with explicit
FACE_TOO_SMALL,TOO_BLURRY,POSE_TOO_LARGE,TOO_DARK,NO_FACE, andMULTIPLE_FACES. - Enrollment pipeline now propagates model-unavailable failures explicitly and continues storing encrypted templates from aggregated embeddings.
- Added
scripts/eval/calibrate_threshold.shto generate local FAR/FRR calibration reports underscripts/eval/out/. - Updated
docs/evaluation.mdwith calibration dataset format and report interpretation.
- Added v1.2 coverage for fallback mode controls, model-unavailable endpoint behavior, enrollment lifecycle paths, and policy boundary precedence.
- Replaced cloud startup
Base.metadata.create_all()path with Alembic migrations. - Added cloud Alembic scaffolding under
apps/cloud/alembic/plus baseline schema migration. - Added cloud migration helper (
apps/cloud/migrations.py) and startup migration execution viaalembic upgrade head.
- Updated cloud container startup to wait for Postgres readiness, run migrations, then launch uvicorn (
apps/cloud/scripts/start_cloud.sh). - Wired Docker Compose cloud service to use migration-aware startup command.
- Added migration regression coverage to ensure startup never calls
Base.metadata.create_all. - Added migration bootstrapping test on a fresh sqlite database and idempotent re-run check.
- Updated
RUNBOOK.mdwith manual Alembic migration commands and migration workflow guidance.
- Added edge localhost-only middleware guard that rejects non-loopback clients with
403(health endpoints remain publicly reachable). - Added edge tests covering localhost access and non-local rejection behavior.
- Updated
RUNBOOK.mdwith pipx-based Poetry install instructions for PEP 668-safe macOS setups. - Made Docker Compose the recommended cloud/admin runtime path and documented local cloud Python compatibility (
3.11to3.13). - Added explicit three-terminal local run workflow (cloud/admin, edge, desktop) and clarified edge health endpoints (
/healthand/api/v1/health).
- Added
make dev-edgetarget so runbook commands map directly to available Makefile targets. - Verified
docker compose build adminsucceeds with existing App Router root layout.
- CI pipelines under
.github/workflows/:edge-tests.ymlcloud-tests.ymldesktop-build.ymldocker-build.yml
- Cloud test dependency manifest at
apps/cloud/requirements-dev.txt. - Release preflight automation script:
scripts/release/checklist.sh. - App Router root layout for admin UI:
apps/admin/app/layout.tsx.
RUNBOOK.mdis now the authoritative v1.0.0 command path and aligns with Makefile targets.Makefileexpanded with explicit test/build/docker/smoke/perf/release-check targets.- Admin pages now use stable relative imports for
lib/api. - Admin API client uses
Headersto avoid TypeScript build incompatibilities. - Admin dependencies now include a deterministic lockfile (
apps/admin/package-lock.json).
- Next.js admin build failure caused by missing App Router root layout.
- Docker admin build failure path caused by missing root layout during
next build.
- Updated
docs/RELEASE.mdwith v1.0.0 tagging rules (v1.0.0-rc.N,v1.0.0) and pre-tag checklist.
- Evaluation harness at
scripts/eval/run_eval.shfor repeated authentication runs with sanitized JSON output. - Risk policy tuning controls:
RISK_THRESHOLD_R1,RISK_THRESHOLD_R2, andMAX_STEP_UPS_PER_SESSION.
- Policy flow supports a risk-based step-up path (
ALLOW/STEP_UP/DENY) with reproducible demo guidance.
- AES-256-GCM embedding encryption with a self-describing blob format.
- Master key storage via OS keychain, with development fallback options.
- HKDF-SHA256 per-template key derivation.
- Added
POST /api/v1/admin/rotate-key(localhost-only, bearer-protected). - Rotation is transaction-safe; all template rewrap operations are atomic.
- Added
POST /api/v1/settings/delete_identity. - Supports template deletion, optional audit/outbox cleanup, and optional device key rotation.
- Destroys master encryption key after deletion.
- Token-bucket rate limiting and escalating lockout for auth endpoints.
- Lockout resets on successful authentication.
- Request body size limits on edge and cloud services.
- Max-frame and session-lifetime enforcement for auth sessions.
- Timing-safe admin token comparison and strict telemetry ingest validation.
- Added broad edge/cloud coverage for encryption, rotation, lockout, identity deletion, and forbidden telemetry fields.
- Added
docs/KEY_MANAGEMENT.md. - Updated
docs/privacy.mdanddocs/threat-model.mdwith implemented mitigations.
- Desktop bundling workflow via
scripts/bundle_edge_venv.shandmake bundle-edge. - Durable telemetry outbox with retry and DLQ handling.
- Diagnostics endpoint and request-ID middleware for observability.
- Bundling smoke tests and outbox repository tests.
- Desktop runtime supports bundled edge launcher in production builds.
- Build/test workflow formalized in root
Makefile.
- Added packaging and telemetry recovery guides:
docs/PACKAGING.mddocs/RECOVERY.md
- Admin dashboard and cloud admin endpoints for events, devices, and stats.
- Token-protected admin API and local Docker Compose stack for cloud/admin/postgres.
- Hash-chained audit logging on edge.
- Device binding and ED25519 telemetry signing.
- Cloud ingest service with signature verification and automatic device registration.
- Admin query endpoints and Postgres persistence.
- Active liveness challenge flow (blink/head-turn) and policy-driven auth decisions.
- Desktop camera UX for challenge progression and auth result handling.
- Initial edge + desktop loopback authentication scaffold.