agentsclimarketplace

Odoo code review

Skill assoumaaa/odoo-superpowers/skills/odoo-code-review

Odoo development skills for AI coding agents — a Claude Code plugin (also Codex & Gemini CLI) packaging PSDU principles for models, views, security, migrations, tests & code review. Principles, not rules.

Install
npx -y skills add assoumaaa/odoo-superpowers --skill odoo-code-review

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when reviewing Odoo code — yours before commit, Claude's after generation, or a teammate's PSDU PR. Catches shape-of-bad-code issues that lint won't, plus customer-readiness gaps. Invoke before claiming Odoo work is done.

SKILL.md

4.9 KB, as published. Nobody here has run it

Odoo Code Review

Review for shape, not for lint — lint catches typos, review catches assumptions. These are review stances to carry, not a checklist to run. The file-type conventions live in the skill that owns the file (table below); this skill owns the review act itself — how to read a diff, what only a human-style read catches, and the customer bar.

Route by file type — load the matching skill

For each changed file, load this skill plus the one its path maps to. The right-hand skill carries the shapes; this skill carries how to look.

File / pathAlso load
models/, controllers/, wizard/ *.pyodoo-python
__manifest__.pyodoo-module-development
tests/, test_*.pyodoo-test-runner
migrations/** *.pyodoo-migrations
views/, data/, report/ *.xml & security/*.csvodoo-xml-conventions
static/src/** (js, xml, scss)odoo-js

Reading a diff

Read it twice — each file alone, then the change as a system

Pass one takes each changed file on its own terms: does this model / view / template read like Odoo wrote it? You're judging well-formedness, not correctness. Pass two — only once every file is read — traces one real user action end to end, from the view or route through the access checks into the DB. The two passes find different bugs and must not be mixed: a file can be flawless Odoo and still be wrong in concert with another — user input meeting a sudo, a limit that disagrees with a column, the same job done two ways. The dangerous bugs almost all live in pass two; budget for it.

The bug is usually the code that isn't there

Lint can only read what the diff contains; a reviewer reads what the diff should contain and doesn't. A new model with no ir.model.access line, a feature with no demo data, a new required field with no migration, a schema change with no __manifest__.py version bump — none of these surface as a red line, so you go looking for the gap. The migration absence test is the sharpest form: a diff that changes a field/model shape, doesn't bump the version, and doesn't add migrations/<version>/ is the bug — flag it before approving (→ odoo-migrations for which shapes owe a script). When no plan ran, carry grill's two questions yourself: does this hold under multi-company, and what happens on the customer's upgrade? (→ odoo-grill).

Name the shape, not the fix

"Change this line" fixes one PR; "this is a stored compute that depends on runtime context" teaches the pattern, so the next PR doesn't reintroduce it. A review only compounds when the finding generalizes beyond the instance — so state the category, point at the owning skill, and let the author internalize the rule rather than just the patch.

What only this read catches

Style the linter is blind to

Three shapes recur and none trip a linter. Repeated vals dicts built inline should be a _prepare_<x>_vals method — a customer submodule extends behavior by overriding a method, never by patching a literal buried in a loop, so the missing seam is a real defect, not taste. Dead code is a blocker, not a nitpick — an unused file, a one-line wrapper that only calls super, an ensure_one() that guards nothing: each is a maintenance tax and a lie about intent, and the customer inherits both. Every error and log message names the record and the problemraise UserError("Error") or a bare "Invalid" is unactionable in a customer's log at 2am; the message has to say which record and what's wrong with it.

Shapes that should trigger a deeper read

When one of these appears, that's the signal to pull the owning skill and read harder — don't wave it through:

  • .py: a loop that writes or queries, search(...)[0], a stored compute reading context/time/env.user, a .sudo() with no preceding has_group, a has_group check doing work ir.rule should own, a self-less method doing external I/O on a model → odoo-python.
  • static/src: a reassignment that should be patch(), the DOM reached imperatively, an un-_t()'d user-facing string → odoo-js.
  • tests/: a test run on a polluted DB (false confidence), or named for a method instead of a behavior → odoo-test-runner.

The customer-readiness bar

Done is not "it works" — it's "I'd hand this to the customer with no cover note." That means clear field labels, translated strings, demo data that actually demonstrates the feature, and a clean -i install on a fresh DB: if it can't install on your throwaway DB, it can't install on theirs. (Full wrap-up sequence: → odoo-task-completion.)

Gives 0 of the 12 instructions most code review skills give

Counted across 610 of the 674 authors here whose files we hold, read 2026-08-06

  • push back with technical reasoning if wrongin 60 of 610, across 24 files
  • ask for clarification on unclear itemsin 51 of 610, across 16 files
  • fix critical issues immediatelyin 45 of 610, across 29 files
  • implement one item at a timein 45 of 610, across 11 files
  • group findings by severityin 44 of 610, across 43 files
  • verify feedback against the codebasein 42 of 610, across 8 files
  • dispatch a code reviewer subagentin 39 of 610, across 23 files
  • fix important issues before proceedingin 37 of 610, across 22 files
  • test each fix individuallyin 35 of 610, across 7 files
  • reply in github comment threadsin 33 of 610, across 5 files
  • check for security vulnerabilitiesin 31 of 610, across 27 files
  • factualize corrections without over-explainingin 30 of 610, across 2 files

Said here and by no other author read

  • Load the file-type matching skill for each changed file
  • Trace one real user action end to end
  • Look for missing changes the diff should contain
  • Flag schema changes without version bumps
  • State the category of the code defect
  • Point at the owning skill for the defect

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.