Repository navigation
fix: reject malformed Rite matcher operands (COD-489) - #23
Conversation
🤖 Automated Review PanelReviewer A — GPT-5.6 Terra (Codex)Initial result: BLOCK. The reviewer found that displaying Resolution verified: the change now uses a safe Final result: APPROVE. No blocking correctness, security, regression, or goal-alignment findings. The final reviewer noted non-blocking direct coverage for nested ordinary structured leaves; that coverage was added in both core deserialization and production Reviewer B — Gemini 3 FlashInitial result: soft reject. It requested that the fixture non-vacuity proof corrupt the matcher grammar itself rather than an unrelated field, and raised a nested-validation concern. Resolution verified: the fixture test now replaces a real example Final result: APPROVE. It found the safe diagnostic boundary, structural matcher validation, scalar compatibility coverage, fixture evidence, and scope all aligned with COD-489. Local verification
No deployment, runtime configuration, release, or live-webhook behavior changed. |
Auto-Merge GateConfidence: 0.94 COD-489's configuration-safety goal is directly implemented: malformed structured matcher operands are rejected during deserialization/production loading, scalar legacy operands remain supported, raw example/README fixture coverage is made non-vacuous, and parser source is not exposed through user-facing load errors. Checks observed: GitHub CI Scope: three files; no deployment, runtime configuration rollout, credentials, auth policy, delivery behavior, release, or public generated surface changed. The linked Linear issue contains no manual-review/do-not-auto-merge marker. |
Summary
Implements COD-489's bounded configuration-safety follow-up without changing Rite's compound grammar or generated public surfaces.
rite_server::load_config: table-shapedall_of/any_of, array-shapednot, and table/array ordinary leaves, including nested occurrences.all_of/any_of/notmetadata keys, empty/omitted legacy matchers, flat matching, source guards, legal nesting, and existing mixed/sibling rejection.rite.example.toml, all intended README handler TOML fences, and a deliberately malformed matcher copy through the production loader.Verification
Baseline proof before the repair:
After the repair:
A real CLI invocation against a deliberately malformed config confirmed that a synthetic credential marker was absent from both stdout and stderr while the loader returned a nonzero error.
Review
The dual-model panel initially found a raw-TOML diagnostic disclosure path and requested a matcher-specific fixture corruption. Both were fixed, tested, and re-reviewed. Final panel result: approve; the final non-blocking nested-leaf coverage observation was added as direct core and production-loader regression coverage.
Scope / rollout boundary
No auth policy, action-delivery behavior, event normalization, Hydra API/generated artifacts, dependency, release, deployment, configuration rollout, or live webhook behavior changed. This PR only hardens local configuration parsing and its documentation/test evidence.
Linear: COD-489