# Trend table v1.6 → v1.9.11

The public evidence that each release moved the engine forward on
something measurable. Compiled from the per-release validation
memos and the v1.9.10 stratified-corpus aggregate. Numbers come
from the named source; this table is summary, not new measurement.

## Per-release validation milestones

| Release | Headline measurement | Source |
|---|---|---|
| v1.6 | Hardened-target signal recovery design baseline. Pre-Bayesian; deterministic rule-based fusion + chain-motif library. | `correlation.md` §3, §4.3 |
| v1.7.0 | Cert-side signal layer shipped: wildcard SAN sibling clusters, temporal CT issuance bursts, CNAME chain motifs, cross-source evidence conflicts. Always-emitted; no flag gating. | `CHANGELOG.md` v1.7.0 |
| v1.8.0 | Graph correlation layer shipped: Louvain community detection over CT co-occurrence graph (modularity score reported), per-batch hypergraph ecosystem view (`--include-ecosystem`), vertical-baseline anomaly rules on profiles. | `CHANGELOG.md` v1.8.0 |
| v1.9.0 | Probabilistic Bayesian network shipped behind `--fusion`. 9 nodes, exact variable-elimination inference, 80% credible intervals over high-level claims, n_eff-based interval width tied to evidence sparsity. | `validation/v1.9-validation-summary.md` |
| v1.9.3 | Topology surgery: `email_security_strong` split into `_modern_provider` + `_policy_enforcing` (52.6% spot-check agreement was a definitional gap, not miscalibration). Expanded `federated_identity` parents. | `validation/v1.9.3-calibration.md` |
| v1.9.4 | Hardened-adversarial validation across 50-domain stratified corpus (5 hardening postures). 100% spot-check agreement, 64.0% sparse-flag rate, asymmetric-likelihood design property validated. Failure-mode catalog in `correlation.md` §4.8.10. A/AAAA internal-DNS leak fixed in CNAME chain walker. | `validation/v1.9.4-calibration.md` |
| v1.9.5 | Per-node stability dispositions: criterion (a) evidence-response correctness + criterion (b) Brier/log-score/ECE + criterion (c) N≥10 independent firings. 8 of 9 nodes `stable`; `okta_idp` `not yet` (criterion (c), 7 firings on the v1.9.0 corpus). Parametric regression test pins criterion (a) for every node. | `validation/v1.9.5-stability.md` |
| v1.9.6 | CPT-change discipline (concept first, then parameters): `dkim_present` removed as binding for `email_security_policy_enforcing` after re-examining the definitional question rather than tuning the CPT. `okta_idp` carried over; v1.9.5 `not yet` disposition unchanged. | `validation/v1.9.6-stability-update.md` |
| v1.9.7 | Metadata-coverage gate flipped from advisory percentage to presence-enforcing. 298-detection backfill brought every detection in every category to a non-empty `description` field. CI / pre-commit gate runs the check on every PR. | `CHANGELOG.md` v1.9.7 |
| v1.9.8 | Catalog metadata richness pass. Every detection in every category satisfies the three-signal richness audit (`--report-richness`): description length ≥ 80 chars, scope-narrowing language, canonical vendor `reference` URL. Inline weight rationale on every non-default detection weight. | `validation/v1.9.8-metadata-audit.md` |
| v1.9.9 | Detection-gap UX surfaces: passive-DNS ceiling phrasing, apex-level multi-cloud rollup, wordlist breadth across data/AI/ops/security tiers. 182 new tests across 23 files (catalog-driven Hypothesis + boundary + mutation resistance + render-determinism + adversarial-input fuzz). MCP fallback shadow-load attack on Python 3.10 fully closed. | `validation/v1.9.9-detection-gap-ux.md`, `validation/v1.9.9-corpus-run.md` |
| v1.9.10 | Stratified-corpus pre-lock validation: 60 stratum-tagged synthetic fixtures across 6 cloud strata (GCP, Azure non-O365, Oracle, Alibaba, PaaS, SSE) + 19 base = 79 fixtures total. Per-stratum aggregator. Bayesian network re-validated against the v1.9.9 evidence-distribution shift; v1.9.6 disposition table holds. Cosmic-ray sweep slipped to v2.0 lock. | `validation/v1.9.10-pre-lock.md`, `validation/v1.9.10-bayesian-revalidation.md` |
| v1.9.10.1 | Docs-only patch: GitHub render errors in correlation.md (Mermaid + MathJax) fixed. | `CHANGELOG.md` v1.9.10.1 |
| v1.9.11 | Documentation polish dry-run + v2.0 prep: EXPERIMENTAL labels stripped from user-facing surfaces (CI gate enforces zero), migration guide populated, schema-disposition test green (ecosystem_hyperedges batch-wrapper added to schema), `okta_idp` keep-with-caveat decision, real-corpus runbook + result-shell, trend table (this file). | `CHANGELOG.md` v1.9.11 |

## Per-Bayesian-node trend (synthetic corpus, v1.9.0 → v1.9.10)

The numbers below come from the v1.9.5 stability table
(`validation/v1.9.5-stability.md`) plus the v1.9.10 synthetic
corpus aggregator output
(`validation/synthetic_corpus/aggregate.json`). The v1.9.0
spot-check rates are at-introduction; the v1.9.10 synthetic
counts are firing-on-corpus counts across the 79-fixture set.
The real-corpus run gated by v2.0 produces the
truth-of-record numbers; see `validation/v2.0-corpus-run.md`.

| Node | v1.9.0 spot-check | v1.9.5 stability | v1.9.10 synthetic firings | v2.0 disposition |
|---|---|---|---|---|
| `m365_tenant` | 100% | stable | per-fixture firings track input slugs | stable |
| `google_workspace_tenant` | 100% | stable | per-fixture firings track input slugs | stable |
| `federated_identity` | 100% | stable | parent posteriors flow correctly | stable |
| `okta_idp` | n/a (parent-only at v1.9.0) | not yet (7 firings, < N≥10) | ≥ 8 firings across GCP/Azure/Oracle/SSE strata | stable (with corpus-exposure caveat in YAML) |
| `email_security_modern_provider` | 100% (after v1.9.3 split) | stable | tracks M365 / GWS / gateway slugs | stable |
| `email_security_policy_enforcing` | 100% (after v1.9.3 split) | stable (v1.9.6 binding fix) | tracks DMARC / SPF / MTA-STS signals | stable |
| `email_gateway_present` | 100% | stable | tracks Proofpoint / Mimecast / Barracuda slugs | stable |
| `cdn_fronting` | 100% | stable | fires on Cloudflare / CloudFront / Fastly / Akamai | stable |
| `aws_hosting` | 100% | stable | fires on AWS-family slugs | stable |

## Reading

The engine got progressively more validated, not progressively
more featureful. v1.7 added structural signal extraction; v1.8
added the graph layer; v1.9.0 added probabilistic inference; the
v1.9.3 → v1.9.11 patches did calibration, stability, and audit
work without changing the inference model. v2.0 locks the result.

The real measurement-of-record for the per-node firings is the
maintainer's private-corpus run gated by v2.0
(`validation/v2.0-corpus-run.md`). Synthetic numbers above
demonstrate the trend is in the right direction; real numbers
are the v2.0 ship gate.

## Honest framing

This trend table does NOT claim recon's outputs got more accurate
in a ground-truth sense. recon is passive and zero-credential;
ground-truth comparison is not part of the operating model. What
the table claims is that the engine accumulated falsifiable
validation evidence at each release, and the v2.0 schema lock
reflects what survived the validation gates.

A v2.0 reviewer should be able to walk through this table,
cross-check each row against its named source, and confirm the
work documented there matches the schema being locked.
