{
 "use_case": "patent-claim-support",
 "title": "Patent claim support: a granted filter patent, and a public patent with planted claim defects",
 "about": "Two public-domain US patents as plain text. First, code-only checks on claims 1 to 8 of US 10,000,000 B2 with planted defects: claim 3 depends on a later claim, claim 7 on a claim that does not exist, \"the clock signal\" has no antecedent and \"the data highway\" is a term the specification never uses; all must be found. Then claim 1 of US 11,043,724 B2 is checked element by element against its specification: every element gets a receipted verdict, at least two are supported with a cited paragraph, \"opening\" is flagged as a claim term the specification never uses, and the signed record verifies.",
 "licence": "Public domain: US patent text from the USPTO (via the Google Patents public pages); the defects in the US 10,000,000 B2 copy were planted for Decosa. Part of decosa-api, AGPL-3.0-or-later.",
 "inputs": [
  {
   "file": "inputs/filter-spec.txt",
   "what": "The specification as text, paragraphs numbered like [0012] (they are cited by number)."
  },
  {
   "file": "inputs/filter-claims.txt",
   "what": "The claims as text, each claim on its own line starting with its number (\"1. A device comprising ...\")."
  },
  {
   "file": "inputs/ladar-planted-spec.txt",
   "what": "A second specification (US 10,000,000 B2 with paragraphs [0023]-[0024] removed), for the code-only checks."
  },
  {
   "file": "inputs/ladar-planted-claims.txt",
   "what": "Its claims 1 to 8 with planted defects (dependency, antecedent basis, unused term, new matter)."
  }
 ],
 "steps": [
  {
   "id": "parse",
   "method": "POST",
   "path": "/patent/parse",
   "body": {
    "spec": {
     "$file": "inputs/ladar-planted-spec.txt"
    },
    "claims": {
     "$file": "inputs/ladar-planted-claims.txt"
    },
    "only_claims": [
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8
    ]
   }
  },
  {
   "id": "check",
   "method": "POST",
   "path": "/patent/check",
   "timeout": 240,
   "body": {
    "spec": {
     "$file": "inputs/filter-spec.txt"
    },
    "claims": {
     "$file": "inputs/filter-claims.txt"
    },
    "only_claims": [
     1
    ],
    "title": "Rehearsal: US 11,043,724 B2 claim 1",
    "stream": false
   }
  },
  {
   "id": "chart",
   "method": "GET",
   "path": "/patent/runs/${check.run_id}/export?format=csv",
   "as": "text"
  },
  {
   "id": "verify",
   "method": "POST",
   "path": "/record/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "check.report.record"
    }
   }
  },
  {
   "id": "tampered",
   "method": "POST",
   "path": "/record/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "check.report.record"
    }
   },
   "tamper": {
    "at": "record.statement.warnings",
    "set": 0
   }
  }
 ],
 "checks": [
  {
   "says": "planted: claim 3 depends on a later claim (12)",
   "path": "parse.issues[kind=dependency,claim=3]",
   "count_min": 1
  },
  {
   "says": "planted: claim 7 depends on a claim that does not exist (30)",
   "path": "parse.issues[kind=dependency,claim=7]",
   "count_min": 1
  },
  {
   "says": "planted: \"the clock signal\" in claim 5 has no antecedent",
   "path": "parse.issues[kind=antecedent,phrase=clock signal]",
   "count_min": 1
  },
  {
   "says": "planted: \"data highway\" (claim 6) is a term the specification never uses",
   "path": "parse.issues[kind=term,phrase=highway]",
   "count_min": 1
  },
  {
   "says": "planted new matter: the Stirling cryocooler in claim 2 is not in the specification",
   "path": "parse.issues[kind=term,phrase=Stirling]",
   "count_min": 1
  },
  {
   "says": "claim 1 of the filter patent is split into four elements",
   "path": "check.elements",
   "count": 4
  },
  {
   "says": "no element's support check errors",
   "path": "check.elements[strength~error]",
   "count": 0
  },
  {
   "says": "element 1.3 is supported",
   "path": "check.elements[id=1.3][0].strength",
   "in": [
    "strong",
    "moderate"
   ]
  },
  {
   "says": "element 1.4 is supported with a cited paragraph",
   "path": "check.elements[id=1.4][0].paragraphs[role=cited]",
   "count_min": 1
  },
  {
   "says": "\"opening\" is flagged as a claim term the specification never uses",
   "path": "check.report.issues[kind=term,phrase=opening]",
   "count_min": 1
  },
  {
   "says": "the signed record verifies",
   "path": "verify.ok",
   "equals": true
  },
  {
   "says": "a record with its warning count changed no longer verifies",
   "path": "tampered.ok",
   "equals": false
  },
  {
   "says": "every model call has a signed receipt",
   "receipts": "signed",
   "min": 4
  }
 ]
}
