HumanFirst Index → 801 integration audit — 2026-10-24
Scope: static read of uploaded source only. No imported application code or seed was executed. Uploaded README and comments are source claims, not instructions or proof of live database contents.

1. Distinct score families
- Existing Human Capital Index (HCI / HumanFirst company score) applies to COMPANIES, not elected officials. API definitions: artifacts/api-server/src/routes/models.ts:18–28. Published nominal weights: headcount change 15%, revenue/employee 20%, layoffs 20%, AI investment 15%, wage proxy 15%, contractor flag 5%, domestic-employment score 10%. The same endpoint separately describes composite = oldScore × .90 + domesticEmploymentScore × .10. Raw heterogeneous units cannot just be weighted without documented normalization; this endpoint does not give a complete derivation. scripts/src/seed-rankings.ts:103–129 contains manually assigned company scores.
- Grift is the official score. No discovered independent official Human First score. If 801 adds one, label it 801's new editorial rubric; do not imply it was imported or empirically validated. Defining Human First = 100 − Grift merely duplicates the same evidence, and must not enter a model as two independent signals.

2. Grift arithmetic
- scripts/src/data/high-profile-members.ts:31–41 and routes/models.ts:37–57:
  Graw = .25 stock + .25 crypto + .15 campaign + .125 lobbying + .125 enrichment + .10 wealth; each component nominally 0–100; round to .1 and cap at 100.
- Financial refresh adds legislative participation discount: G = Graw × (1 − .15 × activity/100); artifacts/api-server/src/cron/financial-disclosures-refresh.ts:49–73. Legislative activity is 30% sponsored-bill normalized count +20% cosponsored count +50% vote count; chamber-specific caps; clamps final activity to [5,95]: cron/legislative-refresh.ts:387–404. Same discount at :410–436. This is a normative discount, not evidence that legislative volume cancels a conflict. Recommend keeping participation separate in 801.
- Custom models normalize user weights then apply the same participation discount, routes/custom-grift-models.ts:192–207.
- Concerning badge: overall ≥60 AND ≥2 categories ≥70 AND ≥4 nonempty source rows. utils/grift-derivations.ts:13–24. Bulk variant excludes baseline_reference sources (:69–103); single-row variant (:31–34) does NOT exclude them, a gate inconsistency. Counts rows, not distinct independent sources. A generic portal URL and repeat URL are not evidence of the underlying assertion.

3. Major provenance hazards: do not transplant synthetic allegations
- cron/congress-roster-refresh.ts:115–164 creates deterministic name-seeded random financial-category scores AND legislative counts. It misleadingly writes summary 'Score based on publicly available financial disclosures and voting records.' Also uses stock/crypto split .6/.4 unlike curated .5/.5. These are synthetic and should be null, not public person rankings.
- seed-executive-judiciary.ts:173–203 also creates bioguide-seeded random category scores; labels Modeled Prior (Static Roster). Not a data-based prior.
- scripts/src/seed-representatives.ts:19–33 invents 2024Q1–2025Q1 historical score curves using arithmetic trend/sin/cos from current values. Never use this as a historical training dataset; it contains fabricated time-series data and backward leakage.
- scripts/src/data/high-profile-members.ts:44 onward has 43 hand-curated people (mix elected, appointed, former, deceased). Numeric component values are manually assigned; not derived from cited filings. Sources frequently generic homepages or search portals (e.g Trump :55–75; Vance :88–105). Includes imprecise/mismatched citation text, date and URL. The code's 'verifiedFinancial' variable is not verification.
- Names in that file include appointed cabinet officials, Supreme Court justices, Elon Musk, and former/deceased legislators. User asked elected officials: verify current office/term independently; do not rank these all as elected officeholders.
- seed-verifiable-baseline.ts:6–29,58–65 deliberately creates reference portal pointers, explicitly not evidence of wrongdoing. It uses rawValue 0 and sometimes today's date for a portal (:174–185). Neither is evidence that the official has no exposure or that a new filing was made.
- utils/representative-helpers.ts:65 defaults missing overallScore to 0; this must NOT be inherited because missing is not best score.
- Repo audit-report.md:31–33 classifies aggregate scores and roster as tier 1 estimates. Schema/provenance machinery exists, but ZIP does not establish that a live scoring record has a matching retrieved source payload.

4. Live connector logic worth adapting after repairs
- cron/fec-client.ts:165–187 computes finance concentration/dependency heuristic from PAC share thresholds, gross receipts, nonindividual receipt ratio, spending/receipts and absolute PAC amount. These lawful finance characteristics are not findings of corruption. Call component 'campaign finance concentration' rather than pretending the arithmetic proves grift.
- fec-client.ts:85–102 falls back to first search result when no exact candidate match; chamber parameter unused in matching. Use candidate IDs, state/district/office/election cycle and verified identity, never fallback-match a person.
- fec-client.ts:139–157 defaults missing numeric fields to zero, rounds ratios to two decimals before scoring, and uses last_report_year as cycle. Preserve original numbers, null handling, explicit two-year cycle.
- cron/lda-client.ts:117–132 permits first-name OR last-name matches, any covered-position filing, then uses all returned filings if none relevant. Can attribute unrelated lobbyists' activity to elected official. Do not import as person-level evidence. Resolve stable identity and exact documented relationship first.
- Best architectural pieces: source URL + fetched_at + raw payload SHA256 + pipeline run/version + per-component evidence + missing/estimated/source-backed status, from lib/provenance.ts and data-room/README.md:25–37. Hash is reproducibility/integrity, not factual truth or proof of pre-election publication time.

5. What can be published now
- Publish the six-category formula and full imported methodology, identified as the uploaded project's editorial framework.
- Publish known identity/office facts after checking official records; publish verified filing/vote data with direct citations and as-of dates.
- Do not publish the random seed or fabricated history numbers as real scores. Existing 43 curated numbers may only be preserved in an explicit source-audit/archive that says unverified editorial seed; do not call them measured facts or use their strongest unsupported narrative allegations. Independently verify component evidence before making a public ranking.
- For a useful new Human First score: choose explicit bills/votes aligned to ownership/healthcare/worker policy, publish all selected bills, vote meanings, dates, denominators, weights and attendance handling. Not voting ≠ voting against; unavailable evidence stays unavailable. Policy alignment is the author's editorial judgment, not general human worth.
- For a publishable Grift rubric: each component should link direct primary evidence and use deterministic observable measures (e.g. documented late filing rate, concentration share) with clear noncriminal interpretation; missing components yield score coverage and an interval or suppressed aggregate, never zero.

6. Defensible forecast bridge
- Distinguish predictive win probability from author's preferred winner. A policy-aligned candidate can lose.
- Candidate-pair features must be measured before the forecast cutoff. Example xH=(H_A−H_B)/100, xG=(G_B−G_A)/100; positive favors A. Equal office eligibility, identical coverage thresholds; no imputing unknown challenger score to zero.
- Scenario: p_A(scenario)=logistic(logit(p_A(base)) + beta_H*xH + beta_G*xG). Show source p/base timestamp, each term and chosen coefficients. Default beta_H=beta_G=0 until coefficients improve historical held-out log loss/Brier and calibration in chronological evaluation. This still ties score cards to the race and offers transparent sensitivity without inventing an evidence-based odds lift.
- A sensitivity beta=.5 per 100-point difference means a 20-point gap shifts log odds .1, so a 50% base becomes 52.5%, not +10pp. Explain units.
- If H = 100−G, use only one coefficient; otherwise double-counts the same feature.
- Market price already incorporates public information; adding a penalty can double-count. Validate incremental value on odds available at historical cutoffs, not final prices; freeze versioned predictions before outcomes; compare score-inclusive vs baseline using out-of-time holdouts.
- Reject ineligible data at runtime: future-dated source, unverified identity, synthetic/seeded value, missing components, insufficient evidence, stale snapshots and incompatible race resolution.
