CONTEXXT · RESEARCHKnowledge base
Knowledge base

Claims that stand on their own

Every element here was extracted from a published report, attacked by our adversary, approved by an editor and placed in the article. Each carries its provenance and a link back to the report and its verification annex. Quote them, embed them — the attribution travels with the claim.

HOUSE ASSERTIONAEROSPACE & DEFENSESATELLITE COMMUNICATIONS0 readers followed this

At 253p and approximately £555m market capitalisation, the equity embeds 247p per share of SpaceX expectation over a 6.2p non-SpaceX floor, and would require £324m of FY2027 revenue at the house margin to justify today's price.

CONTEXXT · house analysis · internal valuation model · 2026 · e31

IMPACT NUMBERAEROSPACE & DEFENSESATELLITE COMMUNICATIONS0 readers followed this

Filtronic PLC reported operating profit of £4.0m for the fiscal year ending May 2026, a decline of 70% from the prior year's £13.3m.

AskTraders.com · financial news outlet · Filtronic Shares Tumble Despite Record Order Book as Investment Squeezes Profits · 2026-08-04 · e7

IMPACT NUMBERAEROSPACE & DEFENSESATELLITE COMMUNICATIONS0 readers followed this

Filtronic held net cash of £10.5m at FY2026 year-end [e14b] — about 2% of market capitalisation at 253p. The £11.3m figure was refuted at verification.

Filtronic plc · company FY2026 results statement · Filtronic FY2026 preliminary results, net cash at year-end · 2026-06-23 · e14b

HOUSE ASSERTIONAEROSPACE & DEFENSESATELLITE COMMUNICATIONS0 readers followed this

Edison Investment Research forecasts Filtronic PLC will generate adjusted EBITDA of £11.8m in the fiscal year ending May 2027, implying an EBITDA margin of 20% on consensus revenue of £59.6m, which remains 1,000 basis points below the 30% margin achieved in FY2025 when EBITDA was £17.0m on revenue of £56.3m.

Edison Investment Research · equity research house · research note · 2026 · e11

IMPACT NUMBERAEROSPACE & DEFENSESATELLITE COMMUNICATIONS0 readers followed this

Filtronic PLC reported adjusted EBITDA of £11.3m for the fiscal year ending May 2026 [e16], a decline of £5.7m or 34% from £17.0m in FY2025, while revenue remained flat at £55.5m across both periods.

Filtronic PLC · issuer · company disclosure · 2026 · e16

IMPACT NUMBERSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

Two unnamed customers together accounted for approximately 13% of NVIDIA's total revenue in Q1 fiscal 2027, the quarter ended 26 April 2026, down from almost 40% concentration in Q2 fiscal 2026 ended 27 July 2025—a 27 percentage-point reduction in customer concentration over three quarters.

NVIDIA Corporation · 10-Q filing disclosure · Form 10-Q for quarter ended 26 April 2026 · 2026-04-26 · e5

IMPACT NUMBERSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

NVIDIA reported GAAP gross margin of 74.9% / 75.0% non-GAAP [e22] for Q1 fiscal 2027 ended 26 April 2026, roughly 300 basis points below the 78.0% data center gross margin for the full fiscal 2026 year ended 25 January 2026 — corrected under Editor memo 2026-08-07

NVIDIA Corporation · 10-Q filing financial results · Form 10-Q for quarter ended 26 April 2026 · 2026-04-26 · e22

SECTION REDRAFTSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

The 5.9 million developers using CUDA as of FY2026 [e3] is the figure most often cited as proof of moat, but it is the wrong metric: developer count is a lagging indicator — sticky, yes, but silent on pricing power in real time. Gross margin is not. NVIDIA reported 74.9% GAAP / 75.0% non-GAAP [e22] gross margin in Q1 FY2027 [e18], roughly three points below the 78% recorded for the full FY2026 [e21] — corrected under Editor memo 2026-08-07. A margin still above every falsifiability line is the live signal that hyperscalers have not yet forced pricing concessions and that AMD competition has not compressed realised ASPs. The Q2 FY2027 print on 26 August 2026 will settle the question. A gross margin below 70% would confirm that customer concentration — approximately 13% of total revenue in two unnamed customers in Q1 FY2027 [e5], and approximately 22% in one direct customer across FY2026 [e12] — has translated into negotiating leverage, and would validate the antithesis that dual-sourcing to AMD and custom ASICs is forcing NVIDIA to discount. A hold above 75% would show the moat has migrated to the hardware-software stack — NVLink, Tensor Cores, the Mellanox networking fabric acquired for $6.9 billion in March 2019 [e6]. The mechanism is not proven. Two unnamed customers accounted for almost 40% of Q2 FY2026 revenue [e9], yet gross margin held at 78% for the full FY2026 [e21]: either hyperscalers have not yet exercised their leverage, or NVIDIA's differentiation still resists it. The Cerebras CEO's claim that CUDA has lost approximately 70% of frontier AI training share [e7] is directionally troubling, but the margin data through Q1 FY2027 does not corroborate it. The second indicator is growth. Data centre revenue grew 92% year-over-year in Q1 FY2027, rising from $39.1bn [e24] to $75.2bn [e23] — corrected under Editor memo 2026-08-07 — and the comparison already flatters: Q1 FY2026 marked the early ramp of Hopper deployments, so the delta reflects both volume growth and the architectural transition from Ampere. Nearly doubling revenue in twelve months cannot persist without NVIDIA capturing every incremental dollar of hyperscaler AI capital expenditure. We treat 60% as the threshold because it implies NVIDIA still captures the majority of incremental spend, while acknowledging that the installed base is now large enough that doubling it annually would require hyperscaler AI budgets to grow at rates inconsistent with their own disclosed capital plans. Growth above that level extends the moat thesis; growth of 40-50% would confirm that dual-sourcing has moved from pilot programmes to production scale. Deceleration would show up first where the CUDA switching cost is lowest, in inference. Any one of the top five accounts shifting 20-30% of new orders to AMD or internal ASICs would be visible in the quarterly growth rate: the disclosed two-customer share fell to approximately 13% in Q1 FY2027 [e5] from almost 40% in Q2 FY2026 [e9, e14, e20], while the absolute revenue contribution of the top accounts grew. Both indicators land in the same print.

Provenance not recorded

SECTION REDRAFTSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

NVIDIA's moat has shifted from CUDA-the-API to hardware-software co-design — and the question is whether the $320–350 the thesis implies is already in the price. Our answer after verification: the house Base says $261 against a $224 market, and the market is priced closer to the antithesis.

nick@contexxt.com · editor · Editor memo 2026-08-07 · 2026-08-07 · e22

SECTION REDRAFTSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

We no longer believe CUDA-the-API is the defensible asset. The 5.9 million developers using CUDA and NVIDIA's other software tools as of FY2026 [e3] represent installed base, not switching cost. Cerebras CEO Andrew Feldman claimed in the week ending 1 June 2026 that CUDA has lost approximately 70% of frontier AI training share [e7] — a figure we cannot verify independently, but one that aligns with the hyperscaler shift to custom ASICs for training workloads. The new moat is vertical integration at the cluster level: NVLink interconnects, Tensor Cores optimised for transformer architectures, and the NeMo framework that co-designs model checkpointing with NVLink topology. NVIDIA paid $6.9 billion for Mellanox in March 2019 [e6], a deal initially framed as defensive to secure the InfiniBand stack. The switching cost is no longer rewriting CUDA kernels — it is replacing an entire networking fabric and re-sharding training runs across a different interconnect topology. We cannot quantify that cost with the evidence in hand. The $15-25 million per 10,000-GPU cluster figure in the section brief does not appear in any filing or third-party source we retrieved, and we will not defend a number we cannot cite; we flag it as our own model output rather than observed data. The $6.9 billion Mellanox price, amortised across the installed base, bounds what NVIDIA spent to build the integration — not what a hyperscaler would spend to route around it. The real test is whether a hyperscaler building a custom ASIC can forgo NVLink and InfiniBand entirely, or must replicate the fabric at comparable cost. We have no public bill-of-materials for a Google TPU pod or an Amazon Trainium cluster, and no filing that breaks out capital or operating expense attributable to networking versus silicon. The margin evidence — argued under The number to watch [e22][e21] — says pricing power has not cracked. We believe the moat exists; we cannot yet price it.

Provenance not recorded

SECTION REDRAFTSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

NVIDIA's customer base remains alarmingly narrow, even as the disclosed concentration has fallen: two unnamed customers accounted for approximately 13% of total revenue in Q1 FY2027 [e5], down from almost 40% in Q2 FY2026 [e9, e14, e20]. One direct customer represented approximately 22% of total revenue across the full FY2026 fiscal year [e12]. What has grown is the dollar dependence — the same handful of hyperscalers writes materially larger cheques on a revenue base that nearly doubled — and it is that absolute dependence, not a worsening ratio, that gives buyers their negotiating leverage. We cannot confirm whether the same accounts appear across these periods; NVIDIA does not name them. If five hyperscalers still represent 45-55% of revenue — a figure we infer from the disclosed concentrations but cannot cite directly — pricing power rests with the buy side regardless of switching costs. This is not a diversification story. The 5.9 million developers using CUDA and NVIDIA's other software tools as of FY2026 [e3] represent ecosystem breadth, not revenue breadth. The actual revenue flows through a bottleneck of five or fewer accounts, and those accounts are building their own silicon, dual-sourcing to AMD, and sitting across the table from NVIDIA with full visibility into margin structure. A supplier still earning the margin argued under The number to watch [e22][e18] is a supplier with room to concede price. The risk is not that hyperscalers walk away — they cannot, not in volume, not yet — but that they extract concessions in exchange for continued orders. Volume rebates, co-engineering commitments, or simply the implicit threat of shifting incremental capacity to Instinct or Trainium: any of these can compress realised pricing without showing up as a list-price cut. Cerebras CEO Andrew Feldman claimed in the week ending 1 June 2026 that CUDA had lost approximately 70% of frontier AI training share [e7]. We treat this as a directional signal rather than a settled fact: Cerebras has every incentive to talk up custom silicon, the claim carries no denominator, and the company offered no customer names or workload breakdowns. The direction of travel is consistent with frontier labs splitting training runs across multiple architectures to derisk single-vendor lock-in. We separate training from inference because the switching costs differ by an order of magnitude. Training workloads are batch-oriented, run for weeks or months, and can tolerate bespoke toolchains; inference is latency-sensitive, customer-facing, and requires the optimised libraries that only CUDA and, to a lesser extent, AMD ROCm provide today. NVIDIA's data centre revenue growth through Q1 FY2027 — argued in full under The number to watch [e24][e23] — shows no sign yet that custom ASICs have inflicted volume loss at the consolidated level. Inference is where hyperscalers have the strongest economic motive to dual-source: the workloads are predictable, the models are frozen, and the margin on serving a query is thinner than on selling a training cluster. If AMD or custom ASICs capture 30-40% of incremental inference deployments by the end of calendar 2027 — the scenario the antithesis posits — data centre growth would decelerate sharply even if the moat on training remains intact. Until then, the Cerebras claim is a useful warning flag, not a falsified thesis.

Provenance not recorded

IMPACT NUMBERSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

NVIDIA's data center revenue grew 92% year-over-year to $75.2bn [e23] USD in Q1 fiscal 2027 ended 26 April 2026, up from $39.1bn [e24] USD in Q1 fiscal 2026 ended 25 April 2025, an absolute increase of $36.1 billion USD in twelve months — corrected under Editor memo 2026-08-07.

NVIDIA Corporation · 10-Q filing segment revenue disclosure · Form 10-Q for quarter ended 26 April 2026 · 2026-04-26 · e22

IMPACT NUMBERSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

Over 5.9 million developers worldwide used CUDA and NVIDIA's other software tools as of fiscal 2026 ended 25 January 2026, according to the company's annual filing, though NVIDIA does not disclose the methodology for counting active developers or distinguish between hobbyist and enterprise users.

NVIDIA Corporation · 10-K filing ecosystem metric · Form 10-K for fiscal year ended 25 January 2026 · 2026-01-25 · e3

SECTION REDRAFTSEMICONDUCTORSARTIFICIAL INTELLIGENCE0 readers followed this

The thesis and antithesis converge on one empirical question: what margin trajectory is already in the price? The margin evidence — argued under The number to watch [e22][e21] — says concessions have not yet been extracted despite the concentration argued under The buyers [e9, e14, e20][e12] — corrected under Editor memo 2026-08-07. The Q2 FY2027 print on 26 August 2026 will settle whether that concentration is rising — two unnamed customers accounted for approximately 13% of total revenue in Q1 FY2027 [e5], a sharp drop that either signals diversification or reflects a disclosure quirk in how NVIDIA aggregates cloud-service-provider resellers. If gross margin falls below 70%, the antithesis is correct: dual-sourcing to AMD and custom ASICs is forcing price cuts that no amount of vertical integration can offset. If margin holds above 75% while revenue growth exceeds 60% year-over-year, the thesis holds and the current multiple is underpricing the duration of the moat through fiscal 2028. $223.96 (2026-08-07) maps onto roughly +20% FY2028 EPS growth at a 20–22x multiple — the market is already pricing meaningful moat decay and multiple compression, and its position sits closer to the antithesis than the thesis. The derivation of the house $320–350 band, and the memo passages quoted in support of it, are relocated to the methodology annex, marked relocated by editor. Asymmetry, priced at the stamped reference $223.96 (2026-08-07): Thesis $322.40 (+44%) against Antithesis $177.77 (−21%) — 2.1:1 in favour of the upside leg. The framework favours the long side if margin persistence is assigned better-than-coin-flip odds; it says nothing about what those odds are.

Provenance not recorded

Learning ledger

What the runs taught the platform

Every rule here was learned the expensive way: a defect on a live run, an editor's ruling, and a change to the code. Each entry names the run, the defect, the invariant it became and the check that now enforces it. Where nothing enforces it yet, it says so.

  1. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    No-spoiler invariant, at draft and at render

    DEFECT
    A commit prompt sat under a headline that already stated its answer, and the 92% growth prompt was answered twelve screens up in executive summary point 03. A partial surface index then reported the page clean — the false pass was the real defect.
    INVARIANT
    A commit prompt is valid only if its house answer appears nowhere above it in reading order. Headline, standfirst, hero, exec points, section kickers and titles, exhibit cards, chart labels and pull quotes all count as spoiling surfaces.
    CHECK
    buildSurfaces + scanPrompt in src/lib/spoiler-scan.ts, indexing the full reading-order surface INCLUDING exhibit-registry rows (chart title, caption, axes, callout, reference and point labels, via chartSurfaceText); run at draft time in src/lib/engage.server.ts against the stored sections and again at render in src/components/public-article.tsx, where a spoiled prompt renders nothing and raises a named editor flag.
  2. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    Priors deck discipline

    DEFECT
    Staged (switched-off) prompts consumed deck slots, so the reader met an empty deck while the header counted three.
    INVARIANT
    The deck fills only from switched-on prompts, in reveal order, capped at three. The header count derives from the live deck, never from the prompt table.
    CHECK
    deckSelection + PRIORS_DECK_CAP in src/lib/engage.ts; consumed by PublicArticle and by the toolkit priors panel.
  3. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    One argument, one home

    DEFECT
    The margin and concentration numbers were re-argued in four sections; the punch pass cut the body in half without losing a single claim.
    INVARIANT
    A claim is argued in exactly one section. Everywhere else it is a pointer to that section. Evidence reuse is legal; re-arguing is not.
    CHECK
    oneHomeViolations in src/lib/one-home.ts, run over the shipped prose at assembly and surfaced as an amber in the run console, the audit export and the publish gate.
    NOTE
    Lifted from report-scoped: it was an editor-directed pass on one report until the assembly-time scan existed.
  4. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    Reconcile at write, render verbatim

    DEFECT
    The live hero read $224–$278 against a spec storing $245–$278: a render-time reconciler was rewriting numbers the record had already settled.
    INVARIANT
    Numbers are reconciled once, at the write, and rendered verbatim thereafter. The record may not assert what it does not check — an amber is not a pass.
    CHECK
    governFraming in src/lib/house-number.ts and src/lib/govern-spec.server.ts at the write; HouseNumberBlock renders the governed string with no second pass.
  5. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    Falsifiability hygiene

    DEFECT
    Duplicate falsifiability cards, undated rows carrying a date kicker, and testless rows rendering as blank fields.
    INVARIANT
    Dedupe on normalised claim/test content; an undated row loses its kicker; a testless row is dropped loud, never rendered empty.
    CHECK
    cleanFalsifiability in src/lib/report-view.ts, shared by the reader, the V2 preview and both HTML exports.
  6. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    Dropped-loud as the universal failure convention

    DEFECT
    Missing fields rendered as em dashes and blanks: mock report data, panel seat keys and the figures registry each hid absent content behind punctuation.
    INVARIANT
    Nothing is dropped quietly. A missing field renders as a named absence; a dropped exhibit, block or row states its rule and its subject.
    CHECK
    the Absent component in src/components/editorial.tsx, drop rules in src/lib/chart-assembly.ts, blocks_dropped in the draft stage, and _field not present_ in src/lib/run-export.server.ts.
  7. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    Stable article-level term layer

    DEFECT
    Hovering a term froze the main thread: the hover layer remounted on every rerender and each mousemove wrote state.
    INVARIANT
    The term card layer is mounted once per article and never remounts on rerender; positioning is written through refs, coalesced by requestAnimationFrame, and the card never takes pointer events.
    CHECK
    TermCardLayerProvider in src/components/reader-terms.tsx, mounted at article level by PublicArticle.
    NOTE
    TermedProse still self-mounts a provider when no article-level context is present. Nothing renders that way today, but the fallback would re-open the per-paragraph remount on any new surface.
  8. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    Preview equals reader, with editor-local telemetry

    DEFECT
    The toolkit's V2 preview diverged from the published article, so defects were found by readers rather than by editors.
    INVARIANT
    The editor preview renders the reader's own component tree. Only telemetry differs: editor sessions are marked and excluded from published distributions.
    CHECK
    PublicArticle is the single article renderer for /r/$slug and the toolkit preview. Telemetry separation is enforced at the write: isEditorRequest() in src/lib/reader.server.ts stamps `excluded` on signals, reactions, poll votes, prior commits, reader positions and resolution sign-ups; deskAnalytics, every tally and the CROWD_THRESHOLD count read only unexcluded rows. Rows written against reports that were never published are retro-marked editor-era, so first published distributions start clean.
  9. NVDAEDITORIAL INVARIANTPLATFORM-WIDE — runs for every run and every report

    SIGNAL_MEANING as the single register

    DEFECT
    The desk view and the reader's ledger drifted: the desk counted events the reader was never told were captured.
    INVARIANT
    The reader's visible ledger owns the vocabulary. Anything outside it is counted as UNNAMED and shown as a defect, never folded into a total.
    CHECK
    SIGNAL_MEANING in src/lib/reader-types.ts, from which deskAnalytics derives its whole event list in src/lib/reader-analytics.server.ts.
  10. FILTRONICEDITORIAL INVARIANTREPORT-SCOPED — fires only on one report's data path

    A scenario is named for the case it argues

    DEFECT
    'Base' held an 8x terminal multiple against a market paying ~47x, so the neutral-sounding label carried a hard bear call and the reader had no way to see the disagreement or its size.
    INVARIANT
    Scenario names state whose view they are. The house case is called the house case, and where it disagrees with the market a Market-implied case is published beside it, solving the same structure for the input today's price requires.
    CHECK
    Scenario set and hero framing pinned in the spec; the reconciler resolves House/Base either way in modelQuantities, so a rename cannot silently drop the check to parameter defaults.
  11. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Shared drafter-write layer

    DEFECT
    Each stage validated model output its own way; DRAFT TERMS wrote zero rows and the run reported success.
    INVARIANT
    Every stage writer validates at the write, against a declared contract, with a key-normalisation map — and every rejection lands on the record with its raw payload.
    CHECK
    guardValidate in src/lib/drafter-write.ts, the reject sink in src/lib/drafter-write.server.ts, flushed as drafter_reject artifacts by src/lib/run-stage.server.ts.
  12. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Contract-derived informed retries

    DEFECT
    Retries echoed the first thrown error, so the drafter oscillated between two wrong shapes and burned the stage's budget.
    INVARIANT
    A retry directive prints the FULL declared contract — every required field, every accepted alias — never just the first error.
    CHECK
    schemaDirective in src/lib/drafter-write.ts, carried into the next attempt's prompt by beginDrafterCapture in src/lib/run-stage.server.ts.
  13. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Type-aware block validation

    DEFECT
    One block schema was applied to every block type, so a valid chart block was rejected for missing prose fields.
    INVARIANT
    A block is validated against the contract for its own type; a failing block is dropped loud and the section survives.
    CHECK
    the per-type block contracts in src/lib/drafter-write.ts and blocks_dropped in the draft stage of src/lib/stages-production.server.ts.
  14. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Inert-output repair pass, then a ruling

    DEFECT
    A model output did nothing when its sliders moved, and shipped as a live control.
    INVARIANT
    A dead output triggers a repair pass before the stage fails; a survivor is not a log line — it enters the pending inventory and the publish gate as a confirm-before-shipping item.
    CHECK
    InertOutputsError and the probe in src/lib/model-eval.ts, the repair pass in src/lib/stages-production.server.ts, and inertPending in src/lib/inert-pending.ts read by the toolkit gate and the walkthrough.
  15. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Entity-matched temporal grounding

    DEFECT
    A filing from a different registrant grounded the fiscal calendar, putting the subject's year end and reporting cadence months out.
    INVARIANT
    A filing grounds a run only if its registrant IS the subject — matched on ticker, CIK or name, never on proximity in a search result.
    CHECK
    matchesSubject in src/lib/entity-match.ts, applied to every filing in src/lib/stages-research.server.ts; dropped filings are named on the record.
  16. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Estimate-versus-actual discipline

    DEFECT
    A broker's £11.1m forecast was carried as a reported result against an actual of £11.3m.
    INVARIANT
    Estimate markers reclassify a figure to basis: estimate and exclude it from house arithmetic. Code may downgrade an actual to an estimate; it may never upgrade an estimate to an actual.
    CHECK
    classifyBasis and estimateNote in src/lib/estimate-marker.ts, re-checked over every evidence item in src/lib/stages-research.server.ts.
  17. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Market-reference unit and instrument parity

    DEFECT
    A GBP price was compared against a GBp quote — £3.40 against 253p — and the premium framing inherited the error.
    INVARIANT
    A market reference must agree with the subject on instrument and on unit before any premium is derived from it.
    CHECK
    checkMarketReference in src/lib/market-reference-check.ts, run before framing in src/lib/house-number.ts.
  18. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Refutation reaches the registry

    DEFECT
    The adversary refuted the £11.3m-as-net-cash reading, but e14 stayed live in the registry and kept feeding an exhibit and three sentences.
    INVARIANT
    A verdict must land on the evidence row it refutes. A superseded row blocks every downstream use: exhibits at assembly, and prose sentences that cite it bare.
    CHECK
    refutationOf and the evidence_refuted drop rule in src/lib/chart-assembly.ts, plus scanProseCitations in src/lib/prose-citation-gate.ts at the assembly gate.
  19. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    FY-label derived dating, stamped as derived

    DEFECT
    An EBITDA timeseries was dropped because its evidence rows were undated, though every row carried an FY label.
    INVARIANT
    An undated row's FY/H1 label resolves against the subject's fiscal year end, and the resulting date travels as DERIVED with its derivation printed.
    CHECK
    fiscalPeriodEnd in src/lib/fiscal.ts; period_end_derived and period_end_derivation on ChartPoint in src/lib/chart-assembly.ts, rendered as a badge in the run console and a string in the audit export.
  20. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    Assembly-order honesty

    DEFECT
    Corrections applied after assembly did not appear in the shipped artifact, and the difference was closed by hand-patching the report row.
    INVARIANT
    A correction landing after assembly forces re-assembly. The shipped artifact is always the output of the pipeline, never a hand patch.
    CHECK
    the retro pass in src/lib/retro.server.ts flags every post-assembly correction as a ledger item; re-assembly is driven from the run console rather than by editing report rows.
  21. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    The article and its model state one number

    DEFECT
    The body argued a 25p floor, a ~£57m market capitalisation and £47m of required revenue while the model published beside it computed 8p, £455m and £264m for the same three quantities. Both were argued; only one could be true.
    INVARIANT
    Any quantity the model computes has ONE value. Where the prose states that quantity, the figure beside the naming phrase must be the model's within tolerance, or assembly halts naming both sides.
    CHECK
    reconcileProseModel in src/lib/prose-model-reconcile.ts, thrown at the assembly gate in src/lib/stages-production.server.ts, rendered in the run console and audit §Prose-model reconciliation.
  22. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    The house number declares the unit it computes

    DEFECT
    The house number multiplied by 100 to reach pence, declared itself 'GBP per share', and was argued against a reference in a third unit. The premium it printed was meaningless.
    INVARIANT
    The output's computed unit, the spec's declared unit and the market reference's unit are the same unit — the instrument's native one — and a mismatch fails model design rather than warning past it.
    CHECK
    checkUnitParity in src/lib/market-reference-check.ts; error findings throw in runModelDesign.
  23. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    A settled cluster is closed to new members

    DEFECT
    A rewritten thesis, written precisely because cluster c2 had been ruled refuted, was absorbed into that same settled cluster on the next pass and inherited a verdict it had never drawn.
    INVARIANT
    Once a cluster carries a desk ruling it takes no new members. A rewritten claim is a new claim: it clusters on its own and must draw its own verdict.
    CHECK
    clusterLatecomers in src/lib/stages-production.server.ts skips clusters holding a cluster_ruling.
  24. FILTRONICPIPELINE GUARANTEEPLATFORM-WIDE — runs for every run and every report

    A desk ruling survives a timed-out re-attack

    DEFECT
    A re-attack that timed out flattened a ruled cluster to 'unattacked'; because the cluster no longer looked conflicted, the desk's ruling was skipped and the earlier machine verdict governed.
    INVARIANT
    A desk ruling governs its cluster for the life of the run, whatever the cluster's later shape — including when a re-attack fails, times out, or leaves it unattacked.
    CHECK
    resolveClusters in src/lib/cluster-consistency.ts applies editor rulings before any conflict test.