v13s/golden-fto-layer-a
Layer A — Office Action Triples for FTO Evaluation A public dataset of (invention → cited prior art → outcome) triples spanning three patent offices: US slice — the USPTO Office Action Research Dataset (OARD) Open Data Portal (ODP) API EP slice — the EPO Open Patent Services (OPS) Register service (WIPO ST.14 search-report citations) JP slice — the JPO 整理標準化 (seiri-hyōjunka) ISO bulk data for 拒絶理由通知 (rejection notices), filing years 2002–2019, published labels only per JPO… See the full description on the dataset page: https://huggingface.co/datasets/v13s/golden-fto-layer-a.
Layer A — Office Action Triples for FTO Evaluation
A public dataset of (invention → cited prior art → outcome) triples spanning three patent offices:
- US slice — the USPTO Office Action Research Dataset (OARD)
- Open Data Portal (ODP) API
- EP slice — the EPO Open Patent Services (OPS) Register service (WIPO ST.14 search-report citations)
- JP slice — the JPO 整理標準化 (seiri-hyōjunka) ISO bulk data for 拒絶理由通知 (rejection notices), filing years 2002–2019, published labels only per JPO 利用規約 第4条 (the prose body is withheld; only derived severity + legal-grounds labels ship — see License)
Built as the agent-evaluation substrate for Parallax, an AI-native Freedom-to- Operate (FTO) and defensive-publication platform for individual inventors and small teams.
Curated by [Vox](https://vox.delivery) (org: v13s). Parallax is a Vox product; the curation layer (annotations, severity tagging, schema, manifest) is © Vox 2026 under CC-BY-4.0. The underlying US (USPTO) and EP (EPO) patent data is public domain; the JP slice is derived from JPO 整理標準化 bulk data and published labels-only under JPO 利用規約 第4条, attributing 特許庁 (JPO) as the upstream source.TL;DR
- 5,807,285 rows (v1.3.2): 5,000 US Office Actions (filing years 2011–2017) + 850 EP search reports (filing years 2014–2022, IPC-stratified across 23 buckets) + 5,801,435 JP rejection-notice triples (filing years 2002–2019, labels only)
- 531 Parquet shards in the cases partition (US 8 + EP 10 + JP 513), partitioned by
jurisdiction × filing_year, plus aprior_art_index/<jurisdiction>/sibling partition (v1.2+, US + EP + JP) aggregating cross-citations - Schema:
(case_id, invention, examination, prior_art[], outcome, provenance)— see Schema below - v1.2 additions:
prior_art[].categories[]for multi-category ST.14 splits (XY→["X","Y"]) +prior_art_indexsibling partition for cross-citation aggregation - v1.3 additions:
examination.legal_articles[]carrying normalised legal grounds, plusprior_art[].severity_st14/severity_sourceproviding per-reference WIPO ST.14 truth labels extracted from JPO 拒絶理由通知書 prose (JP slice only) - Three jurisdictions live (US, EP, JP). JP is the full 整理標準化 ISO lowering (filing years 2002–2019), 5,801,435 rejection-notice triples. Per JPO 利用規約 第4条, JP rows publish labels only:
examination.rejection_basis_textis withheld (null), and only the derivedseverity_st14+legal_articlesare released.severity_st14is present on the η-10-enriched apps; the rest carry the v1.2severityproxy (severity_source="cited_type_proxy"). - License: CC-BY-4.0 on the curation; underlying patent documents remain in the public domain — see the License section below
- SHA-256 manifest at
MANIFEST.jsonfor byte-level reproducibility
Quick start
from datasets import load_dataset
# Default config returns all three jurisdictions (5,807,285 rows).
ds = load_dataset("v13s/golden-fto-layer-a", split="train")
print(len(ds)) # 5807285
# Per-jurisdiction configs are also available.
ds_us = load_dataset("v13s/golden-fto-layer-a", "us", split="train")
ds_ep = load_dataset("v13s/golden-fto-layer-a", "ep", split="train")
ds_jp = load_dataset("v13s/golden-fto-layer-a", "jp", split="train")
print(len(ds_us), len(ds_ep), len(ds_jp)) # 5000, 850, 5801435
row = ds[0]
print(row["case_id"]) # e.g. "US-13004847-0"
print(row["invention"]["title"]) # "SYSTEM AND METHOD FOR ..."
print(row["examination"]["oa_type"]) # "rejection" | "search_report"
print(row["examination"]["rejection_reasons"]) # ["obviousness_103"]
for ref in row["prior_art"]:
print(ref["ref_id"], ref["severity"])
# US: "US9123456B2", "obviousness"
# EP: "US6825941", "novelty_destroying"Schema
Each row is a single Office Action event linked to its prior-art citations. The full schema lives at `data-pipeline/src/layer_a/schema.py` in the source repo.
Severity enum (prior_art[].severity)
A 3-value severity enum that downstream consumers can join across jurisdictions. Each jurisdiction has its own source signal:
The EP search-report category sometimes concatenates multiple codes (e.g. "XY" means the citation is BOTH novelty-relevant AND obviousness-relevant). The lowering preserves the raw string and the extractor maps the most-severe component to severity.
prior_art[].categories (v1.2+)
The single-string severity collapses multi-character ST.14 codes to one band (e.g. XY → novelty_destroying, dropping the inventive-step signal). To preserve the full set, v1.2 adds a categories: list<string> field with each code as its own alphabetically-sorted entry:
Legacy v1.0 / v1.1 rows have categories = [] (empty). Jurisdictions whose source data doesn't expose ST.14 codes (US OARD uses 35 USC § sections, not ST.14) also leave the field empty. Filter for len(categories) > 0 to query only ST.14- exposed rows.
Query example — find multi-category citations (citations where the examiner cited the same document under both novelty AND inventive-step grounds):
from datasets import load_dataset
ds_ep = load_dataset("v13s/golden-fto-layer-a", "ep", split="train")
multi_cat_rows = []
for row in ds_ep:
for ref in row["prior_art"]:
cats = set(ref["categories"])
if {"X", "Y"}.issubset(cats):
multi_cat_rows.append(
(row["case_id"], ref["ref_id"], ref["categories"])
)
print(f"{len(multi_cat_rows)} XY-cited references in EP slice")
# e.g. ("EP-3290023A1-0", "US10721059", ["X", "Y"])Without categories[] (v1.0.x consumers) you'd see severity = "novelty_destroying" for every XY citation, indistinguishable from a pure-X citation.
Cross-citation index (v1.2+)
A sibling partition prior_art_index/<jurisdiction>/index.parquet aggregates the cases partition by (ref_id, citing_jurisdiction) so consumers can ask "how often has document X been cited" without walking the cases data row-by-row.
from datasets import load_dataset
idx = load_dataset(
"v13s/golden-fto-layer-a", "prior_art_index", split="train",
)
# Top-cited refs in EP search reports
top = sorted(
[r for r in idx if r["citing_jurisdiction"] == "EP"],
key=lambda r: r["citation_count"], reverse=True,
)[:10]
for r in top:
print(r["ref_id"], r["citation_count"], r["citing_case_ids"])Index schema:
Per-jurisdiction subdirs (prior_art_index/US/, prior_art_index/EP/, prior_art_index/JP/) keep the index sharded by which extractor produced it. To get a cross-jurisdiction view, union the partition or use the default config above which includes all three.
The JP index has 1,745,577 entries (top reference cited 3,658 times, mean 46.8). Note citation_count counts raw prior_art[] occurrences: the 整理標準化 citation lists repeat a reference per claim / per rejection ground, so a single application can contribute many occurrences. Use len(citing_case_ids) for the count of distinct citing applications.
JP prose enrichment (v1.3+)
JP rows carry two examination-side and two prior-art-side fields the US and EP slices don't have, sourced from the JPO 特許情報取得API's 拒絶理由通知書 endpoint and labelled by Claude Haiku 4.5:
The proxy severity field stays populated on enriched rows for backward compat. Query pattern:
ds_jp = load_dataset("v13s/golden-fto-layer-a", "jp", split="train")
for row in ds_jp:
for ref in row["prior_art"]:
truth = ref["severity_st14"] # WIPO ST.14, ground truth if present
if truth is None:
truth = ref["severity"] # v1.2 proxy fallbackThe enrichment pipeline runs against the JP slice incrementally (JPO API quota gates the rate), so severity_st14 rolls in progressively across v1.3.x patch releases.
Rejection reason codes
Canonical 3-letter codes consistent across jurisdictions:
Future EP/JP releases add their statute-equivalent codes (novelty_epc_54, inventive_step_epc_56, novelty_jp_29_1, etc.) without breaking the schema.
How was this built?
US slice (5 000 rows)
- OARD bulk download (the 4M-row USPTO Office Action Research Dataset, frozen at the 2017 release): manually browser-downloaded from research.uspto.gov, mirrored to v13s/oard-2017-mirror for repeatable fetches
- office_actions.csv scan for the first 5 000 unique application IDs in chronological order
- citations.csv filter pass to keep only those 5 000 apps' citation rows (~50 MB filtered from a 4 M-row, 5 GB unfiltered source)
- USPTO ODP API enrichment per app (60 RPM rate limit; ~85 minutes wall-clock for the full pass)
- Triple construction — the OARD's pre-classified
rejection_*boolean columns + the citation rows + the ODP metadata combine into aLayerATripleper OA event
EP slice (850 rows, v1.0.2 → v1.3 expansion)
- EP publications list auto-curated via IPC-stratified OPS
published-data/searchqueries across 23 (IPC, year-range) buckets covering G06F (16/17/21/40), H04L67, H04W4, G06Q30, G06N (3/20), G06V20, A61K (9/39/47), B60W30, B60K35, G05D1, G01S17, C07K16, C12N15 — filing years 2014–2020. Quality gate keeps only candidates with ≥ 1 search-phase reg:citation and ≥ 3 claim-text entries - OPS published-data full-cycle for biblio + claims (epodoc/docdb format, kind-suffix fallback for older publications)
- OPS Register service (
/rest-services/register/publication/ epodoc/{pub}/biblio) for search-report citations — these carry the WIPO ST.14 category codes, mapped toseverityvia the table above and the full multi-character string split intocategories[](v1.2) - Two-endpoint merge per publication: full-cycle gives the bibliographic context; the Register service gives the
prior_art[]list. Filtered to@cited-phase == "search"to keep the high-signal X/Y/A subset - Triple construction — same
LayerATripleshape as the US slice;oa_type = "search_report",outcome.final_disposition = "pending"for EP rows (a separate legal-status enrichment path resolves togranted/lapsed_fee/withdrawnin the live Parallax agent'spriorArtReferencestable; the Layer A public dataset keeps the conservative default) - Index reduction (v1.2) — after the cases shards land, a
build_index_for_stagingpass walks them once and writes theprior_art_index/EP/index.parquetsibling partition with per-(refid, citingjurisdiction)citation_count+severity_distributionaggregates
JP slice (5,801,435 rows, v1.3, labels only)
- JPO 整理標準化 ISO bulk corpus — the full 2002–2019 整理標準化 (standardised bibliographic + examination) ISO 9660 masters obtained from INPIT (1.7 TB), lowered to
LayerATriplerows by per-year XML / SGML parsers (the η-9 lowering). 5,801,435 triples — roughly ×1,160 the US slice's citation density. - cited_type → severity proxy — the 整理標準化 citation graph records each reference's
cited_type, mapped to theseverityproxy (severity_source="cited_type_proxy"). JP severity is citation-graph- derived, not rejection-derived, so a novelty-relevant reference can co-occur with an unamended grant; this is expected, not a data error (see Known limitations). - η-10 prose enrichment (incremental) — for apps the JPO 特許情報取得API has reached, the 拒絶理由通知書 prose is labelled by Claude Haiku 4.5 into per-reference WIPO ST.14 categories (
severity_st14,severity_source="prose_extracted") andlegal_articles. Per JPO 利用規約 第4条 the prose body (rejection_basis_text) is withheld from the public release — only the derived labels ship. - Per-year Parquet build — each filing-ISO year is converted and uploaded independently (
build_jp_parquet), keeping every build short enough to finish in one compute window, then assembled with the US + EP slices into the coordinated atomic release.
Common steps (all slices)
- Validation: every row passes a linking validator that checks temporal sanity (cited prior art filed before the invention), severity coherence (novelty-destroying citations on a granted+unamended application would be an inconsistency), and schema round-trip
- Parquet emit partitioned by jurisdiction × filing_year, with a SHA-256 manifest for byte-level reproducibility
- HuggingFace push under v13s/golden-fto-layer-a
The full pipeline source lives in the public repo at parallax/data-pipeline. The release runner is `bin/local-extract-v1.sh`.
Known limitations
- Sample size: 5,807,285 rows. The full OARD has 4 M+ Office Actions; ramp-up to 50 K+ US rows is planned. The EP slice grew 11 → 850 (v1.0.2 → v1.3) via IPC-stratified auto-curation; further expansion gated on OPS
/claims413 attrition handling for long-claim publications. - OPS `/claims` 413 attrition (EP curation): G06F16 / H04L67 publications with very long claim lists exceed OPS's
/claimspayload size limit. The curation quality gate currently drops these candidates rather than partial-fetching, biasing the EP slice toward pharma/mechanical/control IPCs. - Sparse claim text: The ODP search endpoint returns bibliographic metadata (title, applicant, IPC) but not full claim text. Some rows have
invention.claims = []or placeholder markers; full claim extraction needs a separate ODP call (planned). - JP labels only: Per JPO 利用規約 第4条,
examination.rejection_basis_textis withheld (null) in the public release. Only the derivedseverity_st14+legal_articlesfields are published.severity_st14rolls in progressively as the η-10 enrichment pipeline processes apps; remaining rows carry the v1.2severityproxy (severity_source="cited_type_proxy"). - EP claim ranges: The Register service embeds claim ranges in the citation's bibliographic text annotation (
[Y] 5,12). v1.0.3+ extracts these intoprior_art[].claims_blocked; legacy v1.0.2 rows leave the list empty. - Mixed schema_version partition: rows from v1.0 / v1.1 cron cycles carry
schema_version="1.0"and an emptycategories[], while v1.2+ rows carryschema_version="1.2"and populatedcategories[](when the source supports ST.14). Filter onschema_versionif you need a single-version partition. - JP `prior_art_index` counts raw occurrences: the JP cross-citation index now ships (1,745,577 entries), but
citation_countincludes within-application repeats from the 整理標準化 citation lists (a ref repeated per claim / per ground). Uselen(citing_case_ids)for the count of distinct citing applications. - EP outcome field is conservative: Without joining the OPS legal-status endpoint,
outcome.final_dispositiondefaults topendingfor EP rows. The live Parallax agent resolves these via a separate legal-status enrichment path; the public Layer A dataset keeps the conservative default. - US outcome field is conservative: HUPD-derived outcome enrichment provides
granted/rejected/pendingfor ~99 % of US rows (filing 2011-2017); rows beyond HUPD coverage default topending.
Versioning
Semantic versioning per golden-dataset-plan.md:
- MAJOR — schema-incompatible (field removed, type changed)
- MINOR — new fields, new jurisdictions, ≥10 % data growth
- PATCH — parser bugfix, individual case re-validation
The HuggingFace dataset repo's git history is the canonical release ledger. To pin a specific version in your code:
ds = load_dataset("v13s/golden-fto-layer-a", revision="v1.3.2")Citation
If you use this dataset in academic work, please cite:
@dataset{vox_layer_a_2026,
author = {Hara, Yoichiro and {Vox}},
title = {Layer A — Office Action Triples for
Freedom-to-Operate Evaluation},
year = 2026,
publisher = {Hugging Face},
version = {{1.3.2}},
url = {https://huggingface.co/datasets/v13s/golden-fto-layer-a},
note = {Curated under CC-BY-4.0; underlying patent
data in the public domain}
}License
- Curation layer (this dataset): CC-BY-4.0 — the schema, severity tagging, and triple construction are © Vox 2026 and may be used / redistributed with attribution.
- Underlying patent documents: public domain (USPTO).
- OARD source data: public domain (USPTO Office of the Chief Economist).
- JP slice (labels only): The JP corpus is derived from the JPO 整理標準化 ISO bulk data. Per JPO 利用規約 第4条,
examination.rejection_basis_textis withheld (null) in this public release. Only derived labels (severity_st14,legal_articles) are distributed. Consumers redistributing JP rows MUST attribute "特許庁" as the upstream source and link this dataset's card.
Contact
- Curator: Yoichiro Hara (Co-Founder & CEO, Vox Technologies / Vox Japan株式会社) —
yo@vox.delivery - Org: Vox (HF:
v13s) - Source repo: <https://github.com/masterleopold/parallax>
- Issues: <https://github.com/masterleopold/parallax/issues>
- Product surface: <https://parallax.modelina.ai>
For takedown requests on specific patent applications, file an issue or email the curator. Public-domain patent data is included in good faith; the curation layer can be redacted on request.
