Product Kit · 1.0.0

Contract Release Gate Kit

Gate one bounded JSON Schema, tool contract, or OpenAPI operation release with direction-aware compatibility and fixture evidence.

API and agent-tool teams that need a deterministic release decision without replaying calls or executing submitted code.

Inline bounded schemas only. No $ref resolution, fetch, tool execution, replay, retries, GitHub write-back, storage, schedules, or monitoring.

The sample was executed through the deterministic gate core during this build.

Release-gate envelope

{
  "ok": true,
  "schema_version": "utilito.product-kit.v1",
  "kit": {
    "id": "contract-release-gate-kit",
    "version": "1.0.0"
  },
  "result": {
    "decision": "pass",
    "status": "passed",
    "compatibility": {
      "taxonomy": [
        "breaking",
        "non_breaking",
        "unknown"
      ],
      "supported_subset": "Conservative bounded subset: string type only (unions invalid), properties, required, additionalProperties boolean, items, enum, and const. title/description/default are annotation-only. Every changed unsupported keyword is unknown. Output property additions are non-breaking for tolerant consumers unless the previous output schema explicitly closed additionalProperties; then they are breaking.",
      "rows": [
        {
          "path": "input:$.properties[\"count\"]",
          "change": "property_added",
          "classification": "non_breaking"
        }
      ],
      "counts": {
        "breaking": 0,
        "non_breaking": 1,
        "unknown": 0,
        "total": 1
      }
    },
    "fixture_results": [
      {
        "id": "request-accepted",
        "target": "input",
        "actual": {
          "outcome": "accepted"
        },
        "expected": {
          "outcome": "accepted"
        },
        "passed": true
      }
    ],
    "fixture_summary": {
      "passed": 1,
      "failed": 0,
      "total": 1
    },
    "assertions": {
      "kind": "artifact_snapshot_assertions",
      "specs": [
        {
          "id": "compatibility-count-total",
          "invariant": "total equals breaking + non_breaking + unknown"
        },
        {
          "id": "fixture-count-total",
          "invariant": "total equals passed + failed"
        },
        {
          "id": "decision-status-policy",
          "invariant": "decision and status agree with counts, fixture failures, and policy"
        },
        {
          "id": "row-summary-consistency",
          "invariant": "row summaries are stable and reproduce compatibility counts"
        },
        {
          "id": "fixture-summary-consistency",
          "invariant": "fixture summaries are stable and reproduce fixture counts"
        }
      ],
      "node_source": "'use strict';\n// Validates generated gate artifact consistency only; it does not validate submitted schemas, execute tools, read files, or use a network.\nconst artifact={\"kind\":\"artifact_snapshot_assertions\",\"snapshot\":{\"decision\":\"pass\",\"status\":\"passed\",\"policy\":{\"unknown_changes\":\"review\",\"fixture_failures\":\"block\"},\"compatibility_counts\":{\"breaking\":0,\"non_breaking\":1,\"unknown\":0,\"total\":1},\"fixture_summary\":{\"passed\":1,\"failed\":0,\"total\":1},\"row_summaries\":[{\"value\":{\"path\":\"input:$.properties[\\\"count\\\"]\",\"change\":\"property_added\",\"classification\":\"non_breaking\"},\"stable_key\":\"{\\\"change\\\":\\\"property_added\\\",\\\"classification\\\":\\\"non_breaking\\\",\\\"path\\\":\\\"input:$.properties[\\\\\\\"count\\\\\\\"]\\\"}\"}],\"fixture_result_summaries\":[{\"value\":{\"id\":\"request-accepted\",\"target\":\"input\",\"actual\":{\"outcome\":\"accepted\"},\"expected\":{\"outcome\":\"accepted\"},\"passed\":true},\"stable_key\":\"{\\\"actual\\\":{\\\"outcome\\\":\\\"accepted\\\"},\\\"expected\\\":{\\\"outcome\\\":\\\"accepted\\\"},\\\"id\\\":\\\"request-accepted\\\",\\\"passed\\\":true,\\\"target\\\":\\\"input\\\"}\"}]},\"specs\":[{\"id\":\"compatibility-count-total\",\"invariant\":\"total equals breaking + non_breaking + unknown\"},{\"id\":\"fixture-count-total\",\"invariant\":\"total equals passed + failed\"},{\"id\":\"decision-status-policy\",\"invariant\":\"decision and status agree with counts, fixture failures, and policy\"},{\"id\":\"row-summary-consistency\",\"invariant\":\"row summaries are stable and reproduce compatibility counts\"},{\"id\":\"fixture-summary-consistency\",\"invariant\":\"fixture summaries are stable and reproduce fixture counts\"}]};\nconst stable=(v)=>Array.isArray(v)?'['+v.map(stable).join(',')+']':v&&typeof v==='object'?'{'+Object.keys(v).sort().map(k=>JSON.stringify(k)+':'+stable(v[k])).join(',')+'}':JSON.stringify(v);\nconst fail=(id)=>{throw new Error('Generated gate artifact consistency failed: '+id)};\nconst s=artifact.snapshot,c=s.compatibility_counts,f=s.fixture_summary;\nif(c.total!==c.breaking+c.non_breaking+c.unknown)fail('compatibility-count-total');\nif(f.total!==f.passed+f.failed)fail('fixture-count-total');\nlet decision='pass';if(c.breaking)decision='block';else if(c.unknown)decision=s.policy.unknown_changes;if(f.failed&&(s.policy.fixture_failures==='block'||decision==='pass'))decision=s.policy.fixture_failures;\nif(s.decision!==decision||s.status!==({pass:'passed',block:'blocked',review:'review_required'})[decision])fail('decision-status-policy');\nfor(const summary of [...s.row_summaries,...s.fixture_result_summaries])if(stable(summary.value)!==summary.stable_key)fail('result-summary-stability');\nconst rowCounts={breaking:0,non_breaking:0,unknown:0};for(const summary of s.row_summaries){const kind=summary.value.classification;if(!Object.hasOwn(rowCounts,kind))fail('row-classification');rowCounts[kind]++}if(s.row_summaries.length!==c.total||rowCounts.breaking!==c.breaking||rowCounts.non_breaking!==c.non_breaking||rowCounts.unknown!==c.unknown)fail('row-summary-consistency');\nconst passed=s.fixture_result_summaries.filter(x=>x.value.passed===true).length;if(s.fixture_result_summaries.length!==f.total||passed!==f.passed||f.failed!==f.total-passed)fail('fixture-summary-consistency');\nconsole.log(JSON.stringify({ok:true,status:'artifact_snapshot_assertions_passed',assertions:artifact.specs.length}));\n"
    },
    "retry_risk_notes": [],
    "safe_actions": [
      {
        "code": "REVIEW_COMPATIBILITY_MATRIX",
        "message": "Review the bounded direction-aware matrix before release.",
        "automatic": false
      }
    ],
    "report": {
      "format": "markdown",
      "mime_type": "text/markdown",
      "mode": "details",
      "contains_raw_values": false,
      "content": "# Contract Release Gate report\n\nDecision: **pass**\n\nCompatibility counts: breaking 0; non-breaking 1; unknown 0.\nFixture counts: passed 1; failed 0; total 1.\n\nPrivacy mode: details; paths and fixture IDs included, values and schemas omitted.\n\n## Compatibility matrix\n\n- non\\_breaking · property\\_added · input:$\\.properties\\[\"count\"\\]\n\n## Fixture results\n\n- request\\-accepted · input · passed\n"
    },
    "tool_execution": false,
    "outbound_replay": false,
    "github_writeback": false,
    "scheduled": false,
    "monitoring": false
  },
  "receipt": {
    "input_bytes": 593,
    "output_bytes": 5754,
    "operations": 4,
    "omitted_items": 0,
    "warnings": [],
    "contracts": 2,
    "fixtures": 1,
    "matrix_rows": 1,
    "assertion_specs": 5
  },
  "provenance": {
    "deterministic": true,
    "model_used": false,
    "network_used": false,
    "storage_used": false,
    "core_versions": {
      "contract_release_gate_kit": "1.0.0",
      "contract_matrix": "1.0.0"
    }
  },
  "error": null
}

Free runnable capability

Gate one bounded contract pair with up to 50 fixtures, assertions, and a safe report with no signup.

Builder capability

The existing Builder Pilot adds higher bounded volume and batch contract sets; it does not add tool replay, GitHub write-back, schedules, monitoring, or hidden retries.

See the existing Builder Pilot

Response-only privacy

Submitted contracts and fixture values are sent only to the response-only API when you select Build release gate; they are not stored, replayed, executed, fetched, or sent to a model.

Limits and trust boundary

  • Comparison is intentionally limited to type, properties, required, boolean additionalProperties, items, enum, and const; changed unsupported semantic keywords are unknown and $ref is rejected rather than resolved.
  • Fixtures validate only the selected current inline schema. Expected typed errors are limited to SCHEMA_VALIDATION_FAILED; no application behavior or tool is executed.
  • Generated Node source asserts the returned artifact snapshot only. It is not a schema validator, tool runner, replay mechanism, or caller-code execution path.
  • Metadata reports omit paths and fixture IDs; detail reports include those labels but never raw fixture values or complete schemas.