Releases: minhhq-a1/odoo-pulse
Releases · minhhq-a1/odoo-pulse
Release list
v1.8.0 — Project Status dashboard tools
New tools (reports group)
- project_subtask_hours — delivery/allocated/effective hours from sub-tasks, with closed-stage + single-assignee filters and optional by-month grouping.
- project_dashboard — one-call detail page: core (project, milestones, finance, weekly logged), hours, budgets, budget_detail, delivery_monthly; per-section soft-fail via the
errorskey, section picking viainclude. - portfolio_health — one-call overview of every active project with derived health verdicts and budget burn %.
Shared infrastructure
project_shared.py: budget-model abstraction,derive_project_health(single source of truth for health verdicts),analytic_moneypositive-cost convention,paged_search_read,periods_domain, sub-task fetch/filter/aggregate helpers.
Hardening (11-finding review pass)
- Unknown
budget_idswarn for every budget-consuming section;_budget_contextfailure lands on every requested budget section — a requested section never vanishes silently. portfolio_healthdegrades instead of hard-failing on milestone errors; core's finance/weekly_logged soft-fail independently.- Strict
_parse_ymddate validation (rejects trailing garbage, normalises whitespace). - Perf: sub-tasks fetched once for hours + delivery_monthly; core's project row reused by
_budget_context.
451 tests green. Live-verified against production baseline (The Body Shop, project 59) on 2026-07-17: planned 1,593,314,320 / practical 1,736,086,746, full dashboard load 13.2s, zero errors.
v1.7.0 — odoo://{model}/{id} resource
First MCP Resource
odoo://{model}/{id}resource template — one live record as JSON with all stored fields,safe()-wrapped like every tool; not-found returns the standard{"error": ...}envelope. Loaded as part of thecoregroup (resources.py).
Server-level instructions
- The FastMCP server now ships disambiguation instructions: odoo-pulse serves live business data from the user's own Odoo instance (records, reports, KPIs) — NOT Odoo source-code or module-structure questions, which belong to a code-index server. Helps clients route between odoo-pulse and code-index MCP servers when both are connected.
(Backfilled release notes — tag and PyPI/GHCR/MCP-registry publishes shipped 2026-07-15.)
v1.6.0 — project_budget
odoo-pulse v1.6.0
New
project_budget— a read-only report answering, in one call: "how is
this project's budget doing, line by line?" Planned vs practical vs
theoretical per budget line from the Budgets app (budget.lineon Odoo 18+,
elsecrossovered.budget.lines), a per-project burn verdict
(off_track/at_risk/on_track), over-plan line flags, and a
spend-outside-budget check that compares each project's analytic cost
against the practical amounts booked on its budget lines. Single-project
filters gain a per-line drill-down. Tool count is now 28.
Fixed
- Budget matching is now project-aware.
project_profitability(and the
new tool) match budget lines by a line-levelproject_idm2o when the
instance has one, falling back to the project's analytic account. Fixes
budget: 0 / budget_burn_pct: nullon instances that budget along a second
analytic dimension (e.g. cost-category analytic plans), where
account-matching finds nothing.
Verification
- Full test suite: 376 passing.
- Verified live over MCP stdio against a production Odoo 18 instance with
multi-plan analytic budgets (crossovered.budget + customproject_id).
v1.5.0 — project_profitability
odoo-pulse v1.5.0
New
project_profitability— a read-only report answering, in one call:
"how many hours has each project delivered, how much money has it burned,
and is it still profitable?" Portfolio rollup with a rule-based burn verdict
(off_track/at_risk/on_track), automatic single-project drill-down
(per-employee / per-task), budget-burn from the Budgets app when installed,
and graceful degradation when it isn't. Anydate_from/date_toswitches to
a period view and disables the lifetime burn verdicts. Tool count is now 27.
Maintenance
- Split the monolithic
tools_reports.pyinto per-domain report modules
(sales, finance, inventory, hr, pulse, ops, projects). - Playground now installs
hr_timesheetand seeds an hours/budget story; the
end-to-end smoke assertsproject_profitabilityon Odoo 18 & 19. - Docs, plugin manifest, requirements, and ruff lint drift synced.
Verification
- Full test suite: 360 passing.
- Playground smoke: green on Odoo 18 & 19 (CI).
v1.4.0
v1.3.0
Added
inventory_risknow takescompany=— stock quantities scoped via
allowed_company_idscontext, dead-stock moves viacompany_id. The last
exception to "every money tool takes company=" is gone.- Playground smoke now runs against both odoo:18 and odoo:19 nightly,
and live-verifies company-scopedbusiness_pulse(hr.leave.company_id).
Removed (breaking)
sprint_healthand allsprint_idfilters (team_workload,
standup_digest,list_taskscolumn). They required a customsprint_id
field that is not standard Odoo. Migration: useteam_workloador
project_status_report; filter byproject=. Default surface is now 26 tools.