// AUTO-GENERATED by scripts/extract-help.ts — do not edit.
// Re-generate with: pnpm extract-help
export const HELP_TOPICS = [
    {
        "id": "negative-doc-lift",
        "title": "When Docs Hurt: Negative Doc Lift",
        "body": "The ceiling score is _lower_ than the floor score. The canonical docs actively\nhurt the model's performance. This is a negative Doc Lift: the model produces\nbetter output from its training data alone than when given the \"correct\"\ndocumentation.\n\nThis will happen. It is not an error condition — it is a high-signal diagnostic\nthat demands investigation. A negative Doc Lift means one or more of the\nfollowing:\n\n- **Outdated documentation** — the docs describe an older API version or\n  pattern, and the model's training data has absorbed a newer version. The docs\n  are actively teaching the model the wrong thing. _Action: update the docs to\n  reflect the current API._\n\n- **Misleading documentation** — the docs are technically accurate but\n  structured in a way that leads the model to an incorrect implementation path.\n  Ambiguous phrasing, conflicting code examples, or poor organization can cause\n  a model to produce worse code than its baseline intuition. _Action:\n  restructure or rewrite the docs for clarity._\n\n- **Adversarial context dilution** — the canonical doc set is too large or\n  contains too much tangential content, and the relevant signal gets buried in\n  noise. The model performs better with no docs because fewer tokens means less\n  distraction. _Action: trim the canonical doc set or restructure docs to\n  front-load the most relevant information._\n\n- **Model training data superiority** — for mature, well-known features (e.g.,\n  basic GROQ queries, standard Studio setup), the model may have absorbed\n  high-quality examples from training data (blog posts, Stack Overflow, open\n  source code) that are simply better than the official documentation. _Action:\n  improve the docs to meet or exceed the quality of community content the model\n  learned from._",
        "source": "docs/design-docs/scenario-matrix/evaluation-ceiling.md",
        "related": [
            "doc-lift",
            "three-layer"
        ]
    },
    {
        "id": "three-layer",
        "title": "Floor, Ceiling, and Actual Scores",
        "body": "- **Doc Lift** = `ceiling score − floor score`. Positive when docs help,\n  negative when docs hurt. This is the fundamental documentation value metric.\n  When negative, it triggers the interference investigation described above\n- **Retrieval gap** = `ceiling score − agentic score`. The cost of imperfect\n  discovery. Should be minimized via infrastructure investment (`llms.txt`,\n  `.md` endpoints, better navigation, SEO). Note: this metric is only meaningful\n  when Doc Lift is positive — if the docs themselves are harmful, a large\n  retrieval gap might paradoxically be _protective_ (agents that can't find the\n  bad docs may outperform agents that can)\n- **Doc quality gap** = `100 − ceiling score`. The ceiling itself is below\n  perfect. This is the documentation team's problem — the docs need improvement\n  regardless of how they're delivered\n- **Infrastructure efficiency** = `agentic score / ceiling score`. What fraction\n  of the documentation's potential value actually reaches agents? A ratio of\n  0.90 means infrastructure delivers 90% of the doc quality. A ratio of 0.50\n  means half the documentation value is lost in delivery. When the ceiling is\n  below the floor, this ratio is undefined — report it as \"N/A (negative Doc\n  Lift)\" rather than producing a misleading number\n\n### Decomposition: the healthy case (positive Doc Lift)\n\n```\nfloor score                      → model's inherent knowledge\n  + Doc Lift (ceiling − floor)   → documentation quality contribution\n  − retrieval gap (ceiling − agentic) → discovery/infrastructure loss\n  = agentic score                → what users actually experience\n```\n\n### Decomposition: the interference case (negative Doc Lift)\n\n```\nfloor score                      → model's inherent knowledge\n  − |Doc Lift| (floor − ceiling) → documentation interference penalty\n  − retrieval gap (ceiling − agentic) → discovery/infrastructure loss\n  = agentic score                → what users actually experience\n\n  but note: agentic score may exceed ceiling score here, because\n  agents that fail to find the interfering docs avoid the penalty.\n  In this case the \"retrieval gap\" inverts — poor retrieval is a\n  net positive. The framework should flag this explicitly:\n  \"Retrieval failure is masking a documentation quality problem.\"\n```\n\nBoth decompositions are valid expressions of the **core measurement model**.\nEvery scenario in the matrix is asking about one or more of these three layers:\ninherent knowledge, documentation quality, or discovery effectiveness. The sign\nof the Doc Lift determines which layer needs urgent attention.",
        "source": "docs/design-docs/scenario-matrix/evaluation-ceiling.md",
        "related": [
            "doc-lift",
            "negative-doc-lift",
            "retrieval-gap",
            "scoring-model"
        ]
    },
    {
        "id": "comparing-runs",
        "title": "Comparing Evaluation Runs",
        "body": "## How comparison works\n\nThe Compare view lets you select any two evaluation reports and see a detailed\nside-by-side breakdown. One report is the **baseline** (your reference point)\nand the other is the **experiment** (what you're evaluating).\n\n## Reading the comparison\n\nFor each feature area, you'll see:\n\n- **Delta** — The score difference (experiment minus baseline). Positive means\n  the experiment scored higher.\n- **Change** — Whether the delta is meaningful: **improved**, **regressed**, or\n  **unchanged**. This accounts for the noise threshold — small deltas within the\n  noise band are marked unchanged even if they're non-zero.\n\nAn area scored in only one of the two runs has no comparable baseline, so it\nshows **no delta** — marked **new** (or omitted from the per-area deltas)\nrather than a misleading up/down arrow. A delta is only ever shown when both\nruns scored that area.\n\n## How the baseline is chosen automatically\n\nWhen a scheduled or ad-hoc run publishes a report, the pipeline picks a baseline\nfor the \"vs baseline\" delta automatically (you can always override it in the\nCompare view). A prior run is only used as a baseline when it is genuinely\ncomparable:\n\n- **Same classification** — `classification` sorts runs into separate trend\n  series: the canonical `official` daily/weekly series versus `adhoc`,\n  `experimental`, `test`, and `external` runs. A run is only compared against\n  another run of the same classification, so the `official` series never diffs\n  against a `test` smoke run or a one-off `adhoc` experiment that happens to\n  share its mode and source. This keeps the canonical trend deltas honest.\n- **Same variant** — `baseline`, `agentic`, `observed`, and `full` score with\n  different methodologies, so a delta across variants would be meaningless. A\n  variant mismatch is never selected.\n- **Covers the area:** each area is compared on its own. For every area the new\n  run scored, the most recent comparable prior run that actually scored that\n  area supplies the baseline for that area. Different areas can therefore draw\n  their baseline from different prior runs, which is common because runs cover\n  different area sets from one day to the next. An area that no comparable prior\n  run scored shows no delta (it is marked **new** rather than diffed against a\n  missing score), and the overall delta is averaged over only the areas that had\n  a comparable baseline.\n\nFor each area the most recent qualifying run wins. If no comparable prior run\nscored any of the new run's areas, the report publishes with no automatic\ncomparison rather than diffing against an unrelated run. A baseline you pin\nexplicitly (or a re-run's lineage) is always honored as-is, as a whole-report\ncomparison, and skips this per-area matching.\n\nThe classification match is all the protection the `official` series needs on\nthe ownership side: every `official` report already carries a known owner team\nand individual, required when it publishes, so baseline selection trusts that\nand matches on classification alone rather than re-checking the team.\n\n## The noise threshold\n\nNot every score change is real. LLM responses vary between runs, and the grader\nmodel has its own variance. The comparison applies a noise threshold (currently\nconfigured per-evaluation) to filter out statistical noise. Only changes that\nexceed this threshold are classified as improvements or regressions.\n\n## What to compare\n\n- **Before and after a doc change** — Did your edits actually improve scores?\n- **Production vs. branch** — Will publishing this content release help or hurt?\n- **Different models** — How does Claude compare to GPT on the same docs?\n- **Baseline vs. full mode** — Is the retrieval gap shrinking over time?\n\n## Per-area deltas\n\nThe most actionable part of the comparison is the per-area breakdown. If your\noverall score improved but one area regressed, the per-area deltas tell you\nexactly which area needs attention.",
        "source": "docs/help/comparing-runs.md",
        "related": [
            "reading-score-trends",
            "scoring-model"
        ]
    },
    {
        "id": "doc-lift",
        "title": "Doc Lift: Do Your Docs Help?",
        "body": "## What is doc lift?\n\n**Doc lift** is the difference between how an AI performs _with_ your\ndocumentation and how it performs _without_ it:\n\n```\nDoc lift = ceiling score − floor score\n```\n\n- **Ceiling score** — the AI's score when gold-standard docs are injected\n  directly into its prompt.\n- **Floor score** — the AI's score with no documentation at all, relying only on\n  its training data.\n\nA positive doc lift means your docs are helping. The higher the number, the more\nvalue your documentation provides beyond what the model already knows.\n\n## What good doc lift looks like\n\n- **Doc lift of 15+** — Your docs are providing crucial information the model\n  doesn't already know. This is a strong signal that the docs are worth\n  maintaining and improving.\n- **Doc lift of 5–15** — Docs are helping, but the model's training data covers\n  a lot of the ground already. The docs are adding incremental value.\n- **Doc lift near zero** — The docs aren't adding much. Either the model already\n  knows the material, or the docs aren't providing useful implementation\n  guidance.\n\n## Negative doc lift\n\nA **negative** doc lift means the documentation is actively hurting the AI's\nperformance — the model produces _better_ code without your docs than with them.\nThis is never ignorable. See the \"When Docs Hurt\" help topic for causes and\nremediation.\n\n## Where you see it\n\nDoc lift appears in several places in the dashboard:\n\n- **Overview stats** — The aggregate doc lift across all areas.\n- **Per-area score table** — Doc lift for each feature area, so you can see\n  which docs help most and which help least.\n- **Comparison view** — Doc lift deltas between two runs, showing whether your\n  doc changes increased or decreased documentation value.",
        "source": "docs/help/doc-lift.md",
        "related": [
            "three-layer",
            "negative-doc-lift",
            "scoring-model"
        ]
    },
    {
        "id": "failure-modes",
        "title": "Failure Modes",
        "body": "## What this view is for\n\nThe Recommendations view tells you which fixes to make. This view tells you what\nkind of problem you have. It groups the run's weaknesses by the documentation\nissue behind them, so you can see patterns across the whole evaluation rather\nthan one fix at a time. If most of your weak spots are the same kind of problem,\nthat is a signal about how to spend your docs effort.\n\n## What you are looking at\n\nRecent reports show **interpretive cards** drawn from the run's diagnosis:\n\n- **Weakest area** names the single feature area dragging the score down most,\n  the failure mode behind it, and a confidence level with the sample size, so\n  you know how strong the signal is.\n- **Failure mode** highlights one category of problem, which scoring dimension\n  it shows up in, and how often it occurred across the tests that were checked.\n- **Area summary** gives a plain-language read on how an area is doing and why.\n\nOlder reports show a **category breakdown** instead. Each failure category is a\nchip with a count. Selecting a chip lists the gaps in that category, and each\ngap shows an estimated score lift if fixed, a confidence level, a short\nremediation note, and the specific tasks that exposed it. You can click a task\nto jump to it.\n\n## The failure modes\n\nEach weakness is sorted into one of these categories. The category is the\nfastest way to know what kind of work the fix needs:\n\n- **Missing docs**: the doc the model needed does not exist or is not indexed.\n  The fix is to write new documentation.\n- **Incorrect docs**: a doc has a factual error or a wrong example. The fix is\n  to correct it.\n- **Outdated docs**: a doc exists but reflects a previous API surface. The fix\n  is to bring it up to date.\n- **Poor structure**: the information is correct but hard for an agent to find\n  or skim. The fix is to reorganize or clarify.\n- **Model limitation**: the model struggles even with correct docs available.\n  This is not a documentation problem, so treat it as context rather than a\n  to-do.\n- **Unclassified**: the run could not categorize the weakness. Use the linked\n  tasks and the grader's notes to judge it yourself.\n\nDepending on the evaluation mode you may see additional categories, including\nones specific to agent behavior such as tool misuse or missing error handling.\n\n## How to use it\n\nStart with the category that has the most gaps or the highest combined lift. The\ncategory tells you the shape of the work before you open a single page: write,\ncorrect, update, or restructure. Categories that are not documentation problems,\nsuch as model limitation, are worth noting but are not yours to fix in the docs.\n\n## Related views\n\n- **Recommendations** turns these weaknesses into a ranked list of specific\n  edits.\n- **Low-scoring judgments** shows the grader's raw notes on the tests that\n  scored lowest, which is the most granular signal behind any failure mode.\n\n## When this view is empty\n\nIf a report shows no failure modes, the evaluation either classified nothing\nworth flagging or the run predates this view. A clean result here usually means\nthe docs held up across the evaluated tasks.",
        "source": "docs/help/failure-modes.md",
        "related": [
            "recommendations",
            "scoring-model",
            "negative-doc-lift"
        ]
    },
    {
        "id": "getting-started",
        "title": "Getting Started",
        "body": "## What does AILF measure?\n\nThe AI Literacy Framework measures how well your documentation helps AI coding\ntools (like Claude Code, Cursor, ChatGPT, and Copilot) implement features\ncorrectly. When a developer asks an AI agent \"set up a webhook in Sanity,\" the\nagent needs to find the right docs and produce working code. AILF scores how\nwell that goes.\n\n## The key number: AI Literacy Score\n\nEvery evaluation produces a score from 0–100, composed of three dimensions:\n\n- **Task Completion (50%):** Can the AI implement the feature at all?\n- **Code Correctness (25%):** Is the generated code correct and idiomatic?\n- **Doc Coverage (25%):** Did the docs provide the information needed?\n\nHigher is better. Scores above 80 mean the docs are working well for that\nfeature. Scores below 70 need attention.\n\n## What you see in the dashboard\n\n- **Latest Reports:** The most recent evaluation runs with scores, areas\n  tested, and trend indicators.\n- **Score Timeline:** How scores change over time. Look for upward trends after\n  doc improvements.\n- **Compare:** Side-by-side comparison of any two runs to see what improved or\n  regressed.\n\nClick into any report for the full breakdown: per-area scores, diagnostics, and\n(for full-mode runs) how AI agents actually navigated your docs.\n\n## Quick orientation\n\n| If you see…         | It means…                                           |\n| ------------------- | --------------------------------------------------- |\n| A score above 80    | Docs are working well for this area                 |\n| A score below 70    | Docs need improvement; AI agents struggle here      |\n| Positive doc lift   | Docs are helping (good!)                            |\n| Negative doc lift   | Docs are hurting; they're worse than no docs at all |\n| Large retrieval gap | Good docs exist but agents can't find them          |",
        "source": "docs/help/getting-started.md",
        "related": [
            "scoring-model",
            "eval-modes"
        ]
    },
    {
        "id": "interpreting-diagnostics",
        "title": "Interpreting Diagnostics",
        "body": "## Reading the health of your docs\n\nA report scores each feature area on how well your documentation lets AI coding\ntools implement that feature. Reading those scores well is what turns a number\ninto a plan: it tells you where the docs are working, where they are not, and\nwhat kind of problem you are dealing with.\n\n## Health bands\n\nEach area's score falls into one of three bands:\n\n- **Strong (80 and above)**: docs are working well. Agents produce correct,\n  complete implementations. No action needed unless you see a regression.\n- **Needs attention (70 to 79)**: docs are okay but have gaps. A specific\n  dimension such as code correctness or doc coverage may be dragging the score\n  down. Worth investigating.\n- **Weak (below 70)**: docs are not providing enough support. Agents\n  consistently struggle with these features. These need priority attention.\n\n## Strong areas are signal too\n\nIt is easy to focus only on what is broken, but the strong areas are worth\nreading. They show what good looks like in your docs: clear structure, accurate\nexamples, the patterns agents can follow. When you fix a weak area, that is the\nbar to copy.\n\n## Key diagnostic signals\n\nA low score has a reason behind it. These signals tell you which reason, and\nwhat to do about it:\n\n| Signal                         | What it means                               | What to do                               |\n| ------------------------------ | ------------------------------------------- | ---------------------------------------- |\n| **Negative doc lift**          | Docs are worse than no docs                 | Rewrite or remove the offending docs     |\n| **Large retrieval gap**        | Good docs exist but agents cannot find them | Improve page titles, metadata, structure |\n| **Low code correctness**       | Agents find the docs but produce bad code   | Add or fix code examples                 |\n| **Low doc coverage**           | The docs do not cover what the task needs   | Write new documentation                  |\n| **Efficiency anomaly (>100%)** | Agents do better without the docs           | Injected docs may be confusing the model |\n\n## Where to go next\n\nWhen you know which areas are weak and why, the **Recommendations** view turns\nthat into a ranked list of specific edits, and the **Failure modes** view groups\nthe weaknesses by the kind of documentation problem behind them.",
        "source": "docs/help/interpreting-diagnostics.md",
        "related": [
            "recommendations",
            "failure-modes",
            "scoring-model"
        ]
    },
    {
        "id": "reading-score-trends",
        "title": "Reading the Analytics View",
        "body": "## What this view answers\n\nThe Analytics view is built around one question: **did your doc changes move the\nscore, and why?** Rather than open on a chart and leave you to find the story,\nit leads with the answer — a plain-language verdict and the areas that moved\nmost — then lets you drill down into the evidence.\n\n## The control bar\n\nThe top row picks what you're looking at:\n\n- **Metric** — which number to track (composite score, doc lift, retrieval gap,\n  and so on).\n- **Break down by** — how to split it (feature area, team, model, source).\n- **Bucket** — how to group runs over time (per run, per day).\n- **Range** — how far back to look (for example, the last 30 days).\n\nThe second row holds the active **filter chips** — use _Add filter_ to scope to\na team, source, or mode — and a scope hint (reports in scope vs. total). Every\nknob and filter is saved in the URL, so a shared link reproduces exactly what\nyou see. Use **Copy link** to grab it.\n\n## Overall — the read\n\nThe **verdict strip** is the headline. In plain language it says whether docs\nare pulling ahead or slipping, and shows the headline metric with its change (Δ)\nsince the start of the range, a model → agent → docs decomposition bar, and a\ncoverage cell (how many reports and high-confidence groups are in scope).\n\n## Movers\n\nThe **movers board** leads with the top **Improved** and **Regressed** areas as\ncards — not the average. Each card shows the area, its value and Δ, a\ndecomposition bar, the release that most likely caused the move, and a\nconfidence read. A low-confidence **watch** callout flags big swings backed by\ntoo few runs: watch them, don't celebrate them yet.\n\nClick a mover card to reveal and decompose that series in the evidence chart.\n\n## The evidence\n\nThe **focus chart** has two modes:\n\n- **Compare** plots the selected series over time. It defaults to a focused set\n  (the movers plus the highest-volume areas) with a _show all_ expansion, and\n  draws release markers inline.\n- **Decompose** shows the ceiling / floor / actual band for a single series,\n  with causal story cards anchored to each release marker (for example, _\"Docs\n  +3 ~5 −1 → doc-lift +8 measured around this release\"_).\n\nDecompose is offered for the composite metric broken down by feature area — the\ncase where the model → agent → docs story is meaningful.\n\n## The breakdown table\n\nOne row per area (or per whatever you broke down by), each with an inline\ndecomposition bar, a sparkline, confidence, Δ, \"docs add,\" and a report count.\nSort any column, and click a row to cross-highlight it in the chart. Export the\ntable to CSV.\n\n## Meaningful change vs. noise\n\nSmall movements between runs are normal — they come from model non-determinism\nand grader variance. This view leans on **confidence** (how many runs back a\nnumber) and the **movers ranking** rather than a single ±point threshold: trust\na sustained move in a high-confidence area over a large swing in a\nlow-confidence one. The low-confidence watch exists precisely to stop you\nover-reading thin data.\n\n## Measured, not invented\n\nThe causal story is computed from real data, never fabricated. Release markers\ncome from the doc-change counts already recorded in each report, and the\n\"measured around this release\" doc-lift effect is derived from the real ceiling\n− floor series around the marker. Per-area prose (\"the editor API changed\") is\nintentionally not shown — the data carries change counts, not hand-written\nexplanations.",
        "source": "docs/help/reading-score-trends.md",
        "related": [
            "scoring-model",
            "doc-lift",
            "comparing-runs"
        ]
    },
    {
        "id": "recommendations",
        "title": "Recommendations",
        "body": "## What this view is for\n\nThis is the \"what do I fix\" view. The scores tell you how well your\ndocumentation supports AI coding tools. This view turns those scores into a\nranked list of specific changes, so you can spend your time on the edits that\nshould move the score the most.\n\nEverything here comes from the same evaluation run you are looking at, and it\npoints at your own documentation pages rather than giving generic advice.\n\n## What you are looking at\n\nRecent reports show a set of **diagnosis cards**. Each card answers one question\nabout the run.\n\n**Top recommendations** is the main card. It opens with a short summary, then\nlists a few suggested changes ranked by priority. Each suggestion has:\n\n- A **priority** tag of high, medium, or low that tells you what to do first.\n- A **title** that names the change in one line.\n- A **description** of the specific fix, usually quoting the exact symbol,\n  query, or pattern involved.\n- A **doc reference** showing which page, and the section when it is known, the\n  change applies to. Every reference points to a real page that was part of this\n  run, so you can open it and start editing.\n\nYou may also see supporting cards:\n\n- **Doc attribution spotlight** shows which documentation pages most influenced\n  the results, and whether each one helped or hurt. Use it to confirm a\n  recommendation is pointing at the right page.\n- **Low-confidence attribution** lists results where the link between a doc and\n  an outcome was uncertain. Treat anything flagged here as a lead to verify, not\n  a settled conclusion.\n- **Regression vs baseline** appears when you are comparing against an earlier\n  run. It shows which areas moved up or down and the likely reason for each\n  change.\n\n## How to use it\n\nWork top down. Start with the high-priority suggestions, open the referenced\npage, and make the change. Priority reflects how much each change is expected to\nhelp, so the top of the list is usually where your effort goes furthest.\n\nThe recommendations are written by a model that reads this run's results. They\nare grounded in your actual docs and cannot reference a page that was not in the\nrun, but they are still suggestions. Read the linked page before acting, and use\nthe confidence signals to decide how much to trust each item.\n\n## Where this comes from\n\nA recommendation is the end of a chain: a test scored low, the grader said why,\nthe run classified that into a failure mode, and this view proposes the edit. If\nyou want to see the failure modes themselves, grouped by category, open the\n**Failure modes** view. If you want the grader's raw notes on the lowest scores,\nopen the **Low-scoring judgments** view.\n\n## Older reports\n\nReports created before the diagnosis cards shipped show a simpler list instead.\nEach row names a feature area, the failure mode behind it, an estimated score\nlift if you fix it, a confidence level, and the tasks that exposed the gap. The\nestimated lift is conservative. It assumes fixing the gap raises the weak\ndimension only to the median of the others, so the real improvement can be\nhigher.\n\n## When this view is empty\n\nIf a report shows no recommendations, the evaluation either ran and found\nnothing worth flagging, or the run predates this feature. A score with no\nrecommendations is usually a good sign, because it means the docs held up across\nthe evaluated tasks.",
        "source": "docs/help/recommendations.md",
        "related": [
            "failure-modes",
            "interpreting-diagnostics",
            "scoring-model"
        ]
    },
    {
        "id": "retrieval-gap",
        "title": "Retrieval Gap & Infrastructure Efficiency",
        "body": "## What is the retrieval gap?\n\nThe **retrieval gap** is the difference between the **ceiling score** (docs\ninjected directly into the AI's prompt) and the **actual score** (the AI agent\nfinds docs on its own via web search). It measures how much documentation\nquality is lost because agents can't find the right pages.\n\n```\nRetrieval gap = ceiling score − actual score\n```\n\nA retrieval gap of zero means agents find everything. A gap of 20 means 20\npoints of doc quality never reach the agents.\n\n## What is infrastructure efficiency?\n\n**Infrastructure efficiency** expresses the retrieval gap as a ratio:\n\n```\nInfrastructure efficiency = actual score / ceiling score\n```\n\nAn efficiency of 90% means agents capture 90% of your docs' potential. An\nefficiency of 50% means half the documentation value is lost to discoverability\nproblems.\n\n## What causes a large retrieval gap?\n\n- **Poor page titles** — Agents search by keyword. If your page title doesn't\n  match what a developer would ask, agents won't find it.\n- **Missing from search indexes** — Pages that aren't indexed by search engines\n  are invisible to agents that rely on web search.\n- **No `llms.txt`** — An `llms.txt` file gives agents a table of contents.\n  Without it, they rely entirely on search queries.\n- **No `.md` endpoints** — Agents that can fetch clean markdown directly\n  (instead of parsing HTML) get better context with less noise.\n- **Content spread across many pages** — If implementing a feature requires\n  reading 5 different pages, agents are less likely to find all of them.\n\n## How to shrink the retrieval gap\n\n1. **Add clear, keyword-rich page titles** that match how developers phrase\n   their questions.\n2. **Ensure pages are indexed** by search engines (no `noindex` meta tags on doc\n   pages).\n3. **Provide `llms.txt`** at your docs root so agents can browse a structured\n   table of contents.\n4. **Provide `.md` endpoints** so agents can fetch clean markdown instead of\n   parsing JavaScript-rendered HTML.\n5. **Consolidate related content** — fewer, more comprehensive pages are easier\n   for agents to find than many small fragments.\n\n## When the retrieval gap inverts\n\nIn rare cases, the actual score exceeds the ceiling score — agents that can't\nfind the docs perform _better_ than agents with gold-standard docs injected.\nThis means the docs themselves are hurting performance (negative doc lift), and\nagents that fail to find them accidentally avoid the damage. The dashboard flags\nthis as an **inverted retrieval gap** — it's a documentation quality problem,\nnot a discoverability win.",
        "source": "docs/help/retrieval-gap.md",
        "related": [
            "three-layer",
            "eval-modes",
            "how-agents-work"
        ]
    },
    {
        "id": "scoring-model",
        "title": "Understanding Scores",
        "body": "## The three dimensions\n\nEvery evaluation task is scored on three dimensions, each graded 0–100:\n\n- **Task Completion (50% weight)** — Can the AI implement the requested feature?\n  Does the output actually do what was asked?\n- **Code Correctness (25% weight)** — Is the generated code idiomatic, correct,\n  and following best practices?\n- **Doc Coverage (25% weight)** — Did the documentation provide the information\n  needed to implement the feature?\n\n## How the overall score is calculated\n\nThe three dimensions combine into a single **AI Literacy Score** per task using\nnamed scoring profiles from `packages/eval/config/rubrics.ts`:\n\n```\nGold (with docs):    Total = Task × 0.50 + Code × 0.25 + Docs × 0.25\nBaseline (no docs):  Total = Task × 0.60 + Code × 0.40\n```\n\nThe gold profile includes all three dimensions. The baseline profile excludes\nDoc Coverage because it is undefined when no documentation is provided. This\nensures Doc Lift (ceiling − floor) is a clean structural measurement of\ndocumentation value.\n\nThe weighted composite produces a score from 0–100. Scores are then averaged\nacross all tasks in a feature area to produce a **per-area score**, and across\nall areas to produce the **overall score**.\n\n## What the numbers mean\n\n| Score range  | Interpretation                                                    |\n| ------------ | ----------------------------------------------------------------- |\n| **80–100**   | Docs are working well — AI agents produce correct implementations |\n| **70–79**    | Needs attention — there may be gaps in specific dimensions        |\n| **Below 70** | Weak — AI agents consistently struggle with this area             |\n\n## Ceiling decomposition (baseline mode)\n\nWhen running in baseline mode, each task is evaluated twice — with and without\ndocumentation. This produces:\n\n- **Floor score** — Score without docs (what the model knows from training data\n  alone)\n- **Ceiling score** — Score with gold-standard docs injected directly into the\n  prompt\n- **Doc Lift** — Ceiling minus floor. Positive means docs help; negative means\n  docs hurt.\n- **Doc Quality Gap** — 100 minus ceiling. Room for documentation improvement.\n\n## Three-layer decomposition (full mode)\n\nFull mode adds a third measurement — what happens when AI agents find docs on\ntheir own:\n\n- **Floor** — No docs (parametric knowledge only)\n- **Ceiling** — Gold-standard docs injected (best the docs can do)\n- **Actual** — Agent-retrieved docs (real-world performance)\n- **Retrieval Gap** — Ceiling minus actual (quality lost to findability)\n- **Infrastructure Efficiency** — Actual ÷ ceiling (what fraction of doc quality\n  reaches agents)\n\n## Cost tracking\n\nEach evaluation also tracks token costs:\n\n- **Provider cost** — Token usage for generating implementations\n- **Grader cost** — Token usage for the grading model's assessments\n- **Total cost** — Both combined, reported in the score summary",
        "source": "docs/help/scoring-model.md",
        "related": [
            "three-layer",
            "doc-lift",
            "eval-modes"
        ]
    },
    {
        "id": "how-agents-work",
        "title": "How AI Agents Find Documentation",
        "body": "Understanding how popular AI coding agents retrieve and use documentation is\ncentral to the ai-literacy-framework evaluation framework. This document\nexplains the mechanisms used by common agents and how our test modes simulate\nthem.\n\n## The Documentation Access Problem\n\nWhen a developer asks an AI coding assistant \"Set up a Sanity Studio with a\ncustom blog schema,\" the agent needs to find and read the relevant Sanity\ndocumentation. But different agents do this in fundamentally different ways, and\nthose differences directly impact the quality of the response.\n\nThe framework measures this impact through four evaluation modes: **full**\n(default — runs baseline + agentic together), **baseline** (docs in prompt),\n**agentic** (tool-calling with real web access), and **observed** (instrumented\nsingle-call).\n\n## How Popular Agents Work\n\n### Claude Code (Anthropic)\n\nClaude Code has built-in tools including `WebSearchTool` and `WebFetchTool`.\nWhen a user asks a Sanity question:\n\n1. The model decides whether to search the web\n2. If so, it calls `WebSearchTool` with a query string\n3. Search results come back as structured data (titles, URLs, snippets)\n4. The model may call `WebFetchTool` to read specific pages\n5. The fetched content is returned as **rendered text** — Claude Code's fetch\n   tool handles JavaScript rendering internally, so even SPA pages return\n   readable content\n6. The model synthesizes the fetched docs with its training data to produce an\n   answer\n\n**Key characteristic**: Claude Code sees the web as rendered, readable text. It\ndoesn't get raw HTML soup. But it also doesn't know about agent-friendly\nendpoints like `.md` files or `llms.txt` — it fetches the same HTML pages a\nbrowser would load.\n\n### ChatGPT (OpenAI)\n\nChatGPT's browsing capability uses Bing search under the hood:\n\n1. The model decides to search (users can also explicitly ask it to browse)\n2. It searches via Bing, getting ranked results\n3. It can \"click\" on results to read page content\n4. Pages are rendered server-side and returned as text\n5. The model reads relevant sections and synthesizes an answer\n\n**Key characteristic**: ChatGPT's browsing is similar to Claude Code — it gets\nrendered content. The URLs visited are returned in citations. It also has no\nawareness of `llms.txt` or `.md` endpoints.\n\n### Cursor\n\nCursor takes a different approach:\n\n1. It maintains a pre-built index of popular documentation sites (`@docs`)\n2. Users can manually add documentation sources\n3. It also has web search capability for unknown topics\n4. Codebase context is injected automatically from the project\n\n**Key characteristic**: Cursor's `@docs` feature means it may have indexed\nSanity docs already, but the index may be outdated. For unknown topics, it falls\nback to web search like the other agents.\n\n### GitHub Copilot\n\nCopilot primarily relies on:\n\n1. The model's training data (parametric knowledge)\n2. Codebase context from the current project\n3. Bing search for `@workspace` queries in newer versions\n\n**Key characteristic**: Copilot historically had no web access, relying entirely\non training data. Newer versions can search, but the experience is similar to\nChatGPT.\n\n## The JavaScript SPA Problem\n\nSanity's documentation site (`sanity.io/docs`) is built with Next.js — a\nJavaScript single-page application. When an agent makes a raw HTTP request:\n\n```\nGET https://www.sanity.io/docs/schema-types\n→ Returns ~125KB of HTML that is mostly:\n  - <script> tags for Next.js bundles\n  - React hydration data\n  - Navigation chrome\n  - Very little actual documentation text\n```\n\nReal agents handle this differently than a raw `fetch()`:\n\n| Agent         | Raw fetch? | Gets readable content? | How?                               |\n| ------------- | ---------- | ---------------------- | ---------------------------------- |\n| Claude Code   | No         | Yes                    | Built-in rendering in WebFetchTool |\n| ChatGPT       | No         | Yes                    | Server-side rendering via Bing     |\n| Cursor        | No         | Yes                    | Pre-built doc index                |\n| Raw `fetch()` | Yes        | **No**                 | Gets HTML soup                     |\n\nThis is why the agentic provider uses **Jina Reader** (`r.jina.ai`) as a\nreadability proxy in \"naive\" mode — it simulates the rendering capability that\nreal agents have built in.\n\n## Sanity's Agent-Friendly Endpoints\n\nSanity has invested in making their documentation accessible to AI agents\nthrough special endpoints:\n\n### `.md` endpoint\n\nAppending `.md` to any docs URL returns pure markdown:\n\n```\nGET https://www.sanity.io/docs/schema-types.md\nContent-Type: text/markdown;charset=UTF-8\n\n# Schema types\nSchema types are used to define the shape of your content...\n```\n\nThis returns **clean markdown** — no HTML, no JavaScript, no navigation. Just\nthe documentation content. Typical response size: 2-10KB (vs 125KB for the HTML\npage).\n\n### `llms.txt`\n\nSanity provides an `llms.txt` file at `https://www.sanity.io/docs/llms.txt` — a\nstructured listing of all documentation pages designed for AI agent consumption:\n\n```\n# Sanity\n## Docs\n- [Manage Sanity with code](https://www.sanity.io/docs/blueprints)\n- [Introduction](https://www.sanity.io/docs/blueprints-introduction)\n- [Deploy with GitHub Actions](https://www.sanity.io/docs/blueprints/blueprint-action)\n...\n```\n\nThis follows the emerging [llms.txt standard](https://llmstxt.org/) — a\nmachine-readable table of contents that tells agents what documentation is\navailable and where to find it.\n\n### Impact on Agent Performance\n\nOur smoke tests show the dramatic difference these endpoints make:\n\n| Metric           | Naive Agent (Jina) | Optimized Agent (.md) |\n| ---------------- | ------------------ | --------------------- |\n| Result           | ❌ FAIL            | ✅ PASS               |\n| Latency          | 57.9s              | 15.2s (3.8× faster)   |\n| Bytes downloaded | 108 KB             | 59 KB (45% less)      |\n| Total requests   | 9                  | 6 (33% fewer)         |\n| Search queries   | 3                  | 0 (used llms.txt)     |\n\nThe optimized agent skips search entirely — it calls `list_docs(\"sanity.io\")` to\nget the `llms.txt` table of contents, identifies the relevant pages, and fetches\nthem directly as `.md`. No search round-trips, no proxy overhead, no content\ncleaning needed.\n\n## How Test Modes Map to Real Agents\n\n| Mode                       | Config                          | Simulates                  | Documentation Access                                                                                                       |\n| -------------------------- | ------------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| `eval` (baseline)          | `promptfooconfig.yaml`          | No agent — docs in prompt  | Docs are injected directly into the prompt context, with and without variants                                              |\n| `eval:observed`            | `promptfooconfig.observed.yaml` | Non-agentic API call       | Single OpenAI API call, records the HTTP request but model doesn't browse                                                  |\n| `eval:agentic` (naive)     | `promptfooconfig.agentic.yaml`  | Claude Code, ChatGPT today | Model has `web_search` + `fetch_page` tools; pages fetched via Jina Reader (simulates JS rendering)                        |\n| `eval:agentic` (optimized) | `promptfooconfig.agentic.yaml`  | Ideal future agent         | Model has `web_search` + `fetch_page` + `list_docs` tools; fetches `.md` endpoints directly, uses `llms.txt` for discovery |\n| `agent-harness`            | compiled via compiler           | Real agent in sandbox      | Agent harness mode evaluates real agent behavior in a sandboxed environment (Docker, tempdir, git-worktree)                |\n\n### Why Both Naive and Optimized?\n\nThe comparison between naive and optimized modes answers a critical business\nquestion:\n\n> **\"How much does investing in agent-friendly documentation endpoints (`.md`,\n> `llms.txt`) improve the AI developer experience?\"**\n\nIf the optimized agent significantly outperforms the naive agent, it validates\nthe investment in these endpoints. The data from our tests provides concrete\nevidence for this.\n\n## Limitations of the Simulation\n\nWhile the agentic provider faithfully simulates agent behavior, there are\ndifferences from real agents:\n\n1. **Search quality**: We use DuckDuckGo via Jina as a search fallback. Real\n   agents use Bing (ChatGPT) or their own search (Claude Code). Search result\n   quality varies.\n\n2. **Page rendering**: Jina Reader is a good proxy for JS rendering, but may\n   produce slightly different output than what Claude Code or ChatGPT's internal\n   renderers produce.\n\n3. **Context window management**: Real agents have sophisticated context\n   management — they may truncate long pages, summarize content, or use sliding\n   windows. Our provider returns content up to a fixed limit (12KB).\n\n4. **Codebase context**: Real agents (especially Cursor and Copilot) inject the\n   developer's current codebase into context. Our eval doesn't simulate this —\n   it only tests documentation retrieval.\n\n5. **Multi-turn interactions**: A real developer might have a conversation with\n   their agent, refining the request. Our eval tests single-turn interactions.\n\n## Future Directions\n\nThe architecture overhaul (Phase 4: agent harness mode) addressed several of\nthese goals — real agents can now be evaluated in sandboxed environments with\nfixture provisioning, tool manifests, and process-quality scoring. Remaining\ndirections:\n\n- **Subprocess agents** _(partially addressed by agent harness mode)_: The\n  harness supports running agents via entrypoints in Docker, tempdir, or\n  git-worktree sandboxes. Real `claude` CLI or other agent CLIs can be\n  configured as harness entrypoints.\n- **Anthropic/OpenAI native tools**: Use Claude's built-in `web_search` tool or\n  OpenAI's `web_search_preview` in the Responses API for more faithful\n  simulation of the agentic mode\n- **Agent-specific configs**: The compiler's mode handler system makes it\n  straightforward to create per-agent configurations\n- **Codebase context injection** _(partially addressed by fixture\n  provisioning)_: The agent harness fixture provisioner can inject project\n  workspaces, dependency manifests, and code contexts into sandbox environments",
        "source": "docs/how-agents-work.md",
        "related": [
            "eval-modes",
            "retrieval-gap"
        ]
    },
    {
        "id": "eval-modes",
        "title": "Evaluation Modes",
        "body": "> **This guide is for:** Anyone using AILF who wants to understand what modes\n> exist and when to use each one.\n\nAILF supports five canonical evaluation modes. Each mode measures a different\naspect of AI tool effectiveness.\n\n## Mode overview\n\n| Mode                | What it measures                                     | When to use it                        |\n| ------------------- | ---------------------------------------------------- | ------------------------------------- |\n| **literacy**        | Can AI agents implement features using your docs?    | Testing documentation quality         |\n| **mcp-server**      | Can an LLM correctly use your MCP server's tools?    | Testing MCP server implementations    |\n| **knowledge-probe** | What does the model know without any docs?           | Measuring baseline model knowledge    |\n| **agent-harness**   | Can an autonomous agent complete tasks in a sandbox? | Testing agent capabilities end-to-end |\n| **custom**          | Whatever you define                                  | Building your own evaluation type     |\n\n## Choosing a mode\n\n```\nWhat do you want to test?\n    │\n    ├── \"Are our docs helping AI agents?\" ──────→ literacy\n    ├── \"Does our MCP server work correctly?\" ──→ mcp-server\n    ├── \"What does the model already know?\" ────→ knowledge-probe\n    ├── \"Can an agent complete real tasks?\" ────→ agent-harness\n    └── \"Something else entirely\" ──────────────→ custom\n```",
        "source": "docs/modes.md",
        "related": [
            "scoring-model",
            "three-layer"
        ]
    },
    {
        "id": "glossary",
        "title": "Glossary",
        "body": "**Overall Score**\n: A weighted average across all feature areas, using the gold scoring profile: Task Completion (50%), Code Correctness (25%), and Doc Coverage (25%).\n\n**Doc Lift**\n: How much the docs help, compared to the model's training data alone. Calculated as ceiling minus floor, where ceiling includes Doc Coverage and floor does not. Higher is better.\n\n**Actual Score**\n: How well an AI agent scores when it has to find docs on its own through web search and page fetching. This is the real-world scenario. Only available in full mode.\n\n**Retrieval Gap**\n: The score lost because agents can't find or use all the relevant docs. Calculated as ceiling minus actual. Lower is better; zero means agents find everything.\n\n**Infra Efficiency**\n: What percentage of the docs' potential quality actually reaches agents (actual ÷ ceiling). 100% means agents find and use all relevant docs perfectly.\n\n**Floor**\n: Output-quality composite without documentation — Task Completion (60%) and Code Correctness (40%) only. Doc Coverage is excluded because it's undefined when no docs are provided. This tells you what the model already knows from its training data.\n\n**Ceiling**\n: Score with gold-standard docs injected directly into the prompt. This is the best the documentation can do.\n\n**Actual**\n: Score when an AI agent finds docs on its own through web search and page fetching. This is the real-world experience.\n\n**Ret. Gap**\n: Quality lost to discoverability (ceiling minus actual). The gap between what the docs could deliver and what agents actually get.\n\n**Efficiency**\n: What fraction of the docs' quality reaches agents in practice (actual ÷ ceiling, shown as a percentage).\n\n**Inverted Retrieval Gap**\n: ⚠️ Inverted retrieval gap: agents that can't find the docs actually score higher, because the docs hurt performance. This usually means there's a doc quality problem.\n\n**Score**\n: Ceiling composite for this feature area: Task Completion × 50% + Code Correctness × 25% + Doc Coverage × 25%.\n\n**Task Completion**\n: Can the LLM implement the requested feature? Graded 0–100.\n\n**Code Correctness**\n: Is the generated code idiomatic, correct, and following best practices? Graded 0–100.\n\n**Doc Coverage**\n: Did the docs provide the information needed to implement the feature? Graded 0–100. This dimension only contributes to the ceiling composite (with docs) — it's excluded from the floor composite because it's undefined without documentation.\n\n**Tests**\n: Number of test cases in this feature area.\n\n**Overall Δ**\n: Change in overall score between the two runs. Positive means the experiment scored higher.\n\n**Actual Δ**\n: Change in actual (agent-retrieved) score between runs. Positive means agents did better.\n\n**Ret. Gap Δ**\n: Change in retrieval gap between runs. Negative is good here: it means the gap shrank and agents found more relevant docs.\n\n**Efficiency Δ**\n: Change in infrastructure efficiency between runs. Positive means agents are capturing more of the docs' potential.\n\n**Baseline**\n: The reference run you're comparing against.\n\n**Experiment**\n: The new run you're evaluating.\n\n**Delta**\n: Difference between experiment and baseline. Positive means improvement, negative means regression.\n\n**Change**\n: Whether the change is meaningful: improved, regressed, or unchanged (within the noise threshold).\n\n**Low-Scoring Judgments**\n: The grading model's explanations for tests that scored below 70/100.\n\n**Judgment Reason**\n: The grading model's natural language explanation of what went wrong.\n\n**Strong (80+)**\n: Feature areas scoring 80 or above. The docs are working well for these features — AI agents produce correct, complete implementations.\n\n**Needs Attention (70–79)**\n: Feature areas scoring 70–79. These are okay but could be improved — there may be gaps in specific dimensions like doc coverage or code correctness.\n\n**Weak (<70)**\n: Feature areas scoring below 70. The docs are not providing enough support for AI agents to implement these features correctly.\n\n**Negative Doc Lift**\n: Number of areas where the documentation actually hurts AI performance — the model scores higher without docs than with them. This usually means the docs contain outdated patterns or incorrect examples.\n\n**Weak Areas**\n: Feature areas where the overall score is below 70. These need the most attention — low scores mean AI agents consistently struggle to implement these features.\n\n**Docs Hurt Performance**\n: Areas where the floor score (no docs) is higher than the ceiling score (with docs). The documentation may be actively misleading the model. These docs should be reviewed.\n\n**Retrieval Issues**\n: Areas where AI agents can find less than 70% of the available doc quality. The docs exist and are good, but agents can't discover them through search. Consider improving page titles, metadata, or search engine indexing.\n\n**Dimension Weaknesses**\n: Individual grading dimensions scoring below 50 within an area. These are the specific skills where AI agents fail most — task completion (can it build the feature?), code correctness (is the code right?), or doc coverage (did it use the docs?).\n\n**Efficiency Anomalies**\n: Areas where agent efficiency exceeds 100% — meaning agents perform better with self-found docs than with gold-standard docs injected directly. This can indicate doc quality issues (injected docs confuse the model) or agent memorization.\n\n**Doc Lift Wins**\n: Areas where documentation boosts AI performance by 5 or more points. Higher doc lift means the docs are providing crucial information that the model doesn't already know.\n\n**Retrieval Excellence**\n: Areas where AI agents successfully find and use at least 85% of the available doc quality through web search. Good retrieval means your docs are well-indexed and easy for agents to discover.\n\n**Model Breakdown**\n: Break down scores by individual LLM model. The default 'All Models' view shows the cross-model average. Select a specific model to see how it performed independently — useful for spotting models that struggle with specific feature areas.\n\n**Strengths**\n: What's working well: high-scoring areas, dimensions where the docs are strong, and areas where AI agents successfully find and use the documentation.\n\n**Recommendations**\n: Prioritized remediation plan from gap analysis. Each recommendation identifies a documentation problem, the affected feature area, and the estimated score lift from fixing it.\n\n**Total Potential Lift**\n: Aggregate potential score lift if all identified gaps were fixed. This is a conservative estimate — each gap targets the median of non-bottlenecked dimensions, not 100.\n\n**Failure Mode**\n: The type of failure the grader emitted. Cross-cutting modes apply to any dimension (api-error, model-limitation, false-floor, unclassified). Per-dimension extensions cover documentation problems (missing-docs, incorrect-docs, outdated-docs, poor-structure), spec adherence (spec-mismatch), tool use (tool-misuse, chaotic-process, missing-recovery), and knowledge probes (factual-error, incompleteness, currency-violation, hallucination).\n\n**Estimated Lift**\n: Estimated composite score improvement if this gap is fully fixed. Based on raising bottleneck dimensions to the median of non-bottlenecked dimensions.\n\n**Confidence**\n: How confident we are in this diagnosis (D0049 ceiling-cross-check derivation). High = the grader's emitted failure mode agrees with the structural ceiling-decomposition signal. Medium = signals disagree (or the ceiling pattern is not informative for this score). Low = passing scores never classify; treat as absent.\n\n**Agent Behavior**\n: How AI agents interacted with your documentation during evaluation: what they searched for, which pages they visited, and how much time they spent on network requests.\n\n**Search Queries**\n: The exact search queries agents used to find documentation. Helps you understand how agents discover your content and whether your docs appear for relevant queries.\n\n**Unique Doc Slugs**\n: Documentation page slugs that agents actually visited during evaluation. Compare against canonical docs to see if agents found the right pages.\n\n**External Domains**\n: Non-Sanity domains that agents contacted during evaluation. High external domain counts may indicate agents couldn't find what they needed in your docs.\n\n**Avg Pages Visited**\n: Average number of documentation pages visited per test. Higher counts can mean agents need to consult many pages (complex task) or can't find the right one quickly.\n\n**Avg Searches**\n: Average number of web searches performed per test. High search counts can indicate docs are hard to discover through search engines.\n\n**Avg Network Time**\n: Average time spent on network requests per test. Includes page fetches, search queries, and API calls.\n\n**Total Requests**\n: Total number of HTTP requests the agent made during the test, including searches, page visits, and API calls.\n\n**Total Bytes Downloaded**\n: Total bytes downloaded by the agent. Large downloads may indicate the agent is fetching many pages or very large documents.\n\n**Task Completion Δ**\n: Change in task completion between runs. Positive means implementations are more complete.\n\n**Code Correctness Δ**\n: Change in code correctness between runs. Positive means better code quality.\n\n**Doc Coverage Δ**\n: Change in doc coverage between runs. Positive means the docs are providing more useful information.\n\n**Area Δ**\n: Score change for this area compared to the previous evaluation run.\n\n**Production**\n: Production source — docs fetched from the live production dataset. Scores reflect what real users and AI agents experience today.\n\n**Branch**\n: Branch source — docs fetched from a branch or draft dataset. Use this to preview how content changes affect scores before publishing.\n\n**Local**\n: Local source — docs fetched from local files or a local dev server. Useful for testing doc changes before pushing.\n\n**Score**\n: The overall ceiling composite for this evaluation run: Task Completion (50%), Code Correctness (25%), and Doc Coverage (25%), averaged across all feature areas.\n\n**Mode**\n: The evaluation mode determines which reference points are measured. Different modes test different aspects of how AI agents interact with documentation.\n\n**Trigger**\n: What initiated this evaluation run. Knowing the trigger helps you understand whether a score change was from a content edit, a code deploy, or a scheduled check.\n\n**Baseline**\n: Baseline mode — tests the model with gold-standard docs injected directly. Measures ceiling performance (best the docs can do).\n\n**Full**\n: Full mode — runs baseline + agentic. Compares ceiling (injected docs) against actual (agent-retrieved docs) to measure retrieval gap and infrastructure efficiency.\n\n**Agentic**\n: Agentic mode — the AI agent finds docs on its own via web search. Measures real-world performance: can agents actually discover and use your documentation?\n\n**Observed**\n: Observed mode — records how agents interact with docs without scoring. Captures search queries, pages visited, and browsing patterns for analysis.\n\n**Debug**\n: Debug mode — a diagnostic run for pipeline development. May use non-standard configurations or limited task sets.\n\n**Manual**\n: Manually triggered — someone ran the evaluation pipeline by hand, either locally or via the Studio UI.\n\n**CI**\n: CI-triggered — the evaluation ran automatically as part of a pull request or merge pipeline.\n\n**Scheduled**\n: Scheduled — the evaluation ran on a recurring schedule (e.g. nightly or weekly) to track score trends over time.\n\n**Webhook**\n: Webhook-triggered — a content change in Sanity triggered the evaluation automatically. Helps catch doc regressions early.\n\n**Cross-Repo**\n: Cross-repo — triggered from another repository via the dispatch API. Used when external repos want to validate their docs against AILF tasks.\n\n**Gold**\n: Gold variant — the relevant docs were injected into the prompt as context. This is the ceiling condition: the best the documentation can do.\n\n**Baseline**\n: Baseline variant — no documentation in the prompt. This is the floor condition: what the model already knows from its training data, used as the control for doc lift.\n\n**Naive**\n: Naive — the in-house agentic harness with naive prompting. The model runs in an agent loop with no doc-targeting strategy.\n\n**Optimized**\n: Optimized — the in-house agentic harness with optimized prompting. The model runs in an agent loop tuned for documentation retrieval.\n\n**Normal**\n: Normal — a direct vendor-API call. The model produces a single-shot completion with no agent loop.\n\n**Fail**\n: Fail — the model produced no usable output (empty response, API error, or token exhaustion). Distinct from a low score on output that was produced.\n\n**Low dim**\n: Low dim — the run produced output but at least one grading dimension scored below 60.\n\n**OK**\n: OK — the run produced output and every grading dimension scored 60 or above.",
        "source": "packages/shared/src/glossary.ts",
        "tags": [
            "reference",
            "glossary"
        ]
    }
];
