Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install "httpx==0.28.1" "duckdb==1.5.4" cryptography
- run: pip install "httpx==0.28.1" "duckdb==1.5.4" cryptography numpy # the app's parsers import both
- name: re-validate curated records (report only)
run: python -m sourcetool validate --only curated || true
- name: re-check every answers file against a fresh live sample
Expand Down
39 changes: 39 additions & 0 deletions answers/_drafts/REVIEW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Drafts of 2026-10-06 — review notes (by eye against the live sample; the validator checks paths and types only)

Drafted by `sourcetool answers-draft` with the operator's claude CLI (sonnet). PROMOTE = re-verified live and moved
into answers/ by `answers-promote`; HOLD = stays a draft until the named gap is closed; the rejected files carry
the validator's reasons.

| source | verdict | note |
|---|---|---|
| nhl-club-schedule | PROMOTE | week schedule (date, start time UTC, away/home) + games count; redraft under the no-duplicate guide |
| openf1-sessions | PROMOTE | upcoming sessions with ISO start times (axis hour after review), circuit and country; session count |
| nvd-cves-keyword | PROMOTE | CVE list (id, published, status, description) + total; hand fix: `utc: true` on `cve.published` (NVD times are zoneless UTC) |
| fdc-food-search | PROMOTE | food matches (description, category, data type), nutrients of the first match, total hits; DEMO_KEY sample |
| sec-companyfacts | PROMOTE | total assets, cash, shares outstanding, public float as dated lists; hand fix: `newest_first` removed (arrays run oldest → newest) |
| ercot-supply-demand | HOLD | data[] runs oldest → newest and the current reading sits at a moving index the spec cannot address; the two "current" values were dropped (they showed midnight's row); needs a last-row addressing rule before a current card is honest |
| treasury-mts | HOLD | `data[0]` mixes line items (src_line 27 vs 14 share a record date); which line is "total receipts" needs a row filter the sample does not make obvious |
| usaspending-awards-agency | HOLD | the model picked `agency_data_by_year[1]` — correct today (index 0 is the just-begun FY2027 with null values) but "latest populated year" is not expressible and the index goes stale once FY2027 fills in; needs a first-non-null rule or a fiscal-year param |
| met-search | DEAD | the endpoint answers HTTP 410 Gone; the weekly validate will mark the record failed |
| coingecko-chart | REJECTED | `prices` is a list of [epoch, price] pairs; no row path can address a pair element (spec gap: positional rows) |
| pubmed-search | REJECTED | the response is an id list and a count; no row cells to type |
| swpc-aurora | REJECTED | root keys carry spaces ("Observation Time") and the data is 65k [lon, lat, prob] triples; no forecast answer is expressible |

## Rejected for spec or parser gaps (the drafter found the right data; the closed spec cannot express or type it)

| source | gap |
|---|---|
| giss-global-temp | numbers like `-.19` (no leading zero) fail the number rule `-?\d+(\.\d+)?`; placeholder `***` cells |
| nsidc-arctic-ice | padded numeric cells (`" 10.231"`) and a units row (`" 10^6 sq km"`) under the header |
| treasury-yield-curve | US dates `MM/DD/YYYY` are not a `date`; no ISO axis cell |
| gml-co2-daily / gml-co2-monthly | year/month/day in separate columns (no date cell), oldest-first with the oldest 500 kept, placeholder `-9.99` |
| coingecko-chart | rows are positional pairs `[epoch, price]`; no row path can address an element |
| pubmed-search | an id list and a count; no row cells |
| swpc-aurora | root keys with spaces; 65k `[lon, lat, prob]` triples |
| nws-marine-zone | plain-text product; only a `text` value is expressible and the record declares `forecast` |

Spec v1.3 candidates these imply (each needs the app's engine to agree before the Library declares it): tolerant number
parsing (leading-dot and padded strings), `date_format` for US dates, a `units_row` skip for CSVs, positional row
cells (`[0]`, `[1]`) for pair arrays, a composite date from year/month(/day) columns, quoted root keys with spaces
(the path grammar allows `["Observation Time"]` — the drafter did not use it; worth a guide line), and a `last`
row address for oldest-first series (also the ERCOT hold).
121 changes: 121 additions & 0 deletions answers/_drafts/coingecko-chart.rejected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
{
"source_id": "coingecko-chart",
"answers": [
{
"name": "price_history",
"label": "Price History",
"words": [
"bitcoin price history",
"crypto price chart",
"coin price over time",
"price trend",
"historical prices",
"price chart",
"btc price history",
"coin price trend"
],
"primary": true,
"kind": "list",
"path": "prices",
"row": [
{
"path": "[0]",
"label": "Time",
"type": "time",
"utc": true
},
{
"path": "[1]",
"label": "Price",
"type": "number",
"unit": "USD"
}
],
"axis": {
"cell": "[0]",
"step": "hour"
}
},
{
"name": "market_cap_history",
"label": "Market Cap History",
"words": [
"market cap history",
"crypto market cap",
"coin market cap over time",
"market capitalization history",
"btc market cap trend",
"coin market cap chart"
],
"primary": false,
"kind": "list",
"path": "market_caps",
"row": [
{
"path": "[0]",
"label": "Time",
"type": "time",
"utc": true
},
{
"path": "[1]",
"label": "Market Cap",
"type": "number",
"unit": "USD"
}
],
"axis": {
"cell": "[0]",
"step": "hour"
}
},
{
"name": "volume_history",
"label": "Volume History",
"words": [
"trading volume history",
"crypto volume chart",
"coin volume over time",
"volume trend",
"btc trading volume",
"daily volume history"
],
"primary": false,
"kind": "list",
"path": "total_volumes",
"row": [
{
"path": "[0]",
"label": "Time",
"type": "time",
"utc": true
},
{
"path": "[1]",
"label": "Volume",
"type": "number",
"unit": "USD"
}
],
"axis": {
"cell": "[0]",
"step": "hour"
}
}
],
"problems": [
"answer price_history row[0]: bad path '[0]'",
"answer price_history row[1]: bad path '[1]'",
"answer market_cap_history row[0]: bad path '[0]'",
"answer market_cap_history row[1]: bad path '[1]'",
"answer volume_history row[0]: bad path '[0]'",
"answer volume_history row[1]: bad path '[1]'"
],
"draft_meta": {
"tool": "claude-cli",
"model": "claude-sonnet-4-6",
"is_local": false,
"prompt_sha": "e49487a36d62187c",
"date": "2026-10-06"
}
}
107 changes: 107 additions & 0 deletions answers/_drafts/ercot-supply-demand.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
{
"source_id": "ercot-supply-demand",
"answers": [
{
"name": "last_updated",
"label": "Last Updated",
"words": [
"when was ercot data updated",
"ercot data last refresh",
"last update time",
"ercot data timestamp",
"how fresh is ercot data"
],
"primary": false,
"kind": "value",
"path": "lastUpdated",
"type": "time"
},
{
"name": "demand_history",
"label": "Demand History",
"words": [
"ercot demand history",
"texas grid demand over time",
"historical demand data",
"power demand trend",
"grid load history",
"electricity demand chart",
"demand readings today"
],
"primary": true,
"kind": "list",
"path": "data",
"row": [
{
"path": "timestamp",
"label": "Time",
"type": "time"
},
{
"path": "demand",
"label": "Demand",
"type": "number",
"unit": "MW"
},
{
"path": "capacity",
"label": "Capacity",
"type": "number",
"unit": "MW"
}
],
"axis": {
"cell": "timestamp",
"step": "hour"
}
},
{
"name": "demand_forecast",
"label": "Demand Forecast",
"words": [
"ercot demand forecast",
"texas grid forecast",
"forecasted power demand",
"electricity demand forecast",
"grid load forecast",
"ercot forecast tomorrow",
"predicted grid demand texas"
],
"primary": false,
"kind": "list",
"path": "forecast",
"row": [
{
"path": "timestamp",
"label": "Time",
"type": "time"
},
{
"path": "forecastedDemand",
"label": "Forecast Demand",
"type": "number",
"unit": "MW"
},
{
"path": "availCapGen",
"label": "Avail Capacity",
"type": "number",
"unit": "MW"
}
],
"axis": {
"cell": "timestamp",
"step": "hour"
}
}
],
"sample_url": "https://www.ercot.com/api/1/services/read/dashboards/supply-demand.json",
"checked": "2026-10-06",
"draft_meta": {
"tool": "claude-cli",
"model": "claude-sonnet-4-6",
"is_local": false,
"prompt_sha": "5f24a9da44785efe",
"date": "2026-10-06"
}
}
68 changes: 68 additions & 0 deletions answers/_drafts/giss-global-temp.rejected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
{
"source_id": "giss-global-temp",
"answers": [
{
"name": "temp_anomaly_trend",
"label": "Global Temperature Anomaly",
"words": [
"global temperature anomaly",
"temperature trend",
"global warming trend",
"surface temperature anomaly",
"temperature anomaly history",
"nasa gistemp",
"giss temperature data",
"monthly temperature anomaly",
"climate temperature trend",
"how hot is earth getting",
"temperature anomaly by year",
"gistemp monthly data",
"global surface warming"
],
"kind": "list",
"primary": true,
"path": "rows",
"row": [
{
"path": "Year",
"label": "Year",
"type": "number"
},
{
"path": "Jan",
"label": "Jan",
"type": "number",
"unit": "°C"
},
{
"path": "Jul",
"label": "Jul",
"type": "number",
"unit": "°C"
},
{
"path": "Dec",
"label": "Dec",
"type": "number",
"unit": "°C"
}
]
}
],
"problems": [
"answer temp_anomaly_trend row[1]: Jan is \"-.19\", not number",
"answer temp_anomaly_trend row[2]: Jul is \"-.19\", not number",
"answer temp_anomaly_trend row[3]: Dec is \"-.18\", not number",
"answer temp_anomaly_trend row[1] at item 1: Jan is \"-.20\", not number",
"answer temp_anomaly_trend row[2] at item 1: Jul is \".00\", not number",
"answer temp_anomaly_trend row[3] at item 1: Dec is \"-.08\", not number",
"giss-global-temp: kind trend has no answer that serves it"
],
"draft_meta": {
"tool": "claude-cli",
"model": "claude-sonnet-4-6",
"is_local": false,
"prompt_sha": "a6094b2aaf68156b",
"date": "2026-10-06"
}
}
Loading
Loading