blueprint.json v54 sustainability
Fuels and Electricity Emissions Service
Conform activity workbooks to bills and commit them for emissions calculation.
No reviews yet 2 installs
emissionsfuelselectricityghgscope-1scope-2sustainability
Versions
- v54 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/5/2026
- v53 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/5/2026
- v52 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/5/2026
- v51 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/4/2026
- v50 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/2/2026
- v49 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/2/2026
- v48 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/2/2026
- v47 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 10/1/2026
- v46 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/29/2026
- v45 # Changelog ## v3 - Fuels and Electricity Extract no longer ships binary files, which install cannot store. ## v2 - Add Archify showcase workflow diagram under `docs/` and `documentation` manifest. ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/29/2026
- v35 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/21/2026
- v34 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/21/2026
- v33 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/21/2026
- v32 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/20/2026
- v31 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/19/2026
- v30 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/18/2026
- v29 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/17/2026
- v28 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/17/2026
- v27 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/17/2026
- v26 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/17/2026
- v25 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/16/2026
- v24 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/15/2026
- v23 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/14/2026
- v22 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/14/2026
- v21 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/14/2026
- v20 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/11/2026
- v19 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/10/2026
- v18 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/8/2026
- v17 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/6/2026
- v16 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/4/2026
- v15 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/1/2026
- v14 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/1/2026
- v13 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/1/2026
- v12 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 9/1/2026
- v11 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/31/2026
- v10 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/28/2026
- v9 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/28/2026
- v8 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/28/2026
- v7 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/28/2026
- v6 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/28/2026
- v5 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/27/2026
- v4 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/25/2026
- v3 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/14/2026
- v2 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/12/2026
- v1 # Changelog ## v1 - Initial release: extract (workbook → `bills.json` conforming to `fuels-and-electricity-bills`, non-conforming rows parked for triage) → triage (grouped by reason, one decision per group) → commit (`qb.commit_ingest`, atomic, reporting created/updated/failed). - Never invents a value the source workbook does not contain — missing billing dates, unrecognised fuel types, and unresolved sites are parked, not defaulted. - Sites are resolved against the workspace's `site` resource type; the blueprint never creates a site. Site resolution is **step 1**, before extraction — the extractor needs the ids, and an agent asked to extract first has no site id at the moment it must supply one, which is an invitation to invent one. A bill's site is per bill, not per workbook: one workbook routinely carries bills for several sites, and a row naming a site that cannot be matched is parked rather than attributed to a default. - A date cell that does not name a full day (`2025`, `Mar-25`) is parked, never completed into a specific day the source never stated. - Commit reports "committed, processing started" only — emissions figures are never quoted, since they are calculated asynchronously after `qb.commit_ingest` returns. 8/11/2026