# PAct Semantic Expansion v02

Generated: `2026-05-15T18:40:37+00:00`
Portal: `http://106.14.105.96:28080/experiments/pact-transporter-semantic-expansion-v02-20260515/index.html`

This run corrects the hard-case scorer to use GAPartNet `reference_object.json`/asset joints instead of PartNet-Mobility ids.
It then tests a semantic mask-to-part expansion layer: part names/semantic labels propose missing movable nodes before joint scoring.

## Mean Metrics

| mode | F1 | precision | recall | count err | axis err | tree |
|---|---:|---:|---:|---:|---:|---:|
| `raw` | 0.0303 | 0.0303 | 0.0303 | 10.6364 | 81.87 | 1.0000 |
| `best_old` | 0.0973 | 0.2045 | 0.0693 | 10.0000 | 58.09 | 1.0000 |
| `semantic` | 0.5657 | 0.5657 | 0.5657 | 0.0909 | 33.64 | 1.0000 |

## Readout

The strongest signal is that PAct is missing an upstream semantic part proposal/expansion stage. Axis repair and OT tree repair cannot recover joints that were never proposed as parts.
The semantic expansion is not yet a final deployable model: here part names come from the synthetic dataset metadata. The architectural lesson is to replace that source with VLM/part-captioned segmentation tokens and train the same part-name -> joint-prior head.
