History-free snapshot of the private development repository at 77a82eb. Code, docs and the public catalogue only: no plant or job knowledge layers, no client, job or producer names (tools/scrub.py clean against the widened term list; a second word-level grep clean). The intro deck is left out because its slide images cannot be checked for job drawings.
knowledge/ in this checkout
The plant layer and the job layer are not here — never were, never will be
in a colleague distribution. catalogue.yaml is here, but it is a
carve-out, not the owner's real file: tools/make_dist.py's
build_catalogue_carveout() reads the real one and re-emits only the
branches that are trade-standard or that are this tool's own built-in
configuration, never a manufacturer's product rating. Read the header at
the top of catalogue.yaml itself for the exact list of what's in and
what's out, and why. catalogue.yaml.template is a separate thing: a
blank-value authoring template for building a real knowledge layer from
scratch, not what this carve-out is built from.
Why
WillTools reads its facts in layers, each overriding the one before it:
| layer | where | what it is |
|---|---|---|
knowledge.DEFAULTS |
in the code | what the tool assumes when nobody has said |
knowledge/catalogue.yaml |
here, carved out | published hardware ratings — manufacturer data |
| plant layer | %APPDATA%\WillTools\knowledge.yaml |
one office's naming conventions, casting-bed rails, parameter names |
| job layer | <model folder>/_ticketqc/knowledge.yaml |
what this job does differently |
| project config | wherever the engineer put it | the pinned, merged answer for one job |
The plant and job layers, and catalogue-rationale.md, are either a
specific office's private template or narrate real measured incidents —
neither belongs in a colleague trial. The catalogue's two real capacity
tables (catalogue.inserts, connectors.products) ship empty for the
same reason a manufacturer's rating is not this tool's to redistribute.
Ask whoever gave you this checkout for the real layers, and the real
catalogue, once you are ready to point the tools at a real job.
What runs without the missing pieces
Everything that does not need a lookup: unit conversion, the ribbon itself,
Self Check, and — outside Revit entirely — panellift's handling
calculations, which read a frozen job file and never touch knowledge/ at
all (see examples/example-panel.job.json).
Everything the shipped carve-out covers also runs for real: face
designations, the up-end orientation rule, ASTM rebar grades, and the whole
shop-ticket QC checklist (row ids, grades, which check answers which row) —
none of that needs the real, private file. What stands down cleanly is only
what actually needs a manufacturer's number: a lifting insert's rated
capacity, a sandwich-wall tie's rated capacity, and anything downstream of
either. python tools/setup_machine.py --check reports this state as a
pass, not a failure — a distribution with the carve-out and no product
data is an expected, first-class state, not a broken one. Self Check
reports the same thing inside Revit, row by row.
Running the test suites here
CONTRIBUTING.md's "What does not run in a trial install" has the full
accounting. Short version: both suites' tests/conftest.py carries an
appended, auto-detecting block (written by tools/make_dist.py's
append_test_exclusions()) that skips, by name and with a reason, the
handful of tests that assert the owner's real published numbers rather
than this tool's logic. Drop in the real knowledge/catalogue.yaml and
those tests un-skip on their own — nothing to edit.
Getting real knowledge layers
Ask the owner. They come from a second, private repository that is not part
of this one on purpose — see the top of .gitignore in the repo root for
why the split exists at all.