ATD Depot

oh-agent/skill-add 0.1.0 —— 信任证据

信任证据(L3)—— 四层、四档、徽章×字段满射,以及每一条的离线复核动作。审读这一步不需要人上网页:同一份东西 agent 用一个调用就能取。

索引快照

快照版本
4
新鲜度
fresh
过期时刻
2026-08-20T03:09:26Z
已签名
签名公钥 id
26a3d5d8e2be69dc8eb32bde563f761f
信任锚文档(字节面键)
trust-root/sha256/7b/7b9223430a0b48f7d8a9423561611b24676770fbd356f460fb54e60a1b0d015c.json

快照是已签名的字节面对象(ADR-0003 D1.4):离线消费方 GET 到它与信任锚文档之后,可以在没有本站、没有 typed 面的条件下自己复核整棵目录。本页只是它的一次投影。

四层证据

怎么自己复核(离线)
T1 完整性attestedGET the object at byte_plane_object and recompute sha256 locally
T2 来源absentGET the publisher bundle and the trust-anchor document, then verify the certificate chain and the pinned (identity, issuer) pair offline
T3 认证档attestedre-run the ruleset named in attested.certification.predicate.policy.ruleset against the same bytes and compare; the digest pins which rules were run
T4 后果absentread the four axes from the declared block; if verify is declared, run its read-back yourself

每一层都带一个可跑的复核动作:一个不能被独立复核的信任表述是徽章,不是证据(AN-4)。这些动作都不需要本站 —— 拿到字节面目录就能跑。

四档证据(结构分离,永不混排)

declared —— 作者自述

非权威 —— 发布者自己写的,Depot 原样承载、未做任何核实

publisher self-declared; carried verbatim and never synthesised (AN-5)

provenance

{
  "party": "3p",
  "publisher": "oh-agent",
  "signature_state": "unsigned"
}

consequence(后果四轴)

null

attested —— Depot 背书

权威 —— Depot 跑出来并签过,可离线复核(字段与复核动作见下)

publication(Depot 副署)

{
  "byte_plane_key": "attestations/sha256/9d/9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d/depot-publication.v1.dsse",
  "predicate": {
    "artifact": {
      "id": "oh-agent/skill-add",
      "kind": "skill",
      "version": "0.1.0"
    },
    "byte_plane": {
      "artifact_object": "objects/sha256/9d/9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d",
      "record_object": "objects/sha256/94/94b53b4e1c02bcee4d97a97ecf1c37292d3667cb4e1c12eb84e6d5367260ef6d",
      "trust_anchors": "trust-root/sha256/7b/7b9223430a0b48f7d8a9423561611b24676770fbd356f460fb54e60a1b0d015c.json"
    },
    "components": [],
    "digest": {
      "sha256": "9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d"
    },
    "publisher": {
      "declared": "oh-agent",
      "identity_verified": false,
      "oidc_issuer": null,
      "signer_identity": null,
      "signer_policy_version": null,
      "transparency_log": null
    },
    "received_at": "2026-08-13T03:09:26Z",
    "signature_state": "unsigned",
    "snapshot_version": 4
  },
  "predicate_type": "https://atd.run/attestation/depot-publication/v1",
  "signed_by": {
    "key_id": "103846a1976f0a64e714c0c0ab4d08fe",
    "key_provenance": "operator-supplied",
    "role": "countersign"
  },
  "subject": {
    "digest": {
      "sha256": "9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d"
    },
    "name": "oh-agent/skill-add@0.1.0"
  }
}

certification(认证档流水线)

{
  "byte_plane_key": "attestations/sha256/9d/9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d/depot-certification.v1.dsse",
  "predicate": {
    "aggregate_component_evidence_tier": null,
    "artifact": {
      "byte_plane_object": "objects/sha256/9d/9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d",
      "digest": {
        "sha256": "9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d"
      },
      "id": "oh-agent/skill-add",
      "kind": "skill",
      "version": "0.1.0"
    },
    "cert_tier": "Profile-Authored",
    "cert_tier_evidence_grade": "attested",
    "components": [],
    "consequence_gap": {
      "by_kind": {
        "skill": {
          "consequence_absent": 1,
          "consequence_declared": 0,
          "units": 1
        }
      }
    },
    "criteria": [
      {
        "id": "core/wire-conformance",
        "method": "atd-conformance --category discovery + --category effect",
        "state": "not_applicable",
        "tier": "Profile-Core",
        "why": "no unit of this artifact exposes an ATD wire of its own (the criterion measures a server); the artifact is consumed through the adopter's runtime"
      },
      {
        "id": "authored/authoring-lint",
        "method": "depot ingest lint: profile 8.6 SK3/SK4 + the F6 criteria applied to the declared consequence group + the static scan word list",
        "state": "pass",
        "tier": "Profile-Authored"
      },
      {
        "id": "authored/device-conformance",
        "method": "atd-conformance --category device",
        "state": "not_applicable",
        "tier": "Profile-Authored",
        "why": "no unit of this artifact exposes an ATD wire of its own (the criterion measures a server); the artifact is consumed through the adopter's runtime"
      },
      {
        "id": "certified/adopter-ci-discovery-conformance",
        "method": "discovery conformance running in the adopter's own CI",
        "state": "not_evaluated",
        "tier": "Profile-Certified",
        "why": "by definition this runs in the adopter's CI, outside the depot; the depot MUST NOT attest it (ADR-0003 D4.2)"
      },
      {
        "id": "certified/adopter-validation-issue",
        "method": "adopter-validation issue closed-verified",
        "state": "not_evaluated",
        "tier": "Profile-Certified",
        "why": "a human governance act in the adopter's tracker; outside the depot and never attestable by it (ADR-0003 D4.2; AN-7 names the human step)"
      }
    ],
    "findings": [],
    "policy": {
      "profile_version": "atd-discovery-profile as pinned by this build's upstream rev (see Cargo.lock)",
      "ruleset": {
        "rules": [
          {
            "id": "SK3",
            "source": "atd-discovery-profile §8.6 (description present, <= ~1024 chars)"
          },
          {
            "id": "SK4",
            "source": "atd-discovery-profile §8.6 (name unique within one source)"
          },
          {
            "id": "skill-frontmatter",
            "source": "oh-cli scan_skill_md (ADR-0004 D2.1 production leg)"
          },
          {
            "id": "F6-reversibility",
            "source": "atd doctor --authoring F6, applied to the declared consequence group"
          },
          {
            "id": "F6-side-effect-scope",
            "source": "atd doctor --authoring F6"
          },
          {
            "id": "F6-verifiability-class",
            "source": "atd doctor --authoring F6"
          },
          {
            "id": "verify-answered",
            "source": "ADR-0030 (open_loop is an answer, not an absence)"
          },
          {
            "id": "static-scan",
            "source": "oh-agent#127 skill-import-check word list (ADR-0004 D2.1)"
          },
          {
            "id": "consequence-gap",
            "source": "atd-discovery-profile W10 + PRD M5 (per-kind gap quantification)"
          }
        ]
      },
      "ruleset_digest": "62d680c0599dba4526cd6dbf1491d28e5d5d90f1b94ec530c558e452695f8e68"
    },
    "time_verified": "2026-08-13T03:09:26Z",
    "verifier": {
      "id": "atd-depot",
      "version": {
        "atd_conformance": null,
        "atd_doctor": null,
        "depot": "0.0.0"
      },
      "version_absent_why": {
        "atd_conformance": "requires a live server; ADR-0002 D2.5 excludes sandboxing and dynamic behaviour analysis, so the depot MUST NOT attest it (ADR-0003 D4.2) — a publisher-run report of this check is `declared`, never `attested`",
        "atd_doctor": "the depot does not invoke `atd doctor` on an artifact: that lint eats a ToolDefinition, which an artifact does not have. The depot applies the same F6 criteria to the declared consequence group instead, and records those rules in policy.ruleset (see depot-server publish::lint)"
      }
    }
  },
  "predicate_type": "https://atd.run/attestation/depot-certification/v1",
  "signed_by": {
    "key_id": "5af107687c5e2ba81bd7baf5de02089f",
    "key_provenance": "operator-supplied",
    "role": "certification"
  },
  "subject": {
    "digest": {
      "sha256": "9deb4641aaf7f497cd4c849383d5982130ffc09e09661492ede23a5d123d7f2d"
    },
    "name": "oh-agent/skill-add@0.1.0"
  }
}

community —— 第三方

非权威 —— 第三方提交;MVP 期没有这个通道,因此这一块恒空

no third-party submission channel exists in the MVP; this block is present and empty rather than omitted, so that an empty non-authoritative region is distinguishable from one that was never rendered (ADR-0002 D3.8)

条目数:0

absent —— 缺席

缺席 —— 没有这一层证据;缺席被计数,不被推断、不被填默认值

缺席的层数
2
哪些层
["t2_provenance","t4_consequence"]

an absent layer is rendered as absent and counted; the depot never infers, defaults or summarises one into existence (AN-5)

撤回与有害判定(状态位)

撤回(yank)

未撤回 —— 这条索引记录上没有撤回状态位。

有害判定

无有害判定 —— 没有任何一方在此断言过这份字节有害。

两个状态位住在被签名的索引快照里(可变状态的唯一住处,ADR-0003 D1.4),自由文本理由住在字节面上一份写入即不可变的声明文档里。离线复核两步:验快照签名 → 取声明文档重算 sha256。
撤回可逆:恢复之后,下一份快照里这个对象就不在了——不留 lifted_at,也不留「已失效」标记;历史住在那两份永不删除的声明文档里。

徽章 × 字段满射表

信任表述支撑它的字段(JSON Pointer)复核动作
t1_integrityattested/artifact/t1/grade
/artifact/t1/digest/sha256
/artifact/t1/byte_plane_object
GET the object and recompute sha256
t2_provenanceabsent/artifact/t2/grade
/artifact/t2/signature_state
/artifact/t2/signer
verify the publisher bundle against the pinned (identity, issuer)
signature_stateunsigned/artifact/t2/signature_state
/artifact/attested/publication/predicate/publisher/identity_verified
/artifact/attested/publication/signed_by/key_id
verify the depot publication attestation with the key named in the trust-anchor document
cert_tierProfile-Authored/artifact/t3/cert_tier
/artifact/attested/certification/predicate/criteria
/artifact/attested/certification/predicate/policy/ruleset_digest
re-run the pinned ruleset and compare the per-criterion states
t3_cert_evidenceattested/artifact/t3/grade
/artifact/attested/certification/signed_by/key_id
verify the certification attestation's DSSE signature offline
t4_consequenceabsent/artifact/t4/grade
/artifact/declared/consequence
read the four axes from the declared block and, if verify is declared, run the read-back
key_provenanceoperator-supplied/artifact/attested/publication/signed_by/key_provenance
/artifact/attested/certification/signed_by/key_provenance
compare the key_id against the depot_keys records in the trust-anchor document
snapshot_freshnessfresh/artifact/snapshot/freshness
/artifact/snapshot/expires_at
compare expires_at against your own clock; a mirror that froze an old snapshot shows stale here
snapshot_signed/artifact/snapshot/signed
/artifact/snapshot/key_id
/artifact/snapshot/trust_anchors_object
verify the snapshot's detached signature over its signing bytes with the snapshot key
yank_state未著录(absent)/artifact/yank
/artifact/snapshot/signed
verify the snapshot signature, then re-hash the statement object
harm_state未著录(absent)/artifact/harm
/artifact/snapshot/signed
same two steps; a harm verdict is evidence, never an enforcement action
gap_count2/artifact/absent/count
/artifact/absent/layers
count the layers whose grade is absent and compare

这张表就是 AN-4 的验收面:每个信任表述都要指得到同一份响应里解析得到的字段。门禁的 surjection 族逐 kind 跑的正是它。

attestation 体(要点名 predicateType 才给)

predicateType有没有取它的调用
https://slsa.dev/provenance/v1
depot:trust.evidence {"id":"oh-agent/skill-add","predicate_type":"https://slsa.dev/provenance/v1","version":"0.1.0"}
https://atd.run/attestation/depot-publication/v1
depot:trust.evidence {"id":"oh-agent/skill-add","predicate_type":"https://atd.run/attestation/depot-publication/v1","version":"0.1.0"}
https://atd.run/attestation/depot-certification/v1
depot:trust.evidence {"id":"oh-agent/skill-add","predicate_type":"https://atd.run/attestation/depot-certification/v1","version":"0.1.0"}

an attestation body is only returned when the caller names its predicate_type; there is deliberately no default, so a query can never pass merely because some other attestation happened to be attached (ADR-0003 D2.6)