• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zentralopensource / zentral / 39458801854
91%

Build:
DEFAULT BRANCH: main
Ran 20 Oct 2026 04:48PM UTC
Jobs 1
Files 1051
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

20 Oct 2026 04:11PM UTC coverage: 91.141% (+0.02%) from 91.124%
39458801854

push

github

np5
turbo: does the storage agree? the second axis

When the agent reports an upload, Zentral asks the storage about the object at
that key. It compares the size, and every digest that the storage recorded with
the one that the agent declared at the mint.

The two values reach that comparison by two independent paths. One went out at
the mint: S3 refused any body that did not match the values signed into the
upload, and the hosted destination checks the SHA-256 itself. It comes back as
the digest that the storage recorded. The other came home in the result.
Verification is where the two copies meet, and on S3 and GCS Zentral reads no
part of the file to do it. Only the file system storage, which records no
digest, reads the object back.

upload_digests publishes the digests that the storage records, except the
SHA-256, which the agent always computes: crc64nvme on S3, crc32c on GCS. On GCS
the agent then declares a CRC32C at the mint, and verification compares it with
the one that GCS recorded. Verification has no branch for a storage.

Both legs are checked. An agent whose result contradicts its own mint is
describing a different file, and comparing the stored object against the mint
alone would miss it — on a signing storage that comparison is nearly
tautological, since S3 enforced it on the way in.

verified / mismatch / missing lands on the row's own field, next to the status
and never instead of it, and rides the echoed entry into the result event as
`verification`, the verdict itself. The event now also carries run.id — what an
upload row is keyed on, without which the event describes an artifact nothing
can find.

Some answers are not answers, and none of them is recorded. A storage that timed
out, a key we may not read, an object with no stored digest, and an upload with
no declared digest to compare all leave the row pending, with a log entry: a
transient blip that marked artifacts permanently missing would be worse than no
answer at all. On a st... (continued)

60 of 60 new or added lines in 2 files covered. (100.0%)

53960 of 59205 relevant lines covered (91.14%)

0.91 hits per line

Jobs
ID Job ID Ran Files Coverage
1 39458801854.1 20 Oct 2026 04:48PM UTC 1051
91.14
GitHub Action Run
Source Files on build 39458801854
  • Tree
  • List 1051
  • Changed 3
  • Source Changed 3
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #39458801854
  • cee95e20 on github
  • Prev Build on main (#39440148240)
  • Next Build on main (#39508290593)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc