Follow-up from the #404 review (merged as eb791a3).
Problem
The asset half of visual Node Details ships as dead code with no end-to-end path:
packages/graph-client/src/client.ts still POSTs /api/graph/detail-assets/resolve when a program references assets; no crate serves that route (crates/relayer-graph-server/src/lib.rs router has no detail-assets entries).
desktop/renderer/src/graph.js never passes resolveNodeDetailAsset, so workspace.js uses the default async () => undefined and every image mount falls back to "Visual unavailable"; the runtime's blob: image adapter has no producer (createObjectURL appears nowhere).
packages/visual-assets (1.6k lines, native sharp dependency, built and tested in every CI run) has no consumer outside its own tests.
#404 hid assetRef from both the development and packaged agent surfaces and removed the asset guidance from the V3 preference, and PRD 6.3 now says asset interpolation "remains deferred until the authenticated graph resolver is connected". This issue tracks actually connecting it, or removing what cannot be connected.
Decision needed
- Implement the resolver: a graph-server route backed by the
visual-assets persistence seam (VisualDetailPersistence.accept / digest-addressed read), wire resolveNodeDetailAsset in graph.js, and re-enable assetRef on the agent surface with PRD text to match. Or:
- Remove the client's resolve call and the
visual-assets package from build:packages until (1) is scheduled, so CI stops compiling a native dependency nothing uses.
Either way, reconcile the media-type allowlists (Rust validate_authored_detail_schema, detail.ts, client.ts, and the renderer all pin jpeg|png|svg+xml after #404; keep them in one place if webp/gif ever return).
Evidence
#404 review rounds 1–3 (findings "assetRef advertised but no server implements resolve route", "Product CSP blocks runtime shadow styles", and the visual-assets no-consumer verification).
Follow-up from the #404 review (merged as
eb791a3).Problem
The asset half of visual Node Details ships as dead code with no end-to-end path:
packages/graph-client/src/client.tsstill POSTs/api/graph/detail-assets/resolvewhen a program references assets; no crate serves that route (crates/relayer-graph-server/src/lib.rsrouter has nodetail-assetsentries).desktop/renderer/src/graph.jsnever passesresolveNodeDetailAsset, soworkspace.jsuses the defaultasync () => undefinedand every image mount falls back to "Visual unavailable"; the runtime'sblob:image adapter has no producer (createObjectURLappears nowhere).packages/visual-assets(1.6k lines, nativesharpdependency, built and tested in every CI run) has no consumer outside its own tests.#404 hid
assetReffrom both the development and packaged agent surfaces and removed the asset guidance from the V3 preference, and PRD 6.3 now says asset interpolation "remains deferred until the authenticated graph resolver is connected". This issue tracks actually connecting it, or removing what cannot be connected.Decision needed
visual-assetspersistence seam (VisualDetailPersistence.accept/ digest-addressed read), wireresolveNodeDetailAssetingraph.js, and re-enableassetRefon the agent surface with PRD text to match. Or:visual-assetspackage frombuild:packagesuntil (1) is scheduled, so CI stops compiling a native dependency nothing uses.Either way, reconcile the media-type allowlists (Rust
validate_authored_detail_schema,detail.ts,client.ts, and the renderer all pinjpeg|png|svg+xmlafter #404; keep them in one place if webp/gif ever return).Evidence
#404 review rounds 1–3 (findings "assetRef advertised but no server implements resolve route", "Product CSP blocks runtime shadow styles", and the
visual-assetsno-consumer verification).