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
Fuels and Electricity Emissions Service flow
Conforms a client's arbitrary fuels-and-electricity activity workbook to the fuels-and-electricity-bills resource type and commits it so GHG emissions are actually calculated. Resolves each row's site against the site resource type FIRST (a bill's site is per bill, not per workbook), extracts bills from the source workbook, parks any row missing a required field, carrying an unrecognised fuel type, naming an unmatched site, or carrying a date that does not name a full day for triage rather than guessing, and commits the approved bills via qb.commit_ingest so downstream emissions processing can run.
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
Installed bundles are copies — your workspace data stays in your workspace. Qonstrue Community Marketplace