github Institut-du-Numerique-Responsable/perf-sentinel v0.31.1

latest releases: chart-v0.31.3, v0.31.3, chart-v0.31.2...
one day ago

What's new in v0.31.1

v0.31.1 is about a disclosure PDF that showed less than the report it carries. The 0.31.0 PDF printed a reading of the report on its pages and left the rest in the attached report.json, so a field the report left empty, or never filled, did not show on paper. A document meant to be read by people who will not open the attachment has to show what is missing as plainly as what is there. The PDF now ends on an annex of every field the schema defines, absent ones marked, and the pages print the fields they used to skip. The release also lets verify-hash --url read a PDF and names the carbon model on the HTML dashboard.

Every field of the schema, absent ones included

The PDF ends on an annex that lists every field the schema defines, 159 paths in schema order, as the attached report.json carries it. A field the report does not carry, or carries empty, prints not reported in the warning colour, and a list prints one entry per row. The annex reads the attached bytes, not the parsed report, so a field the parser would fill with a default still reads as absent. A test derives the field list from the schema source, so a field added to the schema without the annex fails the build.

Since every field now reaches the page, a character outside the bundled fonts anywhere in the report makes it unrenderable, with exit code 5 and the reason unsupported_characters, where 0.31.0 only checked the fields it printed.

The pages print what they used to leave in the attachment

The cover carries the report UUID and its generation time, the header the VAT number and the OpenCorporates page. Each waste reading prints its avoidable energy beside its avoidable carbon, and the carbon total is split into its SCI terms, with the database and broker figures kept outside it. The method page prints the caveats of the ESRS crosswalk, the excluded environments, the measuring binary's hash and SLSA provenance, and the unchained, dropped and outside-period windows of the archive chain. The reference links are listed, the transparency link included when the cover could not draw its QR code.

The measuring binary row names each energy model beside its tag: Kepler, RAPL, active power only (kepler_ebpf), Scaphandre, RAPL per process (scaphandre_rapl), I/O proxy, monthly x hourly grid intensity (io_proxy_v3). An unknown tag prints as it is, and the tags in the report and in the annex do not change.

The runtime coverage bar no longer draws full when the report carries no runtime window. period_coverage reads 1.0 when absent, and the card beside it already said Not reported.

verify-hash --url reads a PDF

verify-hash --url took a PDF for JSON and stopped on expected value at line 1 column 1, while --report read the same file. A URL that serves a disclosure PDF now gets the same checks as --report report.pdf: the report, the attestation and the bundle come from the attachments, and no sidecar is fetched next to it. On the website's signed sample, verify-hash --url https://perf-sentinel.dev/exemple/disclosure/report.pdf with the sample's identity and issuer prints Overall: TRUSTED.

The dashboard names the carbon model

The HTML dashboard's Total CO2 cards, on the Overview and Carbon tabs, name the window's carbon model after the bracket, as in model io_proxy_v3 or model scaphandre_rapl+cal, the tag the JSON report and the terminal's Est. CO2 line already carry. The help text explains each tag.

In the simulation lab, a daemon image built from this release passed validate-findings 12/12, disclose 10/10, both verify-hash scenarios, the hybrid daemon-to-HTML scenario, output-formats-coverage and the SIGTERM drain.

Upgrade impact

  • A report with a character outside the bundled fonts in a field the pages did not print now fails disclose-pdf with exit code 5. Replace the character, or keep publishing the JSON alone for that report.
  • The PDF of a report is longer, by the annex pages.
  • perf-sentinel-core gains API: sentinel_core::score::carbon::co2_model_label, the readable name of a carbon model tag.
  • No finding appears, disappears or changes signature, no configuration key is added or removed, no route, metric or wire format changes, the embedded reference data keeps its vintages, and MSRV stays 1.99.0.

Full detail in CHANGELOG.md.

Verifying this release

# Binary integrity via SLSA build provenance attestation (Build Level 2)
gh attestation verify perf-sentinel-linux-amd64 \
  --repo Institut-du-Numerique-Responsable/perf-sentinel

# A periodic disclosure produced by this binary, with its attestation and bundle
perf-sentinel verify-hash --report perf-sentinel-report.json \
  --attestation perf-sentinel-report.intoto.jsonl --bundle perf-sentinel-report.sig \
  --expected-identity "https://github.com/Institut-du-Numerique-Responsable/perf-sentinel/.github/workflows/release.yml@refs/tags/v0.31.1" \
  --expected-issuer "https://token.actions.githubusercontent.com" \
  --verify-binary ./perf-sentinel-linux-amd64

gh CLI 2.49 or newer required for gh attestation verify. Releases up to v0.26.2 were attested under robintra/perf-sentinel and keep their own --repo and identity.

Don't miss a new perf-sentinel release

NewReleases is sending notifications on new releases.