What carried over to packaging
Adam, 16 Oct: "same format, same everything. It's just another category." Neckline tests that on one neck finish. It holds 62 components: 40 bottles and 22 tops (5 pumps, 9 sprayers, 8 caps). All have a 24-410 neck except one 24-400 cap, added because BottleStore offers it on its 24-410 bottles. They come from Container and Packaging Supply (20), Specialty Bottle (20) and O.Berk's BottleStore (22), all read on 28 Oct 2026. It stores 463 values, each with its source URL, the source's label, its exact wording and the read date. Another 21 wordings could not be read, and they are kept as issues, not guessed.
Carried over unchanged
- Variant as the unit, one per listing.
- Attribute Value: value, reason, confidence, wording, Value Source and source URL.
- Unknown means unknown, never false.
- Variant Record: assembled when read, showing what is stated, what could not be read and what is unknown.
- The attribute definition shape: value kind, canonical unit, plausible range, enumerated values and aliases. The plausible range caught a real error on its first run: CPS gives one bottle's width as "0".
- Product Relationship: the
compatible_withtype. - The agent read surface: MaterialGraph's tool names, reading the same functions as the pages.
Had to be added
Distributor as a Value Source. In packaging, almost every listing comes from a distributor, and no listing in the sample names who made the part. Brand is therefore the distributor, and Manufacturer is unknown on all 62. The new source takes the place Material Bank's feed holds in MaterialGraph, whose own code comments describe that feed as a distributor-aggregated catalogue, trusted less than a manufacturer's own page.
Fit Strength on the relationship. MaterialGraph keeps one edge per pair and type, with a URL, a confidence and notes. Fit needed more:
- a strength;
- the source's wording;
- an evidence document for a Tested Pair;
- room for one pair to hold several strengths.
Neck Match is derived when read, not stored. Thread is an attribute. Fit is a relationship.
Kits. Specialty Bottle sells no separate closures. Every listing is a bottle with its closure fitted, and the neck finish appears only inside the closure text ("24/410 black pump"). That needed an
included_closureattribute.Packaging types and attributes: bottle, pump, sprayer and cap, plus neck finish, dip tube length, output per stroke, and overflow capacity kept apart from nominal capacity.
The Universe Boundary. MaterialGraph leaves packaging out ("its job ends at installation"), so Neckline is a sibling graph. The format carried over; the universe did not.
Not exercised: the Product tier (colours of one bottle were not grouped), Observations (price and stock were left out) and measured values.
What the record shows that no supplier page does
The sample was chosen on the 24-410 neck, so neck matches are many by design: 840 of the 880 bottle-and-top pairs. The finding is where they fall. 630 of those matches cross suppliers, while all 206 supplier-stated fits stay inside one distributor's own catalogue. 89 of the stated fits appear on both the bottle's page and the top's page. A cross-supplier match is what no distributor will tell you, and what every one disclaims.
The dip tube check adds a second fact beside fit. For example, a 10 in tube on a bottle 7.25 in tall overall will need cutting.
One supplier-stated fit contradicts the standard. BottleStore offers a 24-400 cap as a closure option on all 10 of its 24-410 bottles. In the fit browser that pair shows as a supplier-stated fit with no neck match.
The kill test: one fact, many wordings
| Fact | CPS | Specialty Bottle | BottleStore |
|---|---|---|---|
| Neck finish | "Lid Size: 24-410", on bottles too | Only inside the closure text: "24/410 black pump" | Split across two rows: "Neck / Closure Diameter: 24" and "Neck Finish: 410" |
| Capacity | "Capacity: 4 oz", "100 ml" | Only in the title | "Size: 4" (no unit), "8 oz", "8oz", "500ml"; overflow as "129.50ml", "272.5 cc +/- 7 cc", "525.00" |
| Height | "Height (in): 3.77", with the unit in the label | 5.3" |
"3.90in", "5.18 in +/- 0.050 in", "134mm", "124.50" (no unit) |
| Material | "PET", "Metal", "Plastic/Metal" | Only in the title | "Material / Resin: PET PCR" |
| Dip tube | In a subheading: "7 inch dip tube" | "Dip tubes may require trimming." No length given | In the title: 6-1/8", "6in", 10" DTL |
| Output | "(0.2 cc output)", "(.25 cc output)" | Not stated | "2cc" in the field but "2ml" in the title; "0.13mcl" |
The claim holds. Even the neck finish, a public standard, is written three ways by three shops. Each supplier needed its own parsing rules.
Published by nobody
- Not on any page: a viscosity window, a pour rate or a manufacturer. Three BottleStore tops describe viscosity in words only ("light to medium viscosity").
- No child-resistant cap in 24-410: none of the three sells one. CPS's child-resistant caps all have -400 finishes.
- No tested-pair evidence: none of the three publishes any.
- Specialty Bottle: "Buyer is solely responsible for determining the adequacy and compatibility of containers with their product." (ordering information)
- CPS's 16 CFR 1700 closures page says only that its closures are "generally designed to align with 16 CFR 1700 child-resistance guidelines".
- Both pages are archived in
data/sources/policy/.
So the fields Adam named (viscosity, pour rate) need measuring or the acquired companies' own data. Tested Pair is modelled and empty.
Data faults found along the way:
- CPS gives height equal to width on all seven of its pumps and sprayers, which looks copied.
- BottleStore's "0.13mcl" is not a unit.
What it does not prove
- Demand. No buyer here pays for this. Search tools are free to buyers, Circulate starts at EUR 2,500 and Specright is quote-only.
- That makers would supply data. Aptar and Silgan appear nowhere in these listings.
- Scale. This is 62 records and essentially one neck finish, with hand-written parsing rules for each supplier. MaterialGraph's extraction agents were not used.
- Who owns it. Packaging is Adam's spin-out. Neckline is upstream work for the packaging company, not a lab product.