Fix assist_satellite config and validate app configs in CI - #15
Merged
Merged
Conversation
The peripheral options added in 0f7079a left `%(default)s` in the volume step default, copied from the upstream argparse help string where it is a format placeholder rather than a value. `%` cannot start a plain scalar, so config.yaml failed to parse and the Supervisor skipped the app entirely, making it disappear from the store instead of reporting an error. Also correct the schema entries for the same options: - peripheral_host is a bind address, not an int - peripheral_volume_step is a float between 0 and 1 upstream - enable_colored_debug was missing, and the Supervisor rejects options that the schema does not define In the run script, three peripheral flags were wrapped in backticks, so bash tried to execute `--peripheral-host` as a command and appended an empty argument instead of the flag. The colored debug flag is spelled `--colored-debug` upstream, so enabling that option made argparse exit with "unrecognized arguments". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ten options had no entry under `configuration`, so they were shown in the UI as raw key names. Five are the new peripheral and colored debug options; the other five (wakeup_sound, mute_sound, unmute_sound, preferences_file, download_dir) predate that work. Descriptions follow the upstream argparse help text, including that enabling colored debug logging also turns on debug logging. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Quote the array expansion passed to the service entry points. Unquoted
`${flags[@]}` re-splits and glob-expands each element, so an intents path
containing a space or a glob character would be passed as several broken
arguments. assist_satellite already quoted this correctly.
Fail loudly when `cd` fails rather than continuing in whatever the working
directory happens to be. In default-agent this mattered most, since the
`cd` was followed by `git reset --hard origin/main`.
The remaining changes are the pattern assist_satellite/finish already uses
for the same s6 boilerplate: a targeted SC2155 directive in place of the
unused `declare exit_code`, and no `$` inside the arithmetic expansion.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A config.yaml that does not parse makes the Supervisor skip the app silently, so the failure shows up as an app missing from the store rather than as an error. Nothing in CI caught that. The config job checks that each app's config.yaml parses, that required keys are present, that every option has a schema entry and vice versa, and that each default type-checks against its schema entry. Type checks mirror the Supervisor's own coercion rules rather than being stricter, so a numeric default under a `str` entry is accepted the way the Supervisor accepts it. A non-string version is rejected, because `version: 1.10` parses as the float 1.1 and silently moves the version backwards. It also compares each app's options against its translations. Only English is required to be complete; other languages are checked for stale keys only, since translations lag behind by nature. The shellcheck job finds scripts by shebang, since the s6 service scripts have no extension and a `#!/command/with-contenv bashio` shebang that shellcheck does not recognise on its own. Co-Authored-By: Claude Opus 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.
The problem
assist_satellitedisappeared from the apps page. Itsconfig.yamlstoppedparsing as YAML:
The peripheral options added in 0f7079a left
peripheral_volume_step: %(default)s,copied out of the upstream argparse help string where
%(default)sis a formatplaceholder rather than a value.
%is a reserved YAML indicator and cannot starta plain scalar. The Supervisor skips an app whose config it cannot read, so the
failure surfaced as the app going missing rather than as an error anywhere.
Fixes
assist_satellite/config.yaml:%(default)s→0.05, upstream'sPeripheralAPIServer.DEFAULT_VOLUME_STEPperipheral_hostschemaint→str; it is a bind address, and the0.0.0.0default could never have validated as an int
peripheral_volume_stepschemastr→float(0,1), matching upstream'stype=floatenable_colored_debug: bool; the Supervisor rejects optionsthe schema does not define
assist_satelliterun script:--peripheral-hostas a command and appended an empty argument in its place--enable-colored-debug→--colored-debug, which is how upstream spells it;enabling that option made argparse exit with "unrecognized arguments"
Translations: ten options had no
configurationentry and displayed as raw keynames. Five are the new peripheral/colored-debug options;
wakeup_sound,mute_sound,unmute_sound,preferences_fileanddownload_dirpredate them.CI
Neither failure was caught by anything, because there was no CI. This adds two
jobs on pull requests and pushes to
main.App configs — each
config.yamlparses; required keys present; every optionhas a schema entry and vice versa; each default type-checks against its schema
entry; options match
translations/en.yaml. Type checks mirror the Supervisor'sown coercion rules rather than being stricter, so a numeric default under a
strentry is accepted just as the Supervisor accepts it. A non-string
versionisrejected, since
version: 1.10parses as the float1.1and silently moves theversion backwards. Only English translations must be complete; other languages
are checked for stale keys only, since translations lag by nature.
Shell scripts — shellcheck over every script, found by shebang because the s6
service scripts have no extension and a
#!/command/with-contenv bashioshebangshellcheck does not recognise on its own.
Confirmed both jobs catch the original bugs: the config job reports the YAML error
at line 34 and, with only that repaired, still flags the
peripheral_hosttype andthe undefined
enable_colored_debug. shellcheck flags the backticks as SC2215,"This flag is used as a command name".
Pre-existing shellcheck findings
The shellcheck job would have been red on arrival from findings in
default-agentand
voice, so those are fixed here too. Two are real bugs: unquoted${flags[@]}in both service entry points re-splits and glob-expands each element(
assist_satellitealready quoted it correctly), andcdwithout a failure branchpreceded
git reset --hard origin/mainindefault-agent. The rest follow thepattern
assist_satellite/finishalready uses for the same s6 boilerplate.Version
Left at 1.1.15 deliberately. The break landed at 1.1.14 and predates the 1.1.15
bump, so every commit carrying
version: 1.1.15also had unparseable YAML — itnever entered a store index and nobody can have it installed. The highest
installable version is 1.1.14, so existing installs see 1.1.15 as a normal update
once this merges. The CHANGELOG entry and
ARG LINUX_VOICE_ASSISTANT_VERSIONalreadyagree with 1.1.15.
🤖 Generated with Claude Code