Tenon
Standards

What actually changes hands.

A buyer does not acquire a repository. They acquire an artifact they can rebuild, verify, run and be answerable for. Containerisation settles how the software is packaged and settles nothing else — it does not make an artifact identifiable, attributable, enumerable, legally clean or operable by someone else. Those are five separate properties with five separate published standards behind them, and this page names each.

Someone else can own it, run it, and prove they own it.

The inventory, and the layers a technical acquirer audits — evidenced below, except those marked open. Both of those are ownership hygiene rather than engineering, named here and detailed under NDA.

Four codebases, and the commercial surface

Inventory

Issuer, orchestrator, catalogue and the shared contracts repository, with full history and tags — and the market-facing pages, the positioning, the naming and the marks. A buyer who has to write those first is months further from market than one who does not.

The rule corpus and the contracts

Inventory

Decision tables with their source in law, the release mechanism, the interface specifications and the models.

The record and the names

Inventory

Decision records, operating and privacy documentation, the dated audit trail, and the identity of each part.

Chain of title

Evidenced

Sole authorship. No contractors, no assignments to chase, no prior employer with a claim — one signature conveys the whole of it.

Provenance

Disclosed

One author working with an AI assistant under human direction, stated rather than left to be found. The co-authorship trailer is on roughly nine commits in ten, so it is a strong indicator and not a complete census, and it is written down that way.

Licences

Evidenced

A seller-run audit over reproducible inventories: no component obliges disclosure of proprietary source. Ten vendored components carry a visible-attribution condition, which the software honours. The browser libraries have their own inventory — 19 components a Python scanner cannot resolve, enumerated separately and each recorded with the basis its licence rests on. The container layer awaits one.

Data rights

Evidenced

A written processing record, a retention schedule that is enforced, and an erasure that survives a restore.

Continuity

Open

The runbooks, the migrations and a seed that rebuilds the estate through the software's own write paths all exist, and the build runs in continuous integration with no operator present. The deploy is now written down too: the repository layout and clone order, the environment variables by name, and which four of them cannot be regenerated without invalidating what has already been issued. What remains true is narrower and is stated rather than implied — the procedure has not been executed by anyone but the author.

Access

Open

Repositories, domains and hosting are personally held. Moving them is administrative rather than technical, and it is prepared with the transfer.

1.1.0 — eleven of eleven criteria met

1.0.0 was the phase closing. That number was reserved for eleven stated exit criteria, all eleven of which are met and dated. A version that moves without a criterion moving is a version nobody can read — so it moved when the last of them did. Release 1.1.0 is a patch on that line: corrections and fixes, with no criterion reopened.

Whichever path, this is what you would have to have.

The rule corpus

One hundred and sixty-nine rules across thirty-seven policies, each citing the instrument or market convention it derives from, and twenty-four statutory values each carrying its source, its publication date and the text it was read from — present on every one. Knowing which rules the statute requires, and what each governed value is, is research. It is the component a well-funded team cannot compress, because the work is reading law rather than writing code.

The credential rail

Standards-native rather than bespoke: the wallet protocols on both sides, SD-JWT VC issued and ISO mdoc verified alongside it, and the revocation the standard specifies. Eight runs against other people's suites, on their terms — and the second format proven against a credential the European Commission's own reference issuer produced.

The verification apparatus

What makes every claim here checkable by someone who did not write it: the suites, the gates that fail a build when a rule loses its citation, and a public register anyone can re-verify without asking. It cannot be bought separately from the thing it verifies.

The reasoning

Seventy-five decision records, including the turns that were taken and then corrected. A team starting fresh pays for those twice — once to make them, once to find them again.

Twenty-two items, against published standards.

The checklist was written, committed and dated before the audit began and was not amended while it ran — anything found afterwards is disclosed rather than added to it. A checklist that grows as you read is not a stopping condition.

IdentityWhich exact software is this?

01One annotated release tag per repository

Met

A single version carrier per codebase, and the four release together — they are contract-coupled, so a version identifies the estate rather than a component.

SemVer 2.0.0

02Images addressed by content digest

Met

Built by the pipeline and pushed to a registry. A tag is a label that can be repointed; a digest cannot.

OCI Image Spec 1.1 · Distribution 1.1

03Base images digest-pinned

Met

Tag-pinned bases build different software on different days.

OCI · reproducibility
AttributionWho built it, from what, and can that be proven?

04Build provenance

Met

Generated by the build service from its own environment, naming the exact commit of all four repositories. Provenance naming only one would describe a build that did not happen.

SLSA Build L2 · in-toto

05One signature over image, bill of materials and rulebook

Met

Signing only the binary is the common half-measure: what is inside and where it came from need the same signature as the thing itself. Each signature carries an RFC 3161 timestamp from an independent authority, so when it was made is attested by someone other than us — and the key that made it is held in a job that runs no build. The signatures cover the artifacts. The v1.0.0 release tag itself is not signed; from v1.0.1 the release tags are signed with a dedicated offline key whose public half is published.

Sigstore cosign
CompositionWhat is inside it, and what does it sign with?

06A bill of materials per build, attached to the image

Met

Not a file committed by hand months ago.

CycloneDX ECMA-424 · SPDX ISO/IEC 5962

07The bill of materials has been read

Met

Three hundred and thirty components read by the seller — every one, not a generated list. Nothing in the tree obliges source disclosure.

OSS M&A practice

08Vendored front-end code enumerated

Met

A Python bill of materials cannot see vendored JavaScript at all — so a second scanner enumerates it, and found 19 components where reading had found three. They are in the committed inventories; the document attached to a released image carries the Python set only.

CycloneDX

09A cryptographic inventory

Met

Thirty-one cryptographic assets measured from source, each citing file-and-line evidence. A credential rail stakes everything on its own signatures and had no inventory of them.

CycloneDX 1.6

10A stated post-quantum position

Met

Entirely classical, crypto-agile by construction, no migration planned — the horizon belongs to whoever owns it next.

EU PQC roadmap · NIS2
GovernanceIs it legally clean, and checked against something external?

11Licence in every repository

Met

Proprietary, all rights reserved, with the third-party position and a transfer clause.

12Open-source position

Held

What the estate holds, per service: a CycloneDX SBOM and a CBOM, signed and shipped with each release and bound to the image digest; a licence audit that records how each licence was established, not only what it is — the 330 application components read at source, and the 19 vendored browser components on three unequal bases: read from the file's own banner, taken from the distribution a file ships in where it carries no banner of its own, or asserted where neither is available. The bases are published separately because they are not equally strong, and a licence inventory that hides which is which invites a buyer to trust the weakest at the strength of the best. It records the obligations, the elections made and the components carried with reasons; third-party notices generated from the set the image installs, committed in each repository, with the build asserting their presence inside the image so a release cannot ship without the attribution; a known-vulnerability register with a stated cadence, where every advisory has a written disposition including the ones needing no action; and a release provenance predicate describing how, from what source, and by which workflow each image was built.

Neither OpenChain standard is claimed.

13Application security verification

Met

Against a published standard rather than a house checklist, with the findings stated.

OWASP ASVS 5.0
RegulatoryWhat does the law require of whoever places it on the market?

14Product classification, both conformity routes priced

Met

Assessed and deliberately not determined — that decision belongs to the buyer's counsel, who is also the party the obligation falls on.

15Coordinated disclosure policy with a reporting address

Met

In every repository — and the address receives mail, demonstrated by sending one and reading it back out of the mailbox, which is not something a policy can assume about itself. Behind it sits a register: every published advisory against a shipped dependency carries a written disposition, and the build refuses one that does not. A reporting address with nothing behind it receives reports it cannot answer.

16A stated security support period

Met

The five-year statutory floor, with the factors that point beyond it, recorded as the acquirer's commitment to make.

DocumentationCan somebody else run it, and know why it is the way it is?

17Why every decision was made

Met

Seventy-five decision records, including the turns taken and then corrected.

ISO/IEC/IEEE 15289

18Operator runbooks and a README per repository

Met ISO/IEC/IEEE 12207 · 26514:2022

19Information for the user

Met

All eight statutory clauses; seven answered here and three identity fields left blank on purpose, because they attach to whoever places the product on the market.

20Release notes per tag

Met

With the version policy stated: a version that moves without a criterion moving is a version nobody can read.

SemVer · ISO/IEC/IEEE 26511
Handover and substanceDoes the thing that makes it valuable travel with it?

21A transition plan

Met

Build, deploy, back up, restore, rotate keys — and the dates that fire on their own, with no operator present.

ISO/IEC/IEEE 12207 supply · 26512

22The rulebook as a signed artifact

Met

One hundred and sixty-nine rules exported to DMN documents and normalised JSON, every rule accounted for, under one signed manifest. It used to ship as a database dump that was not even in version control.

DMN 1.3 · CycloneDX data · cosign

For a decisioning product the image is not the asset. The governed rulebook is — so a delivery standard applied only to the container secures the engine and leaves the substance untracked.

None of it has to be taken on trust.

The release pipeline verifies its own output using only the public half of the signing key, and these are the commands it runs. ⚠ They are also the commands you would run — with the public key and registry access, which are shared at the owner's discretion rather than published. The software is private; what it can be checked against is not.

# the image, by digest — the identity, not the label cosign verify --key cosign.pub …/issuer@sha256:e8854f5… ✓ verified # what is inside it, and what it signs with cosign verify-attestation --key cosign.pub --type cyclonedx … ✓ verified # where it came from cosign verify-attestation --key cosign.pub --type slsaprovenance1 … ✓ verified # and the rulebook — 169 rules under one signed manifest cosign verify-blob --key cosign.pub --bundle rulebook.manifest.json.bundle ✓ verified

The same job then feeds the verifier a rulebook altered by one byte and requires the check to fail. A check that cannot fail proves nothing, so the pipeline proves its own can.

And the room the artifact arrives in.

Delivery is half of it. The other half is the record that travels alongside — re-verified against the running system rather than re-read.

  • Re-verifiedSix dated or counted claims in the dossier were re-measured against production. Five had moved — and not one was found by re-reading the sentence that stated it.
  • Carried riskEvery open finding is disclosed with the reason it is carried rather than fixed. A gate fails the build when an open finding is missing from that page, or when a dated disclosure has matured and still reads as future.
  • The clockMost of the governed-value attestations come due on 1 January 2027; past a sixty-day grace the issuer refuses to start. Left alone it would announce itself only in a boot log, so it is written down with its date.
  • Cover sheetOne page linking what was built, what was bought and what was reused, and pointing at where each transferability layer is evidenced.
  • Every advisoryA register of the known vulnerabilities in what ships, with a disposition for each — including the ones that need no action, which is the half a scanner alone never produces. It is also the machine input to the gate, so a disposition nobody wrote is a build that does not pass.

Four decisions, taken on what the industry does.

  • Key-based signingNot keyless. Keyless binds a workflow identity into a public certificate log, and these repositories are private, so there is no private keyless path. It costs nothing in assurance level.
  • No transparency logThe same reasoning: signature entries would put artifact hashes and a repository name into a permanent public log. Trusted time comes instead from an independent RFC 3161 authority, which the standard treats as co-equal to log inclusion and which publishes nothing. The choice is carried by a committed configuration file, so it can be read rather than inferred — and reversed with one edit by a buyer who goes public.
  • A five-year floorStated with the factors that point beyond it. The commitment is the acquirer's to make, so it is written as a floor and a rationale rather than a promise on their behalf.
  • The rulebook travelsFolded into the existing release steps rather than made a separate ceremony. What makes the product valuable ships under the same signature as what runs it.

Stated here rather than found later.

  • Build levelSLSA Build L2 is met. Signing runs in a job that executes no build steps, so build-time code from a dependency cannot reach the key. L3 is not met, and its requirements conflict with a private estate rather than being a level not reached. L3 asks for the signing key to be held by the build platform's own service account and every field of the provenance to be generated in a trusted control plane the tenant cannot influence; ours is a key we manage, used in our own workflow, with the predicate produced by a script in our own repository. The route that would satisfy it publishes the repository name to a public transparency log, and the reference implementation refuses private repositories by default for that reason. The job isolation above is hardening, not the control the standard specifies.
  • Not publicly discoverableSignatures are not published to a transparency log, so nobody outside can enumerate or monitor what this key has signed. That is the point — the estate is private — but it is also the cost: if the key were ever misused there is no public record in which to notice it. Holders of the public key can verify what they were given; they cannot audit what they were not.
  • Verification is not anonymousThe images are private, as the repositories are, and the public key is shared at the owner's discretion rather than published. So verifying any of the above takes one conversation first — deliberately, and it is said here rather than discovered. What a grant buys is the ability to check every claim on this page independently; what it does not require is trusting us about any of them.