THE HONEST BOARD
Done, and Not Done
Everything below is either verified by a tool call whose output is quoted, or listed as not done. Nothing is marked complete because it was written; it is marked complete because something read it back. Current as of 1 August 2026.
Complete and verified
| Capability | Status | The evidence |
|---|---|---|
| Live Teamcenter read → Capital project XML | proven live | forward-translate --live 041908 returns 12 components, 11 pathways, 0 skipped, 16 functions, 6 signals; 524 KB of XML. Imported into Capital and rendered with all 11 pathways wired. |
| Live Teamcenter read → MADe model (EBOM + functions) | proven live | Imported into MADe 3.9.1 through MADe's own Integration wizard as Inverted Flight Fuel RAMS from TC.made — 12 components, wizard reports 0 errors, 0 warnings. Wildfire imported the same way validates completely clean (13 components, real functions on 5, 0 fabricated rates). The propagation graph is a separate matter — see open item 3. |
| Live Teamcenter read → NX P&ID | proven live | 11 symbols, 11 connections, 0 errors, counts read back out of the saved part. Title block carries TC 041908. Re-run end to end on NX 2512 as well: 11/11, 11/11. |
| NX hydraulic sheet, ISO 1219 | proven live | 13 symbols, 16 connections on a millimetre A1 sheet, generated from Teamcenter item 042326. |
| Port typing lives in Teamcenter | proven live | All 22 block ports of 041908 and all 27 of 042326 bound to their interface revisions via the Seg0Implements GRM relation, every write re-read. |
| Routing derived from Teamcenter alone | proven live | route-from-tc.mjs reproduces the full fan-out with no Cameo model present, and independently agrees with the NX symbol mapping about which three components are instrumentation. |
| NX read-back — nodes and wire endpoints | proven live | 11/11 nodes with their stamps, and 11/11 wires each resolving to a component pair with their Teamcenter ids. Verified identical to the source topology. |
| Schematic diff | proven live | Untouched sheet reports NO CHANGES. A simulated SME edit reported exactly the three real changes, all classified, needsReview = 0. |
| Write-back of SME components | proven live | Fnd0LogicalBlock 042305 "ReliefValve" created via createAttachAndSubmitObjects, attached by IMAN_specification, placed in the structure under the correct composite, verified by re-reading the returned uid — then deleted, because it came from a simulation. |
| Write-back of SME wires | proven live | Connector 042321; the model reported 12 connections with both ends bound, both ports typed to FuelInterface, read back from a fresh BOM window. |
| Receipts and undo | proven live | Round trip: apply → verify → undo → back to 11 components and 11 connectors, zero orphans of any type. |
| Merge guard (decision 4) | proven live | Proven in both directions on 041908: baseline OK; after enrichment +1 object/+2 ports/+1 wire, 0 removed; after a destructive push exit 1 with all four removals flagged ENRICHMENT by name. Re-verified today: 49 objects, 29 ports, 11 connections, nothing removed. |
| Platform view tied to detail sheets | proven live | Tie check 2/2, both to a Teamcenter item. Stamps (SOURCE_TC_ITEM, DRILL_TO, DRILL_SHEET) read back intact from the saved part. The checker is symmetric and refuses to grade a weak tie as strong. |
| Promoting a reference architecture into Teamcenter | proven live | Item 042326 created as a new model: 14 components, 27 ports all typed, 16 connections both ends bound, 0 dangling. Receipt names all 61 objects so the whole model is reversible. |
| NX schematics checked into Teamcenter | proven live | Two datasets on item 041908 via IMAN_specification, verified by ref_list: the fuel P&ID (1.16 MB) and the hydraulic schematic (1.33 MB), each a Zip of the .prt plus its PDF. |
| Port-domain audit across the estate | proven live | InvertedFlight PASS 22/22. Aircraft FAIL 10/10 untyped, CubeSat FAIL 52/52, SimpleGimbal FAIL 2/2. Empty models report NO SUBJECT or INCONCLUSIVE, never PASS. |
Open — with the reason, not just the label
| # | Item | Status | What is actually in the way |
|---|---|---|---|
| 1 | Function → component allocation does not travel | highest value | The bundle carries the functions and the components but allocations is empty, so MADe synthesizes 11 interface functions instead of landing the real 16. In this model the binding is expressed as swimlane partitions (ActivityPartition.represents) rather than «Allocate» relations, so nothing lands in Teamcenter to read. Wildfire, which does carry allocations, lands them correctly — so the transform is fine and the gap is in what the push produces from this model's shape. |
| 2 | Port typing is not in the exchange bundle | bounded | The typing exists in Teamcenter and route-from-tc.mjs reads it, but a live read through the occurrence path returns interfaceId: null on all 44 port rows. Consequence: every MADe flow defaults to Signal-Generic instead of ENERGY / MATERIAL / SIGNAL, and the NX branch still classifies instrumentation partly by name. One reader change fixes all of it. |
| 3 | ★ Ports reached through two parents are not deduped — and it breaks MADe's propagation graph | highest value | A Cameo push files every block under both its owning package and its composing block, so the occurrence read returns 44 port rows for 29 distinct port objects — two flow objects per port, with different BOM uids. A connection can only reference one of each pair, so only 11 of the 44 flows carry a connection. MADe's model validation then reports 55 errors (11 wired components × 5) on reopening the project, even though the import wizard reported none. Found by reopening the saved project rather than trusting the wizard. The fix is one change in the occurrence reader: key ports on (owning item, port name) rather than on the BOM line — which the merge guard already does, for exactly this reason. |
| 4 | Managed NX mode (decision 3) | blocked, diagnosed | Two independent breakages, both found, neither fixed. (a) The TCCS environment registration is gone — the cfg tree the launcher points at no longer exists, and recreating it by copying the template XMLs is not a valid registration (the error moves from "No TCCS environment is found" to "Failed to get the TCCS Environment"). The supported fix is Environment Manager (TEM), which writes into a working Teamcenter installation and is not an unattended action. (b) UGII_BASE_DIR is set machine-wide to the NX 2606 install, so the launcher believes it is starting NX 2512 and actually starts 2606 — and managed mode was only ever configured for 2512. The dataset route ships in the meantime. |
| 5 | NX-native click-through between levels | blocked, precisely | Off-sheet connectors commit, but SetDestination refuses: "The owning connection of destination off sheet connector is not in a run." Navigation needs Schematic Designer runs, which the shipped templates do not set up; and a committed connector never comes back through OffSheetConnectors. The descent is recorded and verifiable today; a user follows it by opening the part DRILL_TO names. |
| 6 | Real NX tee objects | open | Branches share an anchor point on the upstream symbol's outlet — correct on the drawing, but not an NX fitting object. The 11 shipped tee/cross symbols cannot be placed at all (no <Annotation>). The documented route is ConnectionBuilder.SetStartTeeSymbolId, untried. |
| 7 | ISO instrument balloon field text | cosmetic | Three of the eleven fuel symbols keep the bare tag, because the ISO instrumentation balloon draws its own two-field text rather than a plain annotation. Reported in the result's notRelabelled rather than passed over silently. |
| 8 | Teamcenter-side scoping rule | open | Which elements define the fuel or hydraulic specification still comes from the port-domain registry. It should come from a classification, attribute, branch or saved query — and specifically must never be guessed from names. |
| 9 | MADe → Teamcenter write-back | designed, not built | The hinge exists and is proven: every MADe id carries externalId = the Teamcenter tag and ID.metadata, which MADe stores and returns on export — so a returning rate is already keyed to a Teamcenter object and the write is an update, never a create. Landing MTTF / failure rate / MTTR as Att0MeasurableAttribute parameters with maturity states is the remaining work. |
| 10 | The push itself is not merge-safe | outside our control | The guard detects loss; it cannot prevent it. Check-Out discards local state before it pulls and the operation is a replace, and both happen inside the HCL connector. Making the push merge-safe has to happen there. |
| 11 | Most models in the estate fail the port-typing audit | data, not code | Aircraft 10/10 untyped, CubeSat 52/52, SimpleGimbal 2/2. The routing rule works; those models have not been typed. Each is a modelling task, not an integration one. |
Five lessons that generalise
These cost the most time and are the ones most likely to bite someone else.
Four NX APIs whose names promised drill-down were probed against a live session; three did not do what their names suggest. ApplicationSwitchImmediate is the archetype: in batch it returns without raising and does nothing, so the failure surfaces several calls later in an unrelated subsystem.
Reading the BOM occurrence view and finding no object behind a port produced the confident, wrong conclusion that Teamcenter had lost the port typing. Check a type by name before declaring something absent.
setProperties on a GRM relation, and on occurrence properties, both return 200 with empty partialErrors and change nothing. Verification has to be a fresh read, not the response.
Not a malformed body. Same message, same cause, on three unrelated operations.
A file upload was twice declared network-blocked. The actual cause was double-encoding an already-encoded ticket, which broke its own signature.
MADe's import wizard reported 0 errors and 0 warnings. Reopening the saved project ran MADe's own model validation and reported 55. Both are true; they answer different questions. Reopen, and check.