Date: 2026-08-13
Repository: EventHorizon/EventHorizon
Pull request: #248
Production image: gitea.app.lan/eventhorizon/eventhorizon:sha-a25bce8e29b1
Quick-action suggestions were intermittently returning HTTP 400 even though the model request succeeded. The backend required a model-generated words array to contain one to three single-word elements; semantically valid labels were rejected when the model grouped multiple words into one element or returned more than three elements.
The suggestion contract now requests direct label strings, accepts the earlier word-array shape for compatibility, and normalizes bounded label formatting before applying the existing exact-four, distinct-choice, and typed-target checks. Semantic validation failures are recorded, and correction retries receive the bounded rejected response and its validation reason.
cargo fmt --all -- --check passed.cargo test --locked passed: 537 backend and 16 frontend tests./healthz returned HTTP 200; /readyz returned HTTP 200 with PostgreSQL and Qdrant ready.