{
  "progress_rule_contract_id": "progress_rule_contract.host_security_category_readiness",
  "version": "v1",
  "status": "ACTIVE",
  "item_id": "host_security_category_readiness",
  "progress_mode": "contracted_checks",
  "fake_progress_forbidden": true,
  "checkpoints": [
    {
      "percent": 25,
      "condition": "source DH JSON exists and is valid",
      "evidence_command": "python3 -m json.tool /home/yeff/public_html/devon/docs/json/phase-08/host_security.json >/dev/null && echo PASS",
      "evidence_type": "json_value"
    },
    {
      "percent": 50,
      "condition": "category execution contract exists and is valid",
      "evidence_command": "python3 -m json.tool /home/yeff/public_html/devon/canon/execution/categories/host_security.contract.json >/dev/null && echo PASS",
      "evidence_type": "json_value"
    },
    {
      "percent": 75,
      "condition": "three foundational item contracts exist",
      "evidence_command": "test -f /home/yeff/public_html/devon/canon/execution/items/host_security_001_verify_source_json.contract.json && test -f /home/yeff/public_html/devon/canon/execution/items/host_security_002_verify_category_contract.contract.json && test -f /home/yeff/public_html/devon/canon/execution/items/host_security_003_verify_master_binding.contract.json && echo PASS || echo FAIL",
      "evidence_type": "file_exists"
    },
    {
      "percent": 100,
      "condition": "scan, refresh and progress contracts exist",
      "evidence_command": "test -f /home/yeff/public_html/devon/canon/execution/scans/host_security_category_scan.contract.json && test -f /home/yeff/public_html/devon/canon/execution/refresh/host_security_refresh.contract.json && test -f /home/yeff/public_html/devon/canon/execution/progress/host_security_category_readiness.contract.json && echo PASS || echo FAIL",
      "evidence_type": "file_exists"
    }
  ],
  "current_percent": 0,
  "missing_to_100": [
    {
      "missing_id": "host_security_state_not_resolved",
      "description": "Contracts for host_security exist, but category state has not yet been resolved by a resolver.",
      "required_evidence": "state result for host_security",
      "blocking": true,
      "next_action": "run_generic_category_state_resolution"
    }
  ]
}
