Changelog

Follow up on the latest improvements and updates.

RSS

This release introduces an expanded transparent enclosure schema, giving users finer control over transparent envelope assemblies. Additionally, we improve how we handle PVWatts data.
Expanded glazing schema
We've redesigned how glazing is specified in the API, supplementing the simplified approach to add a more detailed and customizable schema. This approach largely mirrors our approach to opaque envelope assemblies.
  • Introduced per-assembly customization of service life, reuse percentages, and material specifications
  • Added display names for cladding descriptions to improve readability in outputs
  • Added full descriptions readouts for individual cladding assemblies in the response object
  • Added
    carbon_intensities.glazing_descriptions
    to the response object, containing complete envelope details
The original simplified schema remains available for backward compatibility.
Improve PVWatts Data Handling
We've made some improvements to how we manage data from PVWatts. These changes will not affect user's experience accessing that API via ours.
This release introduces an expanded opaque enclosure schema, giving users finer control over opaque envelope assemblies. Additionally, we improve data sources for fuel mix and make a few small bug fixes.
Expanded cladding schema
We've redesigned how cladding is specified in the API, supplementing the simplified approach to a more detailed and customizable schema:
  • Introduced per-assembly customization of service life, reuse percentages, and material specifications
  • Added display names for cladding descriptions to improve readability in outputs
  • Added full descriptions readouts for individual cladding assemblies in the response object
  • Aliased
    r_value
    to
    insulating_value
    to support both imperial (R-Value) and metric (RSI) insulation measurements
  • Added
    carbon_intensities.cladding_descriptions
    to the response object, containing complete envelope details
The original simplified schema remains available for backward compatibility.
Improvements to on-site combustion data sources
We've refactored how we handle on-site energy use from fossil fuel combustion:
  • Simplified background data across geographies to create more consistent results
  • Laid groundwork for future integration with OEDI data to increase resolution of energy-related estimates
  • This is the first step in a longer journey toward more precise regional energy modeling
Bug fixes
We've addressed several issues with project PDF reports:
  • Renamed "operational energy" for greater clarity
  • Fixed B6 emissions appearing when energy use was excluded from calculations
  • Corrected structure visualization when structure was excluded
  • Fixed errors in stored carbon reporting
Additionally, addressed a bug affecting some reuse projects where A5.2 emissions were still being calculated when that subphase phase was toggled off.
This release brings a few exciting new features, including enhanced unit system granularity, project-level Excel exports, and improvements to our biogenic carbon calculations.
Decouple ingress and egress unit systems
To offer more control over unit handling, we’ve upgraded the
ingress_unit_system
parameter and renamed it
unit_system
. Users can now pass an object with both an ingress unit system (input) and an egress unit system (output). If both are the same, you can continue using the parameter as before we'll ensure unit consistency. For backward compatibility, the top-level
ingress_unit_system
is still accepted as input and uses the declared unit system for both ingress and egress.
Project-Level Excel Exports
We’ve added new endpoints to support project-level Excel exports. This endpoint collects the time series and category by stages into a .xlsx export and hosts it in an S3 bucket.
Biogenic Carbon Methodology Updates
Our biogenic carbon calculations now include an additional calculation to account for wet vs. dry product density, this will affect the magnitude of stored biogenic carbon in some cases.

new

Hotfix!

Backend updates

2.47.02: Migrate Tokening Service

This morning, planned updates to MongoDB Atlas resulted in calls to our tokening service timing out. MongoDB, in their infinite generosity, will not share an RCA of the outage unless we move to the next billing tier. Regardless of what in their system caused the outage, the result was the same - downtime for our API and an accelerated effort to get the heck off MongoDB.
Once we were aware of the issue, we refactored the calls which were dependent on Atlas and redeployed. Total downtime was approximately 68 minutes.
Actions Taken
In this update, we move the entirety of our tokening and request increment workloads to an AWS-managed service which plays very nicely with our Lambda functions.
We have load tested this service extensively today and the results are stellar: low-latency and high reliability even at extraordinary call volumes. Additionally, we are mitigating against issues caused by timeouts by implementing retry and failovers in our tokening workloads. In load testing with up to 20 virtual users simultaneously sending high call volumes, we achieve:
  • P90: 496 ms
  • P95: 510 ms
  • P99: 699 ms

new

Hotfix!

Backend updates

2.47.00: Bug fix for complex forms

Earlier this week, an API user alerted us to an issue with the
stacked_form
endpoint where there were (pun intended) a few stacked/compounding issues. This release addresses these issues.
Diagnosis of the issue
A user approached us with two building examples which included multiple towers over a podium. The structural emissions estimates for that form were lower than expected, and the difference between the two options was wider than anticipated. A few of the issues we identified:
  • A high-rise mass timber building, which has few built or designed precedents. This stretched our background dataset to the very the edge.
  • A formally complex stack, which the model separated out into a number of smaller vertically-bearing portion of the building (C.Scale affectionately refers to these portions of a building as chunks).
  • The combination of multiple use types within a single chunk, which required partitioning of the chunk into multiple model runs to capture patterns by use type.
In reviewing the error, we identified an issue in how we were handling complex building forms with multiple use types in a single stack of levels. By performing a set of operations on each chunk individually, the algorithm which interpreted the building form was not tracking how these forms should be re-combined into a whole. This error was identified because the area-weighted SMQi for all chunks was not equal to the SMQi exposed in the API response.
In many cases, this error is small (within a few percent of the total) but, in this case, the three points above led to a more significant deviation. The combination of all these issues led to an underprediction of emissions and an unexpected scale of difference in prediction between a simpler and a more complex building form.
C.Scale's Response
To fix this issue, C.Scale made two changes -
  • Previously, we removed mass timber projects with very high steel quantities from our background data, leading to underpredictions for buildings of more than a few stories but more reliable predictions for low-rise buildings. We have reintroduced some mass timber buildings with higher steel quantities into the dataset to allow more reasonable extension of the data to mid-rise buildings. However, we note that this remains a data-scarce area of the mode.
  • The stacking algorithm has been rewritten to enforce that results for from each chunk of the building retain correspondence to the building as a whole.
Regression
After these fixes have been implemented, we see a change of -5% to +18% difference in emissions predictions for mass timber projects, and larger differences for complex stacked forms. These changes represent improvements to the model and bug fixes.
This patch release contains miscellaneous small improvements, most notably richer descriptive fields in the
carbon_intensities
response object and a preliminary version of the updated response schema.
Component Descriptions
In the
carbon_intensities
response object, we've added a
component_description
field to each item describing the material or assembly in some details. Occasionally, these are obvious (woodlumber is lumber) but sometimes less so (especially for assemblies which include many subassemblies, such as interiors).
Aliasing
refurb_pc
to
replacement_fraction
This is a non-breaking name change to create closer correspondence between the language we use in the API and how the LCA calculation is actually performed. We updated this name since we are counting B4 replacements and not B5 refurbishment. The choice of phrase here was determined in consultation with the Tally team to better align our language with theirs.
Time series bug fix
In some cases, A1-A3 emissions in building reuse scenarios were being incorrectly calculated in the time series object only. This bug fix addresses this issue, and includes additional unit tests to check for correspondence between the first year of the time series and A1-A3 emissions in the
category_by_stages
object.
Validation bug fix for
percent_conditioned_area
We were seeing a bug where users entered 0% conditioned area and were still seeing operational emissions present. This was due to the 0 being validated as a null value and then reset to 100%. In this update, we treat null-ish 0 and null values differently.
Remove duplicate D2 emissions
In cases where users inputted solar pv, D2 emissions were being double counted in
category_by_stages
as they appeared in both
pv_array
and
operational_energy
. This was ultimately a terminology issue, and we've corrected these results so that D2 emissions would only be present in
operational_energy
.
Experimental response schema
The current
calculation
response schema is getting long in the tooth. The structure of this schema evolved over time and, as the capabilities of the API have evolved, the schema's structure has shown itself to be a limitation. Additionally, we need to make space in the schema to work towards reconciling our BIM-based, BoM-based, and predictive models into a single calculation structure.
To preview the updated schema (still in development), set the top-level param
use_updated_schema
to
true
.
This release brings significant improvements to our Solar PV and Refrigerants modeling capabilities, offering users more granular control and precision in both areas. These updates are the culmination of our planned feature set for these modules, providing a more comprehensive and flexible approach to modeling their impacts 🎊
Solar PV Improvements
We've completely revamped how solar panels are specified in the API, moving from smart defaults to direct panel descriptions:
  • Added direct control over panel orientation with new tilt and azimuth parameters.
  • Replaced the obfuscatory
    efficiency_metric
    with a more direct and intuitive description of the panel
  • Simplified the model by removing an ambiguous orientation parameter, replacing it with a clearer
    losses
    parameter that uses our standard proportion format (0-1 range).
These changes allow for more accurate modeling of solar energy production across different panel configurations and installation scenarios.
Refrigerants Improvements
We've completely redesigned our refrigerants modeling to support both simplified and detailed approaches:
  • Simple Schema
    : For users who need quick estimates, our updated simple schema makes intelligent assumptions about refrigerant charge and uses average GWP values based on building type.
  • Detailed Schema
    : For users requiring precision, we've added a comprehensive refrigerants_present parameter that allows you to specify multiple refrigerant types from our expanded library, declaring a charge and leakage parameters for each.
This dual approach ensures that both casual users and detailed modelers have access to refrigerant emissions calculations at their preferred level of precision.
Backend Improvements
We've also made several improvements to our backend systems:
  • Refactored our time series calculation methods for better performance
  • Migrated reference data lookups to more performant data structures
  • Improved performance of our
    interiors
    takeoff engine, which had created some drag on overall response times in some circumstances
Regression
There is a regression in the calculation of panel area as we have re-set our default
ground_coverage_ratio
from 0.7 to 0.6 and upgraded our default panel capacity from 250W to 300W, reflective of user feedback about typical installations.
This update is the first of a few expanding the resolution of the interiors model, allowing input of the takeoffs and specifications on an assembly basis.
Additionally, there are two unit-related bug fixes.
Additional Resolution of Interiors Data
Previously, a user could only enter interiors data on a per-area basis for the entire area with an interiors fitout. This was difficult, as users couldn't target reductions or tune take-offs to better match their project or ambitions.
Now, users can input more granular data on the following: interior walls (
interior_walls
), interior doors (
interior_doors
), casework (
casework
), ceiling finish (
ceiling_finish
), floor finish (
floor_finish
), and fitout & equipment (
fitout_equipment
).
All of these improvements are detailed in the schema. For the simple schema, all takeoffs happen in the
interiors
object. For the stacked schema, all takeoffs happen with the
building_level
. In all cases, specifications, reuse, and service life parameters happen in the
interiors
object.
On-Site Combustion
We all make youthful mistakes, and one of ours was equivocating between 0,100 and 0,1 ranges for parameters that are conceptualized as percentages. Regrettable, but fixable. In this release, we're addressing this for one troublesome parameter (
onsite_fossil_fuel_use_percentage
). If a value is less than 1, we interpret the value as a proportion (0.67 is interpreted as 67%); if a value is greater than 1, we interpret it as a percent (67 is also interpreted as 67%).
We'll do a deeper (e.g. breaking) refactor here in the future, but this adjustment meets the needs of everyone currently using those parameters in production.
Bug Fixes
  • SMQi will now properly convert to lb/sf for IP projects.
  • Edited refrigerant charge description so that it is correctly described on an absolute basis. Previously, refrigerant charge was incorrectly described as being on a per-area basis
The refrigerant data exposed in the response object was erroneously subject to a unit conversion in our egress function. This has been fixed.
No change in calculation results
Since the data was correct in the calculation itself and the bug was only in how the data was presented in the response object, there are no changes to any calculation results.

new

General Updates

Backend updates

2.45.00: Misc. improvements

The last few weeks saw a massive evolution of our codebase as we work iteratively toward integrating our BIM, BoM, and predictive engines into a single shared architecture. In addition to progress this direction, we also delivered a number of smaller improvements targeting specific user feedback.
Expanded validation of existing parameters
The API can now accept a reference period of 25 years and all service life parameters can now accept any integer value (in years).
Expanded scope controls
Our users ask and they shall receive! In this release of the API, there are now include/exclude toggles on all life cycle stages and scope categories.
Reuse-related bug fix
Previously, some cases existed where building reuse scenarios led to a miscalculation of A5.2 Jobsite Emissions. Thanks to our diligent users, we identified the bug earlier this week and were able to push out a fix and expanding our library of unit tests to prevent this behavior in the future.
Optimize bulk endpoints
The bulk calculation endpoints were refactored to better parallelize IO-bound calculations. This is the first step in a longer journey of squeezing even more efficiency out of these endpoints to better support our portfolio clients and use cases that require massive parameterization.
No Changes to Calculation
There are no changes to calculation results in this release 🌴
Load More