Retail volume passed its own twelve month high in May.
- retail volume, May48,120pack 14 · p.07
- previous own high, Nov46,905pack 09 · p.06
SOURCE: MonthlyBRM · p.07 · re-derived at publish
AUTOMOTIVE · INDIA · PRODUCT DEEP DIVE
Maruti Suzuki is India’s largest automaker, and we built this with their innovation arm. Their head office runs a business review cycle: one pack per vertical, produced monthly and mid-month, read in the meeting it was made for, then filed. We read nineteen months of that corpus once and resolved it into one queryable form, in a service purpose-built on Talonic technology and deployed inside their own AWS account. The director page is the surface it is read back from. Every figure on this page is a measurement of our own software. The customer’s business reporting stays with the customer.
A month with settled history behind it. This is the product working.
GROWTH ENGINES · MAY 24-25 · 3 INSIGHTS PUBLISHED
Retail volume passed its own twelve month high in May.
SOURCE: MonthlyBRM · p.07 · re-derived at publish
Finance penetration on the premium channel sits eight points below the channel average.
(39.6% − 31.4%) × 6,400
= 525 units of finance attach, at May volume
three terms, inside the prize sentence, where the validator allows it
SOURCE: MonthlyBRM · p.12 · re-derived at publish
Rural retail share has held within one point for five consecutive months.
SOURCE: MonthlyBRM · p.04 · re-derived at publish
Hover or focus a card to draw each value back to its source page.
Illustrative director page: aggregated insight over the structured data, permission-scoped per vertical. Layout, controls and provenance behaviour are the built product. Every label and value shown is synthetic.
We judge this feature by the thinnest frontier-month page, not by the average. Why six candidates were held, and whether holding them was right, is the open diagnostic further down this page.
READ ONCE · STRUCTURED ONCE · EVERY VALUE TRACED TO THE PAGE IT CAME FROM
Maruti Suzuki
Automotive · India
POC AND INSIGHT PACKAGE COMPLETED · SCALE-UP PROPOSED
69,200
report rows, 24 verticals, each traced to its page
Note: Management reports that were already approved, already read, and already filed. Nineteen months from 24 verticals, with drifting labels and formats normalised into one queryable layer. Nobody had to rebuild the systems underneath.
THE PLATFORM RUN
Ingest once. Query forever.
The same five stages run on every corpus we take. These are this corpus’s numbers.
Note: The fifth stage prints ONCE on purpose: it is the claim every page in this family exists to receipt.
A note on two of our own numbers. The extraction schema constrains verticals to a closed enum of 25, and twenty four of them are present in the resolved corpus. We publish both, rather than the tidier one. Same for the span: Mar 2024 to Sep 2025 is nineteen months counted inclusively, and our own handover summarises it as eighteen. The dates are the measured fact.
INGEST ONCE. QUERY FOREVER.
01 / every value traced
Nineteen months of reporting, read once. Sixty-nine thousand rows, each one carrying the page it came from. Deployed inside the customer’s own AWS account.
Thirty-four recurring business review packs across nineteen months, with labels that drifted, captions that changed and formats that varied by vertical, were read once and resolved into one queryable form: 69,200 rows across 24 verticals, one row per source observation, each carrying the page it came from. None of the systems underneath the reports were exposed or rebuilt.
The business teams already produced approved management reports, one pack per vertical, month after month. Each was correct on the day and complete for the meeting it was made for. What nobody could do was read month three against month fourteen, or one vertical against the other 23, because the packs were built to be read once and filed.
What runs there is Talonic technology, purpose-built for this engagement and deployed in the customer’s own AWS account. The director page is the surface it is read back from, and it publishes a number only when it traces to a cell, behind a validator that fails the build above a fifteen percent false-acceptance rate.
POC and insight package completed. Broader scale-up is the proposed next stage.
69,200
rows in the resolved layer, one per source observation, each carrying the page it came from
34 PACKS24 VERTICALS269 CONCEPTS19 MONTHS
Every figure on this page is a Talonic engineering measurement of Talonic’s own software. The customer’s business reporting stays with the customer.
The extraction schema constrains verticals to a closed enum of 25, and twenty four of them are present in the resolved corpus. We publish both, rather than the tidier one. Same for the span: Mar 2024 to Sep 2025 is nineteen months counted inclusively, and our own handover summarises it as eighteen. The dates are the measured fact.
Everything below this band is the receipt for it: the problem, how the corpus was read, what a director page may say, how a number earns its place on it, and where it all runs.
02 / the problem
Each monthly pack is correct on the day it is made and complete for the question it was made to answer. Two blind spots follow from that shape, and they are facts about how organisations work rather than criticisms of any one of them. Nobody re-reads month 3 against month 14, because no person holds nineteen months of one vertical in working memory, and the pack was never built to be read that way. No vertical sees the other 23, because every pack is produced by one function, for that function, inside one fiscal year. The reporting is not wrong. It is unjoined.
This is not a speed problem, and this is the one engagement on this site where that is true. Every other page here proves that reading once saves labour. This is the case where reading once creates a capability that did not exist at any speed, because what was missing was never the hours. It was one queryable form for nineteen months of reporting that had only ever existed as nineteen separate readings.
report_pack · 34 packs, 24 verticalsStand-in imagery, not a photograph of the customer · Photo: Prime Minister’s Office, India, GODL-IndiaStand-in imagery · Photo: PMO India, GODL-India03 / the mechanism
ONE · CAPTURE
A business review pack is mostly tables that are already structured. Send the whole document to a language model and most of the tokens are spent retyping data that was already in a table. Slow, expensive, and not reproducible, because the same page can be retyped differently twice.
So the tables are parsed programmatically first, with no model involved. The model then sees roughly three thousand tokens of prompt per page, against the fifty two thousand a full-document approach spends, and it is asked one thing per table: which column means what. About five hundred tokens of column mapping, not a transcription of every cell.
Every row is then mapped programmatically from that mapping. No model, so it is one hundred percent reproducible: run it twice, get the same bytes. Page images go to the model only where they add something, at 150 DPI, which is where accuracy peaked in testing on two independent engagements.
The names were the real problem. Free-form metric names drift month to month, so the same measurement arrives under a different caption in every pack and nothing joins. Constraining the model’s output to a closed list did the work at capture time, which is why no separate resolution model call is needed afterwards.
853
free-form metric names, as printed across 34 packs
76
named metrics in a closed enum, plus one other
Constrained at capture time by the extraction schema, not resolved afterwards. Only 5% of rows land in other, and cross-document overlap between two monthly reports rose from 21% to a range of 80 to 94% once the list was closed.
What this did not do is make it cheaper. Our own measurements put the naive approach at over 35 minutes per document, and the hybrid path that includes page images lands in a range that overlaps it on cost. What changed is time, which fell to roughly 9 to 12 minutes on the markdown path, and reproducibility, which went from none to total.
TWO · RESOLUTION
Even with a closed metric list, the captions printed on the page keep drifting. The resolution layer pools every performance row from every workbook into one resolved dataset, one row per source observation, each row keeping the file and the row it came from. Drifting captions are then clustered into stable concepts, per vertical: 269 concepts across 24 verticals and 69,200 rows. Rebuilding is deterministic. Run it again over the same workbooks and you get the same files, byte for byte.
Four rules hold it honest. Nothing outside the corpus enters it. Monthly and mid-month pack figures are never mixed into one series, because they are different bases, and every row carries its basis so downstream logic structurally cannot cross them. A prior period reprinted in a later pack is not a new observation. And any metric whose caption is unreliable is verified against the source page rather than trusted from the caption.
A conflict removes a cell, not a concept. Where values disagree but the printed captions and the values pair off one to one, that is not a conflict. It is several observations wearing one label, and the group splits: 17.3% of every value-disagreeing key group on this corpus, against 8,443 of 45,568 rows the earlier logic had called conflicts. Where a disagreement is real, the concept keeps every clean period it has, carries a gap, and is named as partially affected. The first version shelved the whole concept, which let one bad month delete a multi-year series.
The best thing we can tell you about this layer is how it broke. The build plan said to map the printed metric caption through the concept dictionary. The specification said to anchor on category, entity and period, and never on the caption. The plan was wrong, it reached production, and the measurement is unambiguous: on the workbook the dictionaries were built from, category matches a dictionary label on 3,678 of 3,678 rows. The caption matches on 0 of 3,678. That build produced 61,483 rows, 81 of them resolved, 2,207 unresolved labels and 10,356 conflicts.
The real fix is not the correction. It is the version stamp. Every rebuild stamps a resolution logic version into its metadata, and any change that would map the same input rows differently bumps it. Without that, a mapping fix never reaches an environment whose rows are already filled, because build-if-empty is silent about rows that are present and wrong. Which is exactly how the caption build survived its own fix.
04 / the contract
A director page is aggregated insight over the structured data, permission-scoped to a single vertical. Per vertical, per month, a model writes the insights, and every one of them is machine-checked before it can publish. Three words are reserved, and nothing else earns them.
An own target surpassed, a multi-year high, or a first recovery after sustained decline.
A quantified finding carrying its own prize arithmetic. Mandatory on a Growth Engines page. A page with no lever is held, not shipped.
A solid, traceable observation with no lever claimed.
A headline needs one or two drill-down levels that exist in the data and funnel consistently to it. No drill-down, no insight, and publishing zero insights is correct behaviour when the data is thin. No plan-versus-achievement judgment. No restatement framing. No cross-vertical comparison. No instruction aimed at the reader.
The vocabulary ceiling is the language on the director’s own pages.
Written to the reader, in the reader’s own report terms, verbatim. No new jargon, no coined terms, no new acronyms. Below one lakh, plain rupees. One to ten lakh, in lakh. Above ten lakh, in million rupees, and rates and counts are never converted to money. Crore is not a rung, even though the source sheets use it, and a page that prints crore fails the units battery and does not publish.
A note on two more of our numbers. The generation contract asks for one to three insights, and the pages we measured published five to seven on history months. Both are our own figures, taken from our own runs, and we print both. The count on any page is whatever the validator let through, and the number we judge the feature by is the frontier-month one.
05 / the gauntlet
Every displayed figure on a director page has to trace to a specific source row, and be re-derived once from that source before publish. That is easy to claim. So we wrote a test that tries to beat it.
The test generates 1,000 seeded pseudo-random figures against a realistic basis and measures what fraction the validator accepts. The version that let blocks combine anything they had touched accepted 92.4%. The current one accepts 11.5% in prose, and 30.9% inside the one sentence where a three-term prize derivation is legitimately expected.
The number that matters is not 11.5. It is 15. The test does not report the acceptance rate, it gates it: above fifteen percent, the build fails. Not a measurement somebody took once and put on a slide. A threshold our code has to pass to ship.
THE PART WORTH STEALING
The validator separates figures a block anchored from figures it merely plotted. Drill-down and cited cell values may be combined. Chart points match only as printed, because arithmetic between two plotted points is arithmetic no drill-down covers.
Prize arithmetic gets exactly one exemption, a three-term derivation, and only inside the prize sentence, because a mandatory prize is that shape. Named, bounded, and written down.
A money drill-down is rescaled through its own cell’s stored unit, never through a ladder of candidate scale factors. Trying several factors once accepted a value printed at a hundred times its own source.
Every vertical in the list is also an ordinary noun of the business, so the rule bans comparison, not naming, and only flags a foreign vertical where the sentence carries an explicit comparison cue. Comparisons drawn without one of those words are missed. That is the trade, and it is deliberate.
5–7
on a month with settled history behind it
1
on the month a director actually opens
Insights published per page. We judge this feature by the thinnest frontier-month page, not by the average, which is why the instrument at the top of this page opens with a control that shows you the thin state.
And here is what it costs us. We reported an average of 4.21 insights per page across 19 pages and 80 insights. That average was real, and it hid the distribution, which is the thing that matters. The cause is not the model: it emits five to seven candidates per page, and anything a failing battery touches is dropped. On a frontier month there are fewer clean cells to cite, so more candidates trip a battery. One page emitted seven candidates, dropped six, and published one. That is not a thin report. It is a thin survivor set, and the gauntlet is ours.
The diagnostic that settles this is specified. Bucket the drop reasons across the corpus, find which battery dominates on frontier months, hand-check five dropped insights against their source cells, and answer one binary question. Is the battery rejecting genuinely wrong claims, in which case the month really is thin, or is it a false negative, in which case our cell match is too strict. The diagnostic comes before any re-roll of the model, because a re-roll under an unchanged validator reproduces the same survivors.
AND WHO DECIDES · A MODEL CAN SUGGEST, A PERSON DECIDES
One registry entry per claim maps a label to a concept, seeded once and authoritative thereafter. Every rebuild files proposals from the report’s unresolved labels above a frequency floor. A human accepts, which schedules a rebuild, or rejects, which retires the label so it does not reappear as new work every month. Pages that did not clear publication are quarantined and categorised by reason.
Every tool available to the analyst agent is hard-scoped to the caller’s permitted verticals. Rows outside that scope are invisible to the model regardless of what arguments it invents. The org chart is encoded too, so an executive-level question covers every vertical that rolls up to that office. The loop is bounded at 16 rounds and 200 rows per query.
A rule governs only when it is built into something the work has to pass through. Every mechanism on this page exists because a written instruction alone did not hold.
THE FAILURE MODE THAT VOIDS EVERYTHING ELSE
A run in which every model call failed reported success. A stray newline in a credential broke request signing for all 36 pages of a document. Every page logged a warning, retried to exhaustion, and the process exited zero, having written a well-formed result containing only the metadata sheet. In the service, that job completes normally, and nothing distinguishes it from a document that genuinely held no data. That sentence is in the present tense on purpose: this failure is recorded as it stands.
A page index that was off by one substituted the wrong image. A default page number of zero, indexed as page minus one, hands the last page’s image to every page. This is close to invisible: table extraction from markdown stays perfectly healthy while everything image-derived quietly collapses. The measured cost on one document was 910 rows against 2,660 with the images correct, and two of four known chart defects read as unfixed when they were not. The verifier now marks a run in that state invalid rather than reporting it.
A separate engagement, a separate codebase and a separate team found image reads returning no payload and no error. Two independent discoveries of the same failure class is not a coincidence, it is the shape of the problem. An extraction pipeline’s most dangerous state is not being wrong. It is being empty and confident.
06 / where it runs
What runs there is Talonic technology, purpose-built for this engagement and deployed in the customer’s own AWS account. That posture is our standard deployment mode for VPC engagements, not a one-off arrangement made for this pilot.
Talonic runs as containers in clusters that already exist. The pilot creates no VPC, no cluster and no database. The fallback if egress turns out to be filtered is written down in advance.
Extraction runs on Claude through the customer’s own model access, in their own account and their own region. We never hold a key to it.
The deploy command is run inside their account. Images are pulled cross account from our container registry, with access they granted, and that pull is the only connection that crosses inward.
Object access on one bucket, permission to invoke the model, permission to write its own metrics. Nothing else. The only connection that crosses outward is our standing access, and it is read only.
This is pilot-grade storage by declaration, not by accident. The datastores run as containers on the node, and the production answer is named in the deployment document. We would rather tell you which parts are pilot-grade than let you find out.
07 / what it can be asked
Once nineteen months of every vertical exist in one queryable form, questions become askable that no single pack could answer. Here are five, with the mechanism that answers each. The answers stay where they were found.
How many dated commitments made to you in the last nineteen months were kept?
Every forward commitment with a date, extracted from note rows across every vertical and every month, tracked to its fate.
WITHHELD · customer reportingWhich commitments disappeared without ever being closed out?
A source-side disappearance signal: the section kept reporting every month and the item stopped appearing in it, which separates a real drop from an extraction gap.
WITHHELD · customer reportingWhich items have read “in progress” for six months or more without a status change?
Chronicity detection across the full series.
WITHHELD · customer reportingWhere do two verticals report different values for the same fact in the same cycle?
Contested-number detection, with provenance to the page on both sides.
WITHHELD · customer reportingDoes the channel identity hold this month?
One live cross-vertical identity, checked every cycle. When it holds, the channel is consistent. When it drifts, one of the numbers is wrong.
WITHHELD · customer reportingThe output is not an answer. It is a better agenda. Each card carries the question it suggests for the meeting, and who to ask. An alert carries what is at stake and the system’s own hit rate on previous alerts, because an alert has to earn trust. An empty inbox is a good month, and it stays empty rather than filling with something.
08 / next
Send a representative sample: the packs, the scans, the spreadsheet nobody owns. We run them through Talonic and send back your extracted data within five business days, with field-level coverage, confidence and provenance. Judge the output field by field.
THE LEDGER
The argument ends here. What follows is the working: every population, every date, every denominator, and the places our own account needs checking. Nothing below is needed to understand the case. All of it is needed to check it.
L1 / what we got wrong
The cost story. The first draft of this page was about to say we made extraction twenty times cheaper. Our own table says otherwise: the naive approach runs at over 35 minutes per document, and the hybrid path that includes page images lands in a range that overlaps it on cost. The win is time and determinism, not dollars. So the page prints the time and the reproducibility, and no dollar-per-document figure appears anywhere on it.
The vertical count. Our own record said 25 verticals in one place and 24 in another, about the same corpus. The 25 is the closed enum in the extraction schema. The 24 are the verticals present in the resolved corpus. We publish both, rather than the tidier one, and the same goes for the span: nineteen months counted inclusively, where our own handover says eighteen.
The average. We reported an average of 4.21 insights per page across 19 pages and 80 insights. That average was real, and it hid the distribution, which is the thing that matters: five to seven on a month with settled history behind it, one on the month a director actually opens.
The caption build. The build plan said to map the printed metric caption through the concept dictionary. The specification said to anchor on category, entity and period, and never on the caption. The plan was wrong, it reached production, and the plan now carries the correction inline, in four words: that was a planning error.
Every figure in this section is a Talonic engineering measurement of Talonic’s own software, taken against the denominator named beside it in the receipts below.
The funnel that restated the type above it.
It drew 853 collapsing to 76 directly beneath 853 collapsing to 76 in serif italic. A drawing that restates the thing above it teaches the reader that the page repeats itself. We ordered it. We were wrong. It went.
The trust boundary that restated four clauses.
Four clause blocks, one of which reads “the only connection that crosses inward,” and a drawing above them saying it again. Same ruling, for the same reason.
We would rather tell you which parts are pilot-grade than let you find out.
L2 / the receipts
| VALUE | WHAT IT MEASURES | TIER | CAVEAT |
|---|---|---|---|
| 34 | business review packs read, 19 monthly and 15 mid-month | A | none needed |
| 19 months | Mar 2024 to Sep 2025, counted inclusively | A | our own handover summarises the same span as 18 months. The dates are the measured fact. |
| 24 verticals | verticals present in the resolved corpus | A | against a closed enum of 25 in the extraction schema. We publish both, rather than the tidier one. |
| 269 | clustered concepts after label resolution | A | none needed |
| 69,200 | rows in the resolved layer, one per source observation | A | none needed |
| 853 → 76 | free-form metric names collapsed by the closed enum, plus one other | A | measured across the extracted corpus. |
| 5% | share of rows landing in other | A | none needed |
| 21% → 80–94% | cross-document metric overlap between monthly reports, before and after the enum | A | measured between monthly reports on this corpus. |
| ~3,000 tokens | prompt size per page under the hybrid | A | against roughly 52,000 for full-document extraction. |
| ~500 tokens | model output per table, a column mapping rather than a transcription | A | none needed |
| 150 DPI | page render resolution | A | where accuracy peaked in testing on two independent engagements. |
| 35+ min → 9–12 min | time per document, naive full extraction versus the hybrid markdown path | B | Measured on our own runs, on a specific model and configuration. The image path runs longer, at roughly 15 to 26 minutes. |
| 100% | reproducibility of the row-mapping step | A | the mapping step has no model call in it. |
| 3,779 / 3,779 · 5,180 / 5,180 · 2,588 / 2,588 | rows carrying a page number, on three verified documents | A | measured on three verified documents. This is the 100% in the run band. |
| byte-identical | rebuild determinism over the same workbooks | A | a property, not a measurement. Run the rebuild again over the same workbooks and you get the same files. |
| 17.3% | share of value-disagreeing key groups that are a label split rather than a conflict | A | measured across the 34 workbooks. |
| 8,443 / 45,568 (18.5%) | rows marked as conflicts by the previous resolution logic | A | under the previous logic, before the split rule. A different run and a different denominator from the 69,200 above. |
| 3,678 / 3,678 vs 0 / 3,678 | category matches a dictionary label; the printed caption matches on none | A | measured on the workbook the dictionaries were built from. |
| 61,483 · 81 · 2,207 · 10,356 | rows, resolved, unresolved labels and conflicts produced by the caption build | A | this is the defect, not the product. It is now guarded by a regression fixture. |
| 92.4% | acceptance rate of the permissive validator against 1,000 seeded pseudo-random figures | A | 1,000 seeded pseudo-random figures against a realistic basis. This is a test of the guard, not a measure of insight quality. |
| 11.5% | acceptance rate of the current validator, in prose | A | same test, same 1,000 figures. A test of the guard, not a measure of insight quality. |
| 30.9% | acceptance rate inside the prize sentence, where a three-term derivation is expected | A | the one place a three-term derivation is legitimately expected. |
| < 15% | the CI threshold. The build fails above it | A | this is a threshold our code has to pass to ship, not a figure we reported once. |
| 1–3 insights | what the generation contract asks for per vertical per month | A | the contract figure. The 5 to 7 beside it is what we measured, and we print both. |
| 5–7 insights | published per page on history months | A | history months only. See the frontier figure beside it. Never publish this number alone. |
| 1 insight | published per page on frontier months | A | always printed in the same breath as the 5 to 7 above it. |
| 4.21 avg / 19 pages / 80 insights | the average we reported, and the distribution it hid | A | that average is real and it hid the distribution, which is the thing that matters. |
| 7 emitted, 6 dropped, 1 published | one frontier-month page’s candidate survivor set | A | one page. Vertical and month not named, because the identity adds nothing. |
| 910 vs 2,660 | rows produced by one document with the page-index defect, versus with images correct | A | one document. The defect substituted the last page’s image for every page. |
| 36 pages, exit code 0 | a run where every model call failed and the process reported success | A | recorded. |
| +43% · +111% · +66% | fact-table row growth on three documents after a model and schema change | B | Model and schema changed together, so the two effects are confounded, and our own report says so. Row counts are not accuracy. |
| −33% · −9% · −25% | note-and-insight row change on the same three documents | B | Down on all three, consistently. The obvious explanation was checked and ruled out. |
| 0 · 0 · 0 · 0 | units outside the vocabulary, rows without a category, verticals outside the enum, competition rows without a unit | A | schema conformance on three verified documents. The category figure was 27.1% before the field became required. |
| 27.1% | rows missing a category before it became a required field | A | pairs with the row above. |
| 16 rounds · 200 rows | analyst agent tool-loop ceiling and per-query row cap | A | none needed |
| 3 permissions | the task role’s IAM scope | A | object access on one named bucket, permission to invoke the model, permission to write its own metrics. |
34 PACKS24 VERTICALS269 CONCEPTS69,200 ROWS853 → 76 NAMES< 15% ACCEPTANCE GATE
L3 / withheld
This page describes an instrument and publishes measurements of the instrument. What the instrument found stays with the customer, by category and by content: legal and regulatory exposure, people figures, security posture, social compliance, channel and receivables, warranty, competitor figures, and any assessment of how any part of the customer’s organisation reports. Every value from every business review pack stays with the customer, in figure and in paraphrase.
Those analyses exist because the customer let us read a corpus, and they belong to the customer. Every named example in the mechanism sections above is synthetic and marked as synthetic where it appears, and every measurement is one we took of our own code.
SUMMARY
FOUR CLAIMS
Four things this engagement demonstrates, each with the figure that backs it. Every one of them is checkable against the ledger above.
Management reports that were already approved, already read and already filed held nineteen months of answers across 24 verticals. Nobody had to rebuild the systems underneath.
19 months · 24 verticalsLabels and formats that drifted for years were normalised into a single queryable layer of report data points.
69,200 data points · 1 layerEach data point in the layer points back to the report page it was read from, so a number can be checked at its source.
Each value traced to its pageThe POC and insight package are complete. What a scale-up would be is stated as a proposal, and every measurement behind it is in the receipts above.
POC completed · scale-up proposed