{"schemaVersion":1,"generatedAt":"2026-09-14T09:22:48.511Z","commit":"5bed58fe","suites":{"engine":{"testFiles":303,"tests":21615,"passed":21615,"failed":0,"skipped":4,"todo":0,"total":21619},"apiServer":{"testFiles":372,"tests":5604,"passed":5604,"failed":0,"skipped":214,"todo":0,"total":5818}},"assertionAudit":{"scope":"financialEngine","total":26600,"byClass":{"sourcing":72,"property":2042,"snapshot":24078,"other":408},"byScope":{"financialEngine":{"total":26600,"byClass":{"sourcing":72,"property":2042,"snapshot":24078,"other":408}},"uiComponents":{"total":3415,"byClass":{"sourcing":13,"property":2007,"snapshot":752,"other":643}},"endToEnd":{"total":110,"byClass":{"sourcing":2,"property":17,"snapshot":3,"other":88}},"infrastructure":{"total":7148,"byClass":{"sourcing":7,"property":3281,"snapshot":2235,"other":1625}}}},"signals":48,"tracks":13,"nightly":{"runs":102,"syntheticCompanies":2773,"snapshotAssertions":33735,"firstRunId":"2026-04-28-001","lastRunId":"2026-09-14-001","lastPromotedAt":"2026-09-14T09:10:09.489Z"},"assertionAccounting":{"activeAssertions":23236,"lifetimeAuthoredAssertions":59153,"cumulativeVerifications":733256},"cohortComposition":{"runId":"2026-09-14-001","companies":{"total":38,"tierMix":20,"revenueBands":5,"archetypes":13},"annualRevenueSpan":{"min":50000,"max":50000000}},"fieldNotes":{"notesVersion":1,"figures":[{"field":"assertionAccounting.activeAssertions","label":"Active assertions","counts":"The assertions the nightly suite actually executed tonight. This is the answer to \"what is being checked right now\".","canDecreaseWhen":"Snapshots age out of the retention window. Aged snapshots move to an archive directory inside the repository, excluded from the executing suite but fully retained and replayable, so this figure falling is retention working as designed and never evidence being discarded. It also falls when an approved engine change starts a new baseline generation, because prior generations are invalidated by that acceptance.","source":"docs/SIGNAL_METHODOLOGY.md, Assertion Accounting"},{"field":"assertionAccounting.lifetimeAuthoredAssertions","label":"Lifetime authored assertions","counts":"Every assertion ever promoted into a committed snapshot, archived and superseded runs included. This is the answer to \"how much assertion evidence has been built\". Until assertions have been archived or superseded, every authored assertion is also an active assertion, so this figure can match the active count exactly. That is a young archive rather than the same value published under separate labels. The figures separate once retention ages snapshots out, and also when an accepted baseline supersedes a generation, which leaves those assertions authored but no longer active.","canDecreaseWhen":"Never. The generation ledger is append only, and archiving moves files without removing their ledger entries. A fall in this figure would mean the ledger had been rewritten.","source":"docs/SIGNAL_METHODOLOGY.md, Assertion Accounting"},{"field":"assertionAccounting.cumulativeVerifications","label":"Cumulative verifications","counts":"Verification work performed across every recorded run. This is the answer to \"how much checking has actually happened\", which is a different question from how many distinct assertions exist. The per-run ledger began empty, so early in its life this figure can match the active count exactly. That is a young ledger rather than the same value published under separate labels. The figures separate as CREDITED runs accumulate, which is not the same as runs accumulating: a run that contributed nothing still records an entry, so the match can persist while the ledger grows.","canDecreaseWhen":"Never, and it deliberately undercounts: a run that went red, timed out, or failed capture records its outcome and contributes nothing, because a failed expectation skips the ones behind it and crediting the full count would inflate the figure. Runs predating the ledger contribute nothing either.","source":"docs/SIGNAL_METHODOLOGY.md, Assertion Accounting"},{"field":"signals","label":"Signals","counts":"Distinct financial signals in the engine registry, base and composite together.","canDecreaseWhen":"A signal is retired from the registry. The published value is derived from the registry itself, never maintained by hand.","source":"docs/SIGNAL_METHODOLOGY.md"},{"field":"cohortComposition.companies.total","label":"Companies in the nightly cohort","counts":"Synthetic companies the most recent evidenced run put through the engine, split into a tier mix, a revenue-band segment that anchors the span at both ends, and named archetypes engineered so that every signal in the registry has somewhere to fire.","canDecreaseWhen":"The cohort is deliberately resized, or a segment is removed. The segments are reconciled against the committed snapshot rather than inferred from it, so a total that stops adding up fails the build instead of being published.","source":"docs/decisions/2026-07-26-nightly-benchmark-coverage.md"},{"field":"cohortComposition.annualRevenueSpan","label":"Annual revenue span exercised","counts":"The lowest and highest annual revenue the cohort reaches. The extremes are deterministic anchors rather than samples, so the span is exercised on every run instead of being approached on average.","canDecreaseWhen":"The band bounds are changed. The published span derives from those bounds, so it moves with them rather than being restated by hand.","source":"docs/SIGNAL_METHODOLOGY.md"},{"field":"assertionAudit.total","label":"Audited engine assertions","counts":"Assertions a classifier attributes to the financial engine specifically, separated from user-interface, end-to-end, and infrastructure tests so engine rigor is not inflated by unrelated coverage. The per-scope breakdown ships beside it so the split can be audited rather than taken on trust.","canDecreaseWhen":"Engine assertions are removed, or the classifier reassigns them to another scope.","source":"artifacts/aifo/scripts/audit-scope.json"},{"field":"tracks","label":"Industry tracks","counts":"The industry tracks the engine carries in its registry, each a lens the same signals are read through. The published value derives from the registry itself, never maintained by hand.","canDecreaseWhen":"A track is retired from the registry. The value derives from the registry, so it moves only when the registry itself loses a track.","source":"docs/SIGNAL_METHODOLOGY.md"},{"field":"nightly.runs","label":"Nightly runs in the ledger","counts":"The count of committed, evidenced nightly runs in the snapshot ledger, archived runs included. It is a cumulative history figure: every promoted run leaves a committed snapshot and aged runs move to an archive rather than being discarded, so it answers how many nights of evidence have accumulated.","canDecreaseWhen":"Never. The ledger is append only and archiving moves files without removing their history, so a fall would mean committed history had been rewritten.","source":"docs/decisions/2026-07-26-nightly-benchmark-coverage.md"},{"field":"nightly.syntheticCompanies","label":"Synthetic companies to date","counts":"The cumulative total of synthetic companies put through the engine across every committed run, archived runs included. It answers how much synthetic exposure has accumulated over the recorded history rather than how large the latest cohort is.","canDecreaseWhen":"Retention and rewrite semantics match the other cumulative committed-history figures: archived runs stay counted, so it does not fall as snapshots age, and a fall would mean committed history had been rewritten.","source":"docs/decisions/2026-07-26-nightly-benchmark-coverage.md"}],"certifies":["The suite was green at the stamped commit. A red suite publishes nothing at all rather than publishing a lower number, so an unchanged timestamp means a night did not promote, never that a night quietly passed.","Every signal in the registry fired in the archetype member mapped to it. Deterministic archetypes cover the full registry, and a signal that fails to fire fails the run and blocks promotion, so a published night is a night on which the whole catalog was exercised.","Every figure above was derived from artifacts committed to the repository at the stamped commit, not from a dashboard, a database, or a maintained spreadsheet. Anyone with the repository can recompute them."],"doesNotProve":["That the engine's financial judgments are correct. These figures measure that the engine is stable, internally consistent, and exercised across its whole catalog. Whether its conclusions are the right conclusions is a separate question, answered by expert review rather than by counting assertions.","That the engine works on real customer books. The nightly cohort is synthetic by construction, generated to span a wide revenue range and to exercise every signal. Synthetic data can be made adversarial, but it cannot surprise the way a real ledger does.","That the tests are independently audited. These are our own assertions, run on our own infrastructure. They are reproducible by anyone who clones the repository, which is a real and checkable claim, and it is a weaker claim than external verification."]},"definitions":{"definitionsVersion":1,"freshness":{"asOfField":"generatedAt","commitField":"commit","runIdField":"nightly.lastRunId","promotedAtField":"nightly.lastPromotedAt","maxAgeHours":26,"rule":"Render 'as of {generatedAt} (run {lastRunId}, commit {commit})' and a derived fresh or stale state. Treat as stale when generatedAt is older than maxAgeHours, or when nightly.lastPromotedAt is behind the newest scheduled nightly fire (a manual refresh can advance the run date without a scheduled promotion, so compare promotion time, not the run-id date alone). The api-server telemetry route holds the authoritative schedule and grace semantics. Never render a static 'Live'.","staleSignal":"Consumers of /api/telemetry read stale and staleReasons directly; consumers of the raw mirror apply the rule above."},"headline":{"perRun":[{"key":"signals","label":"Signals","field":"signals","kind":"registry","definition":"Distinct financial signals in the engine registry, base and composite together.","computedFrom":"Object.keys(SIGNAL_IDS).length in the engine registry; derived, never hand-maintained."},{"key":"tracks","label":"Industry tracks","field":"tracks","kind":"registry","definition":"The industry tracks the engine carries in its registry, each a lens the same signals are read through. The published value derives from the registry itself, never maintained by hand.","computedFrom":"TRACK_IDS.length from src/config/tracks.js."},{"key":"companiesLatestRun","label":"Companies, latest cohort","field":"cohortComposition.companies.total","kind":"latestRun","definition":"Synthetic companies the most recent evidenced run put through the engine, split into a tier mix, a revenue-band segment that anchors the span at both ends, and named archetypes engineered so that every signal in the registry has somewhere to fire.","computedFrom":"the most recent evidenced run's committed cohort."},{"key":"assertionsLatestRun","label":"Assertions checked tonight","field":"assertionAccounting.activeAssertions","kind":"latestRun","definition":"The assertions the nightly suite actually executed tonight. This is the answer to \"what is being checked right now\".","computedFrom":"assertions the nightly executed in the current run."}],"cumulative":[{"key":"runsCumulative","label":"Nightly runs in the ledger","field":"nightly.runs","kind":"cumulative","since":"2026-04-28-001","definition":"The count of committed, evidenced nightly runs in the snapshot ledger, archived runs included. It is a cumulative history figure: every promoted run leaves a committed snapshot and aged runs move to an archive rather than being discarded, so it answers how many nights of evidence have accumulated. Cumulative since 2026-04-28-001.","computedFrom":"count of committed snapshot files, archived included."},{"key":"syntheticCompaniesCumulative","label":"Synthetic companies to date","field":"nightly.syntheticCompanies","kind":"cumulative","since":"2026-04-28-001","definition":"The cumulative total of synthetic companies put through the engine across every committed run, archived runs included. It answers how much synthetic exposure has accumulated over the recorded history rather than how large the latest cohort is. Cumulative since 2026-04-28-001.","computedFrom":"sum of the company count in every committed snapshot header."},{"key":"verificationsCumulative","label":"Verifications to date","field":"assertionAccounting.cumulativeVerifications","kind":"cumulative","since":"2026-07-28-001","definition":"Verification work performed across every recorded run. This is the answer to \"how much checking has actually happened\", which is a different question from how many distinct assertions exist. The per-run ledger began empty, so early in its life this figure can match the active count exactly. That is a young ledger rather than the same value published under separate labels. The figures separate as CREDITED runs accumulate, which is not the same as runs accumulating: a run that contributed nothing still records an entry, so the match can persist while the ledger grows. Cumulative since 2026-07-28-001.","computedFrom":"verification work recorded in the per-run ledger, which begins after the snapshot ledger."}]}},"integrations":{"quickBooks":{"status":"sandbox_validated","oauth":"validated","reportSync":"validated","transactionSync":"validated","bankQuerySync":"validated","provenanceBadges":"validated","tokenStorage":"encrypted_at_rest","validatedAt":"2026-07-08T07:33:32.000Z","validatedReports":["ProfitAndLoss","BalanceSheet","AgedReceivables","AgedPayables","CustomerSales","TransactionList"],"validatedQueries":["Purchase","Deposit","Payment","SalesReceipt","RefundReceipt","BillPayment"],"validatedParsedReports":["profitLoss","balanceSheet","arAging","apAging","salesByCustomer","transactions","bankTransactions"]},"aiValidation":{"status":"pending","generation":"pending","verification":"pending","structuralGate":"pending"}},"live":{"signals":48,"tracks":13},"stale":false,"staleReasons":[],"staleStats":[],"publicExplanation":{"status":"attention","summary":"One or more public validation checks need attention.","details":["One integration validation stamp is missing or out of date."]}}