renderBlueprintJson function
String
renderBlueprintJson({
- required String command,
- required Blueprint blueprint,
- required CompatibilityResult compatibility,
- required CompatibilityStatus status,
Renders a Blueprint and its compatibility result as stable JSON over the existing envelope (FR-046). The Blueprint contribution is exactly Blueprint.toJson — catalog IDs and structured selections only, never a badge, section order, prompt, or AI conversation text (FR-020, FR-023, FR-024; proven in blueprint_no_presentation_test.dart, T047).
Implementation
String renderBlueprintJson({
required String command,
required Blueprint blueprint,
required CompatibilityResult compatibility,
required CompatibilityStatus status,
}) {
final blocked = status == CompatibilityStatus.blocked;
return renderEnvelope(
command: command,
ok: !blocked,
exitCode: blocked
? ExitReporter.blueprintInvalidOrCompatibilityBlocker
: ExitReporter.success,
result: {
'blueprint': blueprint.toJson(),
'blueprintHash': blueprint.blueprintHash,
'compatibility': {
'status': status.name,
'findings': [
for (final finding in compatibility.findings)
{
'severity': finding.severity.name,
'code': finding.code,
'message': finding.message,
},
],
},
},
warnings: [for (final warning in compatibility.warnings) warning.message],
error: blocked
? renderError(
code: 'COMPATIBILITY_BLOCKER',
exitCode: ExitReporter.blueprintInvalidOrCompatibilityBlocker,
message: compatibility.blockers
.map((finding) => finding.message)
.join('; '),
)
: null,
);
}