# v0.3 — verified loop

v0.3 is the first of seven gated phases. It is the one in progress. Later phases (wider inventory, a local agent, a console, response workflows, a mesh, then production commitments) wait until the v0.3 gate is met: five pilot sites for four weeks, and a published false-positive rate.

The loop to prove is small. Verified intelligence comes in. It is matched, on the organisation’s own machines, against WordPress sites and CI/CD lockfiles. A finding comes out with a confidence level, a KEV or EPSS signal when one was supplied locally, and a VEX statement when the owner has recorded that a finding does not apply.

v0.3 is read-only. It does not change a customer system, accept commands from a publisher, or upload an inventory unless a person has explicitly opted in. The existing `scan-osv` command remains that opt-in, and the new inventory and report commands do not call it.

## Started in this change

| Piece | State |
| --- | --- |
| [Trust specification](specs/trust.md) | Written. TUF roles, expiry and the Sigstore pin are specified. No TUF client is linked in. |
| [Finding specification](specs/finding.md) | Written, and enforced by `ogde report`. |
| [Threat model](threat-model/v0.3.md) | Written from the v0.3 plan. |
| [Data-source register](data-sources.md) | Started. No feed is redistributed yet. |
| [Privacy review](privacy/inventory-and-findings.md) | Covers the fields this slice emits. |
| `ogde inventory` | Local CycloneDX from WordPress headers, `composer.lock` and `package-lock.json`. |
| `ogde report` | Confidence, conflict rule, EPSS threshold, VEX suppression, local audit file. |

## Not in this change

- `python-tuf` and `sigstore-python` are not dependencies. Adding them is a protected-zone change and needs the owner’s approval.
- No Wordfence, OSV, KEV or EPSS fetch.
- No version-range comparator. Matching in v0.2.2 is still exact versions only.
- No SARIF output, GitHub Action, or WordPress plugin.
- No known-answer corpus of 200 WordPress cases.
- The pilot has not started, so the phase gate is not met.

The Ed25519 feed code stays. The plan keeps it as the test oracle for the future trust layer.

## Open decisions

These are unresolved. This change does not pick them.

- **Software licence.** The repository is MIT. The v0.3 plan asks the owner to choose Apache-2.0 or AGPL-3.0. `LICENSE` is unchanged.
- **Feed host and site host.** `ogde.org` has DNS on Cloudflare and no records. [site/README.md](../site/README.md) describes Cloudflare Pages and GitHub Pages. Neither is switched on.
- **WordPress inventory packaging.** Standalone, inside WP Onion, or both. This slice only reads a tree the operator already has.
- **Default EPSS threshold.** The plan’s starting value is 0.1. It is implemented as a default and should be revisited after the pilot.
- **Publisher governance** before any second publisher. Not required while there is no public feed.
