zeroclaw/src
Argenis d3c8ff6abe
feat(config): warn on unknown config keys to prevent silent misconfig (#1410)
* ci(homebrew): prefer HOMEBREW_UPSTREAM_PR_TOKEN with fallback

* ci(homebrew): handle existing upstream remote and main base

* fix(skills): allow cross-skill references in open-skills audit

Issue: #1391

The skill audit was too strict when validating markdown links in
open-skills, causing many skills to fail loading with errors like:
- "absolute markdown link paths are not allowed (../other-skill/SKILL.md)"
- "markdown link points to a missing file (skill-name.md)"

Root cause:
1. `looks_like_absolute_path()` rejected paths starting with ".."
   before canonicalization could validate they stay within root
2. Missing file errors were raised for cross-skill references that
   are valid but point to skills not installed locally

Fix:
1. Allow ".." paths to pass through to canonicalization check which
   properly validates they resolve within the skill root
2. Treat cross-skill references (parent dir traversal or bare .md
   filenames) as non-fatal when pointing to missing files

Cross-skill references are identified by:
- Parent directory traversal: `../other-skill/SKILL.md`
- Bare skill filename: `other-skill.md`
- Explicit relative: `./other-skill.md`

Added 6 new tests to cover edge cases for cross-skill references.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(config): warn on unknown config keys to prevent silent misconfig

Issue: #1304

When users configure `[providers.ollama]` with `api_url`, the setting is
silently ignored because `[providers.*]` sections don't exist in the
config schema. This causes Ollama to always use localhost:11434 regardless
of the configured URL.

Fix: Use serde_ignored to detect and warn about unknown config keys at
load time. This helps users identify misconfigurations like:
- `[providers.ollama]` (should be top-level `api_url`)
- Typos in section names
- Deprecated/removed options

The warning is non-blocking - config still loads, but users see:
```
WARN Unknown config key ignored: "providers". Check config.toml...
```

This follows the fail-fast/explicit errors principle (CLAUDE.md §3.5).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Will Sarg <12886992+willsarg@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:02:59 +08:00
..
agent fix(provider): preserve reasoning_content in tool-call conversation history 2026-02-22 17:40:48 +08:00
approval refactor(sync): migrate remaining std mutex usage to parking_lot 2026-02-18 00:45:26 +08:00
auth refactor(auth): add Gemini OAuth and consolidate OAuth utilities (DRY) 2026-02-21 18:53:11 +08:00
channels refactor(telegram): remove redundant else in startup probe 2026-02-24 16:02:59 +08:00
config feat(config): warn on unknown config keys to prevent silent misconfig (#1410) 2026-02-24 16:02:59 +08:00
cost fix(agent): parse MiniMax tool call formats for execution 2026-02-21 12:36:28 +08:00
cron fix: route heartbeat outputs to configured channels 2026-02-24 16:02:59 +08:00
daemon fix: route heartbeat outputs to configured channels 2026-02-24 16:02:59 +08:00
doctor Use channels(&self) and channels_except_webhook(&self) 2026-02-21 19:38:19 +08:00
gateway feat: add WATI WhatsApp Business API channel (#1472) 2026-02-23 08:02:00 -05:00
hardware fix(ci): restore containerized validation on main (#1096) 2026-02-20 07:48:58 -05:00
health refactor(sync): migrate remaining std mutex usage to parking_lot 2026-02-18 00:45:26 +08:00
heartbeat fix: route heartbeat outputs to configured channels 2026-02-24 16:02:59 +08:00
hooks fix(hooks): harden dispatch and outbound message guardrails 2026-02-21 13:34:09 +08:00
integrations feat(providers): add Novita AI as OpenAI-compatible provider (#1496) 2026-02-23 07:58:49 -05:00
memory fix(security): remove sensitive fields from Debug impls 2026-02-20 22:06:21 -08:00
observability fix(observability): add OTLP paths to OTel endpoints 2026-02-21 17:07:31 +08:00
onboard feat(providers): add Novita AI as OpenAI-compatible provider (#1496) 2026-02-23 07:58:49 -05:00
peripherals fix(ci): restore containerized validation on main (#1096) 2026-02-20 07:48:58 -05:00
providers fix(providers): disable Responses API fallback for NVIDIA NIM 2026-02-24 16:02:59 +08:00
rag chore(lint): extend low-risk clippy cleanup batch 2026-02-17 16:40:58 +08:00
runtime docs(code): expand doc comments on security, observability, runtime, and peripheral traits 2026-02-19 13:19:46 -08:00
security fix(security): honor explicit command paths in allowed_commands 2026-02-24 16:02:59 +08:00
service fix: resolve all compilation, test, and fmt errors on main 2026-02-21 12:09:06 +08:00
skillforge chore: Remove blocking read strings 2026-02-19 14:52:29 +08:00
skills fix(skills): allow cross-skill references in open-skills audit 2026-02-24 16:02:59 +08:00
tools fix(composio): harden v3 slug candidate and test coverage 2026-02-24 16:02:59 +08:00
tunnel feat(proxy): add scoped proxy configuration and docs runbooks 2026-02-18 22:10:42 +08:00
identity.rs test: cover deterministic HashMap ordering paths 2026-02-18 21:55:40 +08:00
lib.rs feat(skills): enforce static security audit for skill install/load 2026-02-21 22:54:55 +08:00
main.rs feat(security): add otp and estop phase-1 foundation 2026-02-21 23:19:36 +08:00
migration.rs readd tests, remove markdown files 2026-02-18 14:42:39 +08:00
multimodal.rs fix: resolve clippy warnings and rustfmt across codebase 2026-02-21 12:39:34 +08:00
util.rs fix(ci): restore containerized validation on main (#1096) 2026-02-20 07:48:58 -05:00