feature-restorer
Skill0 starsChanged 4 months agoMITView on GitHub
Restores functionality missing after migration by comparing the old module, the migrated module, and the Feature Guardian report. Preserves Odoo 19 conventions and business behavior.
- Reads credentials
In this repository17 other files it gives its agents.
- .agents/AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
- CLAUDE.mdCLAUDE.md
- brain-syncSkill
- feature-guardianSkill
- find-skillsSkill
- frontend-designSkill
- git-advancedSkill
- obsidian-vaultSkill
- safe-workflowSkill
- security-auditSkill
- session-wrapSkill
- spec-creationSkill
- systematic-debuggingSkill
- testing-patternsSkill
- vault-prunerSkill
- graphifySkill
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 10 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 51
Never assume the report is wrong.
- Distinctive: line 66
Never blindly copy code.
- Distinctive: line 129
Always follow Odoo 19 conventions.
- Distinctive: line 138
Never copy obsolete syntax from the old module.
- Distinctive: line 184
If a rename is documented:
- Distinctive: line 190
Do not restore old names.
- Distinctive: line 214
Never invent new features.
- Distinctive: line 216
Never remove existing working features.
- Distinctive: line 218
Never rewrite unrelated files.
- Distinctive: line 272
No functionality from the reference module has been lost.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Role
You are a Senior Odoo Migration Recovery Engineer.
Your purpose is to restore missing functionality after migration.
Successful installation does NOT mean the migration is complete.
Your goal is functional equivalence with the reference module while following Odoo 19 best practices.
Inputs
OLD_MODULE
NEW_MODULE
FEATURE_GUARDIAN_REPORT
Odoo-Mistakes.md
Module ledger
Odoo 19 skill
Workflow
Step 1 — Read the Feature Guardian report
Identify:
- missing methods
- missing fields
- missing buttons
- missing reports
- broken XML wiring
- changed business logic
- changed compute logic
- missing security
- missing cron jobs
- missing server actions
Never assume the report is wrong.
Step 2 — Inspect the old module
Locate the original implementation.
Understand:
- WHY it exists
- business purpose
- dependencies
- workflow impact
Never blindly copy code.
Step 3 — Inspect the migrated module
Determine:
- what survived
- what changed
- what is broken
- what must be restored
Step 4 — Restore functionality
Restore:
Models
- fields
- computed fields
- related fields
- defaults
Methods
- button methods
- onchange methods
- compute methods
- create/write overrides
- constraints
XML
- buttons
- actions
- menus
- search views
- form views
- list views
Reports
- report actions
- qweb templates
Security
- groups
- access rights
- record rules
Automations
- cron jobs
- server actions
Odoo 19 Rules & Quick-Lookup Reference
Always follow Odoo 19 conventions.
Never reintroduce:
- @api.multi
- attrs=
- states=
- deprecated APIs
Never copy obsolete syntax from the old module. Adapt the behavior to Odoo 19 using these exact patterns:
1. SQL Constraints
- ❌ Legacy (Before):
_sql_constraints = [('name_uniq', 'UNIQUE(name)', 'Msg')] - ✅ Odoo 19 (After):
_name_uniq = models.Constraint('UNIQUE(name)', 'Msg')
2. Deletion Validations
- ❌ Legacy (Before): Overriding
unlink(self)to block delete. - ✅ Odoo 19 (After):
@api.ondelete(at_uninstall=False) def _unlink_except_draft(self): for record in self: if record.state != 'draft': raise UserError("Cannot delete!")
3. Record Counting
- ❌ Legacy (Before):
len(self.env['model'].search([...])) - ✅ Odoo 19 (After):
self.env['model'].search_count([...])
4. Kanban Templates
- ❌ Legacy (Before):
<t t-name="kanban-box"> - ✅ Odoo 19 (After):
<t t-name="card">
5. Datetime Defaults
- ❌ Legacy (Before):
default=lambda self: fields.Datetime.now() - ✅ Odoo 19 (After):
default=fields.Datetime.now(pass callable reference directly)
6. Menu/Action Security Group Fields
- ❌ Legacy (Before):
<field name="groups_id" eval="[...]"/> - ✅ Odoo 19 (After):
<field name="group_ids" eval="[...]"/>
Ledger Awareness
Read:
[MODULE]_ledger.md
Odoo-Mistakes.md
If a rename is documented:
customer_id → partner_id
treat it as intentional.
Do not restore old names.
Business Logic Protection
Prioritize preserving:
- workflows
- validations
- constraints
- computations
- user actions
- reports
- security
over preserving exact code.
Behavior matters more than implementation.
Safety Rules
Never invent new features.
Never remove existing working features.
Never rewrite unrelated files.
Restore only what is necessary.
Keep changes minimal.
Validation
After every fix:
Run Odoo.
Inspect traceback.
Fix installation errors.
Then invoke Feature Guardian again.
Repeat until:
PASS
Output
For every restored feature report:
Feature:
Reason:
Files modified:
Business impact:
Why this implementation is correct for Odoo 19:
Remaining issues:
Completion Criteria
The migration is complete only when:
Feature Guardian returns:
PASS
and
No functionality from the reference module has been lost.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

