Customer–supplier propagation — locked no-return relationship-source protocol
Declared: 2026-08-16 before computing corpus prevalence, selecting the document sample, or extracting any customer name. Stage: official-source feasibility only. Market prices, returns, event outcomes, signs, horizons, and portfolio data are forbidden; zero return identities are spent.
Frozen identity boundary
- Supplier universe: domestic common-stock issuers already present in the immutable 10-K manifest.
- Relationship availability: no earlier than the SEC acceptance timestamp of the supplier's 10-K.
- Relationship fact: the filing must state that one customer accounts for at least 10% of supplier revenue and explicitly identify that customer by name.
- Anonymous labels (
Customer A,one customer, government categories), private entities, and names that cannot be resolved historically to one public issuer are not tradable edges. - A later return protocol, if authorized, must use a separately timestamped customer event and next-eligible-session supplier entry. This source audit does not choose the event, sign, or horizon.
Frozen corpus and prefilter
Use the existing hash-addressed SEC 10-K manifest and local primary-document cache. Restrict filing
dates to 2016-01-01 through 2025-12-31. Every manifest identity must map deterministically to
data/raw/sec_10k_narrative/documents/{CIK}_{accession}.html.gz.
A document is a concentration candidate only when its raw filing contains customer within 400
characters of a numeric percentage from 10% through 100%, the equivalent percent form, or
ten percent, after lower-casing and collapsing whitespace.
This intentionally broad prefilter measures recall-oriented source prevalence; it does not establish
a named relationship.
From each calendar year, rank candidates by SHA-256 of customer_supplier|CIK|accession and retain
the first 30. The resulting at-most-300-row sample is immutable. No failed or difficult document is
replaced.
Frozen extraction and gates
Convert sampled filings with parser sec-filing-sections-v2. Preserve document hash and every
±500-character window around a qualifying concentration marker. A strict name candidate must:
- occur in the same window as both customer language and a ≥10% concentration marker;
- be a proper-name phrase adjacent to
accounted for,represented,sales to, orrevenue from; - exclude anonymous counts/labels, generic customer categories, governments, and pronouns; and
- be preserved as extracted rather than silently fuzzy-matched.
This v1 audit passes to a separately declared historical-entity-resolution audit only if all gates pass:
- at least 99% of in-period manifest documents exist and decompress successfully;
- at least 500 concentration candidates exist, with at least 25 in every calendar year;
- all ten years contribute exactly 30 rows to the deterministic sample;
- at least 50% of sampled documents yield one or more strict name candidates; and
- no sampled row lacks CIK, accession, acceptance timestamp, source URL, or document hash.
Thresholds and extraction rules are not altered after aggregate results are observed. A pass does
not authorize prices or returns. Failure is DATA_GATED. Even after a pass, historical public-issuer
resolution, relationship expiry, amendments, shared analyst coverage, event definition, delistings,
costs, capacity, neutralization, walk-forward design, PBO, DSR, and portfolio correlation remain
mandatory independent gates.
Machine outputs
artifacts/feasibility/customer_supplier_propagation/candidate_manifest.parquetartifacts/feasibility/customer_supplier_propagation/document_sample.parquetartifacts/feasibility/customer_supplier_propagation/result.json
Claim boundary
This protocol can establish only whether public 10-K text is sufficiently prevalent and explicit to justify a historical entity-resolution audit. It cannot establish an investable graph or any return, Sharpe, drawdown, correlation, capacity, or sleeve-admission claim.
Locked result
The exhaustive source pass covered 36,424 manifest filings from 2016–2025. Primary documents were present and decompressible for 36,243 rows (99.503%), passing the 99% lineage gate. The broad prefilter retained 29,220 filings, every year contributed well above 25 candidates, and the frozen sample contains exactly 30 documents in each of ten years.
The relationship-definition gate failed. Only 106 of 300 sampled documents produced one or more machine name candidates (35.333%, versus the locked 50% minimum). Post-result inspection also found that the v1 syntactic candidates include geographies, customer categories, and fragments in addition to genuine legal names. The output is therefore not a production relationship graph and must not be silently entity-resolved. The extraction rule is not tuned after observing this result.
Decision: DATA_GATED. A separately declared v2 would require frozen human labels and a
precision/recall gate before historical entity resolution. Zero market records, prices, returns,
signs, horizons, or portfolio statistics were opened; zero return identities were spent.
Machine-readable result:
artifacts/feasibility/customer_supplier_propagation/result.json.