SKILL.md v11 sustainability

SBTi Target-Setting

Turn an emissions baseline into a signed-off SBTi commitment.

No reviews yet 0 installs
Guides a user from an emissions report already in their organisation's memory to a signed-off SBTi commitment, written back to memory as least and most ambitious target files, each with a recorded reference to the report it was built from. Recommends a baseline period and submission year for the user to confirm, runs the bundled sbti.py to compute the deterministic SBTi decision (route, valid target window, minimum ambition), and after sign-off writes a trajectory chart alongside the commitment.
sbtinet-zerotargetscommitmentemissions

Versions

  • v11 # Changelog ## 1.1.0 - A chart agent refused because the sandbox predates the blueprint's agents recreates the sandbox once and retries. ## 1.0.1 - Nothing the user reads names a path, a stored file or a field. The confirmation says the least ambitious and most ambitious commitments are saved in memory, built from the period's emissions report. ## 1.0.0 - The trajectory chart is drawn by the chart agents: one page for Scope 1 and 2 and one for Scope 3, each showing the committed path, no-action paths for industrial and developing economies, the 1.5°C path and the path projected from the latest reported emissions. - The sector growth assumption is no longer asked about; it shaped only the old chart. ## 0.18.1 - Pathways that fall on each other are drawn once, under the first one's style, and their legend row names all of them ("Target Pathway (= SBTi minimum 4.2%/yr)"). Two lines closer than twice the heaviest pathway stroke are one line to a reader. - `trajectory.y_scale` is the one place the value-to-screen mapping is built. ## 0.18.0 - Every chart mark names its role, and `chart_svg.py` writes it as a class, so a stylesheet can restyle the chart's colours and lines. Chart text carries its font inline. The PDF chart is unchanged. ## 0.17.0 - Added `chart_svg.py`, an SVG backend for the trajectory chart that consumes the same `chart_marks.marks` output as the PDF backend, for inlining into an HTML report. ## 0.16.0 - The organisation's emissions reports and SBTi targets live under `organization/me/` in memory: reports at `organization/me/emissions/<period>/report.json`, targets at `organization/me/targets/sbti/least-ambitious.json` and `most-ambitious.json`. `baselineRef` names the report at its new path. - `<CORTEX>` is stated as `/organization/local`. ## 0.15.0 - A signed-off commitment is written as two files in memory, `targets/sbti/least-ambitious.json` and `targets/sbti/most-ambitious.json`, one per tier, each holding that tier's targets keyed by scope. `emissions/targets/commitment.json` is no longer written; `tools/targets-migrate` moves an organisation's existing one. - `sbti.py` returns `commitments`, one document per tier keyed by file name, in place of `commitment`. ## 0.14.0 - Plotting the trajectory chart is its own step, so it happens on every signed-off commitment without the user asking. - A malformed chart payload is refused by name on stderr with a non-zero exit, instead of a traceback. Passing `commitment.baselineYear` (a fiscal-year label) where the integer base year is wanted previously produced an unopenable empty file when the caller redirected output. ## 0.13.0 Fixed organisation sizing to use the latest fiscal-year financials first, with profile fields and estimates as fallbacks for SME-versus-standard classification. ## 0.12.0 Moved chart styling and reference-line controls into configuration and modularized chart generation without changing rendered output. ## 0.11.0 Moved near-term targets to fixed configuration values and added a 10-year baseline-age guard before target setting. ## 0.10.0 Added sector-aware business-as-usual growth and a separate 1.5°C science pathway to the trajectory chart, with user-confirmed sector classification and economy-wide fallback. ## 0.9.0 Expanded standard targets with pathway-specific Scope 1+2 and Scope 3 ambition, baseline-relative 10-year target calculations, and corrected the chart’s SBTi minimum pathway. ## 0.8.0 Split Scope 1+2 into separate Scope 1 and Scope 2 chart bands, refined the SBTi minimum pathway and subtitle grouping, and adopted SBTi terminology for near-term and target pathways. ## 0.7.0 Redesigned the trajectory chart with separate Scope 1+2 and Scope 3 series, richer axes, milestones, reference lines, generated labels and legend, alongside a new scope-based input payload. ## 0.6.0 Removed the unreliable baseline symlink and made `commitment.json`’s `baselineRef` the single source of truth for resolving the current emissions report. ## 0.5.0 Changed the trajectory chart from SVG to preview-compatible PDF output at `/workspace/work/outputs/sbti-trajectory.pdf`, with rendering behavior otherwise unchanged. ## 0.4.0 Added baseline recommendation and confirmation, plus a validated post-sign-off trajectory chart. ## 0.3.0 Separated SME and standard target paths, simplified user-facing output, adopted 2050 net-zero targets, and fixed zero-baseline handling. ## 0.2.0 Introduced dynamic SBTi-aligned target calculations, Scope 3 and CRP requirements, structured eligibility reasoning, and rule corrections. ## 0.1.0 Added the initial SBTi target-setting workflow, commitment output, boundary tests, and percentage rounding. 9/28/2026
  • v10 # Changelog ## 1.0.1 - Nothing the user reads names a path, a stored file or a field. The confirmation says the least ambitious and most ambitious commitments are saved in memory, built from the period's emissions report. ## 1.0.0 - The trajectory chart is drawn by the chart agents: one page for Scope 1 and 2 and one for Scope 3, each showing the committed path, no-action paths for industrial and developing economies, the 1.5°C path and the path projected from the latest reported emissions. - The sector growth assumption is no longer asked about; it shaped only the old chart. ## 0.18.1 - Pathways that fall on each other are drawn once, under the first one's style, and their legend row names all of them ("Target Pathway (= SBTi minimum 4.2%/yr)"). Two lines closer than twice the heaviest pathway stroke are one line to a reader. - `trajectory.y_scale` is the one place the value-to-screen mapping is built. ## 0.18.0 - Every chart mark names its role, and `chart_svg.py` writes it as a class, so a stylesheet can restyle the chart's colours and lines. Chart text carries its font inline. The PDF chart is unchanged. ## 0.17.0 - Added `chart_svg.py`, an SVG backend for the trajectory chart that consumes the same `chart_marks.marks` output as the PDF backend, for inlining into an HTML report. ## 0.16.0 - The organisation's emissions reports and SBTi targets live under `organization/me/` in memory: reports at `organization/me/emissions/<period>/report.json`, targets at `organization/me/targets/sbti/least-ambitious.json` and `most-ambitious.json`. `baselineRef` names the report at its new path. - `<CORTEX>` is stated as `/organization/local`. ## 0.15.0 - A signed-off commitment is written as two files in memory, `targets/sbti/least-ambitious.json` and `targets/sbti/most-ambitious.json`, one per tier, each holding that tier's targets keyed by scope. `emissions/targets/commitment.json` is no longer written; `tools/targets-migrate` moves an organisation's existing one. - `sbti.py` returns `commitments`, one document per tier keyed by file name, in place of `commitment`. ## 0.14.0 - Plotting the trajectory chart is its own step, so it happens on every signed-off commitment without the user asking. - A malformed chart payload is refused by name on stderr with a non-zero exit, instead of a traceback. Passing `commitment.baselineYear` (a fiscal-year label) where the integer base year is wanted previously produced an unopenable empty file when the caller redirected output. ## 0.13.0 Fixed organisation sizing to use the latest fiscal-year financials first, with profile fields and estimates as fallbacks for SME-versus-standard classification. ## 0.12.0 Moved chart styling and reference-line controls into configuration and modularized chart generation without changing rendered output. ## 0.11.0 Moved near-term targets to fixed configuration values and added a 10-year baseline-age guard before target setting. ## 0.10.0 Added sector-aware business-as-usual growth and a separate 1.5°C science pathway to the trajectory chart, with user-confirmed sector classification and economy-wide fallback. ## 0.9.0 Expanded standard targets with pathway-specific Scope 1+2 and Scope 3 ambition, baseline-relative 10-year target calculations, and corrected the chart’s SBTi minimum pathway. ## 0.8.0 Split Scope 1+2 into separate Scope 1 and Scope 2 chart bands, refined the SBTi minimum pathway and subtitle grouping, and adopted SBTi terminology for near-term and target pathways. ## 0.7.0 Redesigned the trajectory chart with separate Scope 1+2 and Scope 3 series, richer axes, milestones, reference lines, generated labels and legend, alongside a new scope-based input payload. ## 0.6.0 Removed the unreliable baseline symlink and made `commitment.json`’s `baselineRef` the single source of truth for resolving the current emissions report. ## 0.5.0 Changed the trajectory chart from SVG to preview-compatible PDF output at `/workspace/work/outputs/sbti-trajectory.pdf`, with rendering behavior otherwise unchanged. ## 0.4.0 Added baseline recommendation and confirmation, plus a validated post-sign-off trajectory chart. ## 0.3.0 Separated SME and standard target paths, simplified user-facing output, adopted 2050 net-zero targets, and fixed zero-baseline handling. ## 0.2.0 Introduced dynamic SBTi-aligned target calculations, Scope 3 and CRP requirements, structured eligibility reasoning, and rule corrections. ## 0.1.0 Added the initial SBTi target-setting workflow, commitment output, boundary tests, and percentage rounding. 9/24/2026
  • v9 # Changelog ## 1.0.0 - The trajectory chart is drawn by the chart agents: one page for Scope 1 and 2 and one for Scope 3, each showing the committed path, no-action paths for industrial and developing economies, the 1.5°C path and the path projected from the latest reported emissions. - The sector growth assumption is no longer asked about; it shaped only the old chart. ## 0.18.1 - Pathways that fall on each other are drawn once, under the first one's style, and their legend row names all of them ("Target Pathway (= SBTi minimum 4.2%/yr)"). Two lines closer than twice the heaviest pathway stroke are one line to a reader. - `trajectory.y_scale` is the one place the value-to-screen mapping is built. ## 0.18.0 - Every chart mark names its role, and `chart_svg.py` writes it as a class, so a stylesheet can restyle the chart's colours and lines. Chart text carries its font inline. The PDF chart is unchanged. ## 0.17.0 - Added `chart_svg.py`, an SVG backend for the trajectory chart that consumes the same `chart_marks.marks` output as the PDF backend, for inlining into an HTML report. ## 0.16.0 - The organisation's emissions reports and SBTi targets live under `organization/me/` in memory: reports at `organization/me/emissions/<period>/report.json`, targets at `organization/me/targets/sbti/least-ambitious.json` and `most-ambitious.json`. `baselineRef` names the report at its new path. - `<CORTEX>` is stated as `/organization/local`. ## 0.15.0 - A signed-off commitment is written as two files in memory, `targets/sbti/least-ambitious.json` and `targets/sbti/most-ambitious.json`, one per tier, each holding that tier's targets keyed by scope. `emissions/targets/commitment.json` is no longer written; `tools/targets-migrate` moves an organisation's existing one. - `sbti.py` returns `commitments`, one document per tier keyed by file name, in place of `commitment`. ## 0.14.0 - Plotting the trajectory chart is its own step, so it happens on every signed-off commitment without the user asking. - A malformed chart payload is refused by name on stderr with a non-zero exit, instead of a traceback. Passing `commitment.baselineYear` (a fiscal-year label) where the integer base year is wanted previously produced an unopenable empty file when the caller redirected output. ## 0.13.0 Fixed organisation sizing to use the latest fiscal-year financials first, with profile fields and estimates as fallbacks for SME-versus-standard classification. ## 0.12.0 Moved chart styling and reference-line controls into configuration and modularized chart generation without changing rendered output. ## 0.11.0 Moved near-term targets to fixed configuration values and added a 10-year baseline-age guard before target setting. ## 0.10.0 Added sector-aware business-as-usual growth and a separate 1.5°C science pathway to the trajectory chart, with user-confirmed sector classification and economy-wide fallback. ## 0.9.0 Expanded standard targets with pathway-specific Scope 1+2 and Scope 3 ambition, baseline-relative 10-year target calculations, and corrected the chart’s SBTi minimum pathway. ## 0.8.0 Split Scope 1+2 into separate Scope 1 and Scope 2 chart bands, refined the SBTi minimum pathway and subtitle grouping, and adopted SBTi terminology for near-term and target pathways. ## 0.7.0 Redesigned the trajectory chart with separate Scope 1+2 and Scope 3 series, richer axes, milestones, reference lines, generated labels and legend, alongside a new scope-based input payload. ## 0.6.0 Removed the unreliable baseline symlink and made `commitment.json`’s `baselineRef` the single source of truth for resolving the current emissions report. ## 0.5.0 Changed the trajectory chart from SVG to preview-compatible PDF output at `/workspace/work/outputs/sbti-trajectory.pdf`, with rendering behavior otherwise unchanged. ## 0.4.0 Added baseline recommendation and confirmation, plus a validated post-sign-off trajectory chart. ## 0.3.0 Separated SME and standard target paths, simplified user-facing output, adopted 2050 net-zero targets, and fixed zero-baseline handling. ## 0.2.0 Introduced dynamic SBTi-aligned target calculations, Scope 3 and CRP requirements, structured eligibility reasoning, and rule corrections. ## 0.1.0 Added the initial SBTi target-setting workflow, commitment output, boundary tests, and percentage rounding. 9/22/2026
  • v8 # Changelog ## 0.14.0 - Plotting the trajectory chart is its own step, so it happens on every signed-off commitment without the user asking. - A malformed chart payload is refused by name on stderr with a non-zero exit, instead of a traceback. Passing `commitment.baselineYear` (a fiscal-year label) where the integer base year is wanted previously produced an unopenable empty file when the caller redirected output. ## 0.13.0 Fixed organisation sizing to use the latest fiscal-year financials first, with profile fields and estimates as fallbacks for SME-versus-standard classification. ## 0.12.0 Moved chart styling and reference-line controls into configuration and modularized chart generation without changing rendered output. ## 0.11.0 Moved near-term targets to fixed configuration values and added a 10-year baseline-age guard before target setting. ## 0.10.0 Added sector-aware business-as-usual growth and a separate 1.5°C science pathway to the trajectory chart, with user-confirmed sector classification and economy-wide fallback. ## 0.9.0 Expanded standard targets with pathway-specific Scope 1+2 and Scope 3 ambition, baseline-relative 10-year target calculations, and corrected the chart’s SBTi minimum pathway. ## 0.8.0 Split Scope 1+2 into separate Scope 1 and Scope 2 chart bands, refined the SBTi minimum pathway and subtitle grouping, and adopted SBTi terminology for near-term and target pathways. ## 0.7.0 Redesigned the trajectory chart with separate Scope 1+2 and Scope 3 series, richer axes, milestones, reference lines, generated labels and legend, alongside a new scope-based input payload. ## 0.6.0 Removed the unreliable baseline symlink and made `commitment.json`’s `baselineRef` the single source of truth for resolving the current emissions report. ## 0.5.0 Changed the trajectory chart from SVG to preview-compatible PDF output at `/workspace/work/outputs/sbti-trajectory.pdf`, with rendering behavior otherwise unchanged. ## 0.4.0 Added baseline recommendation and confirmation, plus a validated post-sign-off trajectory chart. ## 0.3.0 Separated SME and standard target paths, simplified user-facing output, adopted 2050 net-zero targets, and fixed zero-baseline handling. ## 0.2.0 Introduced dynamic SBTi-aligned target calculations, Scope 3 and CRP requirements, structured eligibility reasoning, and rule corrections. ## 0.1.0 Added the initial SBTi target-setting workflow, commitment output, boundary tests, and percentage rounding. 8/14/2026
  • v7 # Changelog ## 0.8.0 Split Scope 1+2 into separate Scope 1 and Scope 2 chart bands, refined the SBTi minimum pathway and subtitle grouping, and adopted SBTi terminology for near-term and target pathways. ## 0.7.0 Redesigned the trajectory chart with separate Scope 1+2 and Scope 3 series, richer axes, milestones, reference lines, generated labels and legend, alongside a new scope-based input payload. ## 0.6.0 Removed the unreliable baseline symlink and made `commitment.json`’s `baselineRef` the single source of truth for resolving the current emissions report. ## 0.5.0 Changed the trajectory chart from SVG to preview-compatible PDF output at `/workspace/work/outputs/sbti-trajectory.pdf`, with rendering behavior otherwise unchanged. ## 0.4.0 Added baseline recommendation and confirmation, plus a validated post-sign-off trajectory chart. ## 0.3.0 Separated SME and standard target paths, simplified user-facing output, adopted 2050 net-zero targets, and fixed zero-baseline handling. ## 0.2.0 Introduced dynamic SBTi-aligned target calculations, Scope 3 and CRP requirements, structured eligibility reasoning, and rule corrections. ## 0.1.0 Added the initial SBTi target-setting workflow, commitment output, boundary tests, and percentage rounding. 8/10/2026
  • v6 # Changelog ## 0.3.0 `leastAmbitious` is now an opinionated floor rather than a per-organisation calculation, and the SME and non-SME paths that build it are separate. - **Two paths, one floor.** `sme_least_ambitious` and `standard_least_ambitious` differ only in the note attached to the intermediate leaf — the SME path quotes the organisation's own Absolute Contraction minimum as context (Q41) and carries the Q46 validation note on Scope 3; the non-SME path cites C15/C16 for Scope 1+2 and C18 for Scope 3, both saying what must still be modelled before submission. This mirrors the two SBT commitment letters the platform ships. - **`final` is now the 2050 net-zero year**, not C13's outer near-term edge, pairing 42%/2030 with 90%/2050 as the platform default does. The full C13 window is still reported in `targetYearRange`. - **Nothing the user reads points at a source document.** A target leaf is now a `year` and a `reductionPercentage` and nothing else — no `sourceRule`, no `basis`, no `validationNote`. A scope block may carry one short plain-English `note`, and that is the only difference the two paths produce. The narrative fields (`scope3.reason`, `crp.note`, `ambition[].note`) were rewritten the same way: no criterion or FAQ numbers, no document names, no versions. `SKILL.md` and the blueprint prompt now forbid citing, linking or offering to fetch the SBTi documents, and forbid walking the eligibility conditions one by one — eligibility is stated as a conclusion with the values that decided it. - Rule provenance is unchanged and still complete; it lives where maintainers need it — `sbti_config.json`, `SOURCES.md` and the `sourceRule` fields on the internal evaluation output — and no longer travels into the commitment. - The Absolute Contraction engine is unchanged and still pinned to Method Appendix Table 1. It no longer feeds `build_targets`: the floor does not read the baseline at all. It stays as the method record for the per-organisation tier. - Fixed: `scope12_year_target` divided by zero for an SME baseline with no Scope 1 or 2 emissions. It now returns no percentage, symmetrically with the existing zero-Scope-3 handling. ## 0.2.0 Target ambition now follows the CNZS V1.3.1 Method Appendix (April 2026) rather than a flat `4.2% x years`. All thresholds verified against the primary SBTi documents; see `scripts/SOURCES.md` for the rule-by-rule ledger and `scripts/fetch_sources.sh` to re-fetch them. - **Absolute contraction is now dynamic.** Q41's `4.2%` is a floor ("must meet or exceed"), not the rate. Scope 1 and scope 2 sit on different pathways — scope 2 reaches net zero in 2040 — so a combined target blends them by emissions share and exceeds 4.2%/yr once scope 2 is a meaningful share. `aca_reference_rates` reproduces the appendix's Table 1 and is pinned by tests. - **Target years follow R7.** The near-term target year is 2030 while that is still ahead of submission (R7 exempts it from C13's 5-10 year window; SME FAQ Q38 confirms this governs the SME route), falling back to C13 once 2030 has passed. `recommendedTargetYear` was previously declared in config but read by no code path. - **Scope 3 carries a target on both routes**, on the well-below-2°C pathway (C18 + Method Appendix Table 2, minimum 2.5%/yr). Q46 exempts the SME route from _validation_, not from setting one, and a Carbon Reduction Plan requires scope 3 targets. SME scope 3 leaves carry a `validationNote`. - **CRP requirements are first-class output** — the five mandatory scope 3 categories and the net-zero-by-2050 commitment, cited to the PPN 006 Technical Standard. - **Eligibility reasoning is emitted, not narrated.** `determine_route` returns `rationale` with each condition, the value tested and the outcome, so drafts state why a route was chosen from data. The size test is three-of-four, all strictly less-than; exactly 250 employees fails the employee condition. - **Sector matching is case-insensitive.** "Financial Institution" no longer bypasses the hard exclusion. - Corrected: the 95% boundary rule is C5 footnote 7, not C3 footnote 7; the 90% net-zero figure is a scope 1+2+3 _reduction_ ambition, not a scope 3 coverage threshold. ## 0.1.0 - Initial SBTi target-setting skill: playbook for guiding a user from an existing Cortex emissions report to a signed-off SBTi commitment, written to `emissions/targets/commitment.json` with a live baseline symlink. - Added exact-ceiling boundary tests (combined == 10000 -> STANDARD, == 9999 -> SME) and instruction to round `reductionPercentage` to 1 decimal before writing. 8/3/2026
  • v5 # Changelog ## 0.2.0 Target ambition now follows the CNZS V1.3.1 Method Appendix (April 2026) rather than a flat `4.2% x years`. All thresholds verified against the primary SBTi documents; see `scripts/SOURCES.md` for the rule-by-rule ledger and `scripts/fetch_sources.sh` to re-fetch them. - **Absolute contraction is now dynamic.** Q41's `4.2%` is a floor ("must meet or exceed"), not the rate. Scope 1 and scope 2 sit on different pathways — scope 2 reaches net zero in 2040 — so a combined target blends them by emissions share and exceeds 4.2%/yr once scope 2 is a meaningful share. `aca_reference_rates` reproduces the appendix's Table 1 and is pinned by tests. - **Target years follow R7.** The near-term target year is 2030 while that is still ahead of submission (R7 exempts it from C13's 5-10 year window; SME FAQ Q38 confirms this governs the SME route), falling back to C13 once 2030 has passed. `recommendedTargetYear` was previously declared in config but read by no code path. - **Scope 3 carries a target on both routes**, on the well-below-2°C pathway (C18 + Method Appendix Table 2, minimum 2.5%/yr). Q46 exempts the SME route from _validation_, not from setting one, and a Carbon Reduction Plan requires scope 3 targets. SME scope 3 leaves carry a `validationNote`. - **CRP requirements are first-class output** — the five mandatory scope 3 categories and the net-zero-by-2050 commitment, cited to the PPN 006 Technical Standard. - **Eligibility reasoning is emitted, not narrated.** `determine_route` returns `rationale` with each condition, the value tested and the outcome, so drafts state why a route was chosen from data. The size test is three-of-four, all strictly less-than; exactly 250 employees fails the employee condition. - **Sector matching is case-insensitive.** "Financial Institution" no longer bypasses the hard exclusion. - Corrected: the 95% boundary rule is C5 footnote 7, not C3 footnote 7; the 90% net-zero figure is a scope 1+2+3 _reduction_ ambition, not a scope 3 coverage threshold. ## 0.1.0 - Initial SBTi target-setting skill: playbook for guiding a user from an existing Cortex emissions report to a signed-off SBTi commitment, written to `emissions/targets/commitment.json` with a live baseline symlink. - Added exact-ceiling boundary tests (combined == 10000 -> STANDARD, == 9999 -> SME) and instruction to round `reductionPercentage` to 1 decimal before writing. 7/31/2026
  • v4 # Changelog ## 0.1.0 - initial release Initial release of the SBTi Target-Setting blueprint with curator listing and integration. 7/30/2026
  • v3 # Changelog ## 0.1.0 - Initial SBTi target-setting skill: playbook for guiding a user from an existing Cortex emissions report to a signed-off SBTi commitment, written to `emissions/targets/commitment.json` with a live baseline symlink. - Added exact-ceiling boundary tests (combined == 10000 -> STANDARD, == 9999 -> SME) and instruction to round `reductionPercentage` to 1 decimal before writing. 7/30/2026
  • v2 # Changelog ## 0.1.0 - initial release Initial release of the SBTi Target-Setting blueprint with curator listing and integration. 7/23/2026
  • v1 # Changelog ## 0.1.0 - Initial SBTi target-setting skill: playbook for guiding a user from an existing Cortex emissions report to a signed-off SBTi commitment, written to `emissions/targets/commitment.json` with a live baseline symlink. - Added exact-ceiling boundary tests (combined == 10000 -> STANDARD, == 9999 -> SME) and instruction to round `reductionPercentage` to 1 decimal before writing. 7/23/2026
Installed bundles are copies — your workspace data stays in your workspace. Qonstrue Community Marketplace