Documentation Index
Fetch the complete documentation index at: https://docs.roboticks.io/llms.txt
Use this file to discover all available pages before exploring further.
Tamper-Evident Hash Chain
Every evidence pack a project produces is linked to its predecessor by hash and signed with a project-scoped Ed25519 key Roboticks holds in AWS KMS. The chain lets an auditor — or future-you, mid-recall — prove that no historical pack has been rewritten after the fact.The chain is per-project. Each project has its own root pack and its own KMS key; chains do not cross projects.
What is in the chain
Every pack’sevidence_pack.manifest.json carries a chain block:
parent_manifest_sha256is the previous pack’sself_manifest_sha256. The root pack carriesparent_pack_id: nullandparent_manifest_sha256: null.self_manifest_sha256is the SHA-256 of this manifest with thesignature.valuefield stripped (the signature cannot sign itself).signature.valueisEd25519Sign(privKey, self_manifest_sha256).
self_manifest_sha256 that no longer matches the parent_manifest_sha256 carried by every successor. The mismatch is detectable without re-verifying signatures.
Primitives
| Layer | Primitive |
|---|---|
| Manifest hashing | SHA-256 |
| Signing | Ed25519 |
| Key storage | AWS KMS, project-scoped |
| Public key distribution | Published at https://api.roboticks.io/api/v1/organizations/{org_slug}/projects/{project_slug}/evidence/public-key and embedded in every pack’s README.md |
Verifying a single pack
- Extracts the manifest, strips
signature.value, computes the SHA-256. - Confirms it matches
self_manifest_sha256. - Fetches the project’s public key (or uses the embedded copy with
--offline). - Verifies
Ed25519Verify(pubKey, signature.value, self_manifest_sha256). - Re-computes the SHA-256 of every artefact referenced in the manifest and compares to the declared hash.
Verifying the full chain
parent_manifest_sha256 link. Any failure stops the walk and prints the failing pack ID and reason.
For a project with 200 historical packs, expect a verify-chain to complete in ~30 seconds — most of the time is fetching manifests; signature math is microseconds per pack.
For long chains, parallelise the per-pack verification:
What an auditor can prove
A passingverify-chain proves:
- Authenticity — every pack was signed by the project’s KMS key, meaning the Roboticks platform produced it.
- Integrity — no artefact referenced in any pack has been altered since signing.
- Order — packs are linked in their original generation order; no historical pack was retroactively inserted or removed.
- Non-repudiation — the project owner cannot later disavow having signed a pack (the KMS key is logged and rotated audibly).
- The underlying tests were correct.
- The requirements pinned were the right ones.
- The auditor’s interpretation of the standard was correct.
Key rotation
Project KMS keys rotate annually as a matter of policy. Rotation does not invalidate historical signatures — old signatures continue to verify against the historical public key, which is retained in the chain manifest (signature.key_id records the exact key used at signing time).
Rotation is transparent to verification: the CLI fetches whichever historical public key the key_id resolves to.
What if a pack is missing
A pack can become unreachable — accidentally deleted in S3, evicted by an aggressive retention policy, lost in a region outage. The chain itself is unbroken (the successor still references the missing pack’s hash), but the missing pack cannot be re-verified.rbtk evidence verify-chain flags missing packs as MISSING and continues. The chain remains usable for every pack that is present; the missing one is documented in the verification report as an unrecoverable gap. The recommended remediation is to regenerate the pack from the same release (Releases are pinned commit sets; regenerated packs hash differently, but you can demonstrate the regeneration matches the original by re-running the same tests).