Skip to content

Commit 86d6798

Browse files
committed
Final cleanup: QT artifact consistency, README accuracy, strict JSON loader
- Publish qt_proxy as 0 (not null) with qt_proxy_is_zero_filled flag - Update duration notes to document zero-fill behavior - Fix README quickstart (remove untracked source .env) - Narrow README artifact-driven claim to match reality - Replace silent NaN repair in fetchJSON with console.error + fallback
1 parent 613c9e6 commit 86d6798

21 files changed

Lines changed: 323 additions & 302 deletions

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,19 @@ The public site at `site/index.html` is a static frontend (HTML + CSS + vanilla
4545
- **`site/figures/`** — SVG figures mirrored from `output/figures/`
4646
- **`site/data/index.json`** — the artifact manifest used for conditional rendering
4747

48-
The frontend never accesses raw or interim backend data. All numeric values, status text, coverage windows, and claim boundaries displayed on the site are loaded from backend-generated artifacts at runtime. `make site` mirrors the current `output/publish/` artifacts into the site bundle.
48+
The frontend never accesses raw or interim backend data. Numeric values, status counts, coverage windows, claim boundaries, and evidence-hierarchy roles are loaded from backend-generated artifacts at runtime. Some display labels, section prose, and model display ordering remain in frontend code. `make site` mirrors the current `output/publish/` artifacts into the site bundle.
4949

5050
## Quickstart
5151

5252
```bash
5353
python3 -m venv ~/venvs/qrawatch
54-
source .env
5554
"$HOME/venvs/qrawatch/bin/python" -m ensurepip --upgrade
5655
"$HOME/venvs/qrawatch/bin/python" -m pip install -r requirements.txt
5756
"$HOME/venvs/qrawatch/bin/python" -m pip install -e .
5857
```
5958

59+
If you have a local `.env` file with environment overrides (e.g. `VIRTUAL_ENV`), source it before running `make` commands.
60+
6061
With network access:
6162

6263
```bash

scripts/12_build_public_duration_supply.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030

3131
def add_duration_supply_variants(panel: pd.DataFrame) -> pd.DataFrame:
3232
out = panel.copy()
33+
qt_missing = out["qt_proxy"].isna()
3334
qt = out["qt_proxy"].fillna(0)
35+
out["qt_proxy"] = qt # publish the zero-filled value, not the raw NaN
36+
out["qt_proxy_is_zero_filled"] = qt_missing
3437
buybacks = out["buybacks_accepted"].fillna(0)
3538
if "nonbill_net_exact" not in out.columns:
3639
out["nonbill_net_exact"] = out["coupon_like_total"]
@@ -49,6 +52,7 @@ def add_duration_supply_variants(panel: pd.DataFrame) -> pd.DataFrame:
4952
out["sign_convention"] = SIGN_CONVENTION
5053
out["notes"] = (
5154
"Headline measure = exact combined non-bill net issuance + QT proxy - buybacks accepted. "
55+
"QT proxy is zero-filled when the FRED TREAST series is unavailable (see qt_proxy_is_zero_filled). "
5256
"Gross coupon-flow constructions remain explicit fallback columns."
5357
)
5458
return out

site/app.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
var resp = await fetch(DATA_PATH + '/' + filename);
1111
if (!resp.ok) return null;
1212
var text = await resp.text();
13-
var clean = text
14-
.replace(/\bNaN\b/g, 'null')
15-
.replace(/\b-Infinity\b/g, 'null')
16-
.replace(/\bInfinity\b/g, 'null');
17-
return JSON.parse(clean);
13+
if (/\bNaN\b|\bInfinity\b/.test(text)) {
14+
console.error('Artifact ' + filename + ' contains NaN or Infinity — backend should emit valid JSON. Attempting parse with repair.');
15+
text = text
16+
.replace(/\bNaN\b/g, 'null')
17+
.replace(/\b-Infinity\b/g, 'null')
18+
.replace(/\bInfinity\b/g, 'null');
19+
}
20+
return JSON.parse(text);
1821
} catch (e) {
19-
console.warn('Failed to load ' + filename + ':', e);
22+
console.error('Failed to parse ' + filename + ':', e);
2023
return null;
2124
}
2225
}
@@ -1418,7 +1421,7 @@
14181421
var durHeaderText = el('div', { class: 'chart-header-text' });
14191422
var durWeekCount = recent.length;
14201423
durHeaderText.appendChild(el('div', { class: 'chart-title', text: 'Public Duration Supply (Recent ' + durWeekCount + ' Weeks)' }));
1421-
var qtMissing = recent.some(function (r) { return r.qt_proxy == null || (typeof r.qt_proxy === 'number' && isNaN(r.qt_proxy)); });
1424+
var qtMissing = recent.some(function (r) { return r.qt_proxy_is_zero_filled === true; });
14221425
var durCaptionText = 'Weekly USD. Higher = more duration supply to private hands. Headline = exact non-bill net + QT proxy \u2212 buybacks.';
14231426
if (qtMissing) durCaptionText += ' Note: QT proxy is unavailable for some weeks and zero-filled in the headline construction.';
14241427
var durCaptionEl = el('div', { class: 'chart-caption', text: durCaptionText });

site/data/causal_claims_status.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
claim_id,claim_name,claim_scope,readiness_tier,public_role,headline_ready,causal_pilot_ready,source_quality,current_sample_financing_component_count,benchmark_ready_count,tier_a_count,context_only_count,post_release_invalid_count,source_family_exhausted_count,open_candidate_count,can_claim,cannot_claim,boundary_reason,last_regenerated_utc
2-
current_sample_financing_pilot,Current-sample financing pilot,causal_pilot_only,supporting_ready,supporting,False,True,derived_causal_claims_status,14,6,5,1,8,8,0,"A narrow post-2022Q3 financing-estimates pilot with 14 reviewed current-sample financing components, 6 benchmark-ready rows, and 5 Tier A components.","A settled or full-sample causal estimate of Treasury issuance effects on long rates; 8 financing rows remain post-release-invalid, 8 are source-family-exhausted, 0 remain open benchmark candidates, and the long-rate translation layer is still supporting/provisional.",14 current-sample financing rows; 6 benchmark-ready; 5 Tier A; 1 context-only; 8 post-release-invalid; 8 source-family-exhausted; 0 open candidates.,2026-03-25T17:43:58.519222+00:00
2+
current_sample_financing_pilot,Current-sample financing pilot,causal_pilot_only,supporting_ready,supporting,False,True,derived_causal_claims_status,14,6,5,1,8,8,0,"A narrow post-2022Q3 financing-estimates pilot with 14 reviewed current-sample financing components, 6 benchmark-ready rows, and 5 Tier A components.","A settled or full-sample causal estimate of Treasury issuance effects on long rates; 8 financing rows remain post-release-invalid, 8 are source-family-exhausted, 0 remain open benchmark candidates, and the long-rate translation layer is still supporting/provisional.",14 current-sample financing rows; 6 benchmark-ready; 5 Tier A; 1 context-only; 8 post-release-invalid; 8 source-family-exhausted; 0 open candidates.,2026-03-25T18:33:58.854568+00:00

site/data/causal_claims_status.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"can_claim": "A narrow post-2022Q3 financing-estimates pilot with 14 reviewed current-sample financing components, 6 benchmark-ready rows, and 5 Tier A components.",
2121
"cannot_claim": "A settled or full-sample causal estimate of Treasury issuance effects on long rates; 8 financing rows remain post-release-invalid, 8 are source-family-exhausted, 0 remain open benchmark candidates, and the long-rate translation layer is still supporting/provisional.",
2222
"boundary_reason": "14 current-sample financing rows; 6 benchmark-ready; 5 Tier A; 1 context-only; 8 post-release-invalid; 8 source-family-exhausted; 0 open candidates.",
23-
"last_regenerated_utc": "2026-03-25T17:43:58.519222+00:00"
23+
"last_regenerated_utc": "2026-03-25T18:33:58.854568+00:00"
2424
}
2525
]
2626
}

site/data/dataset_status.csv

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11
dataset,readiness_tier,source_quality,headline_ready,fallback_only,missing_critical_fields,last_regenerated_utc,review_maturity,public_role
2-
official_capture,headline_ready,exact_official,True,False,,2026-03-25T17:41:55.687787+00:00,headline_ready,supporting
3-
official_ati,headline_ready,exact_official_numeric,True,False,,2026-03-25T17:42:02.911116+00:00,headline_ready,headline
4-
qra_event_elasticity,supporting_provisional,manual_qra_shock_template_plus_event_panel,False,True,,2026-03-25T17:43:40.175696+00:00,provisional_supporting,supporting
5-
qra_event_registry_v2,supporting_ready,derived_event_ledger,False,False,,2026-03-25T17:43:57.974765+00:00,provisional_supporting,supporting
6-
qra_release_component_registry,supporting_ready,derived_component_registry,False,False,,2026-03-25T17:43:58.218498+00:00,provisional_supporting,supporting
7-
qra_benchmark_coverage,supporting_ready,derived_benchmark_coverage,False,False,,2026-03-25T17:43:58.218498+00:00,supporting_ready,supporting
8-
qra_benchmark_blockers_by_event,supporting_ready,derived_benchmark_blockers,False,False,,2026-03-25T17:43:58.562616+00:00,supporting_ready,supporting
9-
qra_benchmark_evidence_registry,supporting_ready,derived_benchmark_evidence_registry,False,False,,2026-03-25T17:43:58.218498+00:00,supporting_ready,supporting
10-
qra_causal_qa_ledger,supporting_ready,derived_causal_qa,False,False,,2026-03-25T17:43:58.508722+00:00,provisional_supporting,supporting
11-
causal_claims_status,supporting_ready,derived_causal_claims_status,False,False,,2026-03-25T17:43:58.519222+00:00,supporting_ready,supporting
12-
official_capture_history_status,supporting_ready,exact_official_window_plus_archive_scaffold_history,False,False,,2026-03-25T17:41:55.687787+00:00,supporting_ready,supporting
13-
official_capture_backfill_queue,supporting_ready,derived_backfill_queue,False,False,,2026-03-25T17:41:55.687787+00:00,supporting_ready,supporting
14-
event_design_status,supporting_ready,derived_event_design_status,False,False,,2026-03-25T17:43:58.519222+00:00,provisional_supporting,supporting
15-
qra_shock_crosswalk_v1,supporting_ready,derived_shock_crosswalk,False,False,,2026-03-25T17:43:59.112738+00:00,provisional_supporting,supporting
16-
treatment_comparison_table,supporting_ready,derived_treatment_comparison,False,False,,2026-03-25T17:43:32.165169+00:00,supporting_ready,supporting
17-
qra_long_rate_translation_panel,supporting_provisional,derived_long_rate_translation,False,True,,2026-03-25T17:43:59.112738+00:00,provisional_supporting,supporting
18-
event_usability_table,supporting_ready,derived_qra_usability,False,False,,2026-03-25T17:43:59.433317+00:00,supporting_ready,supporting
19-
leave_one_event_out_table,supporting_ready,derived_qra_robustness,False,False,,2026-03-25T17:44:03.587987+00:00,provisional_supporting,supporting
20-
auction_absorption_table,supporting_ready,derived_absorption_bridge,False,False,,2026-03-25T17:44:11.320997+00:00,supporting_ready,supporting
21-
plumbing,headline_ready,headline_exact_net_with_labeled_fallbacks,True,False,,2026-03-25T17:44:19.340738+00:00,headline_ready,headline
22-
duration,headline_ready,headline_hybrid_exact_with_labeled_fallbacks,True,False,,2026-03-25T17:44:24.470446+00:00,headline_ready,headline
23-
pricing,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.101963+00:00,provisional_supporting,supporting
24-
pricing_spec_registry,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.098742+00:00,provisional_supporting,supporting
25-
pricing_regression_summary,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.101963+00:00,provisional_supporting,supporting
26-
pricing_regression_robustness,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.125497+00:00,provisional_supporting,supporting
27-
pricing_subsample_grid,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.108528+00:00,provisional_supporting,supporting
28-
pricing_release_flow_panel,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:33.868710+00:00,provisional_supporting,supporting
29-
pricing_release_flow_leave_one_out,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.161971+00:00,provisional_supporting,supporting
30-
pricing_tau_sensitivity_grid,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.178542+00:00,provisional_supporting,supporting
31-
pricing_scenario_translation,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T17:44:43.132544+00:00,provisional_supporting,supporting
32-
extension_investor_allotments,summary_ready,summary_ready,False,False,,2026-03-25T17:42:45.859726+00:00,summary_ready,supporting
33-
extension_primary_dealer,summary_ready,summary_ready,False,False,,2026-03-25T17:42:57.344742+00:00,summary_ready,supporting
34-
extension_sec_nmfp,summary_ready,summary_ready,False,False,,2026-03-25T17:43:05.830433+00:00,summary_ready,supporting
2+
official_capture,headline_ready,exact_official,True,False,,2026-03-25T18:33:22.293280+00:00,headline_ready,supporting
3+
official_ati,headline_ready,exact_official_numeric,True,False,,2026-03-25T18:33:23.767777+00:00,headline_ready,headline
4+
qra_event_elasticity,supporting_provisional,manual_qra_shock_template_plus_event_panel,False,True,,2026-03-25T18:33:49.580500+00:00,provisional_supporting,supporting
5+
qra_event_registry_v2,supporting_ready,derived_event_ledger,False,False,,2026-03-25T18:33:58.601318+00:00,provisional_supporting,supporting
6+
qra_release_component_registry,supporting_ready,derived_component_registry,False,False,,2026-03-25T18:33:58.719576+00:00,provisional_supporting,supporting
7+
qra_benchmark_coverage,supporting_ready,derived_benchmark_coverage,False,False,,2026-03-25T18:33:58.719576+00:00,supporting_ready,supporting
8+
qra_benchmark_blockers_by_event,supporting_ready,derived_benchmark_blockers,False,False,,2026-03-25T18:33:58.871686+00:00,supporting_ready,supporting
9+
qra_benchmark_evidence_registry,supporting_ready,derived_benchmark_evidence_registry,False,False,,2026-03-25T18:33:58.719576+00:00,supporting_ready,supporting
10+
qra_causal_qa_ledger,supporting_ready,derived_causal_qa,False,False,,2026-03-25T18:33:58.849803+00:00,provisional_supporting,supporting
11+
causal_claims_status,supporting_ready,derived_causal_claims_status,False,False,,2026-03-25T18:33:58.854568+00:00,supporting_ready,supporting
12+
official_capture_history_status,supporting_ready,exact_official_window_plus_archive_scaffold_history,False,False,,2026-03-25T18:33:22.293280+00:00,supporting_ready,supporting
13+
official_capture_backfill_queue,supporting_ready,derived_backfill_queue,False,False,,2026-03-25T18:33:22.293280+00:00,supporting_ready,supporting
14+
event_design_status,supporting_ready,derived_event_design_status,False,False,,2026-03-25T18:33:58.854568+00:00,provisional_supporting,supporting
15+
qra_shock_crosswalk_v1,supporting_ready,derived_shock_crosswalk,False,False,,2026-03-25T18:33:58.981885+00:00,provisional_supporting,supporting
16+
treatment_comparison_table,supporting_ready,derived_treatment_comparison,False,False,,2026-03-25T18:33:45.275760+00:00,supporting_ready,supporting
17+
qra_long_rate_translation_panel,supporting_provisional,derived_long_rate_translation,False,True,,2026-03-25T18:33:58.981885+00:00,provisional_supporting,supporting
18+
event_usability_table,supporting_ready,derived_qra_usability,False,False,,2026-03-25T18:33:59.097179+00:00,supporting_ready,supporting
19+
leave_one_event_out_table,supporting_ready,derived_qra_robustness,False,False,,2026-03-25T18:34:00.796515+00:00,provisional_supporting,supporting
20+
auction_absorption_table,supporting_ready,derived_absorption_bridge,False,False,,2026-03-25T18:34:05.670726+00:00,supporting_ready,supporting
21+
plumbing,headline_ready,headline_exact_net_with_labeled_fallbacks,True,False,,2026-03-25T18:34:11.071110+00:00,headline_ready,headline
22+
duration,headline_ready,headline_hybrid_exact_with_labeled_fallbacks,True,False,,2026-03-25T18:34:14.002634+00:00,headline_ready,headline
23+
pricing,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.374923+00:00,provisional_supporting,supporting
24+
pricing_spec_registry,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.372983+00:00,provisional_supporting,supporting
25+
pricing_regression_summary,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.374923+00:00,provisional_supporting,supporting
26+
pricing_regression_robustness,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.378239+00:00,provisional_supporting,supporting
27+
pricing_subsample_grid,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.376871+00:00,provisional_supporting,supporting
28+
pricing_release_flow_panel,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:18.966542+00:00,provisional_supporting,supporting
29+
pricing_release_flow_leave_one_out,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.380368+00:00,provisional_supporting,supporting
30+
pricing_tau_sensitivity_grid,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.381092+00:00,provisional_supporting,supporting
31+
pricing_scenario_translation,supporting_provisional,derived_pricing_reduced_form,False,True,,2026-03-25T18:34:25.379121+00:00,provisional_supporting,supporting
32+
extension_investor_allotments,summary_ready,summary_ready,False,False,,2026-03-25T18:33:27.285138+00:00,summary_ready,supporting
33+
extension_primary_dealer,summary_ready,summary_ready,False,False,,2026-03-25T18:33:31.978975+00:00,summary_ready,supporting
34+
extension_sec_nmfp,summary_ready,summary_ready,False,False,,2026-03-25T18:33:37.646055+00:00,summary_ready,supporting
3535
extension_tic,not_started,not_started,False,True,,,provisional_supporting,supporting

0 commit comments

Comments
 (0)