<aside> 📜
Chartered by: Trace-as-Consent Federation (EU AI Act anchor) • Signatory: Pareto Prime (Eternal Diamond) • Charter Surface row: ‣
Vetoable here: any consent-strength downgrade (reclassifying a conduct event as notice) without federation ratification.
</aside>
<aside> 🔗
Single-path output. Aggregates four sources — ‣, ‣, ‣, and ‣ — into a unified Trace-as-Consent layer. Extends implicitlyAgrees beyond function calls to every trace-leaving event (unique views, clicks, catalog queries, MCP tool invocations, A2N peer messages). Compliant with UCP Catalog spec (ucp.dev/2026-04-08/specification/catalog/) using reverse-domain capability namespace io.genesisconductor.*.
</aside>
flowchart LR
subgraph SOURCES["Source artifacts (4)"]
BV2C["Booster v2.0 source\\n(ImplicitAgreement.sol\\n+ SupportEscrow.sol\\n+ EulerCycleAttestorV2.sol)"]
BV2W["Booster v2.0 tracker DB\\n(SBT Token ID, Proof Hash,\\nBase L2 Tx, Auditor Drift)"]
IWA["ImplicitWrapArbiter JSONL\\n(IWA-000…IWA-170,\\nVDF batching N=256,\\nGeth-finality gating)"]
GWB["Genesis Workers Bundle\\n(W-14 gc-synthesis,\\nIngestor/Graphweaver/\\nOracle/Auditor/Publisher)"]
end
subgraph AGG["Trace-as-Consent aggregation"]
TL["Off-chain Trace Ledger\\n(D1 + KV, signed events)"]
BM["Batch Merkleizer\\n(N=256, ~17min window)"]
ECA["EulerCycleAttestor v2\\nsettleCycle → KVDF NFT"]
IA["ImplicitAgreement.sol\\nrecord per agent"]
end
subgraph UCP["UCP Catalog binding\\n(io.genesisconductor.*)"]
CS["catalog.search"]
CL["catalog.lookup"]
SIG["Signals\\n(buyer_ip, user_agent,\\ndev.ucp.session_id)"]
CTX["Context\\n(eligibility = reverse-domain\\nnon-identifying claims)"]
end
BV2C --> IA
BV2C --> ECA
BV2W --> ECA
IWA --> BM
GWB --> TL
TL --> BM
BM --> ECA
ECA --> IA
CS --> TL
CL --> TL
SIG --> TL
CTX --> IA
Problem: implicitlyAgrees in ‣ binds only on direct function calls to gated contract methods. A reader who views the SKILL.md, an agent that fetches the catalog, or an MCP client that lists tools never sends a transaction — and therefore leaves no on-chain agreement record. The legal-by-conduct chain breaks at the off-chain perimeter.
Reframe: Treat every trace-leaving event as a candidate for implicit consent. Capture off-chain, batch via Merkle root (reusing IWA-020's BATCH_SIZE_N=256 pattern), commit batch root on-chain through EulerCycleAttestorV2.attestVdfProof(). The batch commit IS the agreement-formation event for all events it covers.
Event taxonomy (every row capturable by the W-14 gc-synthesis worker):
| Event class | Trigger | Signals captured | Consent strength | view |
Unique page/SKILL/catalog read | buyer_ip, user_agent, session_id, page_id, dwell_ms | Notice (legible terms posted) |
|---|---|---|---|---|---|---|---|
click |
UI interaction (button, link, command) | Same as view + element_id, ts | Conduct (active selection) | catalog_search |
dev.ucp.shopping.catalog.search call |
query_text, filters_hash, context.eligibility[] | Conduct (programmatic intent) |
catalog_lookup |
dev.ucp.shopping.catalog.lookup call |
identifier_set_hash | Conduct | mcp_tool_list |
MCP listTools JSON-RPC |
client_id, capability_filter | Notice |
mcp_tool_call |
MCP callTool JSON-RPC |
tool_name, args_hash | Conduct (binding by interaction) | a2n_announce |
POST /v1/a2n/announce | device_id, role, pubkey | Conduct (joining the mesh) |
a2n_receive |
POST /a2n/receive | from, intent, schema | Conduct (consuming an artifact) | function_call |
On-chain tx to gated function | tx_hash, block, caller | Conduct + immutable record (existing) |
Consent strength matters because UCP Catalog distinguishes session-specific (non-binding) from transactional (binding). Per spec: "Catalog responses ... are not transactional commitments — checkout is authoritative." We honor that:
_recordImplicitAgreement. They prove the agent saw the terms._recordImplicitAgreement on the next on-chain settle (for wallets we know) or accumulate as provisional consent keyed by session/pubkey for unknown wallets.Genesis Conductor capabilities exposed as UCP Catalog entries under reverse-domain namespace io.genesisconductor.*. The Catalog spec's metadata field is the carrier for our implicit-contract hooks.
Capability registry:
| Capability ID | UCP analog | Function | io.genesisconductor.skill.search |
dev.ucp.shopping.catalog.search |
Search /maru, Greg, Retraining Worker, etc. by task_type / model_class |
|---|---|---|---|---|---|
io.genesisconductor.skill.lookup |
dev.ucp.shopping.catalog.lookup |
Retrieve skill by URL or capability ID | io.genesisconductor.cycle.settle |
(checkout analog) | Authoritative on-chain settlement via EulerCycleAttestorV2 |
io.genesisconductor.attest.trace |
(extension) | Submit batched off-chain trace for on-chain attestation | io.genesisconductor.agreement.lookup |
(extension, identity-linking analog) | Query agent's implicit-agreement state on-chain |
Skill-as-Variant mapping (each skill = one Variant under a Product):