Two tracks for how evidence was made. Five properties for what a receiver verified.
Like SLSA, Makoto separates producer controls from receiver results. The Origin and Transform tracks each have three cumulative levels that a producer adopts one step at a time. A receiver's results are separate verified properties, carried in a standard SLSA Verification Summary Attestation. None of them is a correctness score.
makoto vsa summarize \
--report report.json \
--attestations bundle/attestations \
--policy receiver/policy.json \
--verifier-id https://verifier.example/makoto \
--key keys/verifier.private.pem \
--evaluation-out summary-evaluation.json \
--out summary.vsa.dsse.jsonKey principle. A track level says how origin or transformation evidence was produced. A verified property says what a verifier established for one handoff. A diagnostic says exactly why an attempted verification failed. Keep all three apart, and never read any of them as a claim that the data is correct.
The model at a glance
| Producer track | L1 | L2 | L3 |
|---|---|---|---|
| Origin | Traceable capture: the first observed bytes have origin evidence. | Platform-authenticated capture: a hosted capture platform generates and signs that evidence. | Policy-controlled capture: the platform continuously enforces declared capture controls. |
| Transform | Traceable execution: every step binds exact inputs, predecessors, operation identity, and outputs. | Platform-authenticated execution: a hosted pipeline generates and signs the evidence. | Hardened execution: isolated, ephemeral runs protect both execution and signing from user-controlled steps. |
Origin answers whether the data was captured under a known process. Transform answers whether its processing history was produced under a known execution process. Receiver results answer different questions: whether this handoff is authorized, graph-complete, schema-conformant, fresh, or reproduced.
No third track is needed. Transport integrity, authorization, completeness, freshness, schema conformance, privacy rules, and reproducibility are properties of a particular verification or policy, not independently adoptable producer processes.
How levels are counted
- Cumulative within a track. Each level includes everything below it.
- The weakest step sets the level. The level for a final artifact is the minimum qualified level among all reachable statements in that track.
- Absence is not promoted. A graph with no transformation has no Transform level; it is reported as
UNEVALUATED, never silently as L1. - A level names its authority. Receivers may accept or reject the authority that issued a level, but accepting a different trust root never recalculates the producer's level from unrelated bundle checks. The accepted level always names its assessment policy and issuer.
- Not an allow/deny score. A track level is never derived by grouping arbitrary receiver checks.
The stable identifiers are MAKOTO_ORIGIN_LEVEL_1, MAKOTO_ORIGIN_LEVEL_2, MAKOTO_ORIGIN_LEVEL_3, MAKOTO_TRANSFORM_LEVEL_1, MAKOTO_TRANSFORM_LEVEL_2, and MAKOTO_TRANSFORM_LEVEL_3, plus MAKOTO_ORIGIN_LEVEL_UNEVALUATED and MAKOTO_TRANSFORM_LEVEL_UNEVALUATED when no claim is made. They deliberately do not begin with SLSA_, which SLSA reserves for its own results.
Origin track
The Origin track grades the process that first captures data into a Makoto graph. It does not ask Salesforce, a partner API, or a sensor to adopt Makoto. The adopting producer is the collector or capture platform that observes that external source.
Origin L1 · Traceable capture
| User benefit | A consumer can trace the artifact to one claimed source observation instead of starting with an unexplained file. |
|---|---|
| Producer evidence | A core-valid Makoto origin statement names the source kind, unique event ID, claimed event time, and exact subject digests, and is carried in a valid DSSE envelope. |
| Receiver verification | Verify the envelope and payload through parse-strictly, core-schemas, index-payloads, and signatures; verify that each reachable root is an origin and that its subject digest is the predecessor digest used downstream. Artifact bytes, when supplied, must match. |
| Summary diagnostic | E_ORIGIN_LEVEL_1 |
Origin L2 · Platform-authenticated capture
| User benefit | A consumer can detect evidence added or changed after capture and can attribute the observation to a hosted capture platform rather than a person's workstation. |
|---|---|
| Producer evidence | Origin L1 evidence plus a SLSA VSA issued by the capture platform. Its inputAttestations include the exact origin envelope; its assessment policy requires automatic, contemporaneous provenance generation and a platform signing identity, rather than a user-supplied provenance document. |
| Receiver verification | Verify the VSA signature with a consumer-configured key; require the configured verifier.id and assessment-policy URI and digest; require verificationResult: PASSED, a subject matching the captured artifact, the exact origin-envelope digest in inputAttestations, and MAKOTO_ORIGIN_LEVEL_2 or higher in verifiedLevels. No fuzzy name or score is accepted. |
| Summary diagnostic | E_ORIGIN_LEVEL_2 |
Origin L3 · Policy-controlled capture
| User benefit | A consumer can tell that required source identifiers, capture timing, approvals, and content controls were enforced at acquisition rather than documented later. |
|---|---|
| Producer evidence | Origin L2 evidence plus a digest-pinned assessment policy and contemporaneous control evidence showing that the capture platform continuously enforced the organization's declared controls. Use-case fields such as source record or device ID, ingestion timestamp, run ID, approver, and source-specific SLO remain digest-pinned profiles or input attestations rather than universal core fields. |
| Receiver verification | Perform every Origin L2 check; require MAKOTO_ORIGIN_LEVEL_3; require the VSA policy digest to equal the consumer's expected L3 assessment policy; and require every profile and control-evidence digest named by that policy to be present and passing in the verification inputs. A missing, not_checked, or failed required control denies L3. |
| Summary diagnostic | E_ORIGIN_LEVEL_3 |
Origin L3 is analogous to SLSA Source L3: it provides evidence that declared organizational controls were enforced. It does not establish that a sensor reading was physically true or that an authorized collector was honest. The reference profile below is one standard control set for it.
Transform track
The Transform track grades the platform controls under which data transformations run and their provenance is produced.
Transform L1 · Traceable execution
| User benefit | A consumer gets a stack trace for data: the exact predecessor and operation behind every handed-off artifact are named. |
|---|---|
| Producer evidence | Every reachable non-origin node is a core-valid Makoto transformation statement binding each input digest to a predecessor statement and subject, naming an operation.type, and binding exact output digests. |
| Receiver verification | Require core-schemas, graph, graph-dependency-artifacts, roots-and-heads, and completeness-anchor to pass; recompute statement, predecessor, input, and subject digests. Missing or rewired steps fail deterministically rather than lowering a score. |
| Summary diagnostic | E_TRANSFORM_LEVEL_1 |
Transform L2 · Platform-authenticated execution
| User benefit | A consumer can detect tampering after the run and attribute the provenance to a hosted pipeline rather than user-authored metadata. |
|---|---|
| Producer evidence | Transform L1 evidence plus a platform-issued SLSA VSA. Its assessment policy requires all steps to run on hosted infrastructure and the platform, not user-defined steps, to generate and sign provenance. |
| Receiver verification | Verify the VSA signature, configured verifier identity, assessment-policy digest, subjects, and every referenced transformation envelope; require verificationResult: PASSED and MAKOTO_TRANSFORM_LEVEL_2 or higher. The receiver's trust input explicitly lists the platform or assessor key allowed to make this claim. |
| Summary diagnostic | E_TRANSFORM_LEVEL_2 |
Transform L3 · Hardened execution
| User benefit | A consumer gets strong evidence that another tenant, a prior run, compromised upload credentials, or user-defined pipeline code could not silently rewrite the execution evidence. |
|---|---|
| Producer evidence | Transform L2 evidence plus a qualification showing ephemeral and isolated execution; no cross-run memory, filesystem, service, or cache influence; no access by user steps to provenance signing material; and capture of every permitted external influence as an input or parameter. The qualification is named by exact policy digest in the VSA. |
| Receiver verification | Perform every Transform L2 check; require MAKOTO_TRANSFORM_LEVEL_3; pin the L3 assessment policy and verifier key; and verify every qualification evidence digest named by the VSA. A hardware quote may be an input only when the receiver explicitly trusts its quote verifier and policy. Raw quote bytes alone never satisfy L3. |
| Summary diagnostic | E_TRANSFORM_LEVEL_3 |
Makoto does not define a hardware-attestation wire format. Transform L3 defines the control outcome and uses the same delegation model as a SLSA VSA: a receiver trusts a named verifier under an exact assessment policy. A trusted Transform L3 assessment carries at least one raw hardware-evidence descriptor, only the evidence URI and SHA-256 digest, in its standard inputAttestations. Which TPM, TEE, confidential-computing, or cloud-attestation evidence to accept is an open question, and implementations must not advertise raw hardware verification they do not perform.
Verified properties
Track levels deliberately do not absorb receiver outcomes. Each property below is issued only when its exact rule passes against a schema-valid Makoto verification report and the exact consumer policy it names.
MAKOTO_AUTHORIZED
| User benefit | The receiver knows that the keys were allowed to make these source, operation, profile, and handoff claims. |
|---|---|
| Evidence supplied | The schema-valid verification report and the exact consumer policy identified by policyDigest. |
| Issued only when | signatures, authorization-thresholds, and authorization are pass, and handoff authorization is pass. |
MAKOTO_GRAPH_COMPLETE
| User benefit | The receiver can traverse from every handed-off artifact to all producer-declared origins and detect removed or rewired steps. |
|---|---|
| Evidence supplied | The signed handoff, all graph statements, supplied dependency artifacts, and the report. |
| Issued only when | index-payloads, graph-dependency-artifacts, graph, roots-and-heads, and completeness-anchor are pass. |
This is the one property beyond the four motivating examples. Lineage falsification and branch omission are receiver-established results, but neither is an Origin or Transform platform level, and none of the other properties says the presented graph is complete.
MAKOTO_FRESHNESS_ANCHORED
| User benefit | The receiver can reject a stale or replayed handoff relative to one explicit independent expectation or time policy. |
|---|---|
| Evidence supplied | The report plus the independently supplied expected manifest, head set, artifact set, nonce, or age policy used by verification. |
| Issued only when | freshness-anchors is pass and the report records at least one corresponding freshness method as pass. allowReplayableHandoff and not_checked never qualify. |
MAKOTO_SCHEMA_CONFORMANT
| User benefit | The receiver can detect declared schema drift, missing required metadata, privacy regressions, and content-policy violations in supported formats. |
|---|---|
| Evidence supplied | Digest-pinned required profiles, authenticated local catalog bytes, applicable artifact bytes, and the report. |
| Issued only when | core-schemas, metadata-profiles, and artifact-profiles are pass, the consumer policy required at least one profile, and every required profile record resolved and validated with pass. |
MAKOTO_REPRODUCED
| User benefit | A researcher or model builder can see that independent executions of the declared method produced the same exact result. |
|---|---|
| Evidence supplied | At least two allow reports and their referenced statements from independently operated Transform L2-or-higher platforms, using the same root artifact digests and producing the same transformation-node tuples and final subjects. Each node tuple is sorted input artifact digests, operation.type, tool.digest, parametersDigest, and sorted output subject names and digests. |
| Issued only when | Both graphs and reports verify, the platforms sit in distinct independence groups configured by the consumer, and the complete sorted node-tuple multisets and final subjects are exactly equal. Missing tool or parameter digests, reused independence groups, or any differing tuple fails. Repetition is not correctness. |
The verification summary
Makoto reuses the SLSA v1 Verification Summary Attestation instead of inventing a second summary envelope. It is an in-toto Statement v1 in DSSE whose predicateType is exactly https://slsa.dev/verification_summary/v1:
subjectholds the final artifact names and digests summarized.verifier,timeVerified,resourceUri,policy,inputAttestations,verificationResult,verifiedLevels,dependencyLevels, andslsaVersionkeep their SLSA meanings;slsaVersionis1.2.verifiedLevelscontains at most one highest value for each Makoto track plus every verified property whose exact rule passed.verificationResultisPASSEDonly when the report decision isallowand every level or property the summary policy requires was established. Otherwise it isFAILEDandverifiedLevelsholds onlyFAILED; the optional evaluation sidecar keeps any individually established levels, properties, and diagnostics.
A receiver accepts a VSA only after validating the DSSE signature, exact subjects, expected resourceUri, configured verifier ID and key, exact policy URI and digest, verificationResult: PASSED, required level and property identifiers, and every locally required input-attestation digest. This is a closed boolean procedure, not an opaque score. A consumer that needs the detailed reasoning keeps or recomputes the underlying report.
The statement, handoff, bundle, and verification-report wire formats do not change. The receiver supplies its VSA trust inputs in the existing trust policy's optional verificationSummary member: the resource URI, the exact summary-policy descriptor, the required levels and properties, and each trusted verifier's key IDs, verifier ID, accepted assessment policy, allowed level claims, required evidence, and independence group. There is no second policy file.
Summarize a verification
These are the reference CLI's flags at the pinned core commit. makoto vsa assess is what a capture platform or pipeline runs to issue an L2 or L3 assessment; makoto vsa summarize is what a receiver or delegated verifier runs over a completed report. summarize exits 1 when the summary does not pass.
# A platform assesses its own run at Transform L2.
makoto vsa assess \
--track transform \
--level 2 \
--input-attestation bundle/attestations/<statement>.dsse.json \
--verifier-id https://pipeline.example/makoto-assessor \
--resource-uri https://pipeline.example/runs/1234 \
--policy-uri https://pipeline.example/policies/transform-l2 \
--policy-digest sha256:<assessment policy digest> \
--key keys/assessor.private.pem \
--out transform-l2.vsa.dsse.json
# The receiver summarizes one verified handoff.
makoto vsa summarize \
--report report.json \
--attestations bundle/attestations \
--policy receiver/policy.json \
--assessment transform-l2.vsa.dsse.json \
--verifier-id https://verifier.example/makoto \
--key keys/verifier.private.pem \
--evaluation-out summary-evaluation.json \
--out summary.vsa.dsse.json
The report's policyDigest must equal the digest of the policy passed to summarize, and that policy must carry a verificationSummary member. The summary evaluator has its own closed diagnostic vocabulary, reported in the evaluation sidecar and never replacing the more specific bundle diagnostics: E_ORIGIN_LEVEL_1 through E_ORIGIN_LEVEL_3, E_TRANSFORM_LEVEL_1 through E_TRANSFORM_LEVEL_3, E_ASSESSMENT_TRUST, E_ASSESSMENT_SIGNATURE, E_ORIGIN_ASSESSMENT_SUBJECTS, E_ORIGIN_ASSESSMENT_INPUTS, E_TRANSFORM_ASSESSMENT_SUBJECTS, E_TRANSFORM_ASSESSMENT_INPUTS, E_PROPERTY_AUTHORIZED, E_PROPERTY_GRAPH_COMPLETE, E_PROPERTY_FRESHNESS_ANCHORED, E_PROPERTY_SCHEMA_CONFORMANT, E_PROPERTY_REPRODUCED, E_REQUIRED_VERIFICATION_RESULT, and E_REPORT_DENIED.
The Origin L3 reference profile
Core ships one standard reference profile for policy-controlled capture, origin-l3-reference-v1. Applied to an origin predicate, it requires a source record or device identifier, an ingestion timestamp, a run identifier, a non-null approver, and a freshness SLO. It is an example control set, not a universal core schema: producers pin its exact root and closure digests in an ordinary profile reference, receivers list that reference in the trusted Origin L3 assessor rule, and an organization may use a stricter private profile instead.
{
"$schema": "https://usemakoto.dev/schema/v0.2/profile-dialect.schema.json",
"$id": "https://usemakoto.dev/profiles/v0.2/origin-l3-reference-v1.schema.json",
"title": "Makoto Origin L3 reference capture controls",
"type": "object",
"required": ["event", "source", "extensions"],
"properties": {
"event": {
"type": "object",
"required": ["occurredAt"]
},
"source": {
"type": "object",
"required": ["uri"]
},
"extensions": {
"type": "object",
"required": ["https://usemakoto.dev/profile/origin-l3/v1"],
"properties": {
"https://usemakoto.dev/profile/origin-l3/v1": {
"type": "object",
"required": [
"sourceRecordOrDeviceId",
"ingestedAt",
"runId",
"approver",
"freshnessSloSeconds"
],
"properties": {
"sourceRecordOrDeviceId": { "type": "string", "minLength": 1 },
"ingestedAt": { "type": "string", "minLength": 20, "maxLength": 30 },
"runId": { "type": "string", "minLength": 1 },
"approver": { "type": "string", "minLength": 1 },
"freshnessSloSeconds": { "type": "integer", "minimum": 0 }
},
"additionalProperties": false
}
}
}
}
}
Its exact profile reference, which a producer pins and a receiver trusts:
{"closureDigest":{"sha256":"c02fed306cd6300d537c2664ad88b877dc5605b49b7d9dd0d03bf6c6332b6687"},"critical":true,"digest":{"sha256":"a6196356b740d8f7c72bce9093956c1e9457a8479a7b13269d00f9ff51af2f86"},"id":"https://usemakoto.dev/profiles/v0.2/origin-l3-reference-v1.schema.json","resources":[],"target":"predicate"}
Both are byte-for-byte the files in core docs/profiles/ at the pinned commit. The profile's $id is not served from this site yet: the hosted-schema release tooling mirrors only the core schema set, so resolve the profile from your local catalog by its digest, as every profile is resolved.
Seven checks behind every result
Levels and properties are built from seven separate answers a verifier gives. A report keeps all seven, so a receiver can always read past a summary to the evidence.
| Dimension | Evidence required | Feeds | What it does not establish |
|---|---|---|---|
| Structure | Core schemas and any required organizational profiles pass. | Origin and Transform L1; MAKOTO_SCHEMA_CONFORMANT | Who signed the claim or whether it is complete. |
| Authenticity | DSSE signatures authenticate the exact payload bytes. | Origin L1; MAKOTO_AUTHORIZED | Whether that key was permitted to make the claim. |
| Authorization | Receiver policy authorizes each key for its source, operation, profile, or handoff role. | MAKOTO_AUTHORIZED | Whether the claimed event really happened. |
| Continuity | Every transformation binds exact predecessor statements and input artifact digests. | Transform L1; MAKOTO_GRAPH_COMPLETE | Whether an entire branch was withheld. |
| Completeness | A signed handoff commits to exact roots, heads, statements, profiles, and final artifacts. | Transform L1; MAKOTO_GRAPH_COMPLETE | Whether an older complete handoff was replayed. |
| Artifact integrity | The receiver hashes the bytes it actually received and matches the signed subject. | Base verification (artifact-bytes) | Whether those unchanged bytes are safe or useful. |
| Freshness | An independent expected head, manifest, nonce, artifact, or age bound matches. | MAKOTO_FRESHNESS_ANCHORED | Data quality or source truthfulness. |
Adopting it step by step
- Start at one source (Origin L1)Choose a real collection boundary and bind a signed origin claim to exact source bytes.
- Append one transform (Transform L1)Make the next producer name its exact predecessor statement and input artifact instead of rewriting a shared history.
- Separate the receiverMove trust policy, authorization rules, and schema catalogs outside the producer's bundle.
- Sign the handoffCommit to the exact graph and artifacts intentionally transferred across the organizational boundary, and add private profiles for the rules that matter.
- Anchor itPin the expected manifest, head, or artifact through an independent channel, or require a nonce or maximum age.
- Move generation onto a platform (L2, then L3)Let a hosted capture platform or pipeline generate, sign, and assess the same evidence, then harden and isolate it.
Configuring the receiver
| If you need | What to configure | Property it supports |
|---|---|---|
| Signed evidence you can check | Signed origin and transform statements; configured public keys. | MAKOTO_AUTHORIZED |
| A partner or regulated handoff | Per-role authorizedKeyIds, a handoff key, and requiredProfiles for content rules. | MAKOTO_AUTHORIZED, MAKOTO_SCHEMA_CONFORMANT |
| A gate in front of load, mirror, or training | requireExpectedManifest, requireExpectedHead, requireExpectedArtifacts, or requireNonce with a consumer nonce. | MAKOTO_FRESHNESS_ANCHORED |
| Protection against one stolen key | minimumSignatures greater than one on the rules where a single key is not enough. | MAKOTO_AUTHORIZED |
One stolen authorized key can sign accepted statements, and even an internally consistent graph. Defeating it also needs the receiver's expected values, or a threshold above one. Hardware-backed keys, transparency logs, access controls, and governance systems may strengthen a deployment; none is implied by a passing report.
What the evidence looks like
A signed origin statement from the reference handoff, decoded. It is Origin L1 evidence: it binds the exact source bytes by digest and names the source kind and URI that receiver rules match against.
{
"_type": "https://in-toto.io/Statement/v1",
"predicate": {
"event": {
"id": "urn:uuid:11111111-1111-4111-8111-111111111111",
"occurredAt": "2026-09-16T16:00:00Z"
},
"profiles": [],
"schemaVersion": "0.2",
"source": {
"kind": "urn:makoto:demo:source:synthetic-file",
"uri": "urn:makoto:demo:v0.2:source:customers-raw"
}
},
"predicateType": "https://usemakoto.dev/predicate/v0.2/origin",
"subject": [
{
"digest": {
"sha256": "4e90181e7f75ccdf0e4d81c83d281f53806bed241787cdc751e22b2d4cd19919"
},
"name": "customers.raw.json"
}
]
}
Output of jq -r .payload attestations/56b7be43….dsse.json | base64 -d | jq . on the published envelope.
The receiver side of the same boundary: the rule that authorizes that origin claim, which MAKOTO_AUTHORIZED reads, and the handoff expectations that make MAKOTO_FRESHNESS_ANCHORED possible.
{
"rules": [
{
"authorizedKeyIds": [
"sha256:fd110d301d2f077de1414b8f99f441b1403fab207b2052fbd2c065e4ee8e7dc2"
],
"id": "urn:makoto:demo:rule:origin",
"minimumSignatures": 1,
"predicateTypes": [
"https://usemakoto.dev/predicate/v0.2/origin"
],
"sourceKinds": [
"urn:makoto:demo:source:synthetic-file"
],
"sourceUris": [
"urn:makoto:demo:v0.2:source:customers-raw"
]
}
],
"handoff": {
"allowReplayableHandoff": false,
"authorizedKeyIds": [
"sha256:d016df3d83373617c06b5e1d6359caa06eeba8b3af2c7077234f109f2194516c"
],
"minimumSignatures": 1,
"requireExpectedArtifacts": true,
"requireExpectedHead": true,
"requireExpectedManifest": true,
"requireNonce": false,
"requireRecipient": false
}
}
Output of jq '{rules: [.rules[] | select(.id == "urn:makoto:demo:rule:origin")], handoff}' policy.json on the published receiver policy.
From L1 evidence to a verified handoff
These are the command shapes the reference end-to-end proof runs, with its paths shortened. Steps 1 and 2 produce Origin L1 and Transform L1 evidence from a developer machine; L2 and L3 need a hosted platform to generate, sign, and assess that same evidence, as above.
# 1. Origin L1: sign an origin claim over exact bytes.
makoto key generate --private-out keys/origin.private.pem --public-out keys/origin.public.pem
makoto attest origin \
--subject customers.raw.json=data/customers.raw.json \
--source-kind urn:makoto:demo:source:synthetic-file \
--source-uri urn:makoto:demo:v0.2:source:customers-raw \
--event-id urn:uuid:11111111-1111-4111-8111-111111111111 \
--occurred-at 2026-09-16T16:00:00Z \
--key keys/origin.private.pem \
--out attestations/01-origin.dsse.json
# 2. Transform L1: append one step that binds its predecessor and input bytes.
makoto attest transform \
--subject customers.normalized.json=data/customers.normalized.json \
--input-binding bindings/normalize-input.json \
--operation-type urn:makoto:demo:operation:normalize \
--operation-name "Normalize customer records" \
--event-id urn:uuid:22222222-2222-4222-8222-222222222222 \
--occurred-at 2026-09-16T16:00:00Z \
--key keys/normalize.private.pem \
--out attestations/02-normalize.dsse.json
# 3. Separate the receiver: check its own policy before trusting it.
makoto policy check --policy receiver/policy.json
# 4. Sign the handoff over the exact graph and final artifact.
makoto handoff create \
--head attestations/03-public-safe.dsse.json \
--attestations attestations \
--artifact-binding bindings/final-artifact.json \
--schema-catalog receiver/catalog.json \
--key keys/handoff.private.pem \
--out bundle
# 5. Verify as the receiver, with receiver-held expectations.
makoto verify bundle bundle \
--policy receiver/policy.json \
--schema-catalog receiver/catalog.json \
--expected-manifest sha256:<published manifest digest> \
--expected-head sha256:<published head digest> \
--expected-artifact receiver/expected-artifact.json \
--json > report.json
Run the whole path, including private profiles and seven denial cases, with the end-to-end proof. Put step 5 in CI with any casebook gate workflow, then summarize the report when a downstream party needs a signed result.
What to ask for
| If you need | Ask the producer for | Require as a receiver |
|---|---|---|
| To know where a file came from and every step it went through | Origin L1 and Transform L1 | MAKOTO_GRAPH_COMPLETE |
| Assurance that nobody edited the evidence after capture or after the run | Origin L2 and Transform L2 from a hosted platform | MAKOTO_AUTHORIZED |
| Source IDs, ingestion time, run ID, and approver enforced at capture | Origin L3 under a pinned profile such as the reference profile | MAKOTO_SCHEMA_CONFORMANT |
| Protection from other tenants and user pipeline code rewriting evidence | Transform L3 | MAKOTO_AUTHORIZED |
| A gate that will not accept yesterday's valid release as today's | Any track level | MAKOTO_FRESHNESS_ANCHORED |
| Independent confirmation that a method repeats exactly | Transform L2 or higher from two independent platforms | MAKOTO_REPRODUCED |
Every row maps to the threat model, which follows the core failure-mode coverage matrix.
What Makoto does not cover
Makoto cannot establish that:
- a signer told the truth;
- a described transformation actually executed, unless a separately trusted Transform-track assessment establishes the execution controls, and even then it cannot establish that the transformation was correct;
- the source itself was correct, complete, licensed, safe, or legally usable;
- a bundle history is complete without an authorized handoff manifest, or fresh without an independently obtained expected manifest, head, or artifact set, nonce challenge, or consumer age policy; explicit replay acceptance waives rather than establishes freshness;
- an unavailable historical artifact still matches its recorded digest;
- a timestamp came from a trusted clock;
- a URI still serves the original bytes;
- signing keys were stored securely; or
- data is confidential merely because provenance exists.
Like SLSA, Makoto does not cover every way a producer can cause harm. It does not establish data-content correctness, code or model quality, freedom from bias or poison, the good intent of an authorized producer, confidentiality, legal compliance, deletion from every downstream copy, or the safety of a consumer that ignores a denial. A hardened platform limits who can tamper with an execution; it does not make the requested execution wise.
Handing off to a correctness process
Makoto will never certify data-content correctness. Its evidence is still what a correctness process needs. A downstream evaluator can consume Makoto's exact origin, operation, signer, graph, profile, and artifact identities; run domain tests, human review, calibration checks, retrieval evaluation, or model evaluation; and bind that result to the same digests in a separate attestation.
Makoto then supplies the stack trace for data needed to locate and replace a bad input or step. The downstream process owns the correctness judgment. That division keeps Makoto simple and transparent while making incorrect outcomes diagnosable and replaceable.
Start with traceable evidence. Harden where it is made. Verify what you received.
Every casebook gate already produces the report a verification summary reads. Start there, then ask your producers for the track level your decision needs.