JAWZDocs · regime changelog

Regime engine changelog

Every change to how Jawz composes its regime and cycle reads, dated. Presentation changes are not listed; classification changes always are.

The commitment

If your model is pre-registered against Jawz — a stored configuration hash, a backtest, a paper — you need our rules to change loudly or not at all. So: no change to classification semantics ships without an entry on this page, dated the day it deploys. Record this page’s latest entry date alongside your own configuration hash and the comparison stays auditable from both sides.

algorithm_version

Every Jawz tool that returns data carries a top-level algorithm_version: the date of the newest classification change on this page, currently 2026-10-02. It moves when, and only when, an entry marked as a classification change is added here, so it is the value to store beside your own configuration hash. If a later response carries a different one, the entries dated after yours are the complete list of what changed. Tools with their own versioned engine also carry a compute_version (for example regime-v11 on get_macro_regime, get_regime_history, score_position_drift and get_drift_alerts), which also moves on fixes that do not change a classification.

Entries

2026-10-02 — algorithm_version in every data tool response (note, not a classification change)

Not a classification change: the field promised above has shipped. Every Jawz tool that returns data now carries a top-level algorithm_version, the date of the newest classification change on this page (today 2026-10-02), and, where a tool has its own versioned engine, a compute_version (get_macro_regime, get_regime_history, score_position_drift and get_drift_alerts carry the regime engine's, e.g. regime-v11). Store algorithm_version with anything you derive from a response; if it differs from the one you stored, an entry on this page dated after yours explains the difference. The same release added observation dates beside as_of (data_as_of, and data_date on history transitions), transitions found between weekly samples (events_complete), window echoes on the history tools, a scope note and a curated China row on get_data_health, consensus_status on get_event_calendar and regime_boundary_inputs on get_macro_regime. Every one of them is a new field; no existing field, value or classification moved.

2026-10-02 — Business-cycle held_since is the start of the run (#69)

The cycle's confirmation walk read at most 13 prints, and when every print in that window agreed it reported the oldest print in the window as held_since, so each new print slid the date forward and the streak shrank while the season held. The walk now reads back until a print disagrees, so held_since is the first print of the current run. When it has to stop first (104 prints, the start of the print calendar, or a print that cannot be read) it reports the oldest print it checked and sets held_since_is_floor: true, and the note says 'since at least'. prints_held counts through the run's start. The quadrant itself is unchanged; the confirmation state's dates and counts are what moved.

2026-09-30 — Growth direction is a vote of output, jobs and investment; the season waits for two prints

The growth side of the business cycle was the factory-output trend alone. It is now a vote of three inputs, each read as growing, flat or stalling: factory output (industrial-production trend, same thresholds as before), jobs (initial claims, four-week average, against twelve weeks earlier: down more than 5% is growing, up more than 5% is stalling) and investment (real information-processing equipment and software, year on year: above 10% growing, below 0% stalling). Two of three decide; a mixed vote keeps the last decisive direction for up to eight prints. The confirmation rule changed too: the season changes only when two prints in a row agree (a print is any release of a cycle input), computed from what was known on each print date, instead of three consecutive daily reads counted from stored snapshots. On the day it shipped the season read SUMMER under the new rule where the old rule had read FALL; observed history rows keep the FALL published at the time and the regime history lists the change as a method event.

2026-09-25 — The money side of the regime light waits for a second weekly read

The regime colour now uses the HELD liquidity class: it changes only after two consecutive weekly reads agree on the new class, and until then the previous class stays and the pending lean is reported with its count (1 of 2). The rule is built from dated reads, not stored state, so any past date reproduces the same answer. The raw supportive/neutral/draining class in get_financial_conditions is unchanged; only what the light does with it moved. On the day it shipped the light for 2026-09-24 changed from RED to YELLOW (raw draining after two supportive weeks).

2026-09-12 — Global liquidity stays on four banks when the China statement is old

Until now the headline liquidity total dropped the People's Bank of China leg once its latest monthly statement was more than 90 days old, falling from a four-bank (g4) to a three-bank (g3) sum. That printed a step of about $7 trillion that was not a liquidity move, and it happened twice (2026-07-02 and 2026-07-31); an integrator's archive recorded the July step as a jump. From today the four-bank total is kept whenever any PBoC statement is on file: the China leg is carried forward at its last published value, and the response states exactly how stale it is — the month it labels, its age in days, how many monthly prints are missing and when the next one is due (PBoC posts 45–65 days after the month it labels). The g3 basis now appears only when no PBoC statement has ever been filed or the read fails. The supportive/neutral/draining classification is unchanged: it always compared like with like across the window. Reconstructed history rows are recomputed under this rule (cache keys bumped), so a reconstructed row that previously read g3 for a stale-China day now reads g4 with the staleness stated.

2026-08-30 — Reconstructed rows read true vintage data

Reconstruction now reads each series as it was actually published on the target date, instead of today's revised values filtered by observation date. This removes look-ahead bias, and it changes reconstructed values — sometimes across a threshold. Measured case: sentiment reconstructed for 2026-07-20 previously read 55.2, which is July's print and was not published until 2026-07-31; the value genuinely known that day was June's 49.5. The sentiment threshold is 55, so that row's classification changes. The same fix was applied to the curated China (PBoC) leg, which is published 45–65 days after the month it labels and was being selected by data month rather than by whether Jawz held it yet. Observed rows are untouched. This supersedes the 2026-06-29 note that reconstructed rows are not backtest-grade. One limit remains and is deliberate: reconstructions run today's engine, so they show what the current rules would have said given only what was known then — they are not a replay of the rules as they stood.

2026-08-20 — Cycle confirmation counts consecutive RAW quadrant reads

A pending quadrant change can now actually confirm; previously the confirmation counter could reset against the smoothed read. Affects when `cycle_confirmed` flips.

2026-08-17 — Growth is scored once (#43); cycle boundary reported as a direction (#44)

The growth indicator pillar and the cycle's growth composite are the same number and can no longer disagree. Boundary proximity is reported as a direction, not a score.

2026-08-05 — Hysteresis and boundary states on both axes (#28)

Regime colour and cycle quadrant gained confirmation rules and explicit on-boundary states. A single day's read near a threshold no longer flips the headline.

2026-07-14 — Inflation composite semantics clarified as direction

⬆/⬇ on the inflation composite mean direction of travel, not portfolio impact. The impact reading lives in the inflation pillar. Classification unchanged; interpretation contract tightened.

2026-06-29 — Daily observed snapshots begin

From this date, get_regime_history rows marked `observed` are true vintage — written the day they were read, never recomputed. Earlier dates are `reconstructed` from current-vintage data and are not backtest-grade.

2026-05-20 — G4 global liquidity: PBoC leg added (Mako-curated)

The liquidity input includes China's central bank when a fresh monthly publication is on file (basis `g4`), falling back to `g3` when it is stale. The basis is always named in the response.

2026-05-19 — Regime headline keys off G3 global liquidity

The liquidity input to the headline colour moved from the Fed balance-sheet trend alone to combined Fed+ECB+BoJ, FX-converted.

2026-04-27 — Threshold-based classification replaces summed scoring

Composite classifications derive from per-indicator thresholds rather than a summed score. The founding rule set of the current engine.

What counts as a classification change

Anything that could alter a regime colour, cycle quadrant, confirmation state, boundary state, or composite classification for the same underlying data: thresholds, input sets, confirmation windows, fallback rules, basis changes. Formatting, field naming, glossaries and other presentation-layer work does not qualify and is deliberately excluded, so this page stays high-signal.

Questions, or a use case that needs more than this? hello@jawz.ai — integrator feedback is where most of our roadmap comes from.