# CRV-2026-001 artifact bundle

Supporting material for **Proof of Write: An Evidentiary Standard for Agent
Action Capability** (Cresva, CRV-2026-001, version 1.0).

Canonical location:
`https://cresva.ai/research/artifacts/crv-2026-001/`

The paper argues that a capability claim with no inspectable artifact behind it
is not a claim. Its own first version failed that test: every footnote pointed
at a path inside a private repository. This bundle is the correction. It is not
complete disclosure, and the section on redaction below says exactly what was
withheld and why, because a bundle that hides its own boundaries is the thing
the paper is against.

## Files

| File | What it is |
|---|---|
| `matrix.json` | The capability matrix the audit produced. 130 canonical write capabilities across six vendor surfaces, each with a tier, a gate, a proof type and per-platform score rollups. Every figure in the paper traces to a row here. |
| `compute.mjs` | The deterministic score script for the audit commit. Prints per-platform, overall, money-moving-tier and business-day-weighted scores. |
| `compute-sprint4.mjs` | The same computation over the gate column as it stood after the fourth remediation sprint. |
| `compute-sprint5.mjs` | The same, after the fifth sprint, in which one platform was reclassified as vendor-blocked and the headline figure fell. |
| `EXCERPTS.md` | For every footnote in the paper that cites an internal document, the verbatim passage that footnote relies on, redacted, with surrounding context. |
| `crv-2026-001-artifacts.tar.gz` | All of the above in one archive. |

## Running the scripts

The three scripts require Node 18 or later and have no dependencies, no
configuration and no file inputs. Each carries its capability table inline,
which is why the bundle is self-contained: there is nothing else to fetch.

```
node compute.mjs
node compute-sprint4.mjs
node compute-sprint5.mjs
```

`compute.mjs` reproduces the figures cited in Section 1 of the paper.
`compute-sprint4.mjs` and `compute-sprint5.mjs` reproduce the trajectory in
Figure 2. `matrix.json` is not read by any of them; it is the row-level record
behind the same numbers, published so the gate assigned to each individual
capability can be argued with rather than taken on trust.

The enforcement-sensitivity figure in Section 1 is a recompute published in the
audit addendum rather than an output of these scripts. The passage stating it,
including the baseline row that disagrees with `compute.mjs` by a fraction of a
point, is reproduced under Note 4 in `EXCERPTS.md`.

## Redaction policy

Redaction was applied to every file here by a single substitution pass. The
policy is stated in full so a reader can judge what it might have cost.

**What was replaced.** A denylist was built by scanning the internal audit tree
and sprint records for the following classes of string, rather than assembled
from memory:

- Advertising account identifiers.
- Database record identifiers, including the collision-resistant ids used for
  brand and connection rows.
- Email addresses.
- Credential and token shapes.
- Infrastructure identifiers: database endpoint names, deployment project and
  team identifiers, repository slugs.
- Vendor object identifiers such as tracking pixel ids.
- Display names of any customer, brand or organisation appearing in a
  connection or account context. The author's own name is deliberately not
  redacted.
- One budget figure attached to a specific campaign.

**What replaced it.** A stable placeholder in square brackets, for example
`[client-1]` or `[db-prod]`. Placeholders are consistent across every file in
this bundle, so a reader can follow one entity between two excerpts and see
that it is the same entity, without learning which entity it is.

**What is not published.** The substitution map. Publishing it would undo the
redaction in one step. It exists outside version control and is not committed.

**What was deliberately not redacted.** Internal file paths, function and table
names, commit hashes, test counts, version pins, vendor endpoint paths, and
aggregate counts such as the number of rows in a table or the number of
connections in an environment. None of those identify a customer, and removing
them would leave passages that cannot be checked against anything. The paper's
argument is that unverifiable evidence is not evidence, so the bias here is set
toward publishing structure and against publishing identity.

**What redaction did not touch.** No field that any of the three scripts reads,
and no numeric value in `matrix.json` or in any score table. The bundle was
built by copying, redacting, then running all three scripts in a clean
directory outside the repository and comparing their output against the figures
printed in the paper. That check is the reason redaction can be trusted not to
have changed a result.

**Scope limit, stated plainly.** The full audit report and the full sprint
records are not published. Those documents carry connection state and account
detail throughout, at a density where redaction would either miss something or
destroy readability. Bounded excerpts are the compromise, and a reader is
entitled to note that the party choosing the boundaries is the party being
audited.

## License

- Scripts (`compute.mjs`, `compute-sprint4.mjs`, `compute-sprint5.mjs`): MIT.
- Text and data (`matrix.json`, `EXCERPTS.md`, this file): CC BY 4.0.

Copyright 2026 Cresva. Attribution for reuse: Raghav, S. (2026). Proof of
Write: An Evidentiary Standard for Agent Action Capability. Cresva,
CRV-2026-001.

## Corrections

If a number in the paper does not reproduce from these files, that is a defect
in the paper and worth reporting. Contact details are on the Cresva site.
