{
  "tool_id": "art-410-clause-coverage-scorer",
  "note": "golden_hash computed directly via executionHash at fixture-authoring time. Coverage-scoring boundary cases (0%, 50%, 80%, 100%) plus extra-clause handling.",
  "vectors": [
    {
      "name": "full-coverage-onesaas",
      "description": "All declared clauses present against the oneSaaS taxonomy -- 100% coverage, maturity_tier full.",
      "policy_parameters": {
        "taxonomy": "onesaas_52",
        "clauses": [
          {
            "id": "data_ownership",
            "status": "present"
          },
          {
            "id": "sla_uptime",
            "status": "present"
          },
          {
            "id": "termination_for_convenience",
            "status": "present"
          },
          {
            "id": "limitation_of_liability",
            "status": "present"
          }
        ]
      },
      "output_payload": {
        "taxonomy": "onesaas_52",
        "taxonomy_label": "oneSaaS 52-clause canonical set",
        "coverage_pct": 100,
        "modification_pct": 0,
        "maturity_tier": "full",
        "declared_count": 4,
        "present_count": 4,
        "modified_count": 0,
        "extra_count": 0,
        "missing_count": 0,
        "missing_clause_ids": [],
        "modified_clause_ids": [],
        "extra_clause_ids": [],
        "not_legal_advice": true,
        "disclosure": "This is a compliance reading over the text the caller supplied, not legal advice and not a determination that any agreement is compliant."
      },
      "compliance_flags": [
        "CLAUSE_COVERAGE_SCORED",
        "COVERAGE_TIER_FULL"
      ],
      "golden_hash": "4149606de362813b8c3e2e13e6ccbfb27505c82b6a1e94d955f61b3ab2c6c7b9"
    },
    {
      "name": "zero-coverage-boundary",
      "description": "All declared clauses missing -- 0% coverage, maturity_tier minimal, the lower boundary.",
      "policy_parameters": {
        "taxonomy": "common_paper_language_library",
        "clauses": [
          {
            "id": "confidentiality",
            "status": "missing"
          },
          {
            "id": "indemnification",
            "status": "missing"
          },
          {
            "id": "governing_law",
            "status": "missing"
          }
        ]
      },
      "output_payload": {
        "taxonomy": "common_paper_language_library",
        "taxonomy_label": "Common Paper Language Library",
        "coverage_pct": 0,
        "modification_pct": 0,
        "maturity_tier": "minimal",
        "declared_count": 3,
        "present_count": 0,
        "modified_count": 0,
        "extra_count": 0,
        "missing_count": 3,
        "missing_clause_ids": [
          "confidentiality",
          "indemnification",
          "governing_law"
        ],
        "modified_clause_ids": [],
        "extra_clause_ids": [],
        "not_legal_advice": true,
        "disclosure": "This is a compliance reading over the text the caller supplied, not legal advice and not a determination that any agreement is compliant."
      },
      "compliance_flags": [
        "CLAUSE_COVERAGE_SCORED",
        "COVERAGE_TIER_MINIMAL",
        "CLAUSE_GAPS_FOUND"
      ],
      "golden_hash": "6cac3c43b063e0b73c4c7e7e158946655ea91cdc82c49c04f9e2d70caa36c181"
    },
    {
      "name": "eighty-percent-substantial-boundary",
      "description": "4 of 5 declared clauses present -- exactly 80% coverage, the substantial/full boundary.",
      "policy_parameters": {
        "taxonomy": "art28_set",
        "clauses": [
          {
            "id": "subject_matter",
            "status": "present"
          },
          {
            "id": "duration",
            "status": "present"
          },
          {
            "id": "nature_purpose",
            "status": "present"
          },
          {
            "id": "data_categories",
            "status": "present"
          },
          {
            "id": "audit_rights",
            "status": "missing"
          }
        ]
      },
      "output_payload": {
        "taxonomy": "art28_set",
        "taxonomy_label": "GDPR Article 28(3) processor-clause set",
        "coverage_pct": 80,
        "modification_pct": 0,
        "maturity_tier": "substantial",
        "declared_count": 5,
        "present_count": 4,
        "modified_count": 0,
        "extra_count": 0,
        "missing_count": 1,
        "missing_clause_ids": [
          "audit_rights"
        ],
        "modified_clause_ids": [],
        "extra_clause_ids": [],
        "not_legal_advice": true,
        "disclosure": "This is a compliance reading over the text the caller supplied, not legal advice and not a determination that any agreement is compliant."
      },
      "compliance_flags": [
        "CLAUSE_COVERAGE_SCORED",
        "COVERAGE_TIER_SUBSTANTIAL",
        "CLAUSE_GAPS_FOUND"
      ],
      "golden_hash": "4f7423537240ac1cacde36573d2c81bfb6940ca3be720043f9237429cc3910e0"
    },
    {
      "name": "fifty-percent-partial-boundary",
      "description": "1 of 2 declared clauses present -- exactly 50% coverage, the partial/minimal boundary.",
      "policy_parameters": {
        "taxonomy": "custom",
        "clauses": [
          {
            "id": "notice_period",
            "status": "present"
          },
          {
            "id": "assignment_clause",
            "status": "modified"
          }
        ]
      },
      "output_payload": {
        "taxonomy": "custom",
        "taxonomy_label": "Custom clause set",
        "coverage_pct": 50,
        "modification_pct": 50,
        "maturity_tier": "partial",
        "declared_count": 2,
        "present_count": 1,
        "modified_count": 1,
        "extra_count": 0,
        "missing_count": 0,
        "missing_clause_ids": [],
        "modified_clause_ids": [
          "assignment_clause"
        ],
        "extra_clause_ids": [],
        "not_legal_advice": true,
        "disclosure": "This is a compliance reading over the text the caller supplied, not legal advice and not a determination that any agreement is compliant."
      },
      "compliance_flags": [
        "CLAUSE_COVERAGE_SCORED",
        "COVERAGE_TIER_PARTIAL"
      ],
      "golden_hash": "ccbf22bd21d2cde1fa77505688ec48c41021e4927420f727d8231f770103d4cf"
    },
    {
      "name": "extra-clauses-do-not-inflate-coverage",
      "description": "A modified clause plus an extra (non-taxonomy) clause -- extra clauses are excluded from the coverage denominator.",
      "policy_parameters": {
        "taxonomy": "onesaas_52",
        "clauses": [
          {
            "id": "data_ownership",
            "status": "present"
          },
          {
            "id": "sla_uptime",
            "status": "modified"
          },
          {
            "id": "bespoke_marketing_rider",
            "status": "extra"
          }
        ]
      },
      "output_payload": {
        "taxonomy": "onesaas_52",
        "taxonomy_label": "oneSaaS 52-clause canonical set",
        "coverage_pct": 50,
        "modification_pct": 50,
        "maturity_tier": "partial",
        "declared_count": 2,
        "present_count": 1,
        "modified_count": 1,
        "extra_count": 1,
        "missing_count": 0,
        "missing_clause_ids": [],
        "modified_clause_ids": [
          "sla_uptime"
        ],
        "extra_clause_ids": [
          "bespoke_marketing_rider"
        ],
        "not_legal_advice": true,
        "disclosure": "This is a compliance reading over the text the caller supplied, not legal advice and not a determination that any agreement is compliant."
      },
      "compliance_flags": [
        "CLAUSE_COVERAGE_SCORED",
        "COVERAGE_TIER_PARTIAL",
        "EXTRA_CLAUSES_PRESENT"
      ],
      "golden_hash": "15daff58009033b62a5d712d613f0f58415ad6f5e9f9ef4a81a4688154d65736"
    }
  ]
}
