Summary
config.example.json ships a _comment key inside the retrieval block, but sialib.py accepts only associative_rerank there. Since install.sh installs that example file as the instance config, every fresh install lands in state degraded with a permanent config error.
Evidence
The validator is an exact set difference, with no _comment exemption:
# bin/sialib.py:153-158
retrieval = value.get("retrieval", {})
if not isinstance(retrieval, dict):
_record_config_error("retrieval-must-be-object")
else:
if set(retrieval) - {"associative_rerank"}:
_record_config_error("retrieval-unknown-key")
The shipped example carries two keys:
$ python3 -c "import json;print(list(json.load(open('config.example.json'))['retrieval']))"
['_comment', 'associative_rerank']
And the installer publishes that file as the live config:
# install.sh:9354
atomic_install_file "$REPO/config.example.json" ...
Observed
Immediately after a successful install (SIA 1.7.8, Omarchy/Arch):
SIA · state degraded · pulse 50
readiness READY — corpus, PGLite, and graph reconciled
chains pass (sia:pass)
errors {'sense_custom:0': [{'config': 'config.json', 'error': 'retrieval-unknown-key'}]}
config [{'config': 'config.json', 'error': 'retrieval-unknown-key'}]
Removing the single _comment key from retrieval and restarting sia-brainstem.service clears it:
SIA · state thinking · pulse 52
readiness READY — corpus, PGLite, and graph reconciled
Note that readiness was READY and every chain passed in both cases — only the config validator dissents, so the degraded badge is misleading about the brain's actual health.
Impact
Every install starts degraded. The error names the key but not which block it came from, and the sense_custom:0 prefix points at custom senses, which is where I first looked — the offending key is in retrieval.
Suggested fix
Either accept _comment in retrieval the way the other blocks tolerate it, or drop the key from config.example.json. The first is more consistent: judge, senses, skills, custom_senses and chains all carry a _comment and validate fine.
Environment: SIA 1.7.8, Omarchy/Arch, Linux 7.2.3-arch1-3, Python 3.14.7.
Summary
config.example.jsonships a_commentkey inside theretrievalblock, butsialib.pyaccepts onlyassociative_rerankthere. Sinceinstall.shinstalls that example file as the instance config, every fresh install lands instate degradedwith a permanent config error.Evidence
The validator is an exact set difference, with no
_commentexemption:The shipped example carries two keys:
And the installer publishes that file as the live config:
Observed
Immediately after a successful install (SIA 1.7.8, Omarchy/Arch):
Removing the single
_commentkey fromretrievaland restartingsia-brainstem.serviceclears it:Note that
readinesswasREADYand every chain passed in both cases — only the config validator dissents, so thedegradedbadge is misleading about the brain's actual health.Impact
Every install starts
degraded. The error names the key but not which block it came from, and thesense_custom:0prefix points at custom senses, which is where I first looked — the offending key is inretrieval.Suggested fix
Either accept
_commentinretrievalthe way the other blocks tolerate it, or drop the key fromconfig.example.json. The first is more consistent:judge,senses,skills,custom_sensesandchainsall carry a_commentand validate fine.Environment: SIA 1.7.8, Omarchy/Arch, Linux 7.2.3-arch1-3, Python 3.14.7.