agents/skills/injectable/l1/config-correctness/SKILL.md
L1 trigger - audits configuration constants, documented bounds, feature-gated values, and unused protocol limits for semantic drift.
npx skillsauth add plamentsv/plamen config-correctnessInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
L1 trigger:
L1_PATTERN=trueAND (config/ORsettingsORconstantsORDEFAULT_ORMAX_ORMIN_OR protocol docs/comments detected) Inject Into:depth-edge-case,depth-state-traceLanguage: Go and Rust Finding prefix:[CFG-N]
Configuration bugs are often single-line semantic drift: a limit exists but is not used, a default is testnet-only but ships in production, a doc comment says one bound while code enforces another, or a feature flag changes protocol-visible enum values. This skill is a bounded enumeration pass, not a new agent.
Build a table of security-relevant constants and runtime config fields:
| Config/Constant | Declared Value | Documented Value / Comment | Runtime Use Sites | Verdict | |-----------------|----------------|-----------------------------|-------------------|---------|
Include:
DEFAULT_*, MAX_*, MIN_*, *_LIMIT, *_TIMEOUT, *_INTERVAL, *_FACTOR;For each row:
Tag evidence as [CFG-DOC-DRIFT:{file}:{line}], [CFG-UNUSED-LIMIT:{file}:{line}], [CFG-UNIT:{file}:{line}], or [CFG-FEATURE-DRIFT:{file}:{line}].
Do not report harmless style differences. A config finding needs at least one concrete consequence: consensus divergence, DoS, stale security bound, unexpected production exposure, cross-platform incompatibility, or user/API misbehavior.
Node clients hold validator keys, JWT secrets, and operator credentials. A secret committed to the repo, weakly encrypted at rest, or surfaced through a deployment manifest is a direct compromise of every operator that follows the config.
Bounded reads: read SCIP graph artifacts (caller_map.md, callee_map.md, state_write_map.md, function_summary.md) to locate keystore-load and credential-read call-sites; on-demand single-symbol source reads for keystore/credential-handling functions only; never bulk-read large files (and never read the full content of a flagged key file — record its path, not its bytes).
Heuristics:
git grep -niE 'private_key|priv_key|secret_key|keystore|password|passphrase|mnemonic|seed_phrase|jwt(_|\.)?secret|api[_-]?key|BEGIN .*PRIVATE KEY' across the repo (config dirs, fixtures, docker/, k8s/, scripts/, CI files). Distinguish real material from test fixtures and placeholder env-var names; a plaintext key or real credential in tracked source is a finding regardless of directory.Dockerfile, docker-compose*.yml, *.k8s.yaml/Helm values, systemd units, and CI workflow files for credentials in ENV/environment/args or baked into image layers. Secrets belong in a secret store / mounted file, not in image env or committed manifests.A secrets finding needs a concrete exposure path (tracked file, image layer, manifest, log, or transmission). Placeholder names and clearly-marked test keys are not findings.
Tag evidence as [CFG-SECRET-PLAINTEXT:{file}:{line}], [CFG-KEYSTORE-WEAK:{file}:{line}], or [CFG-MANIFEST-CRED:{file}:{line}].
Use normal finding format. If no finding exists, still emit the inventory table with SAFE rows and concrete file:line evidence for the checked constants.
data-ai
Trigger Pattern Always (run during recon TASK 0, not breadth) - Inject Into Recon agent only (meta_buffer.md enrichment)
data-ai
Trigger Pattern Always (run during recon TASK 0, not breadth) - Inject Into Recon agent only (meta_buffer.md enrichment)
data-ai
Trigger Pattern Always (run during recon TASK 0, not breadth) - Inject Into Recon agent only (meta_buffer.md enrichment)
data-ai
Trigger STABLESWAP_FORK flag (fork-ancestry detects Curve/StableSwap parent via get_d/get_y/ramp_a/StableSwap patterns) - Agent Type general-purpose (standalone niche agent, 1 budget slot)