Add root README.md - #8
Open
coding-jona wants to merge 9 commits into
Open
Conversation
Now that CI actually runs the full suite (windows-latest, previously masked by the broken cross-platform matrix), three tests failed because their dependency is deliberately not installed by default: - test_core.py imported ovos_bus_client unconditionally at module level. It's intentionally kept out of requirements.txt (ADR-002 / TD-007: OVOS deps live in requirements-ovos.txt, only needed for --no-gui mode). Now raises unittest.SkipTest on ImportError instead of failing the whole module. - test_command_engine.py's test_gui_mode_uses_qt_presenter patched confirmation_dialog.QApplication, which doesn't exist as a module attribute when PySide6 isn't installed (deprecated legacy UI stack, TD-006). Now skips via the module's own _HAS_QT flag. - test_integrations.py's test_push_to_talk mock.patch'd pynput.keyboard.Controller; pynput is an optional Discord push-to-talk dependency (see requirements.txt's "Legacy / optional feature deps" comment block) and isn't installed by default. Now skipped via importlib.util.find_spec when pynput is absent. The right fix here is skipping, not installing these packages in CI - adding PySide6/OVOS back to the default install would reopen TD-005/ TD-006/TD-007, which were deliberately resolved by keeping them out. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Full log review (7 remaining ERROR/FAIL after the first pass) turned up two categories: Test-runner gap: - test_language_swap.py and test_workspace_resolver.py are written as bare pytest-style functions/fixtures, not unittest.TestCase classes. `python -m unittest discover` only collects TestCase subclasses, so these files' tests silently never ran under CI at all - not a new regression, this addresses TD-015 properly (requirements-dev.txt already existed but CI never installed it or used pytest as the runner). Switched ci.yml to `pip install -r requirements-dev.txt` + `pytest workspace/debug/tests`, which runs both styles. - test_security.py's test_install_persona_removes_key_field imports ovos_engine (which imports ovos_bus_client at module level, not in requirements.txt per ADR-002/TD-007) - now skips cleanly, same pattern as the previous test_core.py fix. Real, pre-existing bugs surfaced now that the suite actually runs: - test_mesh_plugin.py imported WIKO/ZTE from heartbeat.py, but that module deliberately uses device-neutral role names (HUB, SECONDARY) instead of brand names per its own docstring - test was never updated when the constants were renamed. Fixed the test's imports/ usages, left the ZTE_BLADE_V70 wire-format string literals alone (those are real device identifiers, not the renamed constants). - test_plugins.py's dynamically-generated dummy plugin source still imported `from tarno.ai...` / `from tarno.plugins...` - missed by the tarno -> tarno_backend rename pass since it's a string literal, not a real import statement. Fixed both occurrences. - test_provider_switch.py's Ollama switch test failed because OllamaProvider.__init__ does a real connectivity check against localhost:11434 (see ollama_client.py's _verify_connection) - no Ollama server exists in CI. The test's actual intent (per its own docstring) is set_provider's no-API-key routing logic, not real Ollama reachability, so patched _verify_connection out instead of trying to stand up a real Ollama server in CI. Also fixed a stale tarno/grpc/tarno.proto path reference in requirements-dev.txt's comment (rename pass missed it, same class of issue as the plugin test fix above). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… repo ids A GitHub Copilot review of the CI logs flagged the 401 traceback for "https://huggingface.co/de-DE-ConradNeural/resolve/main/model.onnx" as the CI job's primary failure cause. It isn't - that exception is caught and logged in synthesizer.py's _init_engines(), which already moves on to try the next fallback engine; the actual job failures were the separate ERRORs/FAILs fixed in the previous two commits. But it's a real bug worth fixing regardless: SpeechSynthesizerTests (test_voice.py) configures voice="de-DE-ConradNeural" (an edge-tts neural voice name), and _init_engines() threads that same tts_config into every fallback engine it tries, including "piper" - which then attempts to resolve it as a HuggingFace repo id and fails. edge.py already guards the opposite case (a Piper repo id reaching EdgeTTSEngine) by checking for the "-"+"Neural" pattern and deriving a proper voice from the language instead. Piper had no equivalent check. Added the mirrored guard: PiperEngine now falls back to its own _DEFAULT_REPO when the configured voice looks like an edge-tts name, instead of attempting a doomed download. Copilot's suggested fixes (correct the HF URL, add an HF auth token) were treating the symptom - de-DE-ConradNeural was never meant to be a HuggingFace repo id in the first place, no URL or token would fix that. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Both only became visible once the WIKO/ZTE import fix let this file's tests actually collect and run: - _make_router() passed wiko_bridge=bridge, but MeshRouter.__init__'s actual parameter is hub_bridge (its hub_node_match/secondary_node_match defaults legitimately still say "WIKO"/"ZTE" - those are wire-format substring-match patterns against real device identifiers, deliberately not renamed, unlike the hub_bridge param name itself). - test_draft_on_scenario_change asserted "Hub-Rolle" in the PC_FALLBACK draft message, but persona.py's comment() randomly picks between multiple phrasings per event type (see its docstring) and "Hub-Rolle" only appears in the HUB_FULL_MESH variants, not HUB_FALLBACK_PC (the scenario this test actually triggers). Asserts against both actual HUB_FALLBACK_PC phrasings instead. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…E rename My earlier WIKO->SECONDARY / ZTE->HUB substitution had the mapping backwards. router.py's actual defaults are hub_node_match="WIKO" and secondary_node_match="ZTE" (a sender_node containing "WIKO" classifies as HUB, "ZTE" classifies as SECONDARY) - the opposite of what I assumed from the "Node A: ZTE Blade V70" doc reference. Swapped HUB<->SECONDARY throughout the file to match router.py's real classify/tick logic (hub_online -> FULL_MESH, secondary_online -> PC_FALLBACK). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…er fix SpeechSynthesizerTests._make_config() sets voice="de-DE-ConradNeural" (an edge-tts name). Before the piper.py fix, PiperEngine crashed immediately trying to use that as a HuggingFace repo id, so this test class incidentally never made a real network call - the crash was fast and got silently swallowed by _init_engines()'s per-engine try/except. Now that PiperEngine correctly falls back to its default German voice instead of crashing, SpeechSynthesizer construction makes a real (successful) HuggingFace download on every test in this class - slow, network-dependent, and apparently enough to perturb test_speak_does_not_hang_forever_if_get_busy_never_clears's timing-sensitive watchdog assertions on one Python version. Added a setUp() that patches piper.py's hf_hub_download to fail deterministically, restoring the fast/network-free/edge-tts-only behavior this test class always effectively depended on - without relying on the underlying bug that used to make it fail. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Skip tests needing optional/legacy deps not in requirements.txt
Project overview, architecture summary, repo layout, getting-started build/test commands, and a documentation map pointing at CLAUDE.md, the ADRs, technical-debt catalog, and workspace/plans/. Links into workspace/*_README.md files that exist on the dev branch (PR #7, not yet merged) - they'll resolve once #6 and #7 land, in the same order the rest of this session's restructuring work has merged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Repo had no root
README.mdat all (Task #1 from this restructuringeffort). Adds one: project overview, feature list, architecture summary,
repo layout, getting-started build/test commands, and a documentation map.
Notes for reviewers
workspace/*_README.mdfiles that exist ondev(Add README + cross-references for every workspace/ subfolder #7) but aren't merged tomainyet - they'll resolve once Skip tests needing optional/legacy deps not in requirements.txt #6 andAdd README + cross-references for every workspace/ subfolder #7 land. No broken links once the merge order catches up.
LICENSEfile exists yet, so the License section deliberately says"not yet decided" rather than claiming a license.
🤖 Generated with Claude Code