## Phase 0 — Schema Version Field
- Added SCHEMA_VERSION = 2 constant and _schema_version field to DEFAULT_SETTINGS
in muxplex/settings.py to support versioned federation.
- Added _schema_version to SYNCABLE_KEYS so peers see the version but
apply_synced_settings never accepts an incoming version (one-way: send only).
- save_settings() always clamps _schema_version to current SCHEMA_VERSION.
- Added peer_supports_v2() helper for federation handshake.
- 6 new tests under "Schema version (Phase 0)" in test_settings.py.
## Phase 1 — Backend & Frontend Visibility Helpers
Backend (muxplex/views.py):
- Added is_hidden(key, settings), filter_visible(sessions, settings, view,
*, include_hidden=False), visible_count(...), and normalize_session_keys()
to provide read-time visibility filtering.
- Updated module docstring to describe v2 semantics (hidden is a property,
not a placement; legacy enforce_mutual_exclusion retained as v1 backstop).
- 22 new tests covering the full filter matrix and normalization edge cases.
Frontend (muxplex/frontend/app.js):
- Added isHidden, filterVisible, visibleCount to app.js (pre-ES6 idioms).
- Replaced getVisibleSessions body with thin wrapper around filterVisible.
- Replaced 8 raw .length count sites in dropdown, settings, and Manage View
to route through visibleCount.
- Settings panel shows "N sessions (M hidden)" when M > 0.
- Manage View "in this view" count uses includeHidden: true.
- 17 new tests in test_app.mjs covering the same matrix as backend.
- Updated 5 stale tests in test_frontend_js.py.
## Additional Updates
- Updated test_readme.py to exempt internal underscore-prefixed setting keys
from README documentation requirement.
- Updated docs/plans/2026-05-17-hidden-state-redesign-design.md with COE
corrections and design notes (federation truth, Phase 3 deferral, schema
version semantics, local-only pruning state, federation tests).
All 1223 tests in muxplex/tests/ pass. All 17 new JS tests pass.
No raw .length count sites remain in counting code paths.
Generated with Amplifier
Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>