Squash-merge of fix/ci-pipeline-corrections. Drives the full test suite
to 69/69 green on the ITSulu K8s cluster and fixes two production bugs.
Production fixes:
- Email template migrated from dead Odoo Mako (${}/% for) to Odoo 17
inline_template ({{ }}) + qweb body (type="html", t-out/t-foreach/t-if).
Notification emails previously rendered raw code in the subject/body.
- _create_blog_post now writes 'content': llm_response.body_html — every
auto-generated post was publishing empty.
- Removed duplicate itsulu_social_id field (startup warning).
Testing & infra:
- CI pipeline corrected (stage order, DB auth, junit artifact, addons path).
- E2E moved to ephemeral jobs in the itsulu-testing K8s namespace.
- Test code brought up to Odoo 17 (mail rendering, blog.post.content,
pytest-bdd env fixture, _render_field).
Versioning:
- Introduce MAJOR.MINOR.PATCH scheme, VERSION file, scripts/bump-version.sh,
CHANGELOG.md; first release v0.4.8. CLAUDE.md §15 documents the process.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Split monolithic blog_generation.feature into separate files per feature:
* blog_generation.feature: On-demand AI blog generation (3 scenarios)
* blog_scheduling.feature: Scheduled posts (2 scenarios)
* llm_provider_selection.feature: Multi-provider routing (6 scenarios)
* seo_population.feature: SEO field population (1 scenario)
* notification_email.feature: Post-generation emails (2 scenarios)
Total: 14 BDD scenarios covering all major workflows
- Extended test_bdd_steps.py from 363 to 472 lines with new step definitions:
* Added no_email_sent() for draft post email suppression verification
* Added email_contains_title() for email content validation
* Added email_contains_social_copy() for platform copy verification
* Added blog_post_has_tags(), blog_post_has_tag() for tag verification
* Added blog_post_has_social_copy(), at_least_one_platform_enabled()
* Added log_has_correct_provider(), log_has_correct_model()
* Added log_trigger_source(), generation_duration_recorded()
Follows pytest-bdd best practices: one feature per file, each with dedicated
scenarios and step definitions. All 14 scenarios now have complete step coverage.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>