Skip to content

docs: security scope notes and config-api troubleshooting - #198

Merged
blaipr merged 1 commit into
mainfrom
docs/security-scope-and-config-troubleshooting
Aug 26, 2026
Merged

docs: security scope notes and config-api troubleshooting#198
blaipr merged 1 commit into
mainfrom
docs/security-scope-and-config-troubleshooting

Conversation

@blaipr

@blaipr blaipr commented Aug 26, 2026

Copy link
Copy Markdown
Member

What

Two docs that lagged the code by several releases:

  • SECURITY.md scope notes still described only the legacy UNIFIED_API_KEY shared secret. Rewritten to cover: the api_keys.yaml key model (admin vs restricted, secrets from env vars, constant-time compare, loud open-mode), the always-public routes and metrics_require_auth, the configuration API's authority (admin key ≈ root on the instance when enabled) with its two pre-commit guardrails, git project checkouts as trusted input, Vault in the credential-resolution story, and the deliberate absence of auth rate limiting on a trusted network.
  • docs/troubleshooting.md had no configuration-API coverage two releases after the feature shipped. New symptom-first section mapping every refusal (403 disabled, 400 rejected-whole, 412 If-Match, 409 key guardrails, 413 body limit) plus the wrote-but-never-reloaded state (reload_pending) and the persisting restart_required, ending with the audit-log pointer.

Docs only — no code, no CHANGELOG entry per the changelog policy.

Note: the 413 row references server.max_body_bytes from #196, so this merges after it.

SECURITY.md's scope notes predated api_keys.yaml roles, Vault resolution
and the configuration API — the threat-model change 0.20.0 shipped (an
admin key can rewrite every config file over HTTP) was documented
everywhere except the file an auditor reads first. The notes now cover
the key model, the public routes, the config-API authority and its two
reload guardrails, git projects as trusted input, and the deliberate
absence of rate limiting. docs/troubleshooting.md gains the missing
configuration-API section: every refusal (403/400/412/409/413), the
wrote-but-never-reloaded state, and why restart_required persists.
@blaipr
blaipr merged commit 8b914a7 into main Aug 26, 2026
6 checks passed
@blaipr
blaipr deleted the docs/security-scope-and-config-troubleshooting branch August 26, 2026 12:03
@blaipr blaipr mentioned this pull request Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant