Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
0297f4d
docs: health telemetry platform design spec
styu12 Apr 22, 2026
e94efa1
docs: health telemetry implementation plan
styu12 Apr 22, 2026
2e04515
feat(health): add Severity enum with rank + max_severity helper
styu12 Apr 22, 2026
742fca3
chore: sync uv.lock to project version 0.3.19
styu12 Apr 22, 2026
5e95760
refactor(health): clarify severity _RANK rationale; tidy test imports
styu12 Apr 22, 2026
9813b1c
feat(types): enrich HealthEvent with severity/source/fingerprint/data
styu12 Apr 22, 2026
35afd86
fix(types): shallow-copy HealthEvent data in to_dict; tidy test place…
styu12 Apr 22, 2026
50a3281
feat(health): add WriterStats, Incident, IncidentArtifact, IncidentSn…
styu12 Apr 22, 2026
0b2c055
test(health): cover closed-incident anchor; tighten artifacts type
styu12 Apr 22, 2026
41cf1e7
feat(health): add Detector protocol + DetectorBase
styu12 Apr 22, 2026
53cddc3
fix(health): tighten Detector contracts — MRO-walking __init_subclass…
styu12 Apr 22, 2026
b8f0ff5
feat(health): add DetectorRegistry
styu12 Apr 22, 2026
e0f6c62
feat(health): add IncidentTracker with fingerprint grouping and close…
styu12 Apr 22, 2026
456a687
fix(health): reject empty fingerprints in IncidentTracker.ingest
styu12 Apr 22, 2026
a08af9c
feat(health): add HealthWorker (daemon thread with ingress queues and…
styu12 Apr 22, 2026
23dc42b
refactor(health): HealthWorker polish (anchor, comments, imports)
styu12 Apr 22, 2026
5d581f6
feat(health): add AdapterEventPassthrough detector
styu12 Apr 22, 2026
156eec1
feat(health): add StreamStallDetector (platform-level silence detection)
styu12 Apr 22, 2026
a295bda
feat(health): add FpsDropDetector (target-relative or baseline-learning)
styu12 Apr 22, 2026
d65c8e1
feat(health): add JitterDetector (p95-interval spike detector)
styu12 Apr 22, 2026
463f450
feat(health): add StartupFailureDetector (connect / start_recording e…
styu12 Apr 22, 2026
196a6d2
fix(health): StartupFailureDetector clears pending on success signal
styu12 Apr 22, 2026
6f81de9
feat(health): add BackpressureDetector (writer queue fullness + drop …
styu12 Apr 22, 2026
44445ac
feat(health): add HealthSystem facade with default detector install
styu12 Apr 22, 2026
ed00154
fix(health): HealthSystem start() idempotency + register-after-start …
styu12 Apr 22, 2026
70a53ef
feat(types): add StreamCapabilities.target_hz and FinalizationReport.…
styu12 Apr 22, 2026
141dc4a
feat(writer): add SessionLogWriter.log_incident + incidents.jsonl
styu12 Apr 22, 2026
7acb426
feat(orchestrator): wire SessionOrchestrator to HealthSystem (samples…
styu12 Apr 22, 2026
63bdf89
fix(health): resilient worker ingest + FakeStream health defaults
styu12 Apr 22, 2026
917429b
feat(health): add DepthAILoggerBridge (logging.Handler → HealthEvent)
styu12 Apr 22, 2026
1a42085
feat(oak): declare target_hz, bridge depthai logger for health telemetry
styu12 Apr 22, 2026
11b896f
refactor(viewer): replace HealthEntry/health_count with IncidentSnaps…
styu12 Apr 22, 2026
1f934bb
refactor(viewer-fe): mirror IncidentSnapshot + Severity; drop HealthE…
styu12 Apr 22, 2026
73e6c2c
feat(viewer-fe): add IncidentPanel (replaces HealthTable)
styu12 Apr 22, 2026
2b82690
feat(viewer-fe): stream card severity badge from active incidents
styu12 Apr 22, 2026
967a026
feat(adapters): declare target_hz on UVC / audio / Meta Quest / BLE I…
styu12 Apr 22, 2026
8ad2e25
fix(health): multi-listener callbacks, WriterStats emission, and targ…
styu12 Apr 22, 2026
58e7958
refactor(health): simplify FpsDropDetector tick (remove O(N²) dip-sta…
styu12 Apr 22, 2026
20e3229
ci: build viewer frontend before pytest
styu12 Apr 22, 2026
786bc49
ci: install [all] extras so adapter tests can import their deps
styu12 Apr 22, 2026
b3be799
ci: install dev deps explicitly (dev is a dependency-group, not an ex…
styu12 Apr 22, 2026
d334a1d
test: add future annotations for Python 3.9 compat
styu12 Apr 22, 2026
48ed479
test: add future annotations to remaining tests for Python 3.9 compat
styu12 Apr 22, 2026
5cf566e
docs: partial-connect UX design spec
styu12 Apr 22, 2026
45bf93a
docs: implementation plan for partial-connect UX
styu12 Apr 22, 2026
d510599
feat(health): add Detector.observe_connection_state hook
styu12 Apr 22, 2026
86a9774
feat(health): add per-stream connection-state ingress to HealthWorker
styu12 Apr 22, 2026
1ea763d
feat(health): expose observe_connection_state on HealthSystem
styu12 Apr 22, 2026
f64d8c6
feat(health): add NoDataDetector for connected-but-silent streams
styu12 Apr 22, 2026
4b7b790
feat(health): register NoDataDetector in default suite
styu12 Apr 22, 2026
84236bb
feat(orchestrator): add per-stream connection-state dicts + helper
styu12 Apr 22, 2026
8cf253a
feat(orchestrator): partial-connect — survive per-stream connect() fa…
styu12 Apr 22, 2026
ae671b2
test(orchestrator): update pre-existing tests for partial-connect sem…
styu12 Apr 22, 2026
f63161c
feat(orchestrator): skip failed streams in start/stop recording loops
styu12 Apr 22, 2026
87734e1
feat(orchestrator): disconnect() flips all tracked streams to 'discon…
styu12 Apr 22, 2026
82d1b25
feat(viewer): add connection_state / connection_error to StreamSnapshot
styu12 Apr 22, 2026
3a680fc
feat(viewer): poller reads orchestrator stream state into snapshot
styu12 Apr 22, 2026
8942ad1
feat(viewer): emit connection_state / connection_error over WebSocket
styu12 Apr 22, 2026
6d9feef
feat(viewer-fe): mirror ConnectionState + StreamSnapshot additions
styu12 Apr 22, 2026
964e708
feat(viewer-fe): add Connecting / WaitingForData / Failed overlays
styu12 Apr 22, 2026
5f3deae
feat(viewer-fe): branch StreamCard body on connection_state
styu12 Apr 22, 2026
d5fec41
feat(viewer-fe): show degraded counter on header state chip
styu12 Apr 22, 2026
1f4488a
test(health): integration test for partial connect + incident persist…
styu12 Apr 22, 2026
1b804eb
test(health): integration test for NoDataDetector on real orchestrator
styu12 Apr 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,22 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Set up Node (for viewer frontend)
uses: actions/setup-node@v4
with:
node-version: "20"

- name: Build viewer frontend
working-directory: src/syncfield/viewer/frontend
run: |
# Same lockfile-regeneration dance as publish.yml: optional
# platform-specific deps (e.g. rollup's @rollup/rollup-linux-*)
# aren't re-resolved when a macOS-generated lockfile runs on
# Ubuntu. Regenerating from package.json on CI works.
rm -f package-lock.json
npm install --no-audit --no-fund
npm run build

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
Expand All @@ -24,7 +40,21 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]" || pip install -e . && pip install pytest
# [all] brings in every optional adapter dep (bleak, aiohttp,
# depthai, zeroconf, httpx) so tests that import adapters at
# collection time don't ImportError.
pip install -e ".[all]"
# `dev` lives in PEP 735 [dependency-groups], not
# [project.optional-dependencies], so .[dev] wouldn't resolve.
# Install pytest + its plugins explicitly — keep this list in
# sync with [dependency-groups].dev in pyproject.toml.
pip install \
"pytest>=8.4.2" \
"pytest-aiohttp>=1.1.0" \
"pytest-asyncio>=1.2.0" \
"pytest-mock>=3.12.0" \
"pytest-timeout>=2.4.0" \
"pytest-xdist>=3.6.0"

- name: Run tests
run: pytest -v
Loading
Loading