From 622f133f053a45a6609f99c569b4502eb1b98db5 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Tue, 26 May 2026 21:52:05 -0400 Subject: [PATCH] docs(plan): inline corrections from T11/T12/T13 execution Capture in the plan the Odoo 19 gotchas discovered during execution that the original plan template missed: - Test command requires --http-port=0 --gevent-port=0 (running container holds 8069). - Declarative models.Constraint / models.Index (T2). - res.users.groups_id renamed to group_ids (T3, T6). - ir.rule groups is additive not restrictive (T3). - mail.template inline-template ctx IS env.context (T11). - ir.cron has no numbercall field in 19 (T12). - registry.cursor() in tests is TestCursor; cr.commit() raises; use savepoints (T13). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-26-fusion-login-audit.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/plans/2026-05-26-fusion-login-audit.md b/docs/superpowers/plans/2026-05-26-fusion-login-audit.md index 6ab3eda5..920c3576 100644 --- a/docs/superpowers/plans/2026-05-26-fusion-login-audit.md +++ b/docs/superpowers/plans/2026-05-26-fusion-login-audit.md @@ -20,17 +20,26 @@ These apply to every task. Read once, internalize, then execute. ```bash docker exec odoo-modsdev-app cat /usr/lib/python3/dist-packages/odoo/addons/base/models/res_users.py | head -200 ``` -- **Module location:** `K:\Github\Odoo-Modules\fusion_login_audit\` (Windows paths) which is bind-mounted into the `odoo-modsdev-app` container at `/mnt/extra-addons/fusion_login_audit/` (or whatever path the compose file specifies — verify with `docker inspect odoo-modsdev-app --format '{{json .Mounts}}' | python -m json.tool`). +- **Module location:** `K:\Github\Odoo-Modules\fusion_login_audit\` (Windows paths) is bind-mounted into the `odoo-modsdev-app` container at `/mnt/odoo-modules/fusion_login_audit/`. (Verify with `docker inspect odoo-modsdev-app --format '{{json .Mounts}}' | python -m json.tool` if in doubt.) - **Field naming:** new fields on `res.users` and `res.config.settings` use the `x_fc_*` prefix. Fields on the new `fusion.login.audit` model use plain names. - **Settings field types:** booleans/integers/floats/char/selection/many2one/datetime only on `res.config.settings`. No Date fields. (`x_fc_login_audit_retention_days` is an Integer — not a Date.) - **`res.groups`:** never use `users=` or `category_id=`. - **HTTP routes:** if any are added, use `type="jsonrpc"` not `type="json"`. - **Canadian English** for all user-facing strings ("Authorise", "Centre", "behaviour", etc.). -- **Test command shape:** - ```bash - docker exec odoo-modsdev-app odoo -d fusion-dev --test-enable --test-tags /fusion_login_audit -i fusion_login_audit --stop-after-init 2>&1 | tail -60 +- **SQL constraints & indexes — Odoo 19 declarative form (project CLAUDE.md rule #9):** + Do **not** write `_sql_constraints = [(name, def, msg), ...]` or override `init(self)` with raw SQL. Odoo 19 silently drops both with only a warning. Use the declarative class attributes: + ```python + _result_failure_reason_consistent = models.Constraint( + "CHECK (...)", "Failure rows must carry a failure_reason." + ) + _user_time_idx = models.Index('(user_id, event_time DESC)') ``` - First run uses `-i fusion_login_audit` (install). Subsequent runs after code changes use `-u fusion_login_audit` (update). Expected to take 15-40 seconds per run. + The attribute name (sans the leading underscore) becomes the SQL object's suffix: `{table}_{suffix}`. `models.Index` supports `DESC`, `WHERE`, and `USING ...`. Tasks that mention `_sql_constraints` or `init()` in this plan were written against the legacy pattern — translate to the declarative form when implementing. +- **Test command shape (use ephemeral ports — the dev container holds 8069):** + ```bash + docker exec odoo-modsdev-app odoo -d fusion-dev --test-enable --test-tags /fusion_login_audit -u fusion_login_audit --stop-after-init --http-port=0 --gevent-port=0 2>&1 | tail -60 + ``` + Without `--http-port=0 --gevent-port=0` the second odoo process tries to bind 8069 and dies with `Address already in use`. Use `-i fusion_login_audit` only on the very first install; everything after T1 uses `-u` (update). Expected runtime: 15-40 seconds per run. - **Commit cadence:** every task ends with a commit. Branch is already `feat/fusion-login-audit` (cut from `main` at sha cc26b9ad). Never push without an explicit user request. - **Commit message footer:** ```