Summary
Cora scan found 18 best-practice issues. Most are about missing validation — config values accepted without semantic checks, typos in config silently ignored, and doc/API inconsistencies.
Key Issues
Config values accepted without validation (#94 — src/config/schema.rs:343)
Free-form strings/numbers (provider, base_url, temperature, max_tokens, timeout, cache_ttl) merged without validation. Invalid values propagate to runtime.
Fix: Add validation step after deserialization.
Profile values unvalidated (#81 — src/engine/profiles.rs:58)
Focus weights documented as 1-10 but any u32 accepted. Actions documented as block/warn but any string accepted.
Fix: Validate ranges and enums after parsing.
deny_unknown_fields missing (#80 — src/engine/profiles.rs:145)
Misspelled YAML keys silently dropped. Config appears to work but settings are ignored.
Fix: Add #[serde(deny_unknown_fields)] to config structs.
Unknown category actions treated as blocking (#57 — src/engine/quality_gate.rs:215)
Typos like Warn or blok silently become blocking failures.
Fix: Use enum deserialization for action values, case-insensitive.
Quality gate ignores enabled flag (#58 — src/engine/quality_gate.rs:147)
evaluate() can return Fail even when enabled is false.
Fix: Short-circuit when disabled.
Test contains stray eprintln (#44 — src/engine/rules/mod.rs:440)
Debug output in tests adds noise to CI logs.
Fix: Remove or gate behind debug flag.
review.context_chain not merged (#93 — P1, also noted here)
Documented in P1 bugs issue.
Additional minor items
Effort estimate: 1 day for P3-core (#94, #81, #80, #57, #58), rest ongoing
Summary
Cora scan found 18 best-practice issues. Most are about missing validation — config values accepted without semantic checks, typos in config silently ignored, and doc/API inconsistencies.
Key Issues
Config values accepted without validation (#94 —
src/config/schema.rs:343)Free-form strings/numbers (
provider,base_url,temperature,max_tokens,timeout,cache_ttl) merged without validation. Invalid values propagate to runtime.Fix: Add validation step after deserialization.
Profile values unvalidated (#81 —
src/engine/profiles.rs:58)Focus weights documented as 1-10 but any
u32accepted. Actions documented asblock/warnbut any string accepted.Fix: Validate ranges and enums after parsing.
deny_unknown_fields missing (#80 —
src/engine/profiles.rs:145)Misspelled YAML keys silently dropped. Config appears to work but settings are ignored.
Fix: Add
#[serde(deny_unknown_fields)]to config structs.Unknown category actions treated as blocking (#57 —
src/engine/quality_gate.rs:215)Typos like
Warnorbloksilently become blocking failures.Fix: Use enum deserialization for action values, case-insensitive.
Quality gate ignores enabled flag (#58 —
src/engine/quality_gate.rs:147)evaluate()can returnFaileven whenenabledisfalse.Fix: Short-circuit when disabled.
Test contains stray eprintln (#44 —
src/engine/rules/mod.rs:440)Debug output in tests adds noise to CI logs.
Fix: Remove or gate behind debug flag.
review.context_chain not merged (#93 — P1, also noted here)
Documented in P1 bugs issue.
Additional minor items
issue_typefield name inconsistenttestsubstringEffort estimate: 1 day for P3-core (#94, #81, #80, #57, #58), rest ongoing