Measured, and pinned in mtdc-lab. The ports block on a node type gates nothing in this repo.
The mechanism
internal/operad/validate.go ValidateLINK checks: WF known → WF allows LINK → WF15 contract → linkPairDeclared (the (src_port, tgt_port) tuple against the WF's primary + additional pairs) → port colour compatibility. Pair-level src/tgt types are checked in the state-aware path.
Nothing reads a node type's ports. internal/operad/loader.go:181 parses the block into a PortSpec and stores it at registry.go:34; every non-test read of .Ports / PortSpec in internal/ is the loader and the struct definition. Written, never read.
What that permits, measured against ontology 4.0.7
|
count |
| declared ports named by no WF pair — un-LINKable |
44 of 82 (53.7%) |
| (WF-pair, type) obligations naming a port the type does not declare |
123, across 42 of 56 types |
Concrete instance: ontology 4.0.6 added manifold to the WF01 owns/owned-by tgt_types, while manifold declares only {"self": ["identity"]}.
Both directions are large because the two namespaces are never reconciled by anything executable.
Evidence
mtdc-lab/moos-generated/tests/ports_are_inert.rs — 3 tests, pinned at 4.0.7.
mtdc-lab/findings/20260809-t281-round7-port-census.md — the 44.
- Independent corroboration:
mtdc-lab's genlib::emit_tables emits id, qualifier_segments, urn_nid, urn_pattern per node type and no ports — the generator already concluded they are not part of verification.
What is owed here
A Go test pinning the oracle side. mtdc-lab can only pin that its mirror admits a LINK onto an undeclared port; it cannot execute this repo's validator. Until a test here asserts that ValidateLINK admits such an envelope, the claim rests on the source read above. That test is small and belongs in internal/operad.
The ruling, which is not this issue's to make
Three options — enforce (fail-closed, breaks 123 obligations, needs the ontology repaired first), delete, or generate ports as a projection of the pair table with a drift gate. Costed at mtdc-lab/proposals/ffs0-ports-as-projection.md. Reserved to Sam.
Note that this repo's own CLAUDE.md already says "Relations are truth. Properties never duplicate topology" — which argues one way without settling it.
Measured, and pinned in
mtdc-lab. Theportsblock on a node type gates nothing in this repo.The mechanism
internal/operad/validate.goValidateLINKchecks: WF known → WF allows LINK → WF15 contract →linkPairDeclared(the(src_port, tgt_port)tuple against the WF's primary + additional pairs) → port colour compatibility. Pair-level src/tgt types are checked in the state-aware path.Nothing reads a node type's ports.
internal/operad/loader.go:181parses the block into aPortSpecand stores it atregistry.go:34; every non-test read of.Ports/PortSpecininternal/is the loader and the struct definition. Written, never read.What that permits, measured against ontology 4.0.7
Concrete instance: ontology 4.0.6 added
manifoldto the WF01owns/owned-bytgt_types, whilemanifolddeclares only{"self": ["identity"]}.Both directions are large because the two namespaces are never reconciled by anything executable.
Evidence
mtdc-lab/moos-generated/tests/ports_are_inert.rs— 3 tests, pinned at 4.0.7.mtdc-lab/findings/20260809-t281-round7-port-census.md— the 44.mtdc-lab'sgenlib::emit_tablesemitsid,qualifier_segments,urn_nid,urn_patternper node type and no ports — the generator already concluded they are not part of verification.What is owed here
A Go test pinning the oracle side.
mtdc-labcan only pin that its mirror admits a LINK onto an undeclared port; it cannot execute this repo's validator. Until a test here asserts thatValidateLINKadmits such an envelope, the claim rests on the source read above. That test is small and belongs ininternal/operad.The ruling, which is not this issue's to make
Three options — enforce (fail-closed, breaks 123 obligations, needs the ontology repaired first), delete, or generate
portsas a projection of the pair table with a drift gate. Costed atmtdc-lab/proposals/ffs0-ports-as-projection.md. Reserved to Sam.Note that this repo's own
CLAUDE.mdalready says "Relations are truth. Properties never duplicate topology" — which argues one way without settling it.