v1.17.0
An unknown key in config.yml — a typo like regexp for regex — is now a hard load error instead of a silent no-op, and config set / providers use stop resetting every field your file doesn't mention to its zero value.
Added
--ignore-unknown-config— a global flag that downgrades an unknown configuration key from a hard failure to a warning for one run. Every ignored key is still named on stderr, and it still has no effect — this is a stopgap for “my config broke on upgrade and I need to run something now”, not a permanent silencer. See “Config strictness” in the README.- README’s provider and MCP tool-argument tables are now generated from the
running code (
internal/meta) instead of hand-maintained — the MCP table in particular grew from 8 listed arguments to the real 19 as a direct result.
Changed
- Unknown configuration keys are now a hard error instead of a silent
no-op. A typo like
regexp:forregex:inconfig.ymlused to parse successfully and simply do nothing — the credential pattern it was meant to add never ran, with no warning. It now fails loudly, naming the file, the exact key, the allowed keys at that level, and a “did you mean” suggestion when one is close. A top-level key that exists only to hold a YAML anchor (for<<:merging) is exempt under anx-prefix. See--ignore-unknown-configabove for the escape hatch.
Fixed
-
config set/providers useno longer silently disable the secret scanner — or anything else your config file doesn’t explicitly mention. In every previously shipped version, writing to a config file that was missing some fields — a very common shape, sincesetuponly seeds the fields it touches — decoded that file into a full config struct and re-marshalled the whole thing. Every field the file didn’t mention round-tripped through its zero value instead of its documented default, not only the ones checked here: booleans tofalse, numbers to0, strings to"". A singlecommitbrief config set provider openairun against a minimal config could silently turn off the secret scanner, the signal-control baseline, and architecture-aware review all at once, with no indication anything had changed.This is not a guaranteed complete inventory for every config shape — if you’ve run
config setorproviders useagainst a hand-trimmed or partial config file on an older version, don’t just check the fields mentioned in the full CHANGELOG entry: runcommitbrief config showand review every value, or runcommitbrief setupagain to get a config that states every field explicitly.config setandproviders usenow patch the existing YAML document in place instead of decoding-and-re-marshalling it, so a write only ever touches the one key it was asked to change — comments, key order, YAML anchors/aliases, and any key the schema doesn’t know about all survive untouched. -
make checkfailed on a maintainer’s Mac before scanning a single file (macOS ships bash 3.2, and a supporting script used a bash-4-only builtin); CI runs on Ubuntu and never saw it. Developer tooling only — no user-facing behavior changed. -
CLI integration tests no longer leak a developer’s real API keys or local config into the test run, which previously made some tests pass in CI and fail (or silently misbehave) locally depending on the machine.