Skip to content

Releases: minhhq-a1/odoo-pulse

v1.8.0 — Project Status dashboard tools

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 17 Jul 02:54

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 errors key, section picking via include.
  • 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_money positive-cost convention, paged_search_read, periods_domain, sub-task fetch/filter/aggregate helpers.

Hardening (11-finding review pass)

  • Unknown budget_ids warn for every budget-consuming section; _budget_context failure lands on every requested budget section — a requested section never vanishes silently.
  • portfolio_health degrades instead of hard-failing on milestone errors; core's finance/weekly_logged soft-fail independently.
  • Strict _parse_ymd date 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

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 17 Jul 02:55

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 the core group (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

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 13 Jul 06:32

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.line on Odoo 18+,
    else crossovered.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-level project_id m2o when the
    instance has one, falling back to the project's analytic account. Fixes
    budget: 0 / budget_burn_pct: null on 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 + custom project_id).

v1.5.0 — project_profitability

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 11 Jul 07:20

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. Any date_from/date_to switches to
    a period view and disables the lifetime burn verdicts. Tool count is now 27.

Maintenance

  • Split the monolithic tools_reports.py into per-domain report modules
    (sales, finance, inventory, hr, pulse, ops, projects).
  • Playground now installs hr_timesheet and seeds an hours/budget story; the
    end-to-end smoke asserts project_profitability on 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

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 09 Jul 08:44

Full Changelog: v1.3.0...v1.4.0

v1.3.0

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 09 Jul 04:56

Added

  • inventory_risk now takes company= — stock quantities scoped via
    allowed_company_ids context, dead-stock moves via company_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-scoped business_pulse (hr.leave.company_id).

Removed (breaking)

  • sprint_health and all sprint_id filters (team_workload,
    standup_digest, list_tasks column). They required a custom sprint_id
    field that is not standard Odoo. Migration: use team_workload or
    project_status_report; filter by project=. Default surface is now 26 tools.

v1.2.1

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 08 Jul 10:30

Full Changelog: v1.2.0...v1.2.1

v1.2.0

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 07 Jul 09:49

Full Changelog: v1.1.1...v1.2.0

v1.1.1

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 06 Jul 06:15

Full Changelog: v1.1.0...v1.1.1

v1.1.0

Choose a tag to compare

@minhhq-a1 minhhq-a1 released this 06 Jul 06:07

Full Changelog: v1.0.3...v1.1.0