industry-score — keep the competitive map complete and honest, and prove it

SkillDev tools

One repeatable pass that keeps fak's competitive story honest AND complete — graded industry-first, not from what fak happened to measure. Runs the industry scorecard (tools/industry_scorecard.py) over a modular data directory (tools/industry_scorecard.data/): a researched taxonomy of the dimensions the LLM-serving / agent-infra field competes on (vLLM/SGLang/TensorRT-LLM/llama.cpp), the current SOTA bar on each with a dated source, and fak's honest position — mostly named gaps. It drives two numbers, coverage (of the field) and parity-debt (honesty of the rows), and updates. Use when this named workflow matches the task.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the industry-score — keep the competitive map complete and honest, and prove it skill

What this skill tells your AI

The instructions your AI receives, as published by anthony-chaudhary/fak in .agents/skills/industry-score/SKILL.md and read by ahel’s review.

What this does. A buyer, a reviewer, or a skeptic asks one question the inward scorecards never answer: where does fak actually stand against the industry? The trap is to answer only with the comparisons fak happened to run — a highlight reel that silently omits the 90% of the field it has no number on. This pass refuses that. It starts from a researched taxonomy of the dimensions the LLM-serving / agent-infra field competes on (continuous batching, FP8/FP4 quant, speculative decoding, disaggregated prefill, multi-LoRA, tokens-per-watt, …), pins the current SOTA bar on each with a dated source, and positions fak honestly on every one — and for most, the honest answer is a named gap, not a win. It makes "our competitive map is complete and honest" a repeatable, provable pass instead of a prose claim that drifts, inflates, and goes stale.

The shape: run the scorecard → close the worst coverage gap or retire the worst parity-debt → keep the SOTA bars current (--stale) → verify sources → regenerate the doc folder → commit only the scorecard lane.

Two numbers are driven:

  • coverage — of the industry dimensions that matter, how many the scorecard has considered and positioned fak against. Toward 100%. A dimension with no fak position row at all is coverage_debt.
  • parity-debt — of the comparisons that exist, how many are dishonest, incomplete, or unsourced. Kept at 0.

It runs tools/industry_scorecard.py over the modular data directory tools/industry_scorecard.data/ (one concern per file) and folds into the unified tools/scorecard_control_pane.py via corpus.parity_debt.


The data directory (modular — one concern per file)

tools/industry_scorecard.data/
  _meta.json          meta (as_of, fak_version, freshness windows) + the category
                      vocabulary (id → doc group). A row/dim with an undeclared
                      category is MALFORMED — this is the data-defined closed vocab.
  _taxonomy.json      the INDUSTRY-FIRST dimension catalog: each dimension that
                      matters, its why-it-matters, the current SOTA bar, the leading
                      systems, and a source_url + source_date (the freshness anchor).
  _competitors.json   the SOTA-system registry, each with a last_reviewed date.
  rows-<group>.json   fak's position rows, grouped by doc group (serving, memory,
                      decoding, numerics, distributed, models, agent, cost,
                      operability, security). Each row's dim_id links to a taxonomy
                      dimension; most are honest no-claim gaps.

Edit a file, then re-run the tool. The generated doc folder docs/industry-scorecard/ (index + one page per group + the dimension catalog + the update process) is rebuilt by --markdown-dir; never hand-edit it.


The one rule that overrides everything: never invent a number or a win

This pass records evidence; it never manufactures it.

  • No new fak number. Every fak figure must already exist in BENCHMARK-AUTHORITY.md (a commit + a committed artifact) or a results doc. If a benchmark hasn't been run, the honest row is a no-claim gap — that is a valid, complete position, and most dimensions are exactly this. Coverage rewards positioning a dimension honestly; it never rewards a guess.
  • No new competitor number. Every SOTA bar must cite a real source_url + source_date (vendor docs, a paper, a leaderboard, an on-box bench).
  • No win against a naive baseline. State the gain vs the tuned/SOTA system (competitor_class sota/tuned), never a re-prefill strawman (naive is refused).
  • No regime is all-wins. fak's committed artifacts contain the losses (the single-stream CPU decode/prefill trails, the fak-gateway 0.75× of raw SGLang on concurrent throughput, the 7B model-size ceiling). They are first-class trails rows, not buried fences.
  • Every verdict matches its ratio. lead needs fak clearly ahead; parity ~±5% or a published band; trails clearly behind; an oracle can only be parity; a ceiling can never be lead; a no-claim only on a genuinely unbuilt (stub/projected/in-flight) axis. A capability lead/loss with no clean ratio is marked qualitative: true and must carry a comparison_note.

If a fix would require changing a measured number or inventing a win, stop — that is out of scope. Re-measure through the benchmark-governance process first.


Step 1 — Run the scorecard (it builds both work-lists)

From the repo root:

python tools/industry_scorecard.py                 # the scorecard + standing + both work-lists
python tools/industry_scorecard.py --json          # machine payload (the loop / control-pane)
python tools/industry_scorecard.py --gaps          # the COVERAGE backlog (what to position / measure)
python tools/industry_scorecard.py --stale         # the INDUSTRY-DRIFT backlog (SOTA bars due a re-check)
python tools/industry_scorecard.py --verify-sources # fak numbers still match their committed artifacts

It grades the honesty KPIs (structure · completeness · honesty · traceability) into parity-debt, computes coverage of the taxonomy, blends them into a composite score (0–100, A–F), and prints the data-derived standing (▲ lead · ≈ parity · ▼ trails · ○ honest gap). It is read-only over the data; the only writes are the doc folder under --markdown-dir.

Step 2 — Score both the default and the reasonable coverage envelope

A single aggregate winner is not sufficient evidence of product coverage. For each concern, maintain two views:

  • Default frontier: the strongest net-true industry default for the common supported case.
  • Coverage frontier: named user/job/constraint cohorts for which another credible system offers a materially useful path that fak does not yet support.

Classify each coverage row with the /field-borrow bounded-superset dispositions: DEFAULT, OPTIONAL-MODULE, RECIPE, WATCH, or EXCLUDE. Count an optional capability as coverage only when its modular seam, opt-in behavior, witness, support cost, and owner/review trigger are explicit. Do not award points for a feature pile, stale compatibility, or an approach that is obviously superseded for every supported cohort. Equally, do not call fak complete merely because its default beats a competitor's default while that competitor serves a legitimate hardware, provider, privacy, topology, cost, compatibility, or operator-preference cohort that fak omits.

The scorecard is a bounded-superset map, not a boil-the-ocean mandate. Record out-of-scope, unsafe, license-incompatible, moment-in-time, and support-uneconomic capabilities as dated WATCH or EXCLUDE rows with a reconsideration condition rather than silently dropping them.

Step 3 — Pick the worst-first move

The scorecard names it. There are two failure modes and the verdict tells you which:

  • coverage_debt > 0 → the map is incomplete. Run --gaps; for each unpositioned industry dimension add an honest fak position row to the right rows-<group>.json (linking dim_id to the taxonomy). Most will be no-claim gaps — that is the honest, complete answer, not a cop-out. Reuse an existing committed number only where a head-to-head genuinely exists.
  • parity_debt > 0 → a row that exists is dishonest. Retire it worst-group-first using the table below.
DefectKPI / groupThe honest fix
Win vs a NAIVE baselinebaseline_sota / honestyRestate the gain vs the tuned/SOTA alternative, or drop the row.
Verdict ≠ ratio (the overclaim)verdict_consistency / honestySet the verdict the numbers imply. Oracle → parity; ceiling → never lead; no-claim only on an unbuilt axis.
Contracted regime missing / a loss hiddenaxis_coverage / completenessAdd the regime's row — especially the trails losses the contract requires (single-stream, real head-to-heads where fak trails).
Blank competitorcompetitor_named / completenessName the concrete SOTA / next-best system.
Non-comparable, undisclosedapples_disclosed / honestySet apples_to_apples:false AND add a comparison_note stating what differs.
Measured verdict, no numberwell_formed / structureAdd the fak/competitor numbers; or, for a real capability lead/loss with no ratio, set qualitative:true + a comparison_note.
Shipped but untracedfak_traced / traceabilityAdd a fak_commit, fak_artifact, or fak_doc.
Competitor number unsourcedcompetitor_sourced / traceabilityAdd competitor_source (paper / vendor doc / on-box bench).

After a batch, re-run the scorecard and watch the number fall; that loop is the method.

Step 4 — Keep it current (the two update cadences)

This is what stops the scorecard rotting — in both directions.

As the industry moves. New techniques appear and published SOTA bars age.

  • A new dimension the field starts competing on → add it to _taxonomy.json. It is immediately uncovered, so coverage drops and it shows in --gaps until fak is positioned on it. (This is the mechanism that surfaces "we're missing this.")
  • A stale SOTA bar--stale lists every dimension whose last_reviewed (or source_date for backward compatibility) is past the industry_review_window_days window. Re-check it on the web and update accordingly:
    • If the bar changed (new SOTA number or system): update sota_bar, sota_systems, notes, and set both source_date AND last_reviewed to the re-check date.
    • If the bar is still accurate (no new SOTA found): update ONLY last_reviewed to the re-check date (keep source_date unchanged). This is the "re-confirmed" case that prevents silent regrowth — the bar stays stale-checked-out without fabricating a new source date. Advisory, never parity-debt — a number doesn't become false the day it crosses the window, it wants a look. For a larger sweep, fan out a workflow of web-grounded researchers (one per group) to refresh the SOTA bars + sources on a recurring cadence.

As fak moves. A benchmark lands → turn the relevant no-claim into a measured lead/parity/trails, citing the commit/artifact, and bump measured_on. The freshness KPI flags fak numbers older than fresh_window_days (advisory) to re-confirm when a bench node is free.

Step 5 — Verify sources

Run python tools/industry_scorecard.py --verify-sources — no present artifact may MISMATCH (an absent one, on a bench node, skips; fine off-box). For any number you hand-transcribed, spot-check it against the cited doc (or have a subagent re-read it). A wrong number in an honesty instrument is self-defeating.

Step 6 — Prove the drop, regenerate the doc folder

python tools/industry_scorecard.py --json > /tmp/after.json
python tools/industry_scorecard.py --compare /tmp/before.json    # parity-debt + coverage delta
python tools/industry_scorecard.py --markdown-dir docs/industry-scorecard --stamp $(date +%F)

State the before/after (e.g. "coverage 21% → 100%; parity-debt 0; standing 3 lead · 11 parity · 8 trails · 65 honest gap"). Regenerate the committed doc folder from the data — never hand-edit a page. Optionally re-run python tools/scorecard_control_pane.py to confirm the portfolio still folds.

Step 7 — Commit only the scorecard lane, by explicit path

This is a shared trunk; commit your lane, never a peer's work:

fak sync reconcile --apply
fak commit \
  --path tools/industry_scorecard.py \
  --path tools/industry_scorecard_test.py \
  --path tools/industry_scorecard.data \
  --path docs/industry-scorecard \
  -F <msgfile> [--push]
fak sync push
  • Stage by explicit path via fak commit --path, never git add -A. Stage and commit in one shell call.
  • Data + generated-doc diff → a docs(benchmark): … or chore(scorecard): … subject, lead with a verb, end with the (fak tools) trailer. A code-effect prefix on a data/doc diff overclaims.
  • On Windows, pass the message via a file (-F), not a here-string.
  • If a peer's MERGE_HEAD is set, wait for it to clear; commit by explicit path.
  • Stay on the trunk (main); push promptly via fak sync push (or --push).

Scope: what this pass touches, and what it must not

  • In scope: the modular data dir tools/industry_scorecard.data/ (taxonomy, competitor registry, position rows) and the generated docs/industry-scorecard/ folder. Also tools/industry_scorecard.py + its test when a KPI needs tuning.
  • Out of scope: the fak NUMBERS. Those are produced + committed through the benchmark-governance process (BENCHMARK-GOVERNANCE.md) → recorded in BENCHMARK-AUTHORITY.md. This pass cites them; it does not measure or edit them. CLAIMS.md is the capability ledger, not a scorecard surface.

When to run this

  • After a new benchmark lands — turn a no-claim into a measured row.
  • When a competitor ships a number that moves a SOTA bar (--stale finds the aging ones).
  • When the field starts competing on a new dimension — add it to the taxonomy.
  • On a /loop cadence to keep the front-door competitive map complete, honest, and current.

The scorecard is the competitive story's checking-layer, the way refresh-readme is the README's freshness layer and quality-score is the code's. Same discipline: numbers you can move, and prove you moved.

Signals

GitHub stars
38
Forks
15
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
industry-score
Source
github.com/anthony-chaudhary/fak