Hidden nodes and their descendants do not contribute asset references to generated TSX. Hidden assets remain discoverable in assetSummary.unavailable with reason hidden-node; they are excluded from the deliverable manifest. A hidden asset warning is not evidence that a visible, required asset was collected.
Projection deviations are result data. Each frame and the top-level result exposes projectionIssues by default, independent of includeDiagnostics. Entries carry code, nodeId, property, message and details with originalValue and appliedValue. Fidelity impact follows the diagnostic code unless explicitly supplied as fidelityImpact. Applied values identify generated CSS props or source excerpts, rather than claiming that the source value was preserved exactly. Missing source evidence is null and explicitly described. Unclassified uncovered layout is reported as lossy; the server does not invent an intentional-exclusion explanation. Acquisition continues to describe collection independently.
quality.assets grades binary collection, not whether a manifest was requested. assetSummary.description explains its collection status; manifestIncluded independently describes manifest delivery. not-collected means discovered assets have no collected bytes, not-requested on an unavailable item means its byte capture was not requested, none means complete discovery found no assets, unknown means discovery cannot establish absence, partial means some bytes or discovery are incomplete, and collected means all discovered deliverable assets have bytes. Hidden exclusions are reported separately and do not require bytes.
The recommended batch is 1–3 frames. Budget responses use recommendedBatchSize at most 3 and expose maxFrameCount=6 and maxFrameOutputUnits=12 as hard limits. recommendedFrameIds and remainingFrameIds split at the recommendation, not at the maximum.
Validation uses the checkout-local Cargo target, never installed MCP tools. The saved production responses are evidence of old behavior, not executable source captures; regression fixtures model the confirmed source paths.
Responsive issues label per-breakpoint evidence as evidenceScope: breakpoint-source-projection; this preserves source limitations without claiming a pixel-level validation of the merged result. Actual capture results override discovery predictions by assetId. A path supplied by another non-excluded asset is still valid even when a hidden asset shares that name.
hidden-node includes static invisibility, zero opacity, and an asset with a bounding box but no render bounds. Discovery and codegen share this predicate. Static hidden subtrees are omitted; an otherwise visible non-rendering asset becomes a visibility="hidden" Box using the asset's layout sizing, so its space is retained without requiring unavailable bytes. DEVUP_CODEGEN_NON_RENDERING_ASSET exposes the policy, source visibility/bounds, generated box, and next action. This substitution is conservatively graded approximated.
Output withholding is a projection deviation. Every output-bearing failures entry also appears in top-level projectionIssues and in its affected frame's issues. The issue identifies property (assetReference or output), details.output, original request/failure evidence, appliedValue.state="withheld", and nextAction. Excluded-reference evidence includes candidate paths, source visibility and opacity, render bounds and a policyConflict flag. failures remains the operational/retry record; it is not an alternative to the projection contract. Acquisition-only and binary-only failures continue to use their own quality dimensions and failure records.
For export results requesting TSX, deliverable is present even when partial or entirely withheld, on the top-level result and each projected frame. isFinal=false is explicit; availableOutputs and withheldOutputs identify node/output pairs. Withheld code fields are absent intentionally, but their metadata is retained. A true marker still requires complete status and produced code. Selection-required responses and rejected calls are not projection results and do not promise a code deliverable. Resource delivery can move available code into linked resources; the marker describes the produced outputs independently of routing.
Each projectionIssues entry uses details.output to identify tsx, componentTsx or responsiveTsx. For ordinary TSX outputs, outputResults[output] gives produced/withheld state, projection grade and the individual fidelity report (for produced output). The legacy frame fidelity describes the last ordinary output projected; use outputResults when more than one output is requested. Responsive diagnostics retain breakpoint-source evidence scope rather than claiming an independently measured merged fidelity report.
Uncovered-layout appliedValue describes emitted evidence instead of an invented computed CSS value. It includes state, generated owner ID, an at-most-800-character source excerpt, truncation flag, and propertyMappingVerified=false. The excerpt is from the generator before server asset-path normalization and is not proof of source fidelity. text-auto-size explains fixed dimensions omitted for WIDTH_AND_HEIGHT text; component-reference identifies the actual reference replacing a subtree; asset-projection identifies the actual asset element; property-unmapped identifies an emitted node without verified per-property mapping. These classifications explain generation and do not upgrade lossy quality to exact. When no range or enclosing replacement can be identified, state is no-mapped-source, generated source is null, and the item explicitly explains its missing mapping/trace. An unavailable original value also carries originalValueReason.
projectionReview.groups groups issues by output, generated owner and classification, includes affected node IDs/properties and indexes into that carrier's projectionIssues, and sorts deterministically. Review withheld outputs first, then unknown/unmapped fields, component references, and other approximations; larger groups come first within a priority. This is a review order, not a claim of measured visual impact. nextAction tells the caller what to inspect. WQUW-120's 40 component-layout entries form five reference groups (Header, three Select usages, Alert), separately from inline TSX approximations.
Production regressions in fixtures/r2 contain complete locally acquired payloads. WQUW-119 replay matches the original contentHash and checks that all six TSX outputs exist and parse, including the formerly withheld story frame. WQUW-118 and WQUW-120 regressions assert actual generated evidence and output-specific attribution, not merely the presence of an issue label.
Export diagnostics, projectionIssues, placementContracts, and projectionEvidence carry screenId beside nodeId. Use screenId in frameIds; nodeId identifies the diagnosed element. A global diagnostic or an element outside the known screen tree has screenId:null and screenIdReason. Ownership is independent of whether optional diagnostics are requested and is retained in resource delivery.
frameIds still selects screens explicitly. A descendant ID is rejected with selectionIssues and, when every requested ID can be resolved, a corrected SECTION URL and complete screen selection in nextAction.arguments. No descendant request is silently expanded. Missing IDs and truncated-index uncertainty are distinguished from known descendants. A terminal job forwards corrective arguments or returns nextAction:null with a reason; it does not recommend polling its retained failure again.
Text auto-resize that the generator intentionally implements by omitting fixed dimensions is accounted-for-content-sizing. Its source map and projectionEvidence record the original mode, emitted Text, and separate font-metrics-not-measured information even with includeDiagnostics:false. This is semantic accounting, not measured pixel equality. Fixed NONE/TRUNCATE sizes, read failures, unknown generated elements, and conflicting dimensions cannot borrow this resolution to conceal loss. Resource notes respect deliverable.isFinal.