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

+72
View File
@@ -0,0 +1,72 @@
"""TEMPLATE — Technical Note (TN). Copy this folder to <PROJECT>/source/ and fill it in.
A TN answers ONE engineering question (does it fit, how much power, is a cut needed)
and puts the answer first. 1–3 pages. See MPM_Document_Standard.md §9.3.
Order (do not reorder):
masthead (automatic) → KPI tiles → Result → evidence sections (tables, calc, figures)
→ Assumptions and open items → Revision history (automatic)
"""
import sys, pathlib
HERE = pathlib.Path(__file__).resolve().parent
sys.path.insert(0, str(next(p / "_STANDARDS" for p in HERE.parents if (p / "_STANDARDS").is_dir())))
from mpmdoc import Doc, KeyRow, up, dn
from figs import FIGS, MEASURED, LIMIT # keep every number in ONE place (figs.py) and derive the rest
F = {k: f() for k, f in FIGS.items()}
MARGIN = LIMIT - MEASURED
doc = Doc(
number="TN-MPM-SUBJ-01", # TYPE-CUST-SUBJ-NN · register CUST + number in registry.md
rev="0.1", # 0.x = Draft · 1.0 = first release
date="2026-11-05", # ISO in source; displayed as "Nov 5, 2026"
customer=None, # None = name from the CUST code; override for a fuller name
subject="Subject", # short: the thing studied ("Bay 17", "Pingo P2.5 LED module")
title="Question-Shaped Title: The Thing Being Checked",
lede=("Two to three sentences: the situation, and what this note works out. "
"Write it so someone who reads only this paragraph knows why the note exists."),
meta=[("Site", "Where / what"), ("Requirement", "The criterion · e.g. ≤ 60 W")], # exactly two cells
slug="Customer_Short-Title", # → TN-MPM-SUBJ-01_Customer_Short-Title_Rev0.1.pdf
history=[("0.1", "2026-11-05", "Initial draft.")],
)
doc.add(
# 3–4 tiles: the input(s), THE ANSWER (tone="key"), and the verdict (tone="ok"/"bad")
doc.kpis([
("Measured", f"{MEASURED:.1f} W", "How it was measured"),
("Limit", f"{LIMIT:.1f} W", "Where the limit comes from", "strong"),
("Margin", f"{MARGIN:+.1f} W", "Limit − measured", "ok" if MARGIN >= 0 else "bad"),
]),
# 2–4 bullets. First bullet = the answer, with the number in bold. Then conditions / what to do.
doc.result([
f"The answer in one sentence, with the key value in <b>bold ({MEASURED:.1f} W)</b>.",
"The condition the answer depends on, and what changes if it doesn't hold.",
]),
doc.section("Comparison"),
doc.table(
[("Item", ""), ("Value", "m r"), ("Change", "d r"), ("Notes", "")],
[
["Row", "1.0", up("+1.0"), "Source of the number"],
KeyRow(["<b>The row that matters</b>", "2.0", dn("−0.5"), "Highlight max. one row"]),
],
caption="What the table shows, units, and the datum.", ref="cmp"),
doc.section("Calculation"),
doc.calc([
"# One comment line per step, saying why",
("Margin", "limit − measured = {:.1f} − {:.1f}".format(LIMIT, MEASURED), f"{MARGIN:+.1f} W",
"PASS" if MARGIN >= 0 else "FAIL"),
]),
doc.section("Figure"),
doc.figure(F["bars"], "Caption says what to look at, not just what it is. Refer to it in text as [[fig:bars]].", ref="bars"),
doc.assumptions(
["Every assumption the answer rests on, one per bullet."],
["Everything still to confirm, phrased as an action (Confirm …, Add …)."],
),
)
doc.build()