Methodology v1.6.1 · research reviewed 2026-08-12

Show the work.

This is the public specification of the cockpit: 9 gauges, 21 cross-domain indicators, 11 position rules and 14 tripwires. The tables are generated from the same registries the Worker executes, not copied into documentation.

Layer 3 Composite gauges

Every component is put on the same −100 restrictive to +100 supportive convention. A declared window is a target, not a claim that every observation exists: runtime coverage is reduced by effective ÷ declared whenever history is short. The score retains its declared weights. A vs_200d component first measures distance from the 200-day average, then normalises that distance over 500 observations.

Top-level regime blend

liquidity 28%cost of money 22%risk appetite 14%dollar pressure 13%growth pulse 13%resource security 10%

The weights total 100%. Thailand is a home-country lens, AI capex is a thematic lens, and sentiment is a divergence lens — positioning against price — so none of the three enters the blend. Stock–bond correlation is also standalone; adding any of them would change the meaning of the conditions × growth quadrants.

liquidity

Money in the system

conditions

Is cash flowing into markets or draining out of them?

InputWeightDirectionTransformWindow
net_usd_liquidity 50% higher supports z-score of the 13-week change 260 transformed observations
us.stress.sofr_iorb 25% higher restricts z-score of the level 1250 transformed observations
us.stress.nfci 25% higher restricts z-score of the level 260 transformed observations
Positive: money is being added faster than usual, which historically lifts most risk assets with a 1–2 month lag Negative: money is draining, which pressures valuations regardless of how good the underlying businesses are
cost_of_money

Cost of money

conditions

How expensive is it to borrow, after inflation?

InputWeightDirectionTransformWindow
us.rates.10y_real 50% higher restricts z-score of the level 1250 transformed observations
us.credit.ebp 30% higher restricts z-score of the level 60 transformed observations
us.rates.2s10s 20% higher supports z-score of the level 1250 transformed observations
Positive: capital is cheap relative to history — long-duration assets (growth equity, property, infrastructure) can breathe Negative: capital is expensive — the discount rate is doing the damage, not earnings
risk_appetite

Appetite for risk

conditions

How willing are investors to own risky things right now?

InputWeightDirectionTransformWindow
us.vix 35% higher restricts z-score of the level 1250 transformed observations
us.credit.ebp 35% higher restricts z-score of the level 60 transformed observations
us.equity.spx 30% higher supports distance from the 200-day moving average, then z-scored 200-day average; 500 transformed observations
Positive: markets are calm and leaning in — but read together with liquidity, since calm on draining liquidity is fragile Negative: investors are demanding compensation for risk, which usually shows up in credit before it shows up in equities
dollar_pressure

Dollar pressure

fx

Is the US dollar squeezing the rest of the world?

InputWeightDirectionTransformWindow
us.dollar.broad 50% higher restricts z-score of the level 1250 transformed observations
id.fx.usdidr 25% higher restricts z-score of the level 1250 transformed observations
in.fx.usdinr 25% higher restricts z-score of the level 1250 transformed observations
Positive: the dollar is soft, which loosens conditions across Asia and usually pulls foreign money into ASEAN markets Negative: the dollar is strong, which tightens conditions everywhere outside America and drains money out of emerging markets
growth_pulse

Growth pulse

growth

Is the real economy speeding up or slowing down?

InputWeightDirectionTransformWindow
xx.commodity.copper 40% higher supports z-score of the year-over-year change 60 transformed observations
us.equity.sox 40% higher supports distance from the 200-day moving average, then z-scored 200-day average; 500 transformed observations
us.rates.2s10s 20% higher supports z-score of the level 1250 transformed observations
Positive: industrial and technology demand is accelerating — cyclicals and exporters benefit Negative: demand is cooling ahead of the official statistics, which typically confirm it two quarters later
resource_security

Cost of physical inputs

conditions

Are the physical things economies actually run on getting cheaper or dearer?

InputWeightDirectionTransformWindow
xx.index.energy 35% higher restricts z-score of the level 60 transformed observations
xx.index.food 25% higher restricts z-score of the level 60 transformed observations
xx.commodity.lng_asia 25% higher restricts z-score of the level 60 transformed observations
xx.commodity.coal_au 15% higher restricts z-score of the level 60 transformed observations
Positive: energy, food and industrial inputs are cheap against their own history — a quiet subsidy to every importing economy, Thailand especially, and to corporate margins everywhere Negative: the physical economy is being taxed by its own input costs, which shows up as inflation that interest rates cannot fix, and hits energy-importing Asia before it hits the United States
ai_cycle

The AI build-out

conditions

Is the AI infrastructure boom still being funded, or is it starting to strain?

InputWeightDirectionTransformWindow
us.credit.quality_spread 40% higher restricts z-score of the level 750 transformed observations
us.equity.sox 30% higher supports distance from the 200-day moving average, then z-scored 200-day average; 500 transformed observations
us.semi.ip 20% higher supports z-score of the year-over-year change 60 transformed observations
us.equity.ndx_spx 10% higher supports z-score of the 13-week change 750 transformed observations
Positive: the build-out is being financed comfortably — lenders are not charging the weak borrowers a penalty, semis are leading, and chip output is keeping pace with the equity story Negative: the financing side is tightening before the equity side admits it, which is the order these things fail in: credit first, guidance second, earnings last
sentiment

How the crowd is leaning

conditions

How crowded is speculative positioning in US markets right now?

InputWeightDirectionTransformWindow
us.sent.vix_lev_net 30% higher supports trailing percentile rank, (pctl − 50) ÷ 25 in score units exactly 260 observations — hard window, no partial fallback
us.sent.ust10_lev_net 25% higher supports trailing percentile rank, (pctl − 50) ÷ 25 in score units exactly 260 observations — hard window, no partial fallback
us.sent.usd_lev_net 15% higher supports trailing percentile rank, (pctl − 50) ÷ 25 in score units exactly 260 observations — hard window, no partial fallback
us.sent.spx_lev_net 15% higher restricts trailing percentile rank, (pctl − 50) ÷ 25 in score units exactly 260 observations — hard window, no partial fallback
us.sent.ndx_lev_net 15% higher restricts trailing percentile rank, (pctl − 50) ÷ 25 in score units exactly 260 observations — hard window, no partial fallback
Positive: speculators are washed out or defensively positioned — the crowd has already sold, which historically leaves room for upside surprises Negative: positioning is crowded toward calm and risk — everyone is already leaning the optimistic way, so a small shock forces a large unwind
thailand

Thailand conditions

home

How friendly is the environment for a baht-based investor?

InputWeightDirectionTransformWindow
th.carry.vs_fed 30% higher supports z-score of the level 1250 transformed observations
th.fx.usdthb 25% higher restricts z-score of the level 1250 transformed observations
th.equity.set 25% higher supports distance from the 200-day moving average, then z-scored 200-day average; 500 transformed observations
xx.commodity.brent 20% higher restricts z-score of the level 1250 transformed observations
Positive: the baht is stable-to-firm, energy is cheap and the SET has momentum — a good moment to take domestic risk Negative: the baht is under pressure and imported costs are rising — favour foreign-currency assets and unhedged exposure

Layer 1 Cross-domain indicators

STANDARD means a published construction, ADAPTED means a known idea applied differently, and INVENTED means this exact construction was not found elsewhere. The label describes provenance, not quality.

days_of_cover

Days of import cover

How many days it keeps running
STANDARD
Formula
stock ÷ average daily net imports
Inputs
th.oil.days_coverin.oil.days_coverjp.oil.days_covercn.oil.days_cover
Output
read-only / multi-country
Status
static · days
Provenance
IEA emergency stockholding obligation — 90 days of NET IMPORTS for member countries. Note the denominator: the IEA uses net imports, while the oil market more often quotes days of forward DEMAND. The two give different answers for the same country and are routinely confused. This register uses net imports and says so on every reading.
< 15 · no buffer< 45 · thin< 90 · below the IEA line< 180 · adequateotherwise · deep

How long the country runs if imports stopped tomorrow. It makes reserves of wildly different absolute sizes comparable, which raw tonnes never do.

stocks_to_use

Stocks-to-use ratio

How much grain the world has spare
STANDARD
Formula
ending stocks ÷ total annual use × 100
Inputs
xx.food.rice_stocks_to_use
Output
read-only / multi-country
Status
static · %
Provenance
USDA WASDE and FAO AMIS both publish this monthly; it is the grain equivalent of days of cover and one of the oldest agricultural statistics there is.
< 20 · tight — price spikes likely< 30 · snug< 40 · comfortableotherwise · ample

Below roughly 20% grain prices stop responding to demand smoothly and start jumping. World rice is currently comfortable, which is the single best piece of news in the resource picture for a Thai household budget.

stock_to_flow

Gold stock-to-flow

Years of gold mining already above ground
STANDARD
Formula
above-ground stock ÷ annual mine production
Inputs
xx.gold.above_groundxx.gold.mine_supply
Output
xx.gold.stock_to_flow
Status
static · years
Provenance
Popularised by Incrementum AG's In Gold We Trust report. NOT a World Gold Council metric — the WGC publishes the 219,891 t above-ground numerator but does not present the ratio. My first draft credited the WGC and that was wrong.
< 20 · supply can respond< 50 · slow to respondotherwise · supply is effectively fixed

About 67 years. Everything ever mined is still here, and a year of world mining adds roughly 1.5% to it. That one ratio is the entire argument for gold as a monetary asset rather than a commodity: no price rise can conjure meaningful new supply.

hhi_refining

Refining concentration (HHI)

How few countries do the processing
STANDARD
Formula
Σ (country share)² × 10,000
Inputs
xx.refine.galliumxx.refine.rare_earthxx.refine.graphitexx.refine.cobaltxx.refine.lithiumxx.refine.aluminiumxx.refine.copperxx.refine.nickel
Output
read-only / multi-country
Status
static · index 0–10,000
Provenance
USGS (Thomas, Nassar & DeYoung 2022) and the EU Critical Raw Materials methodology. NOT an IEA metric — the IEA publishes a plain top-three share (82% in 2020 rising to 86% in 2024) and uses reverse-HHI only for power-generation fuel mix. I had this attributed to the IEA and it was corrected.
< 1500 · competitive< 2500 · moderately concentrated< 5000 · highly concentratedotherwise · single-country control

Reserves are spread around the world; the furnaces that turn ore into usable material are not. A country that mines something it cannot process does not control it.

Limit: Computed from China's share alone with the remainder assumed to split evenly, because that is the only share published consistently for all eight minerals. Real residual shares are lumpier, so this understates concentration.

gold_oil_ratio

Gold/oil ratio

Barrels of oil one ounce of gold buys
STANDARD
Formula
gold USD/oz ÷ Brent USD/bbl
Inputs
xx.commodity.goldxx.commodity.brent
Output
xx.ratio.gold_oil
Status
live · barrels per ounce
Provenance
A market convention of very long standing with no institutional publisher — no central bank or agency computes it, but every commodity desk watches it.
< 15 · oil expensive vs gold< 30 · historically normal< 50 · gold expensive vs oilotherwise · extreme — usually a crisis print

The cleanest way to separate a monetary story from an energy story. If both gold and oil are rising but the ratio is flat, that is money losing value. If the ratio is falling, it is a genuine energy supply problem.

net_liquidity

US net dollar liquidity

Cash the Fed is leaving in the system
STANDARD
Formula
WALCL − Treasury General Account − overnight reverse repo
Inputs
us.fed.walclus.fed.tgaus.fed.rrp
Output
net_usd_liquidity
Status
live · USD tn
Provenance
A MARKET CONVENTION, not a Fed publication. The Fed publishes WALCL, WTREGEN and RRPONTSYD separately and does not endorse the subtraction. The originator of the construction could not be verified; it is in wide use without a clear first author.
< 0 · drainingotherwise · adding

The single best-known proxy for whether money is being added to or drained from markets, read as a 13-week change rather than a level.

Limit: Widely followed enough that its predictive power is partly arbitraged away.

term_spread

2s10s term spread

Whether the bond market expects trouble
STANDARD
Formula
10-year Treasury yield − 2-year Treasury yield
Inputs
us.rates.10yus.rates.2y
Output
us.rates.2s10s
Status
live · pp
Provenance
Estrella & Mishkin (1996); published continuously by the New York Fed as a recession probability model.
< 0 · inverted< 0.5 · flatotherwise · positive

Inversion has preceded most US recessions, with a long and variable lag.

real_yield

US 10-year real yield

The return on cash after inflation
STANDARD
Formula
10-year TIPS yield
Inputs
us.rates.10y_real
Output
read-only / multi-country
Status
live · %
Provenance
US Treasury TIPS constant-maturity series, published daily (FRED DFII10).
< 0 · negative — everything else looks attractive< 1.5 · mild< 2.5 · restrictiveotherwise · punishing for long-duration assets

The hurdle rate for every other asset on earth, and the single biggest driver of the gold price after the dollar.

cover_gap_90

Cover gap vs the 90-day line

Days above or below the international standard
ADAPTED
Formula
days of cover − 90
Inputs
th.oil.days_coverin.oil.days_coverjp.oil.days_covercn.oil.days_cover
Output
th.oil.cover_gap
Status
static · days
Provenance
The 90-day obligation is the IEA's. The subtraction is not novel. Renamed from 'Reserve Adequacy Spread' because that collided with the IMF's established Assessing Reserve Adequacy (ARA) metric, which is about FX reserves and is a different thing. Also note ARA and months-of-import-cover are two distinct metrics and must not be conflated — an error I nearly shipped.
< -60 · critically short< 0 · short of the standard< 60 · compliantotherwise · well provisioned

One signed number per country, comparable across countries that report differently.

official_absorption

Official absorption of mine supply

Share of new gold that central banks take
ADAPTED
Formula
central-bank net purchases ÷ annual mine supply × 100
Inputs
xx.gold.cb_purchasesxx.gold.mine_supply
Output
xx.gold.official_absorption
Status
static · %
Provenance
Derived from World Gold Council data, not a WGC-published series. The WGC frames central-bank demand against TOTAL demand; this uses mine supply as the denominator, which is the harder test and the more interesting one.
< 10 · central banks are marginal< 20 · meaningful official bidotherwise · official buying sets the price

Above roughly 20%, official institutions rather than jewellers or investors are setting the marginal gold price — and central banks are famously price-insensitive buyers.

oil_beta_th

SET–Brent rolling correlation

How much Thai stocks follow the oil price
ADAPTED
Formula
rolling 260-observation Pearson correlation of Δ%SET and Δ%Brent
Inputs
th.equity.setxx.commodity.brent
Output
th.oil_beta
Status
live · correlation −1…+1
Provenance
LSEG/FTSE Russell already publishes rolling oil betas for APAC equity markets including Thailand, so the idea is not new — I had this labelled INVENTED and the check overturned it. What is mine is the construction: a 12-month rolling Pearson correlation of daily PERCENTAGE CHANGES (not levels, which would be spurious), computed inside the pipeline so it updates with everything else.
< -0.2 · SET is an oil hedge< 0.2 · no relationshipotherwise · SET moves with oil

Thailand imports oil, so intuition says the SET should fall when oil rises. In practice the index is heavy in PTT and energy-linked names, so the relationship is often the opposite of the intuition. This measures which one is true right now.

endowment_score

Resource endowment score

How well supplied a country is, 0–100
ADAPTED
Formula
mean of min-max normalised (arable land per person, inverse fuel import share, days of cover)
Inputs
th.land.arable_pcth.energy.import_shareth.oil.days_cover
Output
read-only / multi-country
Status
live · score 0–100
Provenance
SolAbility's GSCI Natural Capital Index is a published normalised 0–100 resource composite and is the structural precursor; the World Bank's Changing Wealth of Nations is the monetary one. Downgraded from INVENTED after the check found both. Mine is narrower: min-max across the ten mandate countries on inputs already in the registry.
< 30 · dependent< 60 · mixedotherwise · well endowed

A slow structural ranking, not a market signal. It moves once a year at most.

Limit: Deliberately crude — three inputs, equal weights. Treat as a ranking, not a measurement.

stock_bond_correlation

US stock–bond return correlation

Whether bonds are diversifying shares
INVENTED
Formula
60-observation Pearson correlation of daily S&P 500 returns and a DGS10 bond proxy, where bond r ≈ −7 × Δyield + yield ÷ 252
Inputs
us.equity.spxus.rates.10y
Output
us.corr.stock_bond
Status
live · correlation −1…+1
Provenance
No publisher prints this exact series. The equity leg is the S&P 500. The bond leg is a duration-7 total-return proxy reconstructed from the Federal Reserve's DGS10 yield, because a yield level is not a bond return. The approximation is standard fixed-income arithmetic; combining that proxy with a rolling correlation here is this project's construction.
< -0.2 · bonds diversify equities< 0.2 · relationship unstable< 0.5 · diversification weakenedotherwise · stocks and bonds falling together

Negative means bonds have tended to rise when shares fell. Positive means the two have moved together, so a conventional stock–bond portfolio is carrying less diversification than its labels imply.

Limit: The bond leg is an approximation with duration fixed at 7; it omits convexity, coupon timing and changes in the cheapest-to-deliver bond. Read the direction and regime, not the second decimal place.

bibi

Baht Import Burden Index

What the world costs, in baht
INVENTED
Formula
(0.60 × energy index + 0.40 × food index) × (USDTHB ÷ 35.3), base 2016 = 100
Inputs
xx.index.energyxx.index.foodth.fx.usdthb
Output
th.import_burden
Status
live · index 2016 = 100
Provenance
No published equivalent found. The nearest cousin is the IMF's Commodity Terms of Trade index (PCTOT, IMF WP/19/21), but PCTOT is deflated to real USD and weighted by NET exports; this is import-only and denominated in the local currency, which is what makes it read like a household's experience rather than a country's trade account.
< 90 · cheap world< 110 · normal< 140 · expensiveotherwise · squeeze

Dollar commodity indices understate what a Thai household pays, because the baht usually weakens in the same move that lifts oil. This multiplies the two so the compounding is visible in one line.

ptp

Physical Tightness Premium

Is it expensive because it is scarce?
INVENTED
Formula
z(price, 5y) − z(inventory, 5y)
Inputs
xx.commodity.wtius.oil.commercial
Output
read-only / multi-country
Status
planned · z difference
Provenance
No published equivalent as a z-score construction. The canonical precursor is the theory of storage / convenience yield (Kaldor 1939, Working 1949, Brennan 1958), which reaches the same conclusion through the futures curve rather than through inventories directly.
< -1 · well supplied< 1 · balanced< 2 · tightotherwise · genuinely scarce

High price with full warehouses is a positioning or tariff story and tends to reverse. High price with empty warehouses is real scarcity and tends to persist. The subtraction is what separates them.

Limit: Needs EIA_API_KEY for the weekly inventory series. The annual static inventory figures cannot be z-scored — five observations is not a distribution.

cags

Chokepoint-Adjusted Growth Signal

Copper's growth message, discounted for distortion
INVENTED
Formula
z(copper, 5y) × d, where d = 1 − min(1, |COMEX÷LME − 1| ÷ 2)
Inputs
xx.commodity.copperxx.metals.comex_lme_copper
Output
xx.growth.cags
Status
live · adjusted z
Provenance
No published equivalent. Copper as a growth proxy is ancient; exchange-inventory divergence as a distortion measure is well known to metals desks; multiplying one by a confidence factor derived from the other is the part I have not seen done.
< -1 · demand contracting< -0.25 · cooling< 0.25 · flatotherwise · expanding

At the current 1.85x COMEX/LME ratio the discount factor is 0.575 — copper's growth signal is being marked down by 42.5% because a large part of the price is a border, not a factory.

th_squeeze

Thai Squeeze Index

Cost-of-living pressure at home
INVENTED
Formula
composite of z-scores, weights food 35 / transport fuel 25 / electricity 25 / borrowing 15, every price converted to THB first, scored −100 (pressure) … +100 (relief)
Inputs
xx.index.foodxx.commodity.brentxx.commodity.lng_asiath.policy_rateth.fx.usdthb
Output
th.squeeze
Status
live · score −100…+100
Provenance
No published equivalent. Central banks compute cost-of-living and financial-conditions indices, but not one that converts world commodity prices into local currency first and weights them by the domestic CPI basket for a single household.
< -40 · heavy pressure< -10 · pressure< 10 · neutral< 40 · reliefotherwise · strong relief

The four things that actually move a Thai household's monthly outgoings, in one number, measured in the currency it is paid in. Negative means pressure.

esp

Energy Shock Pass-Through

How much of an oil shock lands here
INVENTED
Formula
(fuel imports as % of merchandise imports ÷ 100) × Δ% energy price index
Inputs
th.energy.import_sharexx.index.energy
Output
th.energy.passthrough
Status
live · % of import bill
Provenance
No published equivalent found. The inputs are entirely standard — World Bank TM.VAL.FUEL.ZS.UN and the IMF energy price index — but multiplying a structural import share by a live price change to get a country-specific shock intensity is not a published construction.
< -1 · windfall< 1 · immaterial< 3 · a real hitotherwise · macro-significant

A 20% oil move does not mean the same thing in Singapore, Thailand and Malaysia. This scales the world shock by how exposed each country's import bill actually is, which is the number that eventually shows up in the current account and then in the currency.

gold_thb

Gold in baht

What your gold is actually worth
STANDARD
Formula
gold USD/oz × USDTHB
Inputs
xx.commodity.goldth.fx.usdthb
Output
th.gold.thb
Status
live · THB/oz
Provenance
Arithmetic, not an invention — every Thai gold shop quotes it. It is in this register because it is the single most under-appreciated line for a baht-based investor, not because it is clever.
otherwise · level — read the change, not the level

Your return on gold is the PRODUCT of the metal and the currency. Gold in baht can rise while gold in dollars falls, and vice versa — and the financial press only ever reports the dollar one.

ai_credit_tail

AI credit tail stress (CCC − HY)

What lenders charge the weakest borrowers
ADAPTED
Formula
CCC & lower OAS − HY index OAS, in percentage points
Inputs
us.credit.ccc_oasus.credit.hy_oas
Output
us.credit.quality_spread
Status
live · pp
Provenance
Adapted from the AI Bubble Early-Warning framework's indicator 8 (AI infrastructure credit stress), which specifies bond/CDS spreads widening 25-50bp as Amber and >100bp as Red. Changed in one decisive way: the framework does not say WHICH spread, and the obvious choice — the high-yield index — is the wrong one. On 2026-07-23 HY OAS was 2.77%, historically tight and unambiguously green on a widening test, while CCC-and-lower was 9.91%. Data-centre SPV and neocloud paper sits in that tail, not in the index. Tracking the GAP catches lenders repricing the weak borrowers while the headline stays calm — the precise failure the framework wants caught, which its own metric would have missed.
< 5 · tail is fine< 6.5 · normal dispersion< 7.5 · lenders backing away from the weak endotherwise · tail is shut out

Credit usually breaks before equity does, and it breaks at the bottom first. This is the extra yield demanded from the worst-rated borrowers over the high-yield market as a whole. It widens when lenders start declining the weakest deals — which is where the AI build-out's marginal financing actually happens — even while the index looks calm.

Limit: Three years of history and no recession in it, so 'a three-year high' is a weaker claimthan it sounds — the series has never been observed through a downturn. The level is less informative than the 3-month change, which is the framework's own guidance. And this is NOT an AI-specific instrument: a widening driven by energy or retail defaults would move it without saying anything about data centres. It is the closest free proxy, not a measurement. Confirm any signal here against issuer-level pricing — Oracle's CDS and neocloud paper — before treating it as an AI-credit event.

ai_bubble_score

AI bubble composite risk score

How stretched the AI build-out looks
ADAPTED
Formula
Σ(category score × weight) ÷ Σ(weight of SCORED categories only) ÷ 2, as a percentage. Unscorable categories are excluded from both sums rather than counted as Green.
Inputs
us.credit.quality_spreadus.equity.soxus.semi.ipai.capex.hyperscaler
Output
read-only / multi-country
Status
planned · % of maximum risk score
Provenance
Implements the composite in section 5 of the AI Bubble Early-Warning framework — ten categories, Green 0 / Amber 1 / Red 2, five weighted ×2 and five ×1. Two corrections were needed before it could be used. FIRST, the bands do not fit the scale: max score is 30 (15 weight × 2), but the document's top band starts at 14, so a portfolio scoring Amber on every single category — a uniform 15 — lands in the highest risk band while no category is Red. That cannot be intended. Bands here are expressed as a PERCENTAGE of the maximum attainable, which also keeps them meaningful when categories are unscorable. SECOND, section 1 lists only three bands (0-5, 6-9, 10-13) and section 5 adds a fourth (14+); the four-band version is used.
< 20 · expansion supported< 35 · speculative excess building< 50 · pre-burst conditions emergingotherwise · broad deterioration

A deliberately crude tally across independent parts of the system, because the framework's central claim is that no single metric calls this — four unrelated things deteriorating together is the signal. Denominating in percent-of-maximum means a score built from four scorable categories is comparable to one built from ten, instead of silently reading low because six were missing.

Limit: MOSTLY NOT LIVE, and that is the honest state, not a defect to be papered over. Of the framework's ten categories, one (credit) computes daily from free data, two (semis equity, chip output) are proxies for capacity rather than measurements of it, and one (capex) is hand-entered guidance. The six that carry the most information — capex vs AI revenue, capex ÷ operating cash flow, cloud gross margin, depreciation vs gross profit, enterprise renewals, backlog conversion — all come from quarterly filings and none is wired. Treat this as a scaffold with one working leg. See docs/AI_BUBBLE.md.

Decision engine Position tests

Known tests contribute −2 to +2 pushes around the base stance. Missing tests contribute nothing and lower data coverage. Coverage is not research confidence. Market readings can move only one rung per interpretation; only structural facts can produce “avoid.” These same descriptions appear beside live evidence on every /explain page.

own-the-world

Own the world

base: accumulate
Global equities versus their 200-day average Inputs xx.equity.world_proxy Rule > +2% supports; < −2% argues against; ±2% is neutral
US 10-year real yield Inputs us.rates.10y_real Rule < 2.2% supports; > 2.5% argues against
US equity earnings yield minus real bond yield Inputs us.equity.excess_yield Rule With ≥60 monthly vintages: > 75th percentile supports, < 25th argues against; before then: > 3pp supports, < 1pp argues against
High-yield credit spread Inputs us.credit.hy_oas Rule < 4pp supports; > 6pp argues against
Volatility index Inputs us.vix Rule < 20 supports; > 28 argues against
Net dollar liquidity, 13-week change Inputs net_usd_liquidity Rule Unavailable until enough history exists to score the 13-week change against its declared distribution
See the current evidence and call →
own-america

Own America, but no more than the world already gives you

base: hold
US 10-year real yield Inputs us.rates.10y_real Rule < 2.2% supports; > 2.5% argues against with double weight
US equity earnings yield minus real bond yield Inputs us.equity.excess_yield Rule With ≥60 monthly vintages: > 75th percentile supports, < 25th argues against; before then: > 3pp supports, < 1pp argues against
Volatility index Inputs us.vix Rule < 20 supports; > 28 argues against
S&P 500 versus its 200-day average Inputs us.equity.spx Rule > +2% supports; < −2% argues against; ±2% is neutral
See the current evidence and call →
own-asia

Own Asia beyond Thailand

base: hold
Dollar against the baht, versus its 2016 average Inputs th.fx.usdthb Rule Ratio to 35.30 < 0.97 supports; > 1.05 argues against
India's strategic oil cover Inputs in.oil.days_cover Rule < 15 days argues against
Global growth pulse Inputs xx.commodity.copper · xx.metals.comex_lme_copper Rule Unavailable while the copper signal is structurally distorted
Regional equity momentum Inputs regional equity closes Rule Unavailable until 200 daily observations exist for each market
See the current evidence and call →
own-thailand

Own Thailand

base: hold
Carry gap, Thai policy rate minus US overnight Inputs th.carry.vs_fed Rule < −2.5pp argues against with double weight; < −1.5pp argues against
Brent crude Inputs xx.commodity.brent Rule < $90 supports; > $95 argues against with double weight
Thai rice priced against Vietnamese Inputs th.food.rice_premium_vn Rule > 10% argues against
Thai equities versus their 200-day average Inputs th.equity.set Rule > +2% supports; < −2% argues against; ±2% is neutral
See the current evidence and call →
gold

Gold as insurance

base: hold
Gold versus its 10-month average Inputs xx.commodity.gold Rule > +2% supports; < −2% argues against; ±2% is neutral
US 10-year real yield Inputs us.rates.10y_real Rule < 2.2% supports; > 2.5% argues against with double weight
China's share of critical-mineral refining Inputs eight xx.refine.* static series Rule > 70% average supports holding insurance
Central bank buying, as a share of new mine supply Inputs xx.gold.official_absorption Rule > 20% supports
Days until the nearest export-control expiry Inputs CALENDAR.export_control_expiry Rule ≤ 180 days supports holding insurance
See the current evidence and call →
thai-savings-bond

The government savings bond

base: accumulate
Bond coupon over the policy rate Inputs REFERENCE.savingsBond10y · th.policy_rate Rule > 1.5pp supports with double weight; > 0.75pp supports; otherwise argues against
Bond coupon over a 12-month bank deposit Inputs REFERENCE.savingsBond10y · REFERENCE.thbFixed12m Rule > 1.5pp supports with double weight; > 0.75pp supports; otherwise argues against
Direction of the next policy move Inputs Bank of Thailand MPC decision Rule Unavailable; the engine does not forecast a policy decision
See the current evidence and call →
dollar-cash

Where idle cash sits

base: hold
Carry gap, Thai policy rate minus US overnight Inputs th.carry.vs_fed Rule < −2.5pp supports dollars with double weight; < −1.5pp supports; > 0 argues against
Dollar against the baht, versus its 2016 average Inputs th.fx.usdthb Rule Ratio to 35.30 < 0.95 supports buying dollars; > 1.05 argues against
Currency you actually spend Inputs resident spending currency: THB Rule Baht spending permanently argues one step against dollar cash
Direction of both policy rates Inputs th.policy_rate · us.rates.sofr Rule Unavailable; the engine does not forecast either central bank
See the current evidence and call →
inflation-linked

Inflation protection

base: watch
US 10-year breakeven inflation Inputs us.rates.be10 Rule < 2.0% supports; > 2.5% argues against
Baht Import Burden Index Inputs th.import_burden Rule Observed without a decision threshold until sufficient history exists
Thai inflation-linked alternatives Inputs retail access to Thai inflation-linked bonds Rule Unavailable until a verified retail route exists
See the current evidence and call →
thaiesg-deadline

ThaiESG — the last year of the enhanced deduction

base: accumulate
Deduction ceiling while enhanced terms run Inputs REFERENCE.thaiEsgCap · Thai Ministerial Regulation No. 395 Rule Up to 30% of assessable income, capped at ฿300,000, separately from the retirement ceiling
Holding period while enhanced terms run Inputs Thai Ministerial Regulation No. 395 Rule 5 years for qualifying purchases through 31 December 2026
Days until the enhanced terms lapse Inputs CALENDAR.thaiesg_window Rule ≤ 180 days argues for acting; otherwise neutral
SSF Inputs Thai tax-year eligibility Rule Expired after tax year 2024; always argues against treating it as a deduction
See the current evidence and call →
us-listed-funds

U.S.-listed funds — check the Irish structure

base: avoid
US estate tax filing threshold Inputs REFERENCE.usEstateThreshold Rule Aggregate U.S.-situated assets plus specified adjusted gifts above US$60,000 generally trigger Form 706-NA filing for a nonresident-not-a-citizen estate; filing is not tax due
US–Thailand estate tax treaty Inputs IRS estate-and-gift treaty list Rule Thailand is absent from the treaty list; supports a structural caution when aggregate U.S. situs could cross the threshold
Situs of an Irish UCITS holding Inputs IRS Form 706-NA instructions Rule Non-US corporate stock is outside US situs; supports the Irish structure
Cost of choosing the Irish version Inputs fund ongoing charges Rule Approximately 0.04–0.13pp per year; neutral versus the structural benefit
See the current evidence and call →
thai-high-dividend

High-dividend Thai funds

base: hold
Ongoing charge versus the broad Thai index fund Inputs SET:1DIV TER · SET:TDEX TER Rule > 0.4pp argues against with double weight; > 0.2pp argues against
Thai dividend withholding Inputs Thai dividend withholding rate Rule 10% withholding always argues against a dividend-maximising implementation
Thai rice priced against Vietnamese Inputs th.food.rice_premium_vn Rule > 10% argues against
See the current evidence and call →

Research register What the theories actually establish

Mechanism, exact threshold and internal replay are separate claims. “Verified rule” is reserved for a legal/mechanical rule supplied by an authority; it never means a return forecast is certain. A paper supporting a mechanism does not validate a FINDASH threshold unless it specifies that threshold.

diversifiedCore

Diversified long-horizon equity core

Research-supported
Mechanism
established
Threshold
house-rule
Own history
not-tested

Broad diversification can reduce concentration risk, and a longer time horizon can make volatile assets more tolerable.

Limit: The source explicitly says asset allocation is personal. FINDASH's accumulate base assumes money is genuinely unneeded for at least ten years; the app cannot verify that assumption or the user's ability to bear loss.

activeTilt

Country or regional tilt around a global core

Experimental house rule
Mechanism
supported
Threshold
house-rule
Own history
not-tested

A country or regional overlay is an active concentration choice around an already diversified core.

Limit: The hold base and every tilt size are house policy. The app has no user portfolio weights, so it cannot know whether a displayed holding diversifies or duplicates what is already owned.

homeAllocation

Home-market assets for home-currency liabilities

Mixed evidence
Mechanism
established
Threshold
house-rule
Own history
not-tested

Currency matching can reduce risk for known baht liabilities, while concentrating investments in the home market creates separate company and country risk.

Limit: The hold base does not specify a suitable percentage and cannot see the user's actual baht liabilities, employment exposure, property or existing holdings.

trend

Price trend / moving-average rule

Research-supported
Mechanism
supported
Threshold
house-rule
Own history
not-tested

Medium-term trend following has published historical support across asset classes.

Limit: The cited work studies a 10-month moving average. FINDASH's 200-day proxy and ±2% no-flap band are implementation choices, not thresholds validated by that paper.

realYield

Real yields as an opportunity cost

Conflicts with own history
Mechanism
established
Threshold
house-rule
Own history
contradictory

A higher real discount rate lowers the present value of distant cash flows and raises the return available from inflation-protected government debt.

Limit: No primary source found validates 2.2% or 2.5% as an equity or gold trading boundary. The project's one historical >2.5% episode moved opposite the declared Nasdaq consequence, so this rule must not carry a call by itself.

excessYield

Earnings yield minus real bond yield

Mixed evidence
Mechanism
supported
Threshold
house-rule
Own history
not-tested

The spread is a rough comparison between equity cash-flow yield and the real government-bond alternative.

Limit: It is not a complete equity-risk-premium model. The 1pp/3pp bands and five-year percentile cutoffs are house rules and have no published validation here.

creditSpread

Credit spreads as a stress signal

Research-supported
Mechanism
supported
Threshold
house-rule
Own history
not-tested

Corporate credit spreads contain information about financial conditions and future activity; the Fed's excess bond premium tries to separate sentiment from expected defaults.

Limit: The 4pp and 6pp high-yield cutoffs are house bands. Credit spreads can be coincident, can reverse quickly, and do not mechanically forecast equity returns.

vix

Option-implied equity volatility

Mixed evidence
Mechanism
established
Threshold
house-rule
Own history
not-tested

VIX is a rules-based measure of near-term volatility implied by S&P 500 options, not a forecast of market direction.

Limit: 20 and 28 are editorial risk bands, not Cboe thresholds. Low volatility is not an official all-clear and high volatility is not by itself a sell signal.

netLiquidity

Fed assets minus Treasury cash minus ON RRP

Experimental house rule
Mechanism
supported
Threshold
house-rule
Own history
supportive

Treasury cash and reverse-repo flows affect reserve balances, but the combined net-liquidity expression is a market heuristic rather than an official Federal Reserve indicator.

Limit: The balance-sheet identity is not evidence of a stable causal asset-return rule. The related internal tripwire has only 13 firings and incomplete forward windows.

fxLevel

USD/THB level as a regional conditions proxy

Experimental house rule
Mechanism
mixed
Threshold
house-rule
Own history
not-tested

Dollar conditions matter for emerging markets, but one bilateral exchange rate and one historical anchor are a narrow proxy.

Limit: 35.30, 0.97 and 1.05 are house anchors. They are not fair-value estimates and do not identify causality.

oilBuffer

Oil-import vulnerability and strategic cover

Mixed evidence
Mechanism
supported
Threshold
house-rule
Own history
not-testable

Low emergency oil stocks reduce the buffer available during a supply disruption for a net importer.

Limit: The exact 15-day equity-sizing cutoff is a house judgement, and the current input is a static snapshot rather than a replayable series.

unavailableGrowth

Growth and momentum confirmation

Experimental house rule
Mechanism
supported
Threshold
house-rule
Own history
not-tested

Growth-sensitive commodities and market momentum can provide context, but these tests are deliberately excluded while the required clean history is absent.

Limit: An unavailable input contributes nothing. Its existence in the declared model must not be read as evidence for today's call.

carry

Interest-rate differential and currency carry

Conflicts with own history
Mechanism
mixed
Threshold
house-rule
Own history
mixed

The policy-rate gap is the observable income differential between baht and dollar cash, but uncovered interest parity is unreliable as a short-run spot-FX forecast.

Limit: The −1.5pp/−2.5pp currency-pressure bands are house rules. The internal replay supported dollar strength at three months but reversed at twelve months.

brent

Oil-price shock for a net importer

Mixed evidence
Mechanism
supported
Threshold
house-rule
Own history
supportive

Higher imported energy costs can worsen inflation, income and the trade balance for a net oil importer such as Thailand.

Limit: $90/$95 and the four-week persistence rule are house thresholds. Only two internal episodes fired, so the observed result is too small to validate them.

rice

Thai rice export-price competitiveness

Experimental house rule
Mechanism
supported
Threshold
house-rule
Own history
not-testable

Relative export prices can affect competitiveness, but translating a rice-price premium into an equity allocation is a house hypothesis.

Limit: The 10% boundary is not externally validated and the current series is static, so no historical decision record exists.

goldRole

Gold as portfolio insurance

Mixed evidence
Mechanism
mixed
Threshold
house-rule
Own history
not-testable

Gold can diversify particular stress regimes, but it is volatile and is not a reliable practical-horizon inflation hedge.

Limit: Refining concentration, official buying above 20%, and an export-control countdown are narrative risk indicators—not validated gold allocation rules.

savingsComparison

Savings-rate opportunity-cost comparison

Mixed evidence
Mechanism
established
Threshold
house-rule
Own history
not-testable

Comparing a verified fixed coupon with current policy and deposit rates is arithmetic; the amount of spread required before acting is a preference rule.

Limit: The 0.75pp and 1.5pp bands are house rules. A government bond and a bank deposit do not have identical legal protection, liquidity or interest-rate exposure; the comparison also omits personal cash needs and tax status.

policyForecast

Unmodelled future policy direction

Experimental house rule
Mechanism
house-hypothesis
Threshold
not-applicable
Own history
not-tested

The engine explicitly makes no central-bank forecast and therefore excludes this input.

Limit: This row documents a missing capability. It supplies no evidence and contributes nothing to the score.

spendingCurrency

Asset–liability currency matching

Research-supported
Mechanism
established
Threshold
house-rule
Own history
not-testable

Matching near-term assets to the currency of known spending reduces the exchange-rate risk of meeting those liabilities.

Limit: The one-step penalty is a conservative product rule, not a personalised asset-liability model; the app does not know the user's actual liabilities.

tips

Inflation-linked bond mechanics and breakeven

Mixed evidence
Mechanism
established
Threshold
house-rule
Own history
not-tested

TIPS principal adjusts with US CPI. The nominal-minus-real yield breakeven also contains inflation-risk and liquidity premia, so it is not pure expected inflation.

Limit: 2.0% and 2.5% are house valuation bands. US CPI protection is an imperfect hedge for a household spending baht in Thailand.

bibi

Baht Import Burden Index

Experimental house rule
Mechanism
supported
Threshold
house-rule
Own history
not-tested

Converting imported commodity prices into baht is valid arithmetic; combining them into this exact index is a FINDASH construction.

Limit: The index has no decision threshold and no validated mapping to household inflation or asset returns.

marketAccess

Verified retail implementation route

Experimental house rule
Mechanism
established
Threshold
not-applicable
Own history
not-testable

A product cannot be recommended as an implementation until a current, reachable retail route is verified.

Limit: Unavailable is not evidence against inflation-linked bonds; it means this app has not verified a Thai retail route.

thaiEsgLaw

ThaiESG enhanced tax terms

Verified structural rule
Mechanism
established
Threshold
authority
Own history
not-testable

The deduction cap, qualifying purchase window and holding period are current legal rules, not forecasts.

Limit: Eligibility and the value of a deduction depend on the taxpayer. The app is impersonal and does not calculate a user's tax benefit.

usEstate

U.S. estate-tax situs for a nonresident

Verified structural rule
Mechanism
established
Threshold
authority
Own history
not-testable

U.S. corporate stock is U.S.-situated property for a nonresident estate; stock of other corporations is outside U.S. situs under the Form 706-NA instructions.

Limit: This is a product-structure screen, not personal legal advice. The US$60,000 rule is an aggregate filing threshold for U.S.-situated assets; crossing it does not by itself establish tax due. Ownership structures, domicile, deductions, treaties and future law can change the result.

fundCost

Implementation fee comparison

Mixed evidence
Mechanism
established
Threshold
house-rule
Own history
not-testable

Subtracting verified ongoing charges is arithmetic; deciding that a particular fee gap is worth a structural benefit is a house judgement.

Limit: The 0.2pp and 0.4pp bands do not include spreads, tracking difference, taxes, platform fees or an individual's holding period.

thaiDividendTax

Thai dividend withholding

Verified structural rule
Mechanism
established
Threshold
authority
Own history
not-testable

The withholding rate is a tax input. How much it should change an allocation depends on the investor and the alternative implementation.

Limit: Tax treatment can depend on election, filing and taxpayer facts; this app does not calculate personal tax.

Layer 2 Tripwires and base rates

Thresholds are chosen while calm and paired with a response before they fire. A historical base rate is shown only when the signal has replayable observations; static snapshots and diary rules stay visibly untestable.

KeyTriggerInputs / basisHistorical base rate
thb_carry
THB carry gap (BOT − Fed)
below −250bp
below
Thai policy rate 1.00% − SOFR 3.87% 9 firings since 2018
USD/THB expected up · median 3m +4.4% · median 12m -2.1% · false positives 3/6
india_oil_cover
India strategic oil cover < 15 days
below 15 days
below
IEA / national stockholding, 2026 Not testable
The oil-cover input is a hand-curated annual snapshot, not a fireable history.
rice_spread_th_vn
Thai rice priced > 10% above Vietnamese
above +10%
above
Thai vs Vietnamese 5% broken FOB quotes, Jul 2026 Not testable
The Thai-versus-Vietnam rice quote is a curated snapshot with no stored historical vintages.
us_real_10y
US 10-year real yield > 2.5%
above 2.50%
above
FRED DFII10, 2026-09-22 1 firings since 2015
Nasdaq 100 expected down · median 3m +21.7% · median 12m +40.7% · false positives 1/1
refining_concentration
China share of critical-mineral refining > 70%
above 70% average
above
Gallium 99.0 · rare-earth separation 86.1 · synthetic graphite 85.2 · cobalt 71.4 · lithium 60.9 · aluminium 60.4 · copper 60.0 · nickel 6.2 Not testable
The refining-share basket is structural, hand-curated evidence with no historical vintages.
export_control_expiry
Nearest export-control expiry
within 180 days
countdown
China 9 Oct 2025 rare-earth controls, suspension lapses 10 Nov 2026 Not testable
This is a dated diary rule, not a market signal with repeated historical firings.
spr_refill
US SPR below 300mn bbl (structural buyer)
below 300mn bbl
below
EIA, 2026-07-17; peak fill 726.6mn bbl (2010) 1 firings since 1982
Brent crude expected up · median 3m not available · median 12m not available · false positives 0/0
copper_venue_split
COMEX ÷ LME copper stocks > 2.0x
above 2.00x
above
COMEX 652,200t ÷ LME 352,100t, w/e 2026-07-17 Not testable
COMEX and LME inventories are curated snapshots, so the ratio has no replayable history.
jkm_spike
Asian LNG > $20/MMBtu sustained
above $20 for 4 months
above
JKM Asia spot, Jul 2026 · 0 of 4 months above trigger 1 firings since 2015
Thai equities (SET proxy) expected down · median 3m +6.5% · median 12m +5.5% · false positives 1/1
brent_shock
Brent > $95 sustained 4 weeks
above $95 for 4 weeks
above
FRED DCOILBRENTEU, 2026-09-22 · week 0 of 4 · -17% below trigger 2 firings since 2015
Thai equities (SET proxy) expected down · median 3m +1.6% · median 12m -4.9% · false positives 0/1
vix_crowded_calm
VIX net-short crowding > 90th pctl with VIX < 15
above 90th percentile with VIX below 15
above
the net position (-3.7% of OI) and spot VIX (14.2) are known — the five-year crowding percentile is not, from one observation 0 firings since 2015
S&P 500 expected down · median 3m not available · median 12m not available · false positives 0/0
ust_basis_extreme
UST 10Y lev-fund net-short > 90th pctl
above 90th percentile
above
the net position (-34.7% of OI) is known — the five-year crowding percentile is not, from one observation 9 firings since 2015
10-year Treasury yield expected up · median 3m +0.4% · median 12m +0.1% · false positives 4/8
gold_crowding
Gold managed-money net-long > 90th pctl
above 90th percentile
above
the net position (+32.5% of OI) is known — the five-year crowding percentile is not, from one observation 5 firings since 2015
Gold expected down · median 3m +7.1% · median 12m +47.0% · false positives 2/2
net_liquidity_z
Net liquidity 13-week z > +1
z above +1.0
above
level is known ($5.87tn) — the 13-week change against 5 years of its own distribution is not, from one observation 13 firings since 2015
S&P 500 expected up · median 3m +2.2% · median 12m +17.8% · false positives 2/7

Base-rate artifact generated 2026-08-09: A firing is the first active observation after an inactive one. Returns use the first target close on/after 3, 6 and 12 calendar months. A false positive means the six-month return was not in the declared direction. Static snapshots and calendar rules are explicitly untestable.

Version history Methodology changelog

Every scoring, weighting or threshold change receives a dated entry in docs/METHODOLOGY_CHANGELOG.md in the same change set.

2026-08-12 — version 1.6.1

  • Corrected the savings-bond deposit-spread rule. A spread at or below 0.75pp now argues against the bond instead of always contributing a positive point. The current 2.00pp spread still contributes +2, so today's stance is unchanged; the future rule is now symmetric with its declared boundary.
  • Split the Paotang-wallet instruments (RBP297A, RBP367A) from the distinct Bond Connect instruments (RBP298A, RBP368A) and attached the precise PDMO issue source. The expired first Bond Connect window is no longer described as open, and the September issue no longer inherits an unannounced coupon.
  • Reclassified the bond-versus-deposit decision as mixed evidence. Coupon arithmetic is verified, but deposits and government bonds do not have the same legal protection, liquidity or duration exposure.
  • Tightened the ThaiESG and U.S. estate language: tax benefits are conditional on personal facts; US$60,000 is an aggregate Form 706-NA filing threshold, not automatic tax due; changing one fund's domicile does not remove other U.S. assets.

2026-08-12 — version 1.6

  • No score, weight, base stance or decision threshold changed. This release adds a research gate around the existing deterministic calls. The engine's output remains visible, but a call whose material rule is experimental or conflicts with the project's own replay is labelled research hold; the presentation layer does not silently rewrite the stored stance.
  • Renamed reader-facing conviction to data coverage. The underlying field remains for API compatibility, but its calculation has always been only known tests ÷ declared tests. It never measured research quality, agreement between signals or probability of success. Every driver now carries its known, push and exact score-point contribution, and the sum is audited against the position score.
  • Added a research register covering every base stance and all 44 live test rows. It separates economic mechanism, exact threshold origin, internal replay result and current input availability. Primary research and official authorities are linked with explicit “supports” and “does not establish” claims. A build audit rejects unmapped or stale rules.
  • The review found the 2.5% real-yield market consequence conflicted (one replayable firing and the Nasdaq moved strongly in the opposite direction), the Thai carry rule mixed (short-horizon support, twelve-month reversal), and the net-liquidity composite experimental (balance-sheet mechanics are established; the asset-return formula is not). Legal/tax rules retain a separate verified classification because an authority can establish those mechanics even though it cannot establish suitability or returns.
  • Replaced the front page with a decision narrative: calls, model chain, change, thresholds, then environment. The previous page is preserved as a dated, unlinked, noindex/nofollow archive. This is a presentation and transparency change; the observation pipeline and deterministic engine are unchanged.

2026-08-09 — version 1.5

  • Added the ninth gauge: `sentiment` (futures crowding), scored contrarian. Inputs are CFTC Commitments of Traders weekly net positions stored as % of open interest: VIX (weight 30), UST 10Y (25), USD index (15), S&P e-mini (15), Nasdaq mini (15), all leveraged-fund category. Crowded risk-on positioning scores negative (fragility); washed-out positioning scores positive. Signs per component: VIX/UST10/USD +1 (net-short is the risk-on crowding direction), SPX/NDX −1 (net-long is).
  • New transform: `pctl` — trailing percentile rank over exactly 260 weekly observations, mapped to score units as (percentile − 50) ÷ 25 (extremes read ±2 z-equivalents, i.e. a ±100 component score). The rank is a counting percentile (share of the window's other values below today, ties counting half), not the min–max "COT Index" rescaling — rank is robust to a single outlier stretching the range. The window is HARD: below 260 observations the transform emits nothing and the component drops out of score and coverage, with no partial-window fallback. This is deliberately stricter than the z transforms.
  • `sentiment` does NOT enter `REGIME_WEIGHTS`. It is a divergence lens: its information is precisely the state where positioning disagrees with the price-based gauges, which an average would erase. The regime score, quadrant and all existing gauge scores are unchanged by this release.
  • Three new tripwires, same 260-week percentile machinery: vix_crowded_calm (VIX net-short crowding > 90th pctl AND spot VIX < 15; near > 80th and < 17), ust_basis_extreme (UST 10Y lev-fund net-short crowding > 90th pctl; near > 80th), gold_crowding (gold managed-money net-long > 90th pctl; near > 80th). Declared backtest consequences run against the crowd: S&P down, 10Y yield up, gold down. ust_basis_extreme formally retires the us.treasury_basis scrape plan.
  • The narrative confidence gate is now frequency-aware. The flat 14-day staleness allowance becomes 14/21/45 days for gauges whose fastest-printing driver is daily/weekly/monthly, derived from the registry rather than hand-kept. Nothing about what gets written changed — only when the writer honestly declines. Without this, the weekly sentiment gauge would template every long weekend.
  • Tooling note (not a scoring change): the tripwire base-rate artifact had been silently regenerated from the local fixture every time the wiring audit ran, because importing the backtester's target register executed the whole script. Guarded 9 Aug 2026; the artifact was regenerated from the production stream and the eleven previously tested wires reproduce their published base rates.

2026-08-08 — version 1.4

  • No score, threshold or decision rule changed in this release. It is listed because it changes how much of the machinery is *inspectable*, and a transparency release that skipped its own changelog would undermine the point.
  • Every derived series' formula moved from inline pipeline code into a declarative register (src/lib/derivations.ts) that the pipeline executes and the new lineage pages render. Equivalence was proven before deploy: all 26 derived series recomputed from the register match the previous implementation row-for-row, bit-identical, against production data.
  • Every series now has a lineage page (/series/<code>, JSON at /v1/series/<code>/lineage): publisher and exact key (verified live URLs), last stored observation with ingest time, the recursive derivation chain, and every gauge weight, indicator, tripwire and position test the series feeds.
  • /v1/insights now serves the scoring rule as data (scoring), and each gauge driver carries its raw value, observation date, transform, sign, weight and effective window — a gauge score is reproducible from the payload with a calculator.
  • Narratives and the weekly digest expose the fingerprint of the exact facts they were written from; identical fingerprints mean identical underlying numbers.
  • Hand-entered figures now display their citation (e.g. "World Gold Council, Q2 2026") wherever they appear, instead of deferring to the colophon.

2026-08-08 — version 1.3

  • Added us.corr.stock_bond, a 60-observation correlation of S&P 500 daily returns and a duration-7 Treasury total-return proxy reconstructed from DGS10. It is labelled INVENTED, and its approximation is part of the formula rather than hidden in a footnote.
  • The correlation is a standalone diversification indicator. It does not enter REGIME_WEIGHTS, so the existing conditions × growth quadrant labels and top-level regime score are unchanged.
  • Demoted US net dollar liquidity from the classic hero row. Its formula and 50% role inside the liquidity gauge are unchanged; this is an editorial demotion prompted by the weakening of the clean 2021–22 relationship after the reverse-repo pool drained and quantitative tightening stopped.

2026-08-07 — version 1.2

  • Replaced raw high-yield OAS in the cost-of-money and risk-appetite gauges with the Federal Reserve Board's excess bond premium. The weights stayed 30% and 35% respectively; the input changed because EBP separates lender sentiment from estimated default losses.
  • Declared z-score windows no longer imply that all requested observations exist. Each driver records its effective observation count, and composite coverage is reduced by effective ÷ declared while the computed score itself retains the declared weights.
  • Added tested historical base rates to all replayable tripwires. Static and calendar rules remain explicitly untestable rather than receiving invented success rates.

2026-07-27 — version 1.1

  • Added the AI-capex-cycle gauge: credit-quality spread 40%, semiconductor equity trend 30%, semiconductor industrial production 20%, and Nasdaq-100 leadership 10%.
  • Kept the AI gauge outside the regime blend. Its semiconductor equity leg is already present in the growth pulse, so including both would double-count one market price and require new quadrant labels.
  • Added the CCC-minus-high-yield quality-spread series so stress in the weakest borrowers cannot be hidden by a calm headline high-yield index.

2026-07-25 — version 1.0

  • Established the single score convention: −100 is restrictive, 0 is normal, and +100 is supportive for risk assets. Component signs are applied before weights so every gauge reads in the same direction.
  • Established the regime blend: liquidity 28%, cost of money 22%, risk appetite 14%, dollar pressure 13%, growth pulse 13%, and resource security 10%.
  • Established deterministic position scoring. Known tests contribute pushes on a four-step ladder; missing tests contribute nothing and reduce conviction; structural rules alone may produce avoid.
  • Established the 11 tripwire thresholds and their pre-declared responses.