The parts database: real hardware, with the datasheet and what we measured.
A catalog entry is a part number and the parameters that describe it. Two sets
of them, deliberately kept apart::
[swagelok-ss-8bk-v51]
type = "valve"
manufacturer = "Swagelok"
[swagelok-ss-8bk-v51.params.Cv]
value = 1.2
unit = "Cv"
source = "manufacturer"
reference = "SS-8BK-V51 datasheet rev C, table 2"
[swagelok-ss-8bk-v51.measured.Cv]
value = 1.14
unit = "Cv"
source = "measured"
reference = "CF-2026-03, 12 points, R^2 0.998"
:meth:`Part.resolve` merges them with the measurement winning. The datasheet
value is *not* overwritten -- it stays visible, so "the valve flows 5% under
its rating" is a question anyone can ask later. Overwriting would destroy the
only record that the discrepancy exists.
This is where Phase 12 writes back: fitting parameters against a cold-flow
produces ``measured`` blocks, with the test that produced them in ``reference``.
Building the shape now means that phase adds data, not plumbing.