Product Kit · 1.0.0

Structured Output Recovery Kit

Turn malformed JSON or tool output into canonical JSON with validation evidence and a safe retry action.

Developers replacing repeated model retries and brittle regular expressions in structured-output pipelines.

Supported: type, enum, properties, required, additionalProperties:false, items.

The sample output was executed through the real deterministic recovery core during this build.

Validated recovery envelope

{
  "ok": true,
  "schema_version": "utilito.product-kit.v1",
  "kit": {
    "id": "structured-output-recovery-kit",
    "version": "1.0.0"
  },
  "result": {
    "status": "ready",
    "confidence": "high",
    "output": "{\"count\":2,\"name\":\"Ada\"}",
    "value": {
      "count": 2,
      "name": "Ada"
    },
    "repairs": [
      {
        "sequence": 1,
        "type": "STRIPPED_FENCE",
        "path": "$",
        "detail": "Removed Markdown code fence."
      },
      {
        "sequence": 2,
        "type": "UNQUOTED_KEY",
        "path": "$.count",
        "detail": "Quoted key count."
      },
      {
        "sequence": 3,
        "type": "UNQUOTED_KEY",
        "path": "$.name",
        "detail": "Quoted key name."
      },
      {
        "sequence": 4,
        "type": "TRAILING_COMMA",
        "path": "$",
        "detail": "Removed a trailing comma."
      }
    ],
    "diagnostics": {
      "syntax": {
        "status": "repaired",
        "findings": [
          {
            "id": "STRIPPED_FENCE",
            "path": "$",
            "message": "Removed Markdown code fence."
          },
          {
            "id": "UNQUOTED_KEY",
            "path": "$.count",
            "message": "Quoted key count."
          },
          {
            "id": "UNQUOTED_KEY",
            "path": "$.name",
            "message": "Quoted key name."
          },
          {
            "id": "TRAILING_COMMA",
            "path": "$",
            "message": "Removed a trailing comma."
          }
        ]
      },
      "schema": {
        "status": "valid",
        "findings": []
      },
      "tool_call": {
        "status": "not_requested",
        "findings": []
      }
    },
    "validation": {
      "target": "Utilito bounded JSON Schema subset v1",
      "valid": true,
      "errors": []
    },
    "tool_call_validation": null,
    "warnings": [],
    "safe_next_action": {
      "code": "COPY_CANONICAL_OUTPUT",
      "message": "Copy the canonical output into the next deterministic step."
    }
  },
  "receipt": {
    "input_bytes": 33,
    "output_bytes": 24,
    "operations": 2,
    "omitted_items": 0,
    "warnings": [],
    "parseable_before": false,
    "parseable_after": true,
    "canonicalized": true,
    "repairs_applied": 4,
    "inferred_closures": 0,
    "repairs": [
      {
        "sequence": 1,
        "type": "STRIPPED_FENCE",
        "path": "$",
        "detail": "Removed Markdown code fence."
      },
      {
        "sequence": 2,
        "type": "UNQUOTED_KEY",
        "path": "$.count",
        "detail": "Quoted key count."
      },
      {
        "sequence": 3,
        "type": "UNQUOTED_KEY",
        "path": "$.name",
        "detail": "Quoted key name."
      },
      {
        "sequence": 4,
        "type": "TRAILING_COMMA",
        "path": "$",
        "detail": "Removed a trailing comma."
      }
    ],
    "confidence": "high",
    "syntax_status": "repaired",
    "schema_status": "valid",
    "tool_call_status": "not_requested",
    "limits": {
      "source_utf8_bytes": 262144,
      "graph_depth": 32,
      "graph_nodes": 2000,
      "container_fanout": 256
    },
    "limitations": [
      "Repairs are syntactic and deterministic; semantic correctness is not claimed.",
      "Only the published bounded JSON Schema subset is supported.",
      "Missing values are never inferred and submitted values are never type-coerced."
    ],
    "safe_next_action": {
      "code": "COPY_CANONICAL_OUTPUT",
      "message": "Copy the canonical output into the next deterministic step."
    },
    "values_invented": false,
    "values_coerced": false
  },
  "provenance": {
    "deterministic": true,
    "model_used": false,
    "network_used": false,
    "storage_used": false,
    "core_versions": {
      "structured_output_recovery_kit": "1.0.0",
      "structured_output_rescue": "1.0.0",
      "json_repair": "1.0.0"
    }
  },
  "error": null
}

Free runnable capability

Recover and validate one bounded response with deterministic evidence and no signup.

Builder capability

The existing Builder Pilot adds batch recovery and higher bounded volume; it does not add model guessing or hidden retries.

See the existing Builder Pilot

Response-only privacy

Submitted text is sent only to the response-only API when you select Recover; it is not stored, logged as telemetry, or used by a model.

Limits and trust boundary

  • Schema validation supports only type, enum, properties, required, additionalProperties:false, and items.
  • Recovery never invents missing values or coerces value types; schema-invalid output remains blocked with diagnostics.
  • Inferred closures always require review before retrying the source operation.