Context
PR #95 (issue #82 ERC-7730 + EIP-712 sign) added signed_intent_text + signed_intent_hash to the audit-row schema, but only for typed-data signs. The rest of the audit surface (scope mutations, device mutations, payments, memory ops, email, K3 epoch advance) still carries the narrow (actor_omni, service_hash, op_type ∈ {0,1,2}, payload_hash) shape that CredentialAudit.sol takes — useless for sign events and orthogonal data classes.
Phase A — the canonical schema + non-break design — landed in PR #95 under arch.md §15.3a. This issue tracks the implementation phases B / C / F.
Phase B — worker + core migration
Phase C — contract revision
Phase F — extend op_kind coverage
Each row below is a separate PR that touches the arch.md table exactly once (claims a byte) + adds the worker emit-site + the explorer renderer in litentry/subscan-essentials + litentry/subscan-essentials-ui-react.
Non-break invariants (per arch.md §15.3a)
Every PR landing a new op_kind MUST preserve all 8 invariants:
- `op_kind` is `u8` not a sealed enum.
- Envelope-level fields are stable; only `op_body` is op-kind-specific.
- `version` bumps only on envelope-level changes, never on new op_kinds.
- Explorer ships a generic `Unknown(byte)` fallback renderer.
- Worker passes through opaque `op_body` bytes when it doesn't recognize them.
- Chain contract is op-kind-agnostic.
- Canonical op_kind table in arch.md — PRs MUST append a row; numbers never reused.
- Each PR adds 3 tests: worker CBOR roundtrip + explorer fallback render + arch.md row.
Companion issue
Explorer-side work tracked at litentry/subscan-essentials (see linked issue below once it lands).
Acceptance
- Phase B + C ship; Phase F has ≥3 op_kinds wired end-to-end (SignEip712, ScopeGrant, DeviceAdd recommended as the first three since they exercise typed-data + master mutations + registry).
- `harness/v2-stage1-demo.sh` + `v2-stage2-demo.sh` + `v2-stage3-demo.sh` all green.
- Explorer can render at least the three wired op_kinds; the others render with the `Unknown(byte)` fallback.
Related: #82 (closed by #95), #90 (Stage 2 hardening), #91 (worker hardening).
Context
PR #95 (issue #82 ERC-7730 + EIP-712 sign) added
signed_intent_text+signed_intent_hashto the audit-row schema, but only for typed-data signs. The rest of the audit surface (scope mutations, device mutations, payments, memory ops, email, K3 epoch advance) still carries the narrow(actor_omni, service_hash, op_type ∈ {0,1,2}, payload_hash)shape thatCredentialAudit.soltakes — useless for sign events and orthogonal data classes.Phase A — the canonical schema + non-break design — landed in PR #95 under arch.md §15.3a. This issue tracks the implementation phases B / C / F.
Phase B — worker + core migration
AuditEnvelope v1struct toagentkeys-core(CBOR-serializable, deterministic encoding per RFC 8949 §4.2.1).AuditOpKindu8 + per-kindop_bodyschemas matching the canonical table in arch.md §15.3a.GET /v1/audit/envelope/<hash>endpoint to `agentkeys-worker-audit` returning the full envelope.Phase C — contract revision
Phase F — extend op_kind coverage
Each row below is a separate PR that touches the arch.md table exactly once (claims a byte) + adds the worker emit-site + the explorer renderer in litentry/subscan-essentials + litentry/subscan-essentials-ui-react.
Non-break invariants (per arch.md §15.3a)
Every PR landing a new op_kind MUST preserve all 8 invariants:
Companion issue
Explorer-side work tracked at litentry/subscan-essentials (see linked issue below once it lands).
Acceptance
Related: #82 (closed by #95), #90 (Stage 2 hardening), #91 (worker hardening).