@@ -3,10 +3,7 @@ import { toError } from '@sim/utils/errors'
33import { omit } from '@sim/utils/object'
44import { isLargeValueRef } from '@/lib/execution/payloads/large-value-ref'
55import { materializeLargeValueRef , storeLargeValue } from '@/lib/execution/payloads/store'
6- import {
7- collectFunctionalBlockOutputs ,
8- type FunctionalExecutionDataSource ,
9- } from '@/lib/logs/execution/functional-outputs'
6+ import { FunctionalOutputsUnavailableError } from '@/lib/logs/execution/functional-outputs'
107import { projectTraceSpansForSecrets } from '@/lib/logs/execution/trace-secret-projection'
118import type { TraceSpan } from '@/lib/logs/types'
129import {
@@ -280,8 +277,8 @@ export async function materializeExecutionDataForDisplay(
280277
281278/**
282279 * Materializes one trusted row into its display envelope plus secret-safe functional outputs.
283- * Execution -state output remains authoritative when present, but only requested blocks are
284- * projected and returned; the raw execution state never crosses the display boundary.
280+ * Only requested execution -state outputs are projected and returned; trace spans remain display
281+ * data and the raw execution state never crosses the display boundary.
285282 */
286283export async function materializeExecutionDataForDisplayWithBlockOutputs (
287284 executionData : Record < string , unknown > | null | undefined ,
@@ -296,27 +293,25 @@ export async function materializeExecutionDataForDisplayWithBlockOutputs(
296293
297294 const executionState = readRecord ( materialized . executionState )
298295 const blockStates = readRecord ( executionState ?. blockStates )
299- const displaySource = displayData as FunctionalExecutionDataSource
300296 if ( ! blockStates ) {
301- return {
302- executionData : displayData ,
303- blockOutputs : collectFunctionalBlockOutputs ( displaySource ) ,
297+ if ( materialized . executionDataTruncated === true ) {
298+ throw new FunctionalOutputsUnavailableError ( )
304299 }
300+ return { executionData : displayData , blockOutputs : new Map ( ) }
305301 }
306302
307303 const runRegistry = await importResolvedSecretTraceRegistry (
308304 materialized [ RESOLVED_SECRET_PROVENANCE_KEY ] ??
309305 executionState ?. [ RESOLVED_SECRET_PROVENANCE_KEY ] ,
310306 'traceStore.blockOutputRunProvenance'
311307 )
312- const blockOutputs = collectFunctionalBlockOutputs ( { traceSpans : displaySource . traceSpans } )
308+ const blockOutputs = new Map < string , unknown > ( )
313309 const projectionStore = createReadOnlyProjectionStore ( context )
314310
315311 for ( const blockId of new Set ( blockIds ) ) {
316312 const blockState = readRecord ( blockStates [ blockId ] )
317313 if ( ! blockState || blockState . output === undefined ) continue
318314
319- blockOutputs . delete ( blockId )
320315 const hasExactProvenance = Object . hasOwn ( blockState , RESOLVED_SECRET_PROVENANCE_KEY )
321316 const registry = hasExactProvenance
322317 ? await importResolvedSecretTraceRegistry (
0 commit comments