Saturday, May 23, 2026
1 change · 19.0
New functionality added to Odoo
This change adds dedicated tools for managing solar projects, including project details, document tracking, and installation checklists. It also introduces AI-assisted document classification and consistency checks, helping teams process solar paperwork faster while adding controls to limit access and misuse.
Original PR description
## Summary - Adds `solar_project` module: extends `project.project` with solar fields (capacity, battery, roof type, grid type, coordinates, stage), `solar.document` lifecycle model (5 states +…
## Summary - Adds `solar_project` module: extends `project.project` with solar fields (capacity, battery, roof type, grid type, coordinates, stage), `solar.document` lifecycle model (5 states + versioning), `solar.document.type` lookup table (12 seeded types), `solar.checklist.item` for survey/install checklists - Adds `solar_ai` module: OpenRouter LLM client (`solar.ai.service` AbstractModel), OLG proxy controller (hijacks Odoo's "Translate with AI" / "Generate with ChatGPT" buttons to route through OpenRouter instead of Odoo SA), auto-classify `solar.document` on attachment upload, `action_run_consistency_check` creates `mail.activity` per issue found - Hardened security: group-based authorization (project manager only), per-user sliding-window rate limiting, prompt-length caps, `html.escape` on LLM output in chatter, severity allowlist for activity notes - 7 BLOCKERs from IT-team review fixed: empty choices guard, `@api.depends` on stored computes, tautological test corrections, `env.ref` assertion fix, XSS sanitization, OLG proxy budget abuse prevention, null prompt guard ## Test plan - [ ] Install on clean DB: `./odoo-bin -d isolar_test --stop-after-init -i solar_project,solar_ai` - [ ] Run tests: `./odoo-bin -d isolar_test --test-tags solar_project,solar_ai --stop-after-init` — all 27 tests green - [ ] Manual: create project → add 2 documents → upload PDF → confirm AI auto-classify fires → run consistency check → verify `mail.activity` created - [ ] OLG proxy: set `html_editor.olg_api_endpoint` system param → confirm "Translate with AI" uses OpenRouter - [ ] Non-PM user: verify `/solar_ai/olg/api/olg/1/chat` returns `AccessError` (403) for plain users ## IT-team review artifacts Five review runs in `.it-team/` — all BLOCKERs resolved: - Block 1 (scaffold): `.it-team/run-2026-05-22-21-12-block1-scaffold/REVIEW.md` - Block 2 (models): `.it-team/run-2026-05-22-21-44-block2-models/REVIEW.md` - Block 3 (views/data): `.it-team/run-2026-05-22-21-58-block3-views-data/REVIEW.md` - Block 4 (solar_ai): `.it-team/run-2026-05-23-07-29-block4-solar-ai/REVIEW.md` - Block 5 (BLOCKER fixes): `.it-team/run-2026-05-23-08-28-block5-blocker-fixes/REVIEW.md` ## Known open MAJORs (deferred) - Rate-limit dict is per-worker process — multi-worker Odoo multiplies effective RPS by N (documented, not a blocker for this PR) - `_check_authorized` uses `_is_admin()` private API — acceptable for now 🤖 Generated with [Claude Code](https://claude.com/claude-code)