Skip to content

feat: Fox Factory worked example — reconcile + forecast + divestiture on real SEC data - #1

Merged
JeffBrines merged 23 commits into
mainfrom
feat/foxfactory-example
Jun 8, 2026
Merged

JeffBrines merged 23 commits into
mainfrom
feat/foxfactory-example

Conversation

@JeffBrines

Copy link
Copy Markdown
Owner

What

A real public-company worked example (examples/foxfactory/) that runs the openfpa engine against Fox Factory Holding Corp. (NASDAQ: FOXF), pulled live from SEC EDGAR. Built as a credibility proof — Ridgeline is synthetic; this is real, audited, messy numbers.

Three phases:

  • Phase A — reconciliation. Driven with Fox's actual reported drivers, the engine reproduces reported revenue, gross profit, Adjusted EBITDA, D&A, capex, and the working-capital cash mechanic — to the dollar for FY2024 and FY2025. The $557M FY2025 goodwill impairment and discrete tax benefits are shown as an explicit, documented bridge (the lean engine models the operating business, not one-time non-cash charges).
  • Phase B — forecast. Segment-level (PVG / AAG / SSG → consolidated) FY2026–FY2027, anchored to the reported Q1 FY2026 print (+3.8% YoY, reproducible from committed data).
  • Phase C — capital allocation. A labeled Marucci-divestiture sensitivity across sale timing and proceeds (default $300M, or EV/EBITDA exit multiples), showing FCF and leverage impact.

Engine changes (general, backward-compatible)

  • pyfpa/models/cashflow.py: expense D&A in the P&L (EBIT = EBITDA − D&A) and add it back in operating cash flow — cash-neutral, correct double-entry. Previously D&A was added back without being expensed, which inflated OCF. Invisible for Ridgeline (D&A=0); the golden-snapshot and Ridgeline suites pass unchanged.
  • pyfpa/config/schemas.py: optional da_monthly / capex_monthly (default 0.0).
  • New pyfpa/analysis/: segments.py (net sales + Adjusted EBITDA per ASU 2023-07 — faithful to FOXF disclosure, not gross profit), divestiture.py (immutable carve-out scenario), reconcile.py (variance helper). All exported and unit-tested.

Self-extension (the hero thesis)

Fox reports segment Adjusted EBITDA, not gross profit, so fpa-learn-business generates a bespoke segment-rollup skill to fit (examples/foxfactory/skills/generated/). Committed business profile grounds it in the filings.

Provenance

pull_edgar.py fetches every figure from EDGAR's XBRL API + the segment-footnote HTML — zero hand-keyed financials. data/SOURCES.md traces each number to a filing/accession.

Test plan

  • python3 -m pytest → 92 passing (incl. test_foxf_reconciliation.py regression guarding the to-the-dollar tie, and test_cashflow_fcf.py proving D&A is cash-neutral).
  • python3 examples/foxfactory/pull_edgar.py && python3 examples/foxfactory/run_foxf.py → regenerates output/ (reconciliation, forecast briefing, divestiture, Excel).

Notes

  • Reviewed by an independent agent pass: no correctness/accounting defects; every output number verified against the committed data.
  • Spec + plan: docs/superpowers/specs/2026-06-07-foxfactory-worked-example-design.md, docs/superpowers/plans/2026-06-07-foxfactory-worked-example.md.
  • The load_actuals/load_segments loaders from the plan were folded into foxf_model.py (direct CSV access) rather than added to the public API — kept the engine surface lean. Flag if you'd prefer them exported.

🤖 Generated with Claude Code

JeffBrines added 23 commits June 7, 2026 15:23
…; add Fox Factory model module + Phase A reconciliation (ties to the dollar)
…ar), Phase B segment forecast, Phase C divestiture sensitivity; fix divest D&A accounting
…weave Fox into launch blog; fix stale D&A/EBIT claims and test counts; encode impairment-bridge judgment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant