| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-05-07 | 1.9 kB | |
| v2.9.28 -- Wave 5 hardening_ AI chat rate limit + DuckDB cap + schedule integrity source code.tar.gz | 2026-05-07 | 458.8 MB | |
| v2.9.28 -- Wave 5 hardening_ AI chat rate limit + DuckDB cap + schedule integrity source code.zip | 2026-05-07 | 460.5 MB | |
| Totals: 3 Items | 919.3 MB | 0 | |
Wave 5 hardening release
Security
- AI Cost Advisor chat is now rate-limited.
POST /api/v1/ai/advisor/chat/now goes through the samecheck_ai_rate_limitdependency as /quick-estimate / /photo-estimate / /file-estimate. AX-RateLimit-Remainingresponse header surfaces remaining quota. - Provider error messages no longer leak into chat answers. The fallback used to concatenate
str(exc)[:100]from a failed LLM call into the user-facing answer — provider error bodies sometimes echo masked key prefixes or org IDs. Now the full error is logged for ops, the user sees only the localised fallback. - Conversation-history hard cap at 4 KB. Combined with the existing 10-message and 500-char-per-message caps, this protects small-context providers (Mistral, Cohere) from prompt-padding abuse.
Correctness
- Schedule date validation rejects impossible calendar dates.
start_date/end_dateregex^\d{4}-\d{2}-\d{2}$was purely structural —2026-02-30,2026-13-99were accepted. Now re-parsed viadate.fromisoformat(). PATCH /activities/{id}dependencies updates now run cycle detection. The typed-relationship table already enforced cycle checks onPOST /relationships/; the activity-embedded JSONdependenciesfield was a back door that let CPMcompute_pathsrecurse forever. Same self-reference + BFS guard now applied at the service layer.
Resource caps
- DuckDB ad-hoc connections capped at 512 MB / 2 threads. DuckDB defaults to 80 % of system RAM — unsafe for an in-process pool. A bad cascade query against a multi-million-row Parquet could pin a worker.
- BIM requirements validation caps at 50 000 elements per pass. Was 1 000 000 — for a 100k-element model × 50 requirements that's 5M evaluations on the request thread. Reports now surface
elements_truncatedwhen the cap kicks in.