Update BuildEase demo skill (session 2026-09-21 edits)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DywdYrFTrWa4h1T3ZykPBX
This commit is contained in:
glenn
2026-09-21 14:30:07 +02:00
co-authored by Claude Opus 5
parent 5aee1c61b5
commit f7e43d7210
3 changed files with 46 additions and 30 deletions
+24 -17
View File
@@ -11,7 +11,7 @@ that are specific to construction, and nothing else.
**Requires** `callista-odoo-demo` installed at `~/.claude/skills/callista-odoo-demo/`
(Callista's fork of Smetools/odoo-demo-architect). If it is missing, say so and stop —
do not reimplement its XML-RPC connector, data builder, or pipeline here.
do not reimplement its JSON-2 connector, data builder, or pipeline here.
> Do **not** substitute an `odoo-demo-architect` install for it. That is upstream, without
> Phase A's source-agnostic discovery, without Phase C, and without the extension points
@@ -97,9 +97,11 @@ a debugging round:
- **Guard each step separately and loop until a pass keeps nothing.** One `try` around
draft → cancel → unlink lets a raise on an already-draft invoice skip the unlink beneath
it, and the purge then reports success over residue.
- **Button methods return an unmarshallable action dict** over XML-RPC (`Fault` mentioning
`Marshal`/`dumps`). The transition already committed — catch it and move on. Retrying
fails on a state guard and reads like a real error.
- **Button methods return an action dict, not `True`.** Over JSON-2 it comes back as plain
JSON, so a returned dict is not a failure and not proof of success — read the state back.
(On a legacy XML-RPC connection the same dict raises a `Fault` mentioning `Marshal`/`dumps`
*after* the transition committed: catch it and move on, never retry, because the retry
fails on a state guard and reads like a real error.)
- **Deleting the take-off deletes its sale order** — `quantity.take.off.unlink()` unlinks
`sale_order_ids` first. The take-off is the handle for both.
- A take-off with **no** sale order still cancels and deletes normally: call `cancel()`, which
@@ -125,26 +127,31 @@ mev repo**, so anything under `buildease_custom_product*` is not a "just install
---
## BuildEase-specific checks
## Step-local notes
- After installing, **walk Settings once**. `res.config.settings` and `res.company` are
extended by 8 modules each and several BuildEase behaviours default to off.
- At the staged-numbers sanity check: **booked hours well under ordered hours**. Over 100%
makes the progress statement look wrong on screen even when every assertion passed.
- The spine of every BuildEase demo is QTO → sale order → project → progress statement →
invoice. If that chain breaks mid-demo you lose the deal, so it is the chain **Test
heroes** must exercise end to end.
- `quantity.take.off` inherits `mail.thread` + `mail.activity.mixin` — chatter and
activities work for free. Cheap demo beats.
Domain detail hung off substrate steps that need no overlay — they change no mechanism, so
they are not gaps in `callista-odoo-demo` (see its [Extension points](../callista-odoo-demo/SKILL.md#extension-points)).
- *At **Fork the slow half**, agent 1:* after installing, **walk Settings once**.
`res.config.settings` and `res.company` are extended by 8 modules each and several
BuildEase behaviours default to off.
- *At **Sanity-check the staged numbers**:* **booked hours well under ordered hours**. Over
100% makes the progress statement look wrong on screen even when every assertion passed.
- *At **Test heroes**:* the spine of every BuildEase demo is QTO → sale order → project →
progress statement → invoice. If that chain breaks mid-demo you lose the deal, so it is
the chain the tests must exercise end to end.
- *At **Build heroes**:* `quantity.take.off` inherits `mail.thread` + `mail.activity.mixin`
— chatter and activities work for free. Cheap demo beats.
## Guardrails
- Never claim a BuildEase feature works without having seen it work in the demo DB.
- Never invent a pain quote. `(inferred)` is fine; a fabricated quote read back to the
client in the demo is not.
- If something you need is not one of the five overlays above, that is a gap in
`callista-odoo-demo` — fix it there, so the next vertical gets it free. Do not work
around it here.
- If something you need is new **mechanism** — a step that doesn't exist, an override the
five overlays don't offer — that is a gap in `callista-odoo-demo`. Fix it there, so the
next vertical gets it free; do not work around it here. Construction detail that hangs
off an existing named step is not a gap: it goes under *Step-local notes*.
## Files