Delete upstream docs apparatus; rewrite README for the fork

The CDiT fork is single-household and was carrying an entire upstream
docs/ mkdocs site documenting features the fork has removed (sleep mode,
take-over-control, brightness_mode selector, YAML config). The README
mostly auto-generated from those pages via markdown-code-runner.

What's gone:

- docs/ — all 11 pages + assets + run_markdown_code_runner.py
- .github/workflows/docs.yml — zensical+shinylive GitHub Pages build
- .github/workflows/markdown-code-runner.yml — auto-edit of README from docs/
- .github/update-services.py / update-strings.py — would clobber the
  hand-edited services.yaml / strings.json
- scripts/update-generated-content — orchestrator for the above
- custom_components/adaptive_lighting/_docs_helpers.py + docs_gen.py —
  only used by the deleted markdown-code-runner
- zensical.toml — docs-site config
- "docs" dependency group in pyproject.toml (markdown-code-runner,
  shinylive, zensical, etc.) + lock regenerated

What's new:

- README.md rewritten to describe the fork's actual surface — 3 switches,
  4 number entities, 3 sensor entities per profile, 2 services (apply +
  change_switch_settings), entry-only setup, UI tuning, sun source.
  Preserves the existing "What's new in 2.1" / "2.2" block quotes.
- webapp/README.md annotated to flag the Shiny simulator models the
  upstream curve (with brightness_mode, sleep mode, etc.) and does not
  reflect the fork.
- CLAUDE.md command table no longer references update-generated-content.

Sensor.py + test_sensor_platform.py: incidental black reformat from the
lint pass (multi-arg function calls split per line).

Tests still pass (123/123). Lint clean. Sensors implementation
unchanged.
This commit is contained in:
Casey 2026-05-21 10:23:04 +02:00
commit bba0ef31d8
31 changed files with 165 additions and 2999 deletions

View file

@ -49,7 +49,9 @@ def _unique_id(entry, key: str) -> str:
def _resolve_entity_id(hass, entry, key: str) -> str | None:
return er.async_get(hass).async_get_entity_id(
"sensor", DOMAIN, _unique_id(entry, key),
"sensor",
DOMAIN,
_unique_id(entry, key),
)
@ -63,7 +65,9 @@ async def test_three_sensor_entities_registered(hass) -> None:
registry = er.async_get(hass)
for key in SENSOR_KEYS:
eid = registry.async_get_entity_id(
"sensor", DOMAIN, _unique_id(entry, key),
"sensor",
DOMAIN,
_unique_id(entry, key),
)
assert eid is not None, f"Missing sensor entity for {key}"
assert eid.startswith("sensor.")
@ -331,9 +335,9 @@ async def test_friendly_names_compose_correctly(hass) -> None:
if fname in names.values():
continue
# Any other entity's friendly name must not match a sensor's.
assert fname not in all_friendly, (
f"Collision: {fname} appears on both sensor and another entity"
)
assert (
fname not in all_friendly
), f"Collision: {fname} appears on both sensor and another entity"
# ---------------------------------------------------------------------------
@ -370,11 +374,13 @@ async def test_unload_detaches_dispatcher(hass) -> None:
# dispatcher subscription leaked.
ent_reg = er.async_get(hass)
eid = ent_reg.async_get_entity_id(
"sensor", DOMAIN, _unique_id(entry, "output_brightness"),
"sensor",
DOMAIN,
_unique_id(entry, "output_brightness"),
)
if eid is not None:
state = hass.states.get(eid)
if state is not None:
assert state.state != "99", (
"Dispatcher subscription leaked: sensor updated after unload"
)
assert (
state.state != "99"
), "Dispatcher subscription leaked: sensor updated after unload"