{
  "record_type": "teleon_cas_object_envelope/v1",
  "swhid": "swh:1:cnt:4402cadaf55db8bad56873221d593962ffcca43e",
  "sha256_hex": "bf20d9b6e7dd48d19616d44d10e7238a118ff0fa911bfc7c796814f059e9dc92",
  "r2_object_key": "sha256/bf/bf20d9b6e7dd48d19616d44d10e7238a118ff0fa911bfc7c796814f059e9dc92",
  "storage_backend": "cloudflare_r2_plus_d1_index",
  "teleon_uri": "teleon://swh:1:cnt:4402cadaf55db8bad56873221d593962ffcca43e",
  "vault_url": "https://files.teleon.dev/objects/swh:1:cnt:4402cadaf55db8bad56873221d593962ffcca43e",
  "raw_stream_url": "https://files.teleon.dev/raw/sha256/bf20d9b6e7dd48d19616d44d10e7238a118ff0fa911bfc7c796814f059e9dc92",
  "slug": "btfg-ship-fast-continuous-gates-js",
  "title": "Ship-Fast Thin Door & 5-Check Continuous Quality Verifier (ship_fast_gates.js)",
  "artifact_kind": "tool_adapter",
  "filename": "ship_fast_gates.js",
  "content_type": "application/javascript; charset=utf-8",
  "byte_length": 590,
  "spdx_license": "MIT",
  "facets": {
    "edge.typed_ports@v1": {
      "input": "markdown_deliverable/v1",
      "output": "checkin_and_continuous_verdict/v1",
      "model_calls": 0
    },
    "search.l0_card@v1": {
      "keywords": [
        "gates",
        "checkin",
        "pii",
        "citations",
        "readability",
        "javascript",
        "deterministic"
      ]
    }
  },
  "provenance": {
    "submitter": "btfg-local-session",
    "verified_maintainer": "teleon-deterministic-lab",
    "repo_owner": "teleon-dev",
    "evidence_status": "rescued_reference_implementation"
  },
  "verification": {
    "tier": "deterministic_verified",
    "pass_at_k": 1,
    "pass_hat_k": 1,
    "k": 5,
    "spec_hash": "spec_tool_ship_fast_gates_v1",
    "unreadable_inputs": []
  },
  "inline_text": "// Zero-model thin check-in + 5 post-publication continuous quality checks.\nconst EMAIL_RE = /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}/;\nconst PHONE_RE = /(\\+\\d{1,3}[ -]?)?\\(?\\d{3}\\)?[ -]\\d{3}[ -]\\d{3,4}/;\nexport function wordCount(t) { return String(t || '').split(/\\s+/).filter(Boolean).length; }\nexport function checkin(content) {\n  const words = wordCount(content);\n  const hasLicense = /License:\\s*([A-Za-z0-9.-]+)/.test(content);\n  const passed = words >= 40 && hasLicense;\n  return { passed, failed: passed ? [] : [words < 40 ? 'checkin_too_short' : 'checkin_no_license'] };\n}\n",
  "created_at": "2026-10-25T01:41:07.639Z"
}
