release: 14.0-v0.5.1 — Odoo 14 port verified green (69/69)

Full suite passes on a live odoo:14.0 instance; module installs cleanly.
PORTING.md marked complete with the full list of resolved Odoo-14 deltas.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Nicholas Riegel 2026-05-30 11:54:38 -04:00
parent 55ab28f5db
commit 96adace887
5 changed files with 45 additions and 29 deletions

View file

@ -12,6 +12,24 @@ Release notes are written in plain language so anyone on the team can follow wha
--- ---
## v0.5.1 — 2026-05-30 (14.0)
The **Odoo 14.0 port is complete and verified** — the full automated suite (69 tests) passes
on a real Odoo 14.0 instance and the module installs cleanly. This branch is ready for the
ITSulu production instance.
### Changed (Odoo 14 compatibility)
- Email template moved back to Odoo 14's Jinja2 syntax.
- Admin views adjusted to Odoo 14's conditional-visibility format (this had been blocking the
module from installing on 14).
- Test suite updated for Odoo 14's test framework and database APIs.
- Performance query budget tuned for Odoo 14 (it issues a few more framework queries than 17).
See [PORTING.md](PORTING.md) for the full list of Odoo-14 deltas resolved.
---
## v0.5.0 — 2026-05-30 ## v0.5.0 — 2026-05-30
Sets up support for **multiple Odoo Community versions**, each on its own branch — the same Sets up support for **multiple Odoo Community versions**, each on its own branch — the same

View file

@ -1,9 +1,10 @@
# Porting status — Odoo 14.0 branch # Porting status — Odoo 14.0 branch
**✅ PORT COMPLETE & VERIFIED (v0.5.1)** — full suite **69/69 passing** on a live Odoo 14.0
instance (K8s `odoo_test_14`, base image `odoo:14.0`, Python 3.7). Module installs cleanly.
This branch targets **Odoo Community 14.0** — the version **ITSulu runs in production**. It was This branch targets **Odoo Community 14.0** — the version **ITSulu runs in production**. It was
**seeded from the 17.0 baseline** and the Odoo-14 porting is tracked here. Until every item is seeded from the 17.0 baseline and ported to Odoo 14 APIs.
verified, treat this branch as **work in progress** — do not deploy to the production 14.0
instance unverified.
> The product feature set is the same across all Odoo branches; only the Odoo-API-specific code > The product feature set is the same across all Odoo branches; only the Odoo-API-specific code
> differs. Odoo 14 is **older** than the 17.0 baseline, so several things move *backwards*. > differs. Odoo 14 is **older** than the 17.0 baseline, so several things move *backwards*.
@ -15,29 +16,26 @@ instance unverified.
- [x] `Dockerfile` base image = `odoo:14.0` - [x] `Dockerfile` base image = `odoo:14.0`
- [x] manifest version prefix = `14.0.` (via `bump-version.sh`) - [x] manifest version prefix = `14.0.` (via `bump-version.sh`)
## API porting checklist (verify on a real Odoo 14.0 instance) ## Odoo 14 deltas resolved (what the port required)
- [x] **Mail template syntax — reverted to Jinja2.** `data/mail_template_data.xml` restored to - [x] **Mail template → Jinja2.** `data/mail_template_data.xml` reverted from the 17.0 qweb
Odoo 14's Jinja2 (`${...}`, `% if`, `% for`) instead of the 17.0 qweb `type="html"`. (`type="html"`, `<t t-out>`) to Odoo 14 Jinja2 (`${...}`, `% if`, `% for`).
- [x] **View conditional attributes → `attrs`.** Converted the 6 Odoo-17-style - [x] **View conditional attrs → `attrs`.** 7 Odoo-17 bare/expression `invisible="…"`
`invisible="state == '…'"` attributes (blog_topic, blog_generation_log) to Odoo 14 attributes (blog_topic, blog_generation_log, blog_schedule web_ribbon) converted to
`attrs="{'invisible': [domain]}"`. Odoo 14 `attrs="{'invisible': [domain]}"`. This was blocking module install.
- [~] **Mail render API.** Odoo 14 `_render_field(field, res_ids, engine='jinja')` exists — the - [x] **Test framework: `setUpClass`/`cls.env` → `setUp`/`self.env`.** Odoo 14 exposes the env
tests' `_render_field('subject', [id])` should work now that the template is Jinja. Verify live. in `setUp` (instance), not `setUpClass` (Odoo 15+). 13 blocks across 6 files converted.
- [~] Python: `'ImageResult | None'` in `image_router.py` is a quoted (3.7-safe) annotation; no - [x] **`env.flush_all()``env['base'].flush()`.** `flush_all` is Odoo 15+; 14 uses
walrus / 3.9 subscript generics found. recordset `.flush()`.
- [ ] `data-test-id` attributes in views — confirm Odoo 14 RNG accepts them (Playwright-only; - [x] **Test mocks set `body_html`.** Odoo 14 rejects an unset MagicMock written to
may need removal/guarding on 14). `blog.post.content` (`can't adapt type 'MagicMock'`); 17 silently stringified it.
- [ ] `blog.post` body field name on 14.0 (the 17.0 baseline writes `content` — confirm 14.0). - [x] **Query budget.** Odoo 14 issues ~54 framework queries vs 17's <50; budget raised to 60.
- [ ] `@api.model_create_multi`, `name_get`, and other ORM signatures valid on 14.0. - [x] Python 3.7 syntax verified (compileall); pytest 7.4.4 / pytest-bdd 6.1.1 / pytest-odoo
- [ ] `ir.cron` + mail data XML formats. 1.0.1 pinned for Python 3.7.
- [ ] pytest / pytest-odoo / pytest-bdd versions compatible with odoo:14.0's Python 3.7. - [x] **Full suite green: 69/69 on odoo:14.0.**
- [ ] Full test suite green on a 14.0 template DB (K8s job, §8, base image `odoo:14.0`).
## How to work this branch ## Releasing further changes on this branch
1. Stand up a 14.0 template DB (mirror §8, base image `odoo:14.0`). 1. Use the 14.0 K8s job (base image `odoo:14.0`, fresh `odoo_test_14`, `odoo -i` then pytest).
2. Start with the mail template (Jinja revert) and the render API — those are the biggest deltas. 2. Record any new Odoo-14 gotcha in `CLAUDE.md` §12.
3. Run the suite, fix one Odoo-API difference at a time. 3. `bump-version.sh patch|minor` → CHANGELOG → commit → `bump-version.sh tag` (tags `14.0-vX.Y.Z`).
4. Record each gotcha in `CLAUDE.md` §12 tagged with the series.
5. When green, cut a release on this branch (`bump-version.sh` → tag `14.0-vX.Y.Z`).

View file

@ -1,6 +1,6 @@
# ITSulu Blog Publisher — Odoo 14 Addon # ITSulu Blog Publisher — Odoo 14 Addon
**Version:** 0.5.0 **Version:** 0.5.1
Automated blog post generation and publishing for Odoo 14.0 Community Edition, powered by generative AI (Anthropic Claude, OpenAI, Google Gemini, or Ollama). Automated blog post generation and publishing for Odoo 14.0 Community Edition, powered by generative AI (Anthropic Claude, OpenAI, Google Gemini, or Ollama).

View file

@ -1 +1 @@
0.5.0 0.5.1

View file

@ -3,7 +3,7 @@
'name': 'ITSulu Blog Publisher', 'name': 'ITSulu Blog Publisher',
# Odoo manifest version = <odoo_series>.<product_version>. Product version # Odoo manifest version = <odoo_series>.<product_version>. Product version
# is tracked in the repo-root VERSION file (currently 0.4.8). See CLAUDE.md §15. # is tracked in the repo-root VERSION file (currently 0.4.8). See CLAUDE.md §15.
'version': '14.0.0.5.0', 'version': '14.0.0.5.1',
'summary': 'AI-powered blog post generation with multi-LLM support, scheduling, and social media copy', 'summary': 'AI-powered blog post generation with multi-LLM support, scheduling, and social media copy',
'description': """ 'description': """
ITSulu Blog Publisher ITSulu Blog Publisher