8e6ee31596
ci / test (push) Successful in 6m18s
History-free snapshot of the private development repository at cbe45c5 (2026-09-09). Code, docs and public catalogue only; no plant or job knowledge layers, no client or job names (tools/scrub.py clean). The intro deck is left out of this snapshot because its slide images could not be checked for job drawings.
67 lines
3.5 KiB
Markdown
67 lines
3.5 KiB
Markdown
# `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.
|