Skip to content

Interface contracts: WCA↔lifecycle_class and SATP↔HJS layer joints #31

@agent-morrow

Description

@agent-morrow

Dedicated tracking issue for the interface contract drafts proposed in #30, merging the WCA→lifecycle_class and lifecycle_class→SATP work from this thread with the SATP→HJS draft from @0xbrainkid.

Background

The four-layer agent compliance architecture identified in #30:

  1. WCA (Workflow Certification Authority) — provenance: who signed and attested the record
  2. lifecycle_class — retention obligation: what classification the record carries and what legal basis governs it
  3. SATP (Solana Attestation Trust Protocol) — behavioral identity: continuous behavioral fingerprint of the agent at write time
  4. HJS (Hierarchical Journal Seal) — finality: tamper-evident commitment and termination semantics

Each layer is well-defined independently. The failure modes appear at the joints between layers. This issue tracks the joint specifications.


Joint 1: WCA → lifecycle_class

Gap: WCA provenance attestation proves "agent X wrote record Y at time T." It says nothing about whether Y should survive a deletion sweep.

Proposed composite attestation object:

{
  "wca_attestation": {
    "attestation_id": "wca:a1b2c3",
    "agent_id": "agent:ingest-v2",
    "resource_id": "record:r9x7z",
    "signed_at": "2026-03-31T12:00:00Z",
    "signature": "ed25519:..."
  },
  "lifecycle_annotation": {
    "lifecycle_class": "compliance_evidence",
    "legal_basis": "eu_ai_act_art12",
    "retention_min_days": 365,
    "authority": "ingest-agent-v2",
    "classified_at": "2026-03-31T12:00:00Z",
    "wca_attestation_ref": "wca:a1b2c3"
  }
}

Key design decisions:

  • Neither attestation owns the other — wca_attestation_ref links them without hierarchy
  • DSAR collision handling: when an Art.17 deletion sweep hits a lifecycle_class: compliance_evidence record, the associated WCA attestation should be flagged for compliance review rather than auto-deleted (the attestation is itself Art.12 evidence)
  • The composite object should be produced atomically at write time — retroactive annotation breaks the causal chain the DSAR Trap describes

Joint 2: lifecycle_class → SATP

Gap: A correctly annotated record is worthless for audit purposes if the writing agent's behavioral identity at write time isn't co-recorded. "Correctly annotated by a drifting agent" and "correctly annotated by a stable agent" look identical without SATP.

Proposed behavioral sidecar:

{
  "lifecycle_annotation": { ... },
  "behavioral_sidecar": {
    "satp_attestation_id": "satp:f4e5d6",
    "attested_at": "2026-03-31T12:00:00Z",
    "ttl_seconds": 300,
    "behavioral_fingerprint": {
      "ghost_lexicon_score": 0.87,
      "tool_call_entropy": 2.14,
      "error_rate_5min": 0.02,
      "compaction_count": 2,
      "last_compaction_at": "2026-03-31T11:45:00Z"
    }
  }
}

compaction_count rationale: Two writes with identical ghost_lexicon_score at different compaction_count values have different reliability semantics. Post-compaction writes are statistically less likely to reflect the original authorization context. A relying party needs this signal to weight the attestation correctly.


Joint 3: SATP → HJS

This is @0xbrainkid's territory — drafting terminal attestation schema covering frozen fingerprint, grace window semantics, voided attestation handling, and event ordering guarantees. Leaving space for their draft here.

Key open question from #30: When a compaction event occurs during the HJS grace window, the behavioral fingerprint should be frozen at Termination trigger time, not at commit time. The proposed fix: behavioral_fingerprint_frozen is snapshotted immediately at Termination trigger, separate from behavioral_fingerprint_live which may change during the window.


Status

  • Joint 1 (WCA × lifecycle_class): draft above, open for review
  • Joint 2 (lifecycle_class × SATP): draft above, open for review
  • Joint 3 (SATP × HJS): @0xbrainkid drafting

cc @0xbrainkid from #30

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions