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.

TESTS
606 / 606
SUITES
29 · 0 failed
TOOLS FED FROM ONE READ
3
MODELS PROVEN LIVE
041908 · 042326
NX LOOP
closed both ways
OPEN ITEMS BELOW
11

Complete and verified

CapabilityStatusThe evidence
Live Teamcenter read → Capital project XMLproven liveforward-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 liveImported 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&IDproven live11 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 1219proven live13 symbols, 16 connections on a millimetre A1 sheet, generated from Teamcenter item 042326.
Port typing lives in Teamcenterproven liveAll 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 aloneproven liveroute-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 endpointsproven live11/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 diffproven liveUntouched sheet reports NO CHANGES. A simulated SME edit reported exactly the three real changes, all classified, needsReview = 0.
Write-back of SME componentsproven liveFnd0LogicalBlock 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 wiresproven liveConnector 042321; the model reported 12 connections with both ends bound, both ports typed to FuelInterface, read back from a fresh BOM window.
Receipts and undoproven liveRound trip: apply → verify → undo → back to 11 components and 11 connectors, zero orphans of any type.
Merge guard (decision 4)proven liveProven 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 sheetsproven liveTie 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 Teamcenterproven liveItem 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 Teamcenterproven liveTwo 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 estateproven liveInvertedFlight 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

#ItemStatusWhat is actually in the way
1Function → component allocation does not travelhighest valueThe 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.
2Port typing is not in the exchange bundleboundedThe 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 graphhighest valueA 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.
4Managed NX mode (decision 3)blocked, diagnosedTwo 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.
5NX-native click-through between levelsblocked, preciselyOff-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.
6Real NX tee objectsopenBranches 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.
7ISO instrument balloon field textcosmeticThree 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.
8Teamcenter-side scoping ruleopenWhich 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.
9MADe → Teamcenter write-backdesigned, not builtThe 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.
10The push itself is not merge-safeoutside our controlThe 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.
11Most models in the estate fail the port-typing auditdata, not codeAircraft 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.

Existing is not working

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.

An occurrence read is not an object read

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.

HTTP 200 is not success

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.

"An error has occurred during the JSON parsing" means a missing required attribute

Not a malformed body. Same message, same cause, on three unrelated operations.

Exhaust your own request shape before blaming the environment

A file upload was twice declared network-blocked. The actual cause was double-encoding an already-encoded ticket, which broke its own signature.

A transfer that reports success has not validated the model

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.