Resolvd Audit Pack v0 · not an Audit Pack v1

Fictional website tutorial (offline) — Merge Safety Sprint

Company and organization identity only. Prepared from a completed resolvd import-csv run. No system of yours was contacted or changed.

Run
website-tutorial-offline
Source file
fictional-company-records.csv
Source fingerprint
9c1a4ea114f6e690e280bfcb31d3e6d37846770e2426c66f88a661515201a0e7
Generated
2026-10-15T12:43:07Z
Pack format
resolvd-audit-pack-v0 version 0.4.0
Run status
recorded in manifest.json (run_status) — the manifest carries this file’s checksum, so the report is written first and does not restate a verdict it would have to recompute
Decision depth
probabilistic

What this pack is, and is not

This is a Resolvd Audit Pack v0. It is not an Audit Pack v1 and does not claim v1 compliance.

v0 is a post-processor over the outputs of a completed resolvd import-csv run. It rewrites what that run already decided into row-level ledgers, a decision receipt per row, an entity-membership projection, a reversal map and this report. It does not re-resolve anything, and it does not add a judgement the pipeline did not already make.

Resolvd wrote nothing to your systems. No CRM, ERP, MDM, warehouse or provider was contacted or changed, and this pack proposes actions rather than applying them. Resolvd's own catalogue was written during the import that produced these files - entities were created, decisions recorded and credits consumed - so this is not the no-write shadow execution that Audit Pack v1 section 4 specifies, and no no-write attestation is offered.

This pack contains no incumbent-provider comparison, no counterfactual sensitivity analysis and no merge blast-radius analysis. Those are specified in Audit Pack v1 and are not implemented; their absence is recorded in manifest.json, not represented by empty files.

Two files in this pack have pair grain rather than row grain, and both are partial. withheld_matches.csv lists pairs of your own rows that Resolvd compared and deliberately did not merge; it is not a statement about any incumbent provider, because none was supplied. do_not_merge.csv lists merges Resolvd's own cascade proposed and its merge guard then refused, naming the fields that disagreed. do_not_merge.csv is NOT the complete set of pairs in your data that must never be merged: it contains no reviewer-confirmed cannot-link and no authoritative-evidence basis, neither of which is implemented, and it covers only the pairs Resolvd actually compared. Both files are absent rather than empty when this run supplied no pairs log, because without one the pack cannot tell you how many pairs were compared and therefore cannot tell you what a zero would mean.

The reversal map tells you which of your own source rows each proposed merge would collapse together. It is not a rollback manifest: Resolvd received no prior state from your systems, so no action here carries a before-value, a precondition or an inverse operation.

Every figure in this report reconciles to the row-level CSV files, and manifest.json records the result of each check. The row files, not this report, are the record. This pack concerns company and organization identity only; nothing in it is a claim about people, sanctions, account ownership, emissions or geolocation, and it is not legal advice.

Your rows, and where they went

Rows in
8
submitted plus skipped
Distinct source refs
8
your own IDs, round-tripped
Accepted matches
3
accepted_matches.csv
Unresolved
3
37.5% of rows in
0 1 2 3 Accepted matches Accepted matches: 3 3 New entities (mints) New entities (mints): 2 2 Unresolved — decided Unresolved — decided: 1 1 Not submitted Not submitted: 2 2
Every row landed in exactly one of these four. They sum to rows in.
OutcomeRows What it means
Accepted matches 3 Bound to a company that already existed in the catalogue.
New entities (mints) 2 Bound to no prior company. Not a match — see below.
Unresolved — decided 1 unresolved (3) minus not submitted (2). Reached the pipeline; it abstained.
Not submitted 2 Skipped before submission; carried in unresolved.csv.

Abstention

3 of 8 rows (37.5%) are unresolved.

Resolvd abstains when the evidence does not support a binding. Every unresolved row is a merge that was not made on a guess, and it stays reviewable rather than becoming a silent error in your master data. Read this share as calibrated restraint, not as a missed target.

Coverage is a property of this file as much as of the engine: it depends on how many of your rows carried a discriminating identifier — a domain, an address, a jurisdiction, a company or VAT number, an LEI, a DUNS or a BIC. A name-only row has nothing to bind on, and Resolvd abstains rather than guessing. Rows that abstained for want of a field are listed in unresolved.csv with a reason_code and a prescription. Each prescription is a typed cause, and prescription_fields names the columns of yours that would help wherever a column is nameable — which is most rows, and not all of them. Two of the causes are ours rather than yours (the run stopped at its depth cap, or a stage of ours was down); those lead with our stop and still carry the column beside it. The cell is empty only where nothing is nameable: the row already carries every column this analysis knows how to ask for, or the column that would have helped is already there and its value did not survive normalization, which says repair rather than add.

v0 reports the unresolved split only as decided-and-abstained (1) against not-submitted (2). The per-row cause is the reason_code column of unresolved.csv; this page does not aggregate it, because it does not read the row files.

What would make an unresolved row resolvable

Each unresolved row of unresolved.csv carries a prescription and the field names behind it. A prescription names a column you could add — never a predicted outcome, and never a promise that adding it would resolve the row.

Signal prescriptions, counted from the rows the pack wrote.
PrescriptionRows What it means
add_identifying_field 2 This row was never compared: it carries none of the fields the intake gate admits, so there is no decision to explain. Any one of a company name, a domain or a registration number makes it submittable.
raise_depth 1 The comparison stopped at its configured depth cap rather than running out of evidence, so re-submitting this row at a greater depth is the first step. That is a fact about the depth this run was given and not a finding about your file, and this run did not establish that the row was decidable as it stands: the column named beside this note would improve it at any depth.

Merges we prevented

0 merges our own cascade proposed were refused by our merge guard, and 0 pairs were compared without being called either way.

A withheld pair is a comparison that abstained, not a promise that the two rows are apart. Where its settled_by_cluster column reads true, other evidence in the same batch put the two rows on one entity anyway, and you will find them together in golden_records.csv — the two files agreeing, not contradicting each other.

We refused no merge, and here is the denominator

Resolvd compared 4 pairs of your rows, and over those the cascade proposed no merge the guard had to refuse. That is the denominator, and it is not the same number as the rows listed below: a pair the comparison answered outright leaves no ledger row at all.

That is a finding about the pairs we compared. It does not mean your file contains no dangerous merges — a merge we never proposed is a merge we never had the chance to refuse.

Each row of do_not_merge.csv is two of your source rows the pipeline scored as a match and then refused to merge, naming the field of YOURS that disagreed. Each carries a decision_id you can redeem at GET /v1/decisions/{id}, so every one of these is checkable rather than asserted.

Pair-grain evidence, read from the same totals the manifest records.
MeasureCount What it means
Merges proposed and refused 0 Our cascade reached a match; our own guard would not allow it.
of those, decisive identifier conflicts 0 A registered identifier disagreed — between your two rows, or between one of them and the company the other matched to. Cannot-link.
of those, corroborated weak evidence 0 Two rebuttable signals disagreed at once. Advisory, not proven.
Pairs compared and not called 0 We compared two of your rows and would not call it. Check settled_by_cluster before reading one as kept apart.
Pairs actually compared 4 The denominator: every figure above is drawn from these.
Pairs the pair cap never compared 0 Counted, never listed: no ledger below says anything about these.
of those, plus pairs the deep budget held back 0 The remainder WAS compared at the cheap tier and is a row of the withheld file, not a gap in it.
Pair slots a crowded blocking key skipped 0 An upper bound, in slots rather than pairs: a pair can be counted here under more than one key, and a row in a skipped group may still have been compared through another of its keys. Nothing below says anything about these either.

What do_not_merge.csv covers

This file has PAIR grain: each row is a merge Resolvd's own cascade proposed and its merge guard then refused, naming the input fields that disagreed.

It is NOT a list of every pair in your data that must never be merged. It contains no reviewer-confirmed cannot-links and no authoritative-evidence basis: neither is wired in this version. A row with block_strength=advisory is corroborated but individually rebuttable evidence, not a proven incompatibility.

It covers the guard's EDGE pass only. The same guard runs a second time while a cluster is being assembled, and a member it refuses there is detached onto its own entity and recorded in the run log rather than as a row here. Those refusals are real and are not counted in this file.

Zero rows means Resolvd proposed no merge that its guard refused, over the pairs it compared. It does not mean your file contains no dangerous merges.

What withheld_matches.csv covers

This file has PAIR grain: each row is two of your source rows that Resolvd compared and could not call on that comparison alone. Audit Pack v1 section 5.3 defines withheld_matches as an incumbent provider's proposal that Resolvd cannot independently admit; no incumbent proposal was supplied to this run, and no row here is a statement about any provider.

Read the settled_by_cluster column before treating a row as a pair we kept apart. false means the pair went to the review queue and the two rows are on separate entities. true means other evidence in the same batch placed them together anyway, so the pair is a comparison that abstained and NOT a separation - you will find both rows on one entity in golden_records.csv, and that is agreement between the two files rather than a contradiction.

Pairs the blocking pair cap truncated, and pair slots a crowded blocking key skipped, were never compared at all and are listed nowhere in this pack; both are counted in manifest.pair_totals. A pair the DEEP budget deferred is a different thing and is not missing from this file: it was compared at the cheap tier, it abstained honestly, and it is a row here.

Proposed merges

5 of 8 rows (62.5%) sit in an entity holding more than one of your rows. Those are the merges this pack proposes; reversal_map.csv names which of your rows each one collapses, so you can restore them from your own snapshot if you apply it and want it back.

Merge shape, read from the same totals the manifest records.
MeasureCount What it means
Duplicate clusters 2 Entities holding two or more of your rows.
Rows inside those clusters 5 Your source rows a merge would collapse together.
Largest cluster 3 Rows in the biggest single proposed merge.
Reversal-map actions 5 One row of reversal_map.csv per row inside a cluster.
Golden records 2 Distinct entities across accepted matches and mints.
Members across golden records 5 Sums to accepted matches plus mints.

New entities (mints)

2 rows minted a new company.

A mint means the row bound to no company that existed before the call. It is not a candidate match that scored well — the pipeline records it on a reject-side basis (no candidate matched, or none was retrieved), so it carries no match confidence and no accepted-match guarantee. Mints are counted here and never inside the accepted-match figure, and they are written to new_entities.csv, never to accepted_matches.csv.

Match confidence

Every accepted match in this pack carries a decision receipt whose recorded match confidence is at or above the shipped floor of 0.90. That was re-checked while this pack was built, row by row, against the receipts.

Evidence receipts

6 of 6 decision receipts were written to decision_receipts.ndjson. Each is the decision body verbatim, so you can re-fetch it from the API and diff it against ours.

decision_receipts.ndjson holds v0 pack artifacts: verbatim copies of what GET /v1/decisions/{decision_id} returned at fetch time, not rows of the live decision store. They are not RFC 8785 canonical and carry no receipt_sha256, so they are not Audit Pack v1 §7 receipts.

Rights and attribution

0 evidence citations were captured across 1 source. This pack is not redistributable. No evidence citations were captured in this pack.

Sources cited: customer.

What this pack does not contain

These files are absent by decision, not by accident. An empty file with a header row would read as "we checked and found none"; we did not check, and the manifest says so instead.

Absent ledgers, exactly as manifest.json records them.
FileWhy it is absent
incumbent_contradictions.csvno_incumbent_input_in_v0

Everything Audit Pack v1 specifies that v0 does not do

  1. No no-write attestation (v1 section 4). v0 has no catalogue snapshot, no fail-closed shadow adapter, and no before/after mutation counters.
  2. v0 is not a shadow run at all. The refs log it post-processes was produced by a real import-csv through /v1/batch, which minted entities, recorded decisions and consumed credits in the Resolvd catalogue. v0's no-write property is scoped to the customer's systems only.
  3. No incumbent input, therefore no incumbent_contradictions.csv and no incumbent-comparison vocabulary anywhere.
  4. withheld_matches.csv diverges from v1 section 5.3. v1 defines it as source-row grain over an incumbent provider's proposal. v0 writes PAIR grain over the intra-file pairs the cascade compared and could not decide. No row in it is a statement about any provider.
  5. do_not_merge.csv carries only merge-guard blocks. v1 section 5.6 also admits an authoritative_evidence basis and a reviewer_confirmed basis naming an authenticated reviewer principal; neither is wired, so no row here is reviewer-confirmed. v0 uses its own column names (block_basis, block_strength) and its own basis value corroborated_weak_evidence, which has no v1 equivalent and never produces cannot_link.
  6. Pair columns are ordered by comparison orientation, not lexicographically as v1 section 5.6 requires. In a batch a record id is the row's position in the submitted file, and ordering on it would make the pack a function of file order. The canonical unordered identity is pair_id, computed over the sorted record ids.
  7. No RFC 8785 canonical receipts and no receipt_sha256. Receipts are the verbatim DecisionView body, re-fetchable from GET /v1/decisions/{id}.
  8. Signal prescription is derived from the row's identifier composition and the typed reason it was not resolved. It names a field, never a predicted outcome, and says none_supportable when nothing is supportable. v1 section 5.5 requires the prescription to be carried in the receipt; v0 carries it in the row.
  9. No counterfactual sensitivity and no merge blast radius.
  10. No rollback manifest - v0 emits a reversal map, which carries no before-value, no precondition and no inverse operation.
  11. No audit-request.json, no declared mapping/policy/rights/retention block, and no input_record_sha256.
  12. No browser intake, no deletion window, and no 200-row preview.
  13. No PDF, no signing, no atomic staging-and-promote publication, and no errors.ndjson.
  14. No retention management - the output directory is plaintext customer data on the operator's filesystem.

Reconciliation

The reconciliation identities are evaluated when manifest.json is written, which happens after this page (the manifest lists this file's own checksum). Their results are recorded there, under reconciliation, and a failed identity means the pack carries no manifest.sha256.

File sizes, row counts and SHA-256 checksums for every file in this pack are in manifest.json, and manifest.sha256 covers the manifest itself. A checksum binds the parts of one pack and detects corruption; it is not a signature and does not prove who produced the pack.

No quality-rate figure appears in this pack. This run has no labelled ground truth for your rows, so any such figure would be unmeasured here.

Print to PDF from your browser; v0 ships no PDF renderer. This document is self-contained and makes no network request when opened offline.

resolvd-audit-pack-v0 version 0.4.0 · run website-tutorial-offline · generated 2026-10-15T12:43:07Z. The row-level CSV files, not this report, are the record.