How EdgeMirror identifies, stores, and packages parity findings.
Findings are allocated as EM-### (zero-padded) via nextFindingId("EM") in packages/cli/src/provenance/index.ts.
Example: EM-001, EM-002.
DEMO runs use the same allocator inside an isolated temp project and must remain labeled as DEMO in reports.
Core fields (packages/cli/src/trace/schema.ts):
testId
findingId?
classification
differences[] # path, local, remote, severity, note?
evidence[] # kind, description, artifactPath?, hash?
confidence # 0..1 numeric confidence
localRuns / remoteRuns
localMatches / remoteMatches
localTraceIds[] / remoteTraceIds[]
normalizationRulesApplied[]
parityContribution # 0 | 1 | null
Path pattern: .edgemirror/runs/<runId>/receipts/<findingId>.json (also searchable under .edgemirror/receipts/).
{
"schemaVersion": "1.0",
"receiptId": "<hex>",
"findingId": "EM-001",
"createdAt": "<iso8601>",
"edgemirrorVersion": "0.1.0",
"classification": "RUNTIME_DIVERGENCE",
"testId": "http-get-root",
"localTraceHash": "<sha256>",
"remoteTraceHash": "<sha256>",
"resultHash": "<sha256>",
"artifactPaths": [],
"notes": []
}edgemirror bundle EM-001Produces .edgemirror/bundles/EM-001.edgemirror/ with manifest.json listing each file’s relative path, SHA-256, and byte length.
Until EMF/1 (public interchange format) ships:
- Prefer
edgemirror support-bundle(aliasescalate) — writes.edgemirror/support-bundles/cf-escalation-*/with:CLOUDFLARE_TICKET.md(summary template)support-report.json+bindings-matrix.txtdoctor-fingerprint.json(no secrets)receipts/EM-###.json+ recentruns/- compat/matrix artifacts when present
manifest.json(SHA-256 integrity)
- Or attach a single finding via
edgemirror bundle EM-001 - Include
edgemirror verify --format agentJSON in CI summaries - Do not claim Cloudflare reproduction without the original Worker + Wrangler fingerprint
- EMF/1 public schema
edgemirror reproduce EM-###- Public explorer ingestion
See ROADMAP.md.