MPM Documentation Kit v1.3 (CW-034)

MPM Document Standard 1.3, mpmdoc build engine, templates for TN, INS, SOP,
BOM, SVY, TAP, DWG, TSB, PRO, SOW and WO (Chinese editions for TN and DWG),
glossary, MPM fonts and logos, and the mpm-technical-documents plugin 1.3.0.
Worked examples ship in the kit zip on Drive only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NWatTMmqmGatgHjDZvWs5b
This commit is contained in:
Jason StedwellandClaude Opus 5.5 committed 2026-11-09 11:51:56 -06:00
commit 5b52636003
143 files changed
+4097

No files matched your search

+76
View File
@@ -0,0 +1,76 @@
# _STANDARDS
Standards, engine and templates for documents produced in this project.
| File | What it is |
|---|---|
| `MPM_Document_Standard.md` | **The rules**: types, numbering, revisions, files, layout, writing. Read this first. |
| `glossary_zh.md` | Master English → Simplified Chinese terms for Chinese editions (standard §12). |
| `registry.md` | Customer codes and every issued document number (a snapshot: claim numbers in the shared master registry, standard §11). |
| `mpmdoc/` | The build engine: stylesheet, header/footer, components, PDF renderer. Fonts and logos come from `../_ASSETS/mpm/`. |
| `templates/<TYPE>/` | Starter `build.py` + `figs.py` per MPM document type (TN, INS, SOP, BOM, SVY, TAP, DWG, TSB, PRO, SOW, WO), with a `_preview_*.pdf`. TN and DWG also have `build_zh.py` (Chinese edition). |
## Start a new document
1. Register the number in `registry.md` (and the customer code in `mpmdoc/brand.py` if new).
2. Copy `templates/<TYPE>/` to `<PROJECT FOLDER>/source/`.
3. Fill in `build.py` (content) and `figs.py` (source numbers + figures).
4. Run `python3 build.py` from `source/`. The PDF lands in the project folder.
`build.py` finds `_STANDARDS` by walking up from its own folder, so a project folder
can sit anywhere under DOCUMENTATION PROJECT.
## Requirements
Python 3.10+, `pip install playwright && playwright install chromium`.
Run `setup.sh` in the kit root once to install them, plus poppler (see `START_HERE.md`).
## Engine cheat sheet
```python
doc = Doc(number, rev, date, title, lede, meta=[(k, v), (k, v)], slug, history,
customer=None, subject="", kicker=None, footer=None, classification=None)
doc.add(
doc.kpis([(label, value, sub, tone)]), # tone: None|key|strong|ok|bad
doc.result([...]) / doc.before_you_start([...]),
doc.section("Title", new_page=False),
doc.table(cols, rows, caption=, ref=), # KeyRow([...]), TotalRow([...]), up(), dn(), TBC
doc.calc(["# comment", (name, working, result, "PASS")]),
doc.figure(svg, caption, ref=), # cite as [[fig:ref]] / [[tab:ref]]
doc.note(kicker, body, tone="info|warn|ok|verify"),
doc.two(left_html, right_html), doc.bullets([...], check=True),
doc.assumptions([...], [...]), doc.signoff(),
# procedures (INS / SOP)
doc.before_you_start([...]), doc.glance([(label, sub[, mark, other])]),
doc.step(n, kicker, title, doc.steps([...]) + doc.note(...), figure, wide=False, side="35%"),
doc.shot("img/x.jpg", caption, width), doc.shots(...), ui("Button"), doc.chain([...]),
doc.special(kicker, title, body, figure), doc.checklist(title, [...], cols=2),
# BOM
doc.bom([(section, [(item, spec, qty, uom[, part_no])], subtotal_label)]),
# surveys / plans (SVY / TAP)
doc.kv([(label, value)]), doc.part(label, title, internal=False), doc.photo("img/x.jpg", caption, ref),
doc.photos(...), verify(), doc.transcript(heading, [lines]), doc.approval(name, role, date),
# commercial and field (PRO / SOW / WO / TSB); MPM provider block: from mpmdoc.brand import PROVIDER
doc.parties([(heading, {name, contact, address, phone, email, web, coordinates})]),
doc.priced([(subtotal_label, [(sku, description, qty, extended)])]), # totals computed -> doc.price_total
doc.milestones([(milestone, criteria, share, amount)], expect=doc.price_total), doc.money(v),
doc.pill(text, "red|gold|grey|ink|green"), doc.fields([label | (label, hint)], cols=2, title=),
doc.table(cols, [[""] * n] * 6, cls="fill"), doc.signatures([(role, who)]),
)
# Chinese edition (TN / DWG): source/build_zh.py next to build.py, same figs.py; build English first
# tr = i18n.Translator({doc phrases}); F = {k: tr.svg(f()) for k, f in FIGS.items()}; tr.check()
# Doc(..., lang="zh") / Drawing(..., lang="zh") -> {NUMBER}_{slug}_ZH_Rev{X.Y}.pdf
# TSB: one build.py loops over editions ("customer", slug "_TSB") and ("internal", slug "_TSB-Internal")
# drawings (DWG): see templates/DWG/build.py
dwg = Drawing(number, rev, date, title, subtitle, project, client, slug, history, location, discipline, drawn, checked, approved)
dwg.sheet(views=[dwg.view(svg, n, title, scale, area="1 / 1 / 5 / 3")], schedule=[(tag, name, desc, qty)], notes=[...])
dwg.build()
doc.build()
```
## Changing the standard
Edit `MPM_Document_Standard.md` and the engine together, bump the standard's version line,
and rebuild one document of each affected type to check.