erp-method
How DODIL builds business systems (ERP: sales, HR, contracts, invoicing, the books) for a customer,
and the catalogue of modules it builds them from. This repo is the method, not the code: the
code is in the public bricks (git.dodil.io/dodil/erp-brick-*) on
erp-platform.
Layout
erp/build.md THE MAP: phases 0-9, the artefact, the tool and the card for each
erp/phase/<name>.md one short card per phase: numbered steps, an example, "done when"
frame discover show fit signoff build test deploy operate change
modules/lifecycle.md the full method, phase by phase (the reasoning behind the cards)
modules/pattern.md the anatomy of a module and of a brick
modules/template.md the customer's design file, ERP_<MODULE>.md
modules/module.template.yaml the skeleton a NEW module spec starts from
modules/catalog.yaml modules with no spec yet (pending), and what to start from
modules/shared.yaml vocabulary no module decides alone: cross-module keys, money, owners
modules/waivers.yaml known debt, waived by count, with what fixing it costs
modules/test_composition.py the composition test every customer repo ships
modules/<id>/module.yaml one module spec: actors, stories, workflows, entities, repos
index.json machine-readable index of all of the above (scripts/build_index.py)
How it is consumed
- Agents read it through the DODIL CLI and MCP server:
dodil://erp/buildiserp/build.md,dodil://erp/phase/<name>iserp/phase/<name>.md, anddodil://erp/modules/…ismodules/…. Start atdodil://erp/build. - The blog (
blog.dodil.io/modules/…) renders the same files, so the page, the spec and the agent resource cannot disagree. - Both read the files at a release tag, never at
main.index.jsonlists what a tag holds.
Releases
A release is an annotated tag v<semver>. Nothing reaches agents until it is tagged, and agent-facing
text is lab-checked before a tag (see AGENTS.md). Pin a tag the way a customer repo pins a brick.
Proposing a change
Open a pull request. Say what you changed and where it was learned: a lab run, a customer
engagement (never named), a live measurement with its date, or a source. Run python3 scripts/check.py
and python3 scripts/build_index.py before pushing.
Licence
Apache-2.0 (LICENSE). APQC PCF names and ids are used under APQC's licence: APQC-NOTICE.md.