Mint/Burn Flow Changelog: v6 archive
Historical release evidence. Return to current versions and the complete history index.
What this controls
Mint/Burn Flow Changelog: v6 archive version history
Use this changelog to trace how Pharos changed the related scoring, data-source, threshold, or interpretation rules over time. Entries record the contract active at each release; archived rules are retained so historical charts and citations can be read against the rules active at the time.
Primary references
Latest version
Literal minting pressure needs fully valued volumes
The literal 24-hour minting-pressure reading (mint versus burn volume balance) is now published only when both sides of the window are fully valued. When either side has unpriced or unrecorded events it renders NR with a machine-readable reason instead of a balance computed from lower-bound volumes.
Impact snapshot
- A known-valuation subtotal is a lower bound, and a ratio of two lower bounds bounds nothing: a day with unpriced burns could read Balanced while the true balance was burn-dominated. getLiteralMintingPressureReading() now returns NR with valuation-partial or valuation-unknown when either side is not complete, and no-24h-volume when nothing was counted. Stablecoin detail pages show the reason instead of a dial; the aggregate /flows page no longer renders the literal gauge and leads with the Bank Run Gauge
- The aggregate API adds an optional per-coin gaugeWeightUsd: the observed tracked-chain supply weight the Bank Run Gauge applies to that coin, null when the weight is unavailable (excluded, not zeroed). A coin moves the score only when its pressureShiftScore is non-null. Additive; pressure formulas, valuation gates, gauge weighting, bands and flight-to-quality are unchanged
- Activation is 2026-10-19 00:00 UTC (1792368000), the release cut.
v6.27Oct 19, 2026Literal minting pressure needs fully valued volumes
The literal 24-hour minting-pressure reading (mint versus burn volume balance) is now published only when both sides of the window are fully valued. When either side has unpriced or unrecorded events it renders NR with a machine-readable reason instead of a balance computed from lower-bound volumes.
- A known-valuation subtotal is a lower bound, and a ratio of two lower bounds bounds nothing: a day with unpriced burns could read Balanced while the true balance was burn-dominated. getLiteralMintingPressureReading() now returns NR with valuation-partial or valuation-unknown when either side is not complete, and no-24h-volume when nothing was counted. Stablecoin detail pages show the reason instead of a dial; the aggregate /flows page no longer renders the literal gauge and leads with the Bank Run Gauge
- The aggregate API adds an optional per-coin gaugeWeightUsd: the observed tracked-chain supply weight the Bank Run Gauge applies to that coin, null when the weight is unavailable (excluded, not zeroed). A coin moves the score only when its pressureShiftScore is non-null. Additive; pressure formulas, valuation gates, gauge weighting, bands and flight-to-quality are unchanged
- Activation is 2026-10-19 00:00 UTC (1792368000), the release cut.
DetailsHide details
Literal minting pressure needs fully valued volumes
The literal 24-hour minting-pressure reading (mint versus burn volume balance) is now published only when both sides of the window are fully valued. When either side has unpriced or unrecorded events it renders NR with a machine-readable reason instead of a balance computed from lower-bound volumes.
- A known-valuation subtotal is a lower bound, and a ratio of two lower bounds bounds nothing: a day with unpriced burns could read Balanced while the true balance was burn-dominated. getLiteralMintingPressureReading() now returns NR with valuation-partial or valuation-unknown when either side is not complete, and no-24h-volume when nothing was counted. Stablecoin detail pages show the reason instead of a dial; the aggregate /flows page no longer renders the literal gauge and leads with the Bank Run Gauge
- The aggregate API adds an optional per-coin gaugeWeightUsd: the observed tracked-chain supply weight the Bank Run Gauge applies to that coin, null when the weight is unavailable (excluded, not zeroed). A coin moves the score only when its pressureShiftScore is non-null. Additive; pressure formulas, valuation gates, gauge weighting, bands and flight-to-quality are unchanged
- Activation is 2026-10-19 00:00 UTC (1792368000), the release cut.
Impact notes
- A known-valuation subtotal is a lower bound, and a ratio of two lower bounds bounds nothing: a day with unpriced burns could read Balanced while the true balance was burn-dominated. getLiteralMintingPressureReading() now returns NR with valuation-partial or valuation-unknown when either side is not complete, and no-24h-volume when nothing was counted. Stablecoin detail pages show the reason instead of a dial; the aggregate /flows page no longer renders the literal gauge and leads with the Bank Run Gauge
- The aggregate API adds an optional per-coin gaugeWeightUsd: the observed tracked-chain supply weight the Bank Run Gauge applies to that coin, null when the weight is unavailable (excluded, not zeroed). A coin moves the score only when its pressureShiftScore is non-null. Additive; pressure formulas, valuation gates, gauge weighting, bands and flight-to-quality are unchanged
- Activation is 2026-10-19 00:00 UTC (1792368000), the release cut.
v6.26Oct 15, 2026Reviewed Ethereum issuance coverage for BRSRV, CHFSAFO and GLDon
BRSRV, CHFSAFO and GLDon join the extended Ethereum mint/burn lane through reviewed contract identities and start blocks. Flow formulas and aggregate weighting are unchanged.
- BRSRV begins at Ethereum block 25,590,451 and CHFSAFO at block 24,540,949, each using the existing zero-address Transfer decoder and a 10,000-token dust threshold. CHFSAFO coverage is its Ethereum register only, not its other native chains.
- GLDon begins at Ethereum block 23,984,676 with a 10-token threshold and its reviewed LayerZero OFT adapter binding. Existing bridge classification separates matched bridge transfers from economic issuance; other GLDon chains remain outside this flow configuration.
- The bump records the admitted issuance-source cohort, following earlier native-flow coverage releases. Pressure formulas, closed-hour windows, event-time valuation, bridge classifier logic and Bank Run Gauge weighting are unchanged.
- Configured start blocks do not prove completed historical scans. Backfill, coverage maturity and fresh producer observations remain necessary; no historical completeness, production flow or gauge movement is claimed.
DetailsHide details
Reviewed Ethereum issuance coverage for BRSRV, CHFSAFO and GLDon
BRSRV, CHFSAFO and GLDon join the extended Ethereum mint/burn lane through reviewed contract identities and start blocks. Flow formulas and aggregate weighting are unchanged.
- BRSRV begins at Ethereum block 25,590,451 and CHFSAFO at block 24,540,949, each using the existing zero-address Transfer decoder and a 10,000-token dust threshold. CHFSAFO coverage is its Ethereum register only, not its other native chains.
- GLDon begins at Ethereum block 23,984,676 with a 10-token threshold and its reviewed LayerZero OFT adapter binding. Existing bridge classification separates matched bridge transfers from economic issuance; other GLDon chains remain outside this flow configuration.
- The bump records the admitted issuance-source cohort, following earlier native-flow coverage releases. Pressure formulas, closed-hour windows, event-time valuation, bridge classifier logic and Bank Run Gauge weighting are unchanged.
- Configured start blocks do not prove completed historical scans. Backfill, coverage maturity and fresh producer observations remain necessary; no historical completeness, production flow or gauge movement is claimed.
Impact notes
- BRSRV begins at Ethereum block 25,590,451 and CHFSAFO at block 24,540,949, each using the existing zero-address Transfer decoder and a 10,000-token dust threshold. CHFSAFO coverage is its Ethereum register only, not its other native chains.
- GLDon begins at Ethereum block 23,984,676 with a 10-token threshold and its reviewed LayerZero OFT adapter binding. Existing bridge classification separates matched bridge transfers from economic issuance; other GLDon chains remain outside this flow configuration.
- The bump records the admitted issuance-source cohort, following earlier native-flow coverage releases. Pressure formulas, closed-hour windows, event-time valuation, bridge classifier logic and Bank Run Gauge weighting are unchanged.
- Configured start blocks do not prove completed historical scans. Backfill, coverage maturity and fresh producer observations remain necessary; no historical completeness, production flow or gauge movement is claimed.
- Activation is provisionally 2026-10-16 00:00 UTC (1792108800); re-date effectiveAt at release.
v6.25Oct 11, 2026One-sided bounds on partially valued nets
When unpriced events sit on only one side of a window, the flow tracker now shows the proven bound on the signed net (≥ when only mints are unpriced, ≤ when only burns are) instead of a bare NR, and the aggregate 24-hour direction is proven from every coin's known subtotals.
- Unpriced mints can only raise the true net and unpriced burns can only lower it. When exactly one side of a window is partial, the known-valuation net is therefore a proven floor or ceiling. Per-coin 24h nets derive it from the published subtotals; the API adds additive valuation.netFlow7dBound, netFlow30dBound and netFlow90dBound ({ kind: lower | upper, valueUsd }, null when none is proven) beside the still-null signed nets
- Pages render a bounded net as an explicit ≥ or ≤ value with the unpriced counts in its accessible reason, never as the net itself; sorts, leaders, chart bars and cumulative lines still exclude it. Client-side sums keep a bound only when every withheld component is bounded on the same side and no component is coverage-unknown; unpriced events on both sides still render NR
- The aggregate 24h overview direction now adds a partial coin's known subtotals to the proven range instead of discarding the whole range, so one unpriced mint no longer hides a net minting day that missing valuation cannot reverse. Pressure, gauge weighting, flight-to-quality and event-time pricing are unchanged. Activation is provisionally 2026-10-12 00:00 UTC (1791763200); re-date effectiveAt at release
DetailsHide details
One-sided bounds on partially valued nets
When unpriced events sit on only one side of a window, the flow tracker now shows the proven bound on the signed net (≥ when only mints are unpriced, ≤ when only burns are) instead of a bare NR, and the aggregate 24-hour direction is proven from every coin's known subtotals.
- Unpriced mints can only raise the true net and unpriced burns can only lower it. When exactly one side of a window is partial, the known-valuation net is therefore a proven floor or ceiling. Per-coin 24h nets derive it from the published subtotals; the API adds additive valuation.netFlow7dBound, netFlow30dBound and netFlow90dBound ({ kind: lower | upper, valueUsd }, null when none is proven) beside the still-null signed nets
- Pages render a bounded net as an explicit ≥ or ≤ value with the unpriced counts in its accessible reason, never as the net itself; sorts, leaders, chart bars and cumulative lines still exclude it. Client-side sums keep a bound only when every withheld component is bounded on the same side and no component is coverage-unknown; unpriced events on both sides still render NR
- The aggregate 24h overview direction now adds a partial coin's known subtotals to the proven range instead of discarding the whole range, so one unpriced mint no longer hides a net minting day that missing valuation cannot reverse. Pressure, gauge weighting, flight-to-quality and event-time pricing are unchanged. Activation is provisionally 2026-10-12 00:00 UTC (1791763200); re-date effectiveAt at release
Impact notes
- Unpriced mints can only raise the true net and unpriced burns can only lower it. When exactly one side of a window is partial, the known-valuation net is therefore a proven floor or ceiling. Per-coin 24h nets derive it from the published subtotals; the API adds additive valuation.netFlow7dBound, netFlow30dBound and netFlow90dBound ({ kind: lower | upper, valueUsd }, null when none is proven) beside the still-null signed nets
- Pages render a bounded net as an explicit ≥ or ≤ value with the unpriced counts in its accessible reason, never as the net itself; sorts, leaders, chart bars and cumulative lines still exclude it. Client-side sums keep a bound only when every withheld component is bounded on the same side and no component is coverage-unknown; unpriced events on both sides still render NR
- The aggregate 24h overview direction now adds a partial coin's known subtotals to the proven range instead of discarding the whole range, so one unpriced mint no longer hides a net minting day that missing valuation cannot reverse. Pressure, gauge weighting, flight-to-quality and event-time pricing are unchanged. Activation is provisionally 2026-10-12 00:00 UTC (1791763200); re-date effectiveAt at release
v6.24Oct 10, 2026Closed-hour flow windows and complete repair evidence
Flow windows now consistently cover closed UTC hours, excluding the current partial hour without losing the oldest hour's valuation debt. Verified CCTP V2 destination mints no longer count as issuance, and retention and historical pricing preserve the complete evidence needed to rebuild hourly totals.
- An N-hour window is [end − N hours, end), where end is the current UTC hour boundary. Aggregate and per-coin totals, pressure, largest events and 7/30/90-day nets share that boundary. Responses publish exact boundaries and closed-utc-hours semantics; the open hour is excluded and the oldest included hour retains its unpriced events
- CCTP V2 destination recognition requires matching reviewed MessageTransmitterV2 and TokenMessengerV2 logs plus this token's recipient Transfer. Only receipt-log-matched recipient and nonzero-fee mints are excluded as bridge transfers; unrelated economic flow in the same transaction stays counted. Source-side detection is unchanged
- Historical supply snapshots qualify only through a valid actual price observation clock, peg plausibility and the existing inclusive ±24-hour event-distance bound. Snapshot day labels cannot manufacture clocks, and inadmissible snapshots do not suppress event-day provider fallback. Already-valued events are not overwritten
- Whole-hour retention keeps priced siblings whenever any sibling still needs valuation or aggregation, or a matching active enabled scan frontier has not covered its block. Cursor advancement follows successful hourly materialization, and duplicate replay rebuilds affected hours without double-counting. Inactive and disabled configurations do not indefinitely hold retention
DetailsHide details
Closed-hour flow windows and complete repair evidence
Flow windows now consistently cover closed UTC hours, excluding the current partial hour without losing the oldest hour's valuation debt. Verified CCTP V2 destination mints no longer count as issuance, and retention and historical pricing preserve the complete evidence needed to rebuild hourly totals.
- An N-hour window is [end − N hours, end), where end is the current UTC hour boundary. Aggregate and per-coin totals, pressure, largest events and 7/30/90-day nets share that boundary. Responses publish exact boundaries and closed-utc-hours semantics; the open hour is excluded and the oldest included hour retains its unpriced events
- CCTP V2 destination recognition requires matching reviewed MessageTransmitterV2 and TokenMessengerV2 logs plus this token's recipient Transfer. Only receipt-log-matched recipient and nonzero-fee mints are excluded as bridge transfers; unrelated economic flow in the same transaction stays counted. Source-side detection is unchanged
- Historical supply snapshots qualify only through a valid actual price observation clock, peg plausibility and the existing inclusive ±24-hour event-distance bound. Snapshot day labels cannot manufacture clocks, and inadmissible snapshots do not suppress event-day provider fallback. Already-valued events are not overwritten
- Whole-hour retention keeps priced siblings whenever any sibling still needs valuation or aggregation, or a matching active enabled scan frontier has not covered its block. Cursor advancement follows successful hourly materialization, and duplicate replay rebuilds affected hours without double-counting. Inactive and disabled configurations do not indefinitely hold retention
Impact notes
- An N-hour window is [end − N hours, end), where end is the current UTC hour boundary. Aggregate and per-coin totals, pressure, largest events and 7/30/90-day nets share that boundary. Responses publish exact boundaries and closed-utc-hours semantics; the open hour is excluded and the oldest included hour retains its unpriced events
- CCTP V2 destination recognition requires matching reviewed MessageTransmitterV2 and TokenMessengerV2 logs plus this token's recipient Transfer. Only receipt-log-matched recipient and nonzero-fee mints are excluded as bridge transfers; unrelated economic flow in the same transaction stays counted. Source-side detection is unchanged
- Historical supply snapshots qualify only through a valid actual price observation clock, peg plausibility and the existing inclusive ±24-hour event-distance bound. Snapshot day labels cannot manufacture clocks, and inadmissible snapshots do not suppress event-day provider fallback. Already-valued events are not overwritten
- Whole-hour retention keeps priced siblings whenever any sibling still needs valuation or aggregation, or a matching active enabled scan frontier has not covered its block. Cursor advancement follows successful hourly materialization, and duplicate replay rebuilds affected hours without double-counting. Inactive and disabled configurations do not indefinitely hold retention
- Cached block timestamps bind to the scanned block hash; mismatched or mixed-fork evidence is withheld. Public overview direction follows the producer's proven-direction semantics, so unknown or partial valuation cannot become an unsupported minting or burning claim
- Pressure formulas, activity thresholds and Bank Run Gauge weighting are unchanged. Previously pruned evidence is not reconstructed, previously overadvanced cursors are not automatically rewound, and stored destination classifications change only when those events are replayed. Activation is provisionally 2026-10-11 00:00 UTC (1791676800); re-date effectiveAt at release
- e4cdae2dc
- 004d75e50
v6.23Sep 28, 2026Event-time pricing and published valuation gating
A mint or burn is valued only with a price observed within 24 hours of the event, and the public flow API stops publishing nets, directions, pressure and flight-to-quality that missing valuation could change.
- Ingestion and the automatic 48-hour heal share one admission rule: a price counts only when its actual recorded observation time is within ±24 hours of the event (boundaries inclusive) and it passes the peg-plausibility check. Two sources qualify. The daily supply snapshot now records the price's observation time and never stores a nominal par reference; its price counts only through that recorded time, never through the snapshot's day label, so snapshots written before this release (no recorded time) no longer value events. A cached price must also come from a replay-safe source and be an actual observation rather than a nominal par reference; legacy protocol-redeem rows of nominal-par routes are par, not observations, and never count. When both sources qualify, the observation closest to the event wins. The current price is never applied to an old event, and the stored price timestamp is the evidence's observation time, not the run time. Events without admissible evidence stay unpriced and mark their hour partial; heal skips coins with no admissible evidence so their rows cannot crowd out healable ones.
- Consequence: assets whose published price is observed less than daily, such as NAV tokens over weekends and holidays, can have events stay unpriced and their hours partial whenever the latest observation is more than 24 hours from the event. Nominal-par assets stay unpriced unless an observed market price exists.
- Per coin, chain, hourly bucket and per-coin window, a signed net with partial valuation is published as null; gross mint and burn volumes remain known subtotals and lower bounds. Direction is published only when missing valuation cannot change it, so an unpriced mint beside a priced burn yields no direction rather than an outflow, and flat requires complete valuation. Flight-to-quality is null unless exact or provably inactive.
- Pressure shift needs a complete 24h window and a baseline that is not partial. A weighted coin whose pressure is withheld for that reason (a coin with under seven days of baseline history is not counted, since it has no pressure either way) leaves the Bank Run Gauge, which re-weights over the scored coins; the gauge discloses those coins in partialValuationInputs, their weight in partialValuationMcapUsd and the scored weight in scoredMcapUsd. The daily digest withholds the gauge only when that withheld weight could move the score across a band edge, whatever the withheld coins' true pressure. Stablecoin preview cards show a partial seven-day window as a gross lower bound, never a signed net, and draw no price line for a coin published as a nominal reference.
DetailsHide details
Event-time pricing and published valuation gating
A mint or burn is valued only with a price observed within 24 hours of the event, and the public flow API stops publishing nets, directions, pressure and flight-to-quality that missing valuation could change.
- Ingestion and the automatic 48-hour heal share one admission rule: a price counts only when its actual recorded observation time is within ±24 hours of the event (boundaries inclusive) and it passes the peg-plausibility check. Two sources qualify. The daily supply snapshot now records the price's observation time and never stores a nominal par reference; its price counts only through that recorded time, never through the snapshot's day label, so snapshots written before this release (no recorded time) no longer value events. A cached price must also come from a replay-safe source and be an actual observation rather than a nominal par reference; legacy protocol-redeem rows of nominal-par routes are par, not observations, and never count. When both sources qualify, the observation closest to the event wins. The current price is never applied to an old event, and the stored price timestamp is the evidence's observation time, not the run time. Events without admissible evidence stay unpriced and mark their hour partial; heal skips coins with no admissible evidence so their rows cannot crowd out healable ones.
- Consequence: assets whose published price is observed less than daily, such as NAV tokens over weekends and holidays, can have events stay unpriced and their hours partial whenever the latest observation is more than 24 hours from the event. Nominal-par assets stay unpriced unless an observed market price exists.
- Per coin, chain, hourly bucket and per-coin window, a signed net with partial valuation is published as null; gross mint and burn volumes remain known subtotals and lower bounds. Direction is published only when missing valuation cannot change it, so an unpriced mint beside a priced burn yields no direction rather than an outflow, and flat requires complete valuation. Flight-to-quality is null unless exact or provably inactive.
- Pressure shift needs a complete 24h window and a baseline that is not partial. A weighted coin whose pressure is withheld for that reason (a coin with under seven days of baseline history is not counted, since it has no pressure either way) leaves the Bank Run Gauge, which re-weights over the scored coins; the gauge discloses those coins in partialValuationInputs, their weight in partialValuationMcapUsd and the scored weight in scoredMcapUsd. The daily digest withholds the gauge only when that withheld weight could move the score across a band edge, whatever the withheld coins' true pressure. Stablecoin preview cards show a partial seven-day window as a gross lower bound, never a signed net, and draw no price line for a coin published as a nominal reference.
Impact notes
- Ingestion and the automatic 48-hour heal share one admission rule: a price counts only when its actual recorded observation time is within ±24 hours of the event (boundaries inclusive) and it passes the peg-plausibility check. Two sources qualify. The daily supply snapshot now records the price's observation time and never stores a nominal par reference; its price counts only through that recorded time, never through the snapshot's day label, so snapshots written before this release (no recorded time) no longer value events. A cached price must also come from a replay-safe source and be an actual observation rather than a nominal par reference; legacy protocol-redeem rows of nominal-par routes are par, not observations, and never count. When both sources qualify, the observation closest to the event wins. The current price is never applied to an old event, and the stored price timestamp is the evidence's observation time, not the run time. Events without admissible evidence stay unpriced and mark their hour partial; heal skips coins with no admissible evidence so their rows cannot crowd out healable ones.
- Consequence: assets whose published price is observed less than daily, such as NAV tokens over weekends and holidays, can have events stay unpriced and their hours partial whenever the latest observation is more than 24 hours from the event. Nominal-par assets stay unpriced unless an observed market price exists.
- Per coin, chain, hourly bucket and per-coin window, a signed net with partial valuation is published as null; gross mint and burn volumes remain known subtotals and lower bounds. Direction is published only when missing valuation cannot change it, so an unpriced mint beside a priced burn yields no direction rather than an outflow, and flat requires complete valuation. Flight-to-quality is null unless exact or provably inactive.
- Pressure shift needs a complete 24h window and a baseline that is not partial. A weighted coin whose pressure is withheld for that reason (a coin with under seven days of baseline history is not counted, since it has no pressure either way) leaves the Bank Run Gauge, which re-weights over the scored coins; the gauge discloses those coins in partialValuationInputs, their weight in partialValuationMcapUsd and the scored weight in scoredMcapUsd. The daily digest withholds the gauge only when that withheld weight could move the score across a band edge, whatever the withheld coins' true pressure. Stablecoin preview cards show a partial seven-day window as a gross lower bound, never a signed net, and draw no price line for a coin published as a nominal reference.
- Transition: hourly buckets aggregated before v6.22 read as unknown. Buckets inside the eight-day raw-event window are rebuilt; older ones cannot be and keep their old-method nets, labelled unknown, until they age out of the 30-day baseline and the 7/30/90-day net windows (about 90 days). An unknown baseline is accepted for pressure during that window; an unknown 24h window is not.
v6.22Sep 27, 2026Recorded valuation completeness
Hourly flow buckets record how many counted mints and burns lack a USD valuation beside the known dollar subtotals, and internal flow consumers stop drawing conclusions that missing valuation could change.
- An unpriced event is counted as unpriced, never as zero dollars. Known mint and burn totals are lower bounds while events stay unpriced; a signed net built from them is not a bound in either direction.
- The flow API publishes a valuation block per coin, chain, hourly bucket and per-coin window (complete, partial or unknown). Buckets aggregated before this release read as unknown until rebuilt from retained events or aged out.
- The DEWS flow signal is unavailable when the 24h window is not fully valued or its burn baseline is partial; DDR mint-surge evidence falls back to the supply proxy when missing valuation could flip it; the daily digest withholds pressure, chain nets, gauge and flight-to-quality claims that missing valuation could alter. Public net, direction, pressure and gauge values are unchanged in this release.
DetailsHide details
Recorded valuation completeness
Hourly flow buckets record how many counted mints and burns lack a USD valuation beside the known dollar subtotals, and internal flow consumers stop drawing conclusions that missing valuation could change.
- An unpriced event is counted as unpriced, never as zero dollars. Known mint and burn totals are lower bounds while events stay unpriced; a signed net built from them is not a bound in either direction.
- The flow API publishes a valuation block per coin, chain, hourly bucket and per-coin window (complete, partial or unknown). Buckets aggregated before this release read as unknown until rebuilt from retained events or aged out.
- The DEWS flow signal is unavailable when the 24h window is not fully valued or its burn baseline is partial; DDR mint-surge evidence falls back to the supply proxy when missing valuation could flip it; the daily digest withholds pressure, chain nets, gauge and flight-to-quality claims that missing valuation could alter. Public net, direction, pressure and gauge values are unchanged in this release.
Impact notes
- An unpriced event is counted as unpriced, never as zero dollars. Known mint and burn totals are lower bounds while events stay unpriced; a signed net built from them is not a bound in either direction.
- The flow API publishes a valuation block per coin, chain, hourly bucket and per-coin window (complete, partial or unknown). Buckets aggregated before this release read as unknown until rebuilt from retained events or aged out.
- The DEWS flow signal is unavailable when the 24h window is not fully valued or its burn baseline is partial; DDR mint-surge evidence falls back to the supply proxy when missing valuation could flip it; the daily digest withholds pressure, chain nets, gauge and flight-to-quality claims that missing valuation could alter. Public net, direction, pressure and gauge values are unchanged in this release.
v6.21Sep 27, 2026Reviewed protocol-internal flows
Individually reviewed events that move tokens inside an issuer's own balance sheet are tagged protocol_internal and leave counted flow, starting with USD.AI's September 23 sUSDai loan deployment.
- The September 23, 2026 burn of 128,895,244.1 USDai no longer counts as an economic burn: the sUSDai vault funded USD.AI's escrow-admin Safe with the exact amount, and the issuer's loan reserves rose by the same amount within the same half hour.
- Tagging is per event, pinned to transaction, log index and token amount. There is no address rule, because the reviewed burn used the same hub withdrawal path an ordinary redemption uses; four earlier Safe burns and four repayment re-deposit mints stay counted until each has matching evidence.
- Tagged rows remain visible in the event ledger with a Protocol-internal label but leave hourly buckets, net flow, pressure shift, the Bank Run Gauge and large-flow Tape projection.
DetailsHide details
Reviewed protocol-internal flows
Individually reviewed events that move tokens inside an issuer's own balance sheet are tagged protocol_internal and leave counted flow, starting with USD.AI's September 23 sUSDai loan deployment.
- The September 23, 2026 burn of 128,895,244.1 USDai no longer counts as an economic burn: the sUSDai vault funded USD.AI's escrow-admin Safe with the exact amount, and the issuer's loan reserves rose by the same amount within the same half hour.
- Tagging is per event, pinned to transaction, log index and token amount. There is no address rule, because the reviewed burn used the same hub withdrawal path an ordinary redemption uses; four earlier Safe burns and four repayment re-deposit mints stay counted until each has matching evidence.
- Tagged rows remain visible in the event ledger with a Protocol-internal label but leave hourly buckets, net flow, pressure shift, the Bank Run Gauge and large-flow Tape projection.
Impact notes
- The September 23, 2026 burn of 128,895,244.1 USDai no longer counts as an economic burn: the sUSDai vault funded USD.AI's escrow-admin Safe with the exact amount, and the issuer's loan reserves rose by the same amount within the same half hour.
- Tagging is per event, pinned to transaction, log index and token amount. There is no address rule, because the reviewed burn used the same hub withdrawal path an ordinary redemption uses; four earlier Safe burns and four repayment re-deposit mints stay counted until each has matching evidence.
- Tagged rows remain visible in the event ledger with a Protocol-internal label but leave hourly buckets, net flow, pressure shift, the Bank Run Gauge and large-flow Tape projection.
v6.2Sep 14, 2026Complete BUIDL Ethereum contract coverage
BUIDL flow tracking includes both registered Ethereum share-class tokens, matching the contract set used by upstream Ethereum supply.
- The second BUIDL contract joins the extended lane with its own scan cursor; coverage remains incomplete until that contract catches up.
- Both contracts retain the existing six-decimal parsing, 10,000-token threshold, zero-address Transfer detection and default coverage floor.
- Operator reconciliation explains nine verified incompatible supply definitions as insufficient source, without changing public flow classification, scoring formulas or mismatch thresholds.
DetailsHide details
Complete BUIDL Ethereum contract coverage
BUIDL flow tracking includes both registered Ethereum share-class tokens, matching the contract set used by upstream Ethereum supply.
- The second BUIDL contract joins the extended lane with its own scan cursor; coverage remains incomplete until that contract catches up.
- Both contracts retain the existing six-decimal parsing, 10,000-token threshold, zero-address Transfer detection and default coverage floor.
- Operator reconciliation explains nine verified incompatible supply definitions as insufficient source, without changing public flow classification, scoring formulas or mismatch thresholds.
Impact notes
- The second BUIDL contract joins the extended lane with its own scan cursor; coverage remains incomplete until that contract catches up.
- Both contracts retain the existing six-decimal parsing, 10,000-token threshold, zero-address Transfer detection and default coverage floor.
- Operator reconciliation explains nine verified incompatible supply definitions as insufficient source, without changing public flow classification, scoring formulas or mismatch thresholds.
v6.191Aug 21, 2026Base Dollar native flow coverage
Base Dollar joins the extended mint/burn lane on its canonical Base deployment from the verified creation block, with a protocol-scale threshold that retains ordinary borrower issuance while filtering sub-economic interest-distribution churn.
- BD Transfer mints and burns are scanned from Base block 49,406,521, the verified CREATE2 deployment block for the canonical token.
- The 100 BD threshold sits below Base Dollar's 200 BD minimum debt and retains observed 300, 1,000, and 2,700 BD borrower mints that the generic 10,000-unit long-tail threshold would discard.
- Public flow coverage now includes canonical issuance chains on Ethereum, Arbitrum, and Base; scoring formulas, bridge classification, and Bank Run Gauge weighting are unchanged.
DetailsHide details
Base Dollar native flow coverage
Base Dollar joins the extended mint/burn lane on its canonical Base deployment from the verified creation block, with a protocol-scale threshold that retains ordinary borrower issuance while filtering sub-economic interest-distribution churn.
- BD Transfer mints and burns are scanned from Base block 49,406,521, the verified CREATE2 deployment block for the canonical token.
- The 100 BD threshold sits below Base Dollar's 200 BD minimum debt and retains observed 300, 1,000, and 2,700 BD borrower mints that the generic 10,000-unit long-tail threshold would discard.
- Public flow coverage now includes canonical issuance chains on Ethereum, Arbitrum, and Base; scoring formulas, bridge classification, and Bank Run Gauge weighting are unchanged.
Impact notes
- BD Transfer mints and burns are scanned from Base block 49,406,521, the verified CREATE2 deployment block for the canonical token.
- The 100 BD threshold sits below Base Dollar's 200 BD minimum debt and retains observed 300, 1,000, and 2,700 BD borrower mints that the generic 10,000-unit long-tail threshold would discard.
- Public flow coverage now includes canonical issuance chains on Ethereum, Arbitrum, and Base; scoring formulas, bridge classification, and Bank Run Gauge weighting are unchanged.
v6.19Aug 10, 2026Bank Run Gauge: one producer, one universe
The Bank Run Gauge is now computed once, by the /api/mint-burn-flows publication, and the daily digest re-bins that publication instead of recomputing a second composite from mint_burn_hourly over a narrower coin set with global peg-bucket supply weights.
- Previously the same trading day could carry two different gauge scores and bands: the API scored every active tracked mint/burn pair weighted by tracked-chain circulating supply, while the digest restricted to the core-aggregate set on canonical chains weighted by global supply
- Twenty tracked coins the digest silently excluded now contribute, and 92 coins deployed beyond their tracked mint/burn chains are weighted by observed tracked-chain supply rather than their global total; baseline derivation also unifies on observed-day averaging
- The publication carries a per-chain 24-hour net-flow breakdown over the same universe, so the digest's top-chains ranking is no longer derived independently
- Digest gauge values before this change are not comparable to values after it; the 7-day gauge trajectory and weekly recap range show a one-time discontinuity while the pre-cutover archive ages out
DetailsHide details
Bank Run Gauge: one producer, one universe
The Bank Run Gauge is now computed once, by the /api/mint-burn-flows publication, and the daily digest re-bins that publication instead of recomputing a second composite from mint_burn_hourly over a narrower coin set with global peg-bucket supply weights.
- Previously the same trading day could carry two different gauge scores and bands: the API scored every active tracked mint/burn pair weighted by tracked-chain circulating supply, while the digest restricted to the core-aggregate set on canonical chains weighted by global supply
- Twenty tracked coins the digest silently excluded now contribute, and 92 coins deployed beyond their tracked mint/burn chains are weighted by observed tracked-chain supply rather than their global total; baseline derivation also unifies on observed-day averaging
- The publication carries a per-chain 24-hour net-flow breakdown over the same universe, so the digest's top-chains ranking is no longer derived independently
- Digest gauge values before this change are not comparable to values after it; the 7-day gauge trajectory and weekly recap range show a one-time discontinuity while the pre-cutover archive ages out
Impact notes
- Previously the same trading day could carry two different gauge scores and bands: the API scored every active tracked mint/burn pair weighted by tracked-chain circulating supply, while the digest restricted to the core-aggregate set on canonical chains weighted by global supply
- Twenty tracked coins the digest silently excluded now contribute, and 92 coins deployed beyond their tracked mint/burn chains are weighted by observed tracked-chain supply rather than their global total; baseline derivation also unifies on observed-day averaging
- The publication carries a per-chain 24-hour net-flow breakdown over the same universe, so the digest's top-chains ranking is no longer derived independently
- Digest gauge values before this change are not comparable to values after it; the 7-day gauge trajectory and weekly recap range show a one-time discontinuity while the pre-cutover archive ages out
- Fail-closed: a gauge publication older than 24 hours (or unparseable) is dropped and the digest run marks degraded instead of republishing a wrong gauge; older than 2 hours is used but flagged
v6.18Jul 28, 2026Retention-safe quiet coverage maturity
Mint/burn coverage maturity now uses completed block-scan span when a quiet asset has no retained event row, preventing retention from sending fully observed configs back to bootstrapping.
- A quiet config with no retained hourly event remains full once its sync cursor proves at least 30 days of configured-chain history
- Genuinely young quiet configs still progress from bootstrapping to partial history before reaching full coverage
- XAUT now reports its mature, near-head Ethereum coverage instead of bootstrapping after its last hourly event aged beyond the 95-day aggregate retention window
DetailsHide details
Retention-safe quiet coverage maturity
Mint/burn coverage maturity now uses completed block-scan span when a quiet asset has no retained event row, preventing retention from sending fully observed configs back to bootstrapping.
- A quiet config with no retained hourly event remains full once its sync cursor proves at least 30 days of configured-chain history
- Genuinely young quiet configs still progress from bootstrapping to partial history before reaching full coverage
- XAUT now reports its mature, near-head Ethereum coverage instead of bootstrapping after its last hourly event aged beyond the 95-day aggregate retention window
Impact notes
- A quiet config with no retained hourly event remains full once its sync cursor proves at least 30 days of configured-chain history
- Genuinely young quiet configs still progress from bootstrapping to partial history before reaching full coverage
- XAUT now reports its mature, near-head Ethereum coverage instead of bootstrapping after its last hourly event aged beyond the 95-day aggregate retention window
v6.17Jun 7, 2026Tx-context shortfall exclusion recovery
Bridge-aware mint/burn ingestion now handles residual transaction-context shortfalls per row, excluding unresolved rows from economic flow while allowing resolved rows and the sync frontier to proceed.
- Rows with unavailable tx or receipt context are persisted as `flow_type='bridge_transfer'`, with unresolved burns marked `review_required` / `tx-context-unavailable`
- Resolved rows in the same bridge-aware config window are no longer withheld because of one unavailable transaction context
- Cron metadata continues to expose `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` as unavailable-context diagnostics rather than provider-error counts
DetailsHide details
Tx-context shortfall exclusion recovery
Bridge-aware mint/burn ingestion now handles residual transaction-context shortfalls per row, excluding unresolved rows from economic flow while allowing resolved rows and the sync frontier to proceed.
- Rows with unavailable tx or receipt context are persisted as `flow_type='bridge_transfer'`, with unresolved burns marked `review_required` / `tx-context-unavailable`
- Resolved rows in the same bridge-aware config window are no longer withheld because of one unavailable transaction context
- Cron metadata continues to expose `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` as unavailable-context diagnostics rather than provider-error counts
Impact notes
- Rows with unavailable tx or receipt context are persisted as `flow_type='bridge_transfer'`, with unresolved burns marked `review_required` / `tx-context-unavailable`
- Resolved rows in the same bridge-aware config window are no longer withheld because of one unavailable transaction context
- Cron metadata continues to expose `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` as unavailable-context diagnostics rather than provider-error counts
v6.16Jun 7, 2026Bridge context budget recovery
Bridge-aware critical mint/burn configs now resolve transaction and receipt context with one Alchemy batch request per transaction and have a bounded larger critical budget for high-volume configs.
- High-volume bridge-aware configs such as Ethereum USDC can catch up without repeatedly deferring all parsed rows under the old 60-request cap
- Bridge classification still fails closed for counted standard flow when transaction or receipt context is genuinely unavailable; unavailable rows remain excluded from economic-flow aggregates
- The cron-wide request ceiling remains 200, while bridge-aware critical configs may use up to 150 requests so other critical configs retain run headroom
DetailsHide details
Bridge context budget recovery
Bridge-aware critical mint/burn configs now resolve transaction and receipt context with one Alchemy batch request per transaction and have a bounded larger critical budget for high-volume configs.
- High-volume bridge-aware configs such as Ethereum USDC can catch up without repeatedly deferring all parsed rows under the old 60-request cap
- Bridge classification still fails closed for counted standard flow when transaction or receipt context is genuinely unavailable; unavailable rows remain excluded from economic-flow aggregates
- The cron-wide request ceiling remains 200, while bridge-aware critical configs may use up to 150 requests so other critical configs retain run headroom
Impact notes
- High-volume bridge-aware configs such as Ethereum USDC can catch up without repeatedly deferring all parsed rows under the old 60-request cap
- Bridge classification still fails closed for counted standard flow when transaction or receipt context is genuinely unavailable; unavailable rows remain excluded from economic-flow aggregates
- The cron-wide request ceiling remains 200, while bridge-aware critical configs may use up to 150 requests so other critical configs retain run headroom
v6.15Jun 6, 2026Bridge tx-context shortfall guard
Bridge-aware mint/burn ingestion now treats unresolved transaction context as a classification shortfall instead of publishing bridge candidates as standard flow.
- Rows from bridge-enabled configs are not persisted when tx or receipt context cannot be resolved, keeping unclassified bridge mints out of counted economic flow
- Affected configs remain unsatisfied and do not advance their sync frontier, allowing a later run to retry the same block range once RPC context is available
- Cron metadata exposes `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` so status diagnostics show classification gaps explicitly
DetailsHide details
Bridge tx-context shortfall guard
Bridge-aware mint/burn ingestion now treats unresolved transaction context as a classification shortfall instead of publishing bridge candidates as standard flow.
- Rows from bridge-enabled configs are not persisted when tx or receipt context cannot be resolved, keeping unclassified bridge mints out of counted economic flow
- Affected configs remain unsatisfied and do not advance their sync frontier, allowing a later run to retry the same block range once RPC context is available
- Cron metadata exposes `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` so status diagnostics show classification gaps explicitly
Impact notes
- Rows from bridge-enabled configs are not persisted when tx or receipt context cannot be resolved, keeping unclassified bridge mints out of counted economic flow
- Affected configs remain unsatisfied and do not advance their sync frontier, allowing a later run to retry the same block range once RPC context is available
- Cron metadata exposes `bridgeClassification.txContextShortfalls` and `bridgeClassification.deferredRows` so status diagnostics show classification gaps explicitly
v6.14Jun 6, 2026Bridge config validation fail-closed
Bridge-detection config validation now aborts module load on malformed addresses, topics, or selectors instead of logging and continuing with silently disabled bridge filtering.
- Malformed bridge metadata can no longer let CCIP, CCTP, or LayerZero bridge mints/burns leak into standard economic flow counts
- Mint/burn cron metadata now publishes `bridgeValidationErrors: 0` on healthy runs so the validation surface is explicit in status diagnostics
- Checked-in bridge configs are covered by a module-load validation regression test before deployment
DetailsHide details
Bridge config validation fail-closed
Bridge-detection config validation now aborts module load on malformed addresses, topics, or selectors instead of logging and continuing with silently disabled bridge filtering.
- Malformed bridge metadata can no longer let CCIP, CCTP, or LayerZero bridge mints/burns leak into standard economic flow counts
- Mint/burn cron metadata now publishes `bridgeValidationErrors: 0` on healthy runs so the validation surface is explicit in status diagnostics
- Checked-in bridge configs are covered by a module-load validation regression test before deployment
Impact notes
- Malformed bridge metadata can no longer let CCIP, CCTP, or LayerZero bridge mints/burns leak into standard economic flow counts
- Mint/burn cron metadata now publishes `bridgeValidationErrors: 0` on healthy runs so the validation surface is explicit in status diagnostics
- Checked-in bridge configs are covered by a module-load validation regression test before deployment
v6.13Jun 6, 2026USD-valued largest-event guard
The public 24-hour largest-event field now considers only rows with resolved USD valuation, preventing raw token amounts from being rendered as dollars.
- Aggregate `/api/mint-burn-flows` excludes `amount_usd IS NULL` rows from largest-event selection
- The shared largest-event selector ranks by `amount_usd` only and no longer falls back to raw native token amount
- Unpriced mint/burn rows remain available for remediation and event-ledger diagnostics, but they do not populate the USD largest-event table column
DetailsHide details
USD-valued largest-event guard
The public 24-hour largest-event field now considers only rows with resolved USD valuation, preventing raw token amounts from being rendered as dollars.
- Aggregate `/api/mint-burn-flows` excludes `amount_usd IS NULL` rows from largest-event selection
- The shared largest-event selector ranks by `amount_usd` only and no longer falls back to raw native token amount
- Unpriced mint/burn rows remain available for remediation and event-ledger diagnostics, but they do not populate the USD largest-event table column
Impact notes
- Aggregate `/api/mint-burn-flows` excludes `amount_usd IS NULL` rows from largest-event selection
- The shared largest-event selector ranks by `amount_usd` only and no longer falls back to raw native token amount
- Unpriced mint/burn rows remain available for remediation and event-ledger diagnostics, but they do not populate the USD largest-event table column
v6.12Jun 6, 2026Cadence-based coverage lag classification
Per-coin mint/burn coverage now marks established configs as lagging once block progress falls beyond the public freshness cadence, and reports unknown coverage when current chain-head metadata is unavailable.
- Ethereum mint/burn coverage no longer waits roughly 10,000 blocks before surfacing a stuck established config as lagging
- Coins with missing current chain-head metadata no longer continue to report full coverage solely from historical sync state
- The public flows table, coverage matrix, and flow receipt now expose an `unknown` coverage status for configured assets whose current lag cannot be trusted
DetailsHide details
Cadence-based coverage lag classification
Per-coin mint/burn coverage now marks established configs as lagging once block progress falls beyond the public freshness cadence, and reports unknown coverage when current chain-head metadata is unavailable.
- Ethereum mint/burn coverage no longer waits roughly 10,000 blocks before surfacing a stuck established config as lagging
- Coins with missing current chain-head metadata no longer continue to report full coverage solely from historical sync state
- The public flows table, coverage matrix, and flow receipt now expose an `unknown` coverage status for configured assets whose current lag cannot be trusted
Impact notes
- Ethereum mint/burn coverage no longer waits roughly 10,000 blocks before surfacing a stuck established config as lagging
- Coins with missing current chain-head metadata no longer continue to report full coverage solely from historical sync state
- The public flows table, coverage matrix, and flow receipt now expose an `unknown` coverage status for configured assets whose current lag cannot be trusted
v6.11May 12, 2026yBOLD extended transfer coverage
Yearn BOLD (yBOLD) now has extended Ethereum mint/burn tracking through standard ERC-20 zero-address Transfer events.
- Adds yBOLD to the extended mint/burn config registry using the shared Ethereum contract metadata
- Tracks yBOLD share issuance and redemption separately from base BOLD's mint/burn flow so wrapper activity does not disappear into the parent asset
- Keeps bridge detection unchanged because the tracked yBOLD deployment is the single Ethereum vault share token
DetailsHide details
yBOLD extended transfer coverage
Yearn BOLD (yBOLD) now has extended Ethereum mint/burn tracking through standard ERC-20 zero-address Transfer events.
- Adds yBOLD to the extended mint/burn config registry using the shared Ethereum contract metadata
- Tracks yBOLD share issuance and redemption separately from base BOLD's mint/burn flow so wrapper activity does not disappear into the parent asset
- Keeps bridge detection unchanged because the tracked yBOLD deployment is the single Ethereum vault share token
Impact notes
- Adds yBOLD to the extended mint/burn config registry using the shared Ethereum contract metadata
- Tracks yBOLD share issuance and redemption separately from base BOLD's mint/burn flow so wrapper activity does not disappear into the parent asset
- Keeps bridge detection unchanged because the tracked yBOLD deployment is the single Ethereum vault share token
v6.1May 8, 2026USG extended transfer coverage
Tangent USD (USG) now has extended Ethereum mint/burn tracking from its reviewed deployment block using standard ERC-20 zero-address Transfer events.
- Adds USG to the extended mint/burn config registry with a reviewed deployment-block start bound
- Captures the initial 40.02M USG zero-address mint history plus future USG supply changes through the standard Transfer decoder
- Keeps bridge and custom-event handling unchanged; no USG bridge classifier is configured because only the Ethereum token contract is currently tracked
DetailsHide details
USG extended transfer coverage
Tangent USD (USG) now has extended Ethereum mint/burn tracking from its reviewed deployment block using standard ERC-20 zero-address Transfer events.
- Adds USG to the extended mint/burn config registry with a reviewed deployment-block start bound
- Captures the initial 40.02M USG zero-address mint history plus future USG supply changes through the standard Transfer decoder
- Keeps bridge and custom-event handling unchanged; no USG bridge classifier is configured because only the Ethereum token contract is currently tracked
Impact notes
- Adds USG to the extended mint/burn config registry with a reviewed deployment-block start bound
- Captures the initial 40.02M USG zero-address mint history plus future USG supply changes through the standard Transfer decoder
- Keeps bridge and custom-event handling unchanged; no USG bridge classifier is configured because only the Ethereum token contract is currently tracked
v6.0Apr 17, 2026Bridge classifier parity, LayerZero endpoint-only signal, canonical-chain gauge weighting
Bridge classification now tags both mint and burn rows for CCIP/CCTP transactions, the LayerZero classifier recognizes endpoint-only fingerprints, and the Bank Run Gauge weights coins by their tracked-chain circulating supply rather than global supply. Atomic-roundtrip detection now requires mint/burn totals to match within 0.5%, and custom-event counterparty extraction supports unindexed address parameters.
- CCIP and CCTP bridge mints now tag as `flow_type='bridge_transfer'` (previously leaked into economic mint flow for USDC, EURC, USDO, USD1, avUSD, ZCHF)
- LayerZero classifier accepts endpoint-emitter signal alone, catching Executor-only mint patterns previously missed on USDai-Arbitrum
- Bank Run Gauge weights each coin's intensity by its circulating supply on tracked-chain scope only (e.g., USDC weighted by Ethereum supply, not global $36B+ total)
- Atomic-roundtrip detection requires sum(mint) and sum(burn) to match within 0.5%; partial same-tx mix is preserved as economic flow rather than erased
DetailsHide details
Bridge classifier parity, LayerZero endpoint-only signal, canonical-chain gauge weighting
Bridge classification now tags both mint and burn rows for CCIP/CCTP transactions, the LayerZero classifier recognizes endpoint-only fingerprints, and the Bank Run Gauge weights coins by their tracked-chain circulating supply rather than global supply. Atomic-roundtrip detection now requires mint/burn totals to match within 0.5%, and custom-event counterparty extraction supports unindexed address parameters.
- CCIP and CCTP bridge mints now tag as `flow_type='bridge_transfer'` (previously leaked into economic mint flow for USDC, EURC, USDO, USD1, avUSD, ZCHF)
- LayerZero classifier accepts endpoint-emitter signal alone, catching Executor-only mint patterns previously missed on USDai-Arbitrum
- Bank Run Gauge weights each coin's intensity by its circulating supply on tracked-chain scope only (e.g., USDC weighted by Ethereum supply, not global $36B+ total)
- Atomic-roundtrip detection requires sum(mint) and sum(burn) to match within 0.5%; partial same-tx mix is preserved as economic flow rather than erased
Impact notes
- CCIP and CCTP bridge mints now tag as `flow_type='bridge_transfer'` (previously leaked into economic mint flow for USDC, EURC, USDO, USD1, avUSD, ZCHF)
- LayerZero classifier accepts endpoint-emitter signal alone, catching Executor-only mint patterns previously missed on USDai-Arbitrum
- Bank Run Gauge weights each coin's intensity by its circulating supply on tracked-chain scope only (e.g., USDC weighted by Ethereum supply, not global $36B+ total)
- Atomic-roundtrip detection requires sum(mint) and sum(burn) to match within 0.5%; partial same-tx mix is preserved as economic flow rather than erased
- Custom-event counterparty extraction now supports unindexed address parameters (reUSD `Deposited` user address no longer null)
- Historical rows reclassified via `/api/backfill-mint-burn` replay and `/api/reclassify-atomic-roundtrips` after deploy