Proven
Decisions

docs/adr/

A note on the owner's English (2026-10-19). The owner asked us to correct the grammar of his own English in this repository. Where he wrote in English, his quoted words have been lightly corrected for grammar only; nothing was added to their meaning. Where he wrote in Polish, the quotes are translations, as each one says.

This folder holds two kinds of decision, and both are the owner's:

  • Design decisions, ADR-<number>-<slug>.md: how proven is built and why. One file per decision, written when the decision is taken.
  • Decisions on a change, DECISION_<slug>_r<n>.md: the owner's ruling on one change, after its review.

Design decisions (ADRs)

ADRdecisionstatus
0001proven is written in Go, and every outside service sits behind an adapteraccepted, 2026-10-17
0002a finding counts only with evidence: a test, or a query through Zetaris with the rows it returnedaccepted, 2026-10-17
0003the reviewer's memory and state are Meterless's H-MEM and World Model, built in Goaccepted, 2026-10-17
0004the first evidence sources: OSV, CISA KEV, FIRST EPSS, the repository's own historyaccepted, 2026-10-17
0005a guardrail on every prompt and answer by default, local or hosted, with a switch to turn it offaccepted, 2026-10-18
0006every finding faces a Skeptic from another model family, NVIDIA Nemotron; the evidence settles it, never a voteaccepted, 2026-10-18; extended by ADR-0019 (Amendment 1, 2026-10-22: reached through Nightshift)
0007no exploit code; a vulnerability finding is proved by a query and its rowsaccepted, 2026-10-18
0008the reviewer's model is chosen against the author's model stated in the change; NVIDIA by default; some reviews doubledaccepted, 2026-10-19
0009two reviewer models; a doubled review may use the author's own model as a fresh second reviewer; A writes, NVIDIA reviews, B for special cases is bestaccepted, 2026-10-19
0010every reviewer model is configurable, NVIDIA's included; NVIDIA is only the default; no setup is blockedaccepted, 2026-10-19
0011a change names its model in an Assisted-by: trailer by default; sources, keys and the family table are configurableaccepted, 2026-10-19
0012Saphan Studio's review classes: security, backend, user interface, mobile, docs; security doubled by defaultaccepted, 2026-10-19
0013no setting is hardcoded; every value has a documented default; rules are not settingsaccepted, 2026-10-19
0014a change's review class is chosen by configured path rules, not a model; the highest-risk class winsaccepted, 2026-10-19
0015the Zetaris adapter speaks REST, not JDBC; proven carries no Javaaccepted, 2026-10-20
0016a drop-in replacement for Semgrep and Opengrep in a pipeline: their flags, exit codes and text, JSON and SARIF outputsaccepted, 2026-10-20
0017a Docker Compose lab with Gitea and Gitea Actions, configured, for the judges; Jenkins only if time is leftaccepted, 2026-10-20
0018H-MEM and World Model at their minimum, one injected generator, JSONL in logs/; Markovian only if time is leftaccepted, 2026-10-21
0019Meterless Nightshift is the primary AI provider; NVIDIA's models through it by default; other routes stay settingsaccepted, 2026-10-21
0020the exact command line, GitHub Action inputs and outputs, and exit codes, taken from Semgrep and the Opengrep action; self-hosted runners first; one summary comment per pull requestaccepted, 2026-10-21
0021a demo with a self-hosted GitHub runner in Docker; one script connects it to a judge's repository from its name and a tokenaccepted, 2026-10-21
0022Gitea on the team's own premises is a scenario equal to GitHub; the judges' lab is that scenario, packagedaccepted, 2026-10-21
0023evidence sources are Zetaris REST tables an administrator registers and Proven's own key reads live; OSV by package needs another pathaccepted, 2026-10-21
0024every coding session of a Cursor agent on Proven is recorded, and the recording is published here, blacked outaccepted, 2026-10-21
0025the Prover runs the change's code in a container with no network and no secret; with no container runtime it runs no codeaccepted, 2026-10-21
0026one Makefile: help by default; builds natively, through a Go image, or prints how to install Go; minimal images scanned by Docker Scout before a push; builds and pushes saphan/proven:latest; starts, checks, logs and stops the Gitea lab (Docker in Docker); make e2e is the judge's rehearsalaccepted, 2026-10-23
0027the code is written to be read by the judges: package and doc comments, why-comments, the ADR a step carries out, what each test proves; the masters comment the code already written themselvesaccepted, 2026-10-23
0028the code is security-reviewed as a whole in nine pieces, each a trust boundary; two reviews per piece; a weakness becomes a fix with a failing test and is published only after it is merged; SECURITY.md and SECURITY_REVIEW.md at the rootaccepted, 2026-10-23
0029a security piece is reviewed at one commit of main, and only once its code is on main; Docker Scout runs in the lab pieceproposed, 2026-10-23
0030the product and the hackathon live apart: the build's record moves to hackathon/, the design decisions to docs/adr/; moved before the day-2 push with a permanent link checkaccepted, 2026-10-23
0031the generator can also call NVIDIA's hosted API (Nightshift stays the default); proven scan runs live; the lab turns live on from one NVIDIA keyaccepted, 2026-10-23
0032a model picks a query template and its values; Proven validates each value and builds the SQL; a read-only Zetaris key only if measuredaccepted, 2026-10-23
0033the text review is written for a person: a summary, one separated block per problem, "how we know" in plain words; the machine detail moves to --verbose, JSON and SARIF; Markdown and HTML for peopleaccepted, 2026-10-23
0034Proven runs air-gapped: one setting keeps every call on the organisation's network, and a test proves itaccepted, 2026-10-23
0035every review can leave a signed evidence pack; proven verify checks it for an auditoraccepted, 2026-10-23
0036one organisation policy for every repository; a risk is accepted only with an owner and an expiryaccepted, 2026-10-23
0037bring your own second reviewer: any OpenAI-compatible model; with it connected every change is reviewed by two, and their disagreement is shownaccepted, 2026-10-23
0038a language is one small adapter behind a public interface; PHP, Java, C#, Rust and Ruby join Go, JavaScript and Pythonaccepted, 2026-10-23
0039more evidence sources through Zetaris: malicious packages, project health, CVSS, licencesaccepted, 2026-10-23
0040a deterministic tool's run is evidence, through a tool adapter: race detector, fuzzing, static analysis, coverageaccepted, 2026-10-23
0041what two models agree on without proof is shown apart, labelled as an opinion, never as provenaccepted, 2026-10-23
0042a proposed fix is proved by the same test that proved the problem; a person applies itaccepted, 2026-10-23
0043a vulnerable dependency is checked for reachability (govulncheck for Go): reached, imported but not reached, or not measuredaccepted, 2026-10-23
0044every finding names its level of proof first: by a test, by a tool, by data, or agreed by two modelsaccepted, 2026-10-23
0045a review is observable through OpenTelemetry (standard OTEL_*, off unless set), plugs into any monitoring; the lab shows it live on a provisioned Grafana dashboardaccepted, 2026-10-23
0046a data source is one adapter: it loads into Zetaris, offers query templates and a rule that turns a row into a finding; an organisation adds its own sources the same wayaccepted, 2026-10-24
0047the evidence store is an adapter: Zetaris or a local one-file store, chosen by one setting; the same templates return the same rows on bothaccepted, 2026-10-24
0048a large change is reviewed in bounded steps with Meterless's Markovian engine; kept only if it holds the findings and cuts the costaccepted, 2026-10-24
0049Meterless's Scout Intent plans each review before a model runs; never lowers a configured rule; kept only if measured worth itaccepted, 2026-10-24
0050after a review, one automated fix attempt for all proved findings, judged only by the same deterministic evidence; then fixed or rejected; Proven never commits to the author's branchaccepted, 2026-10-25
0051a judge's lab reaches our Nightshift and our Zetaris through one gateway behind a Cloudflare tunnel and Access, with the judge's own expiring token; evidence by query template only; every call limited and loggedaccepted, 2026-10-26
0053all four Meterless engines are on by default and each is switched off by its setting; the benefit of Markovian and Scout Intent stays unmeasured; Scout never lightens a change that is not verified proseaccepted, 2026-10-26

Rules for an ADR

  • The decision is the owner's, and the ADR quotes his words. An agent may write it down; it cannot decide it.
  • One decision per file, numbered in order. A number is never reused.
  • An ADR is not rewritten when the decision changes. A new ADR supersedes it, and the old one's status says superseded by ADR-<number>.
  • What is not known yet is said so, under Consequences.

Template

# ADR-<number>: <the decision, in one sentence>

**Status:** proposed | accepted | superseded by ADR-<number> · **Date:** <the day it was decided>
**Decided by:** the owner · **Written by:** <agent and model, date>
**Supersedes / Extends / Follows:** <other ADRs, where they apply>
**Trigger:** <what made the decision necessary, with a link to the conversation>

## Context
<the situation and the forces, with the owner's words>

## Decision
<numbered, each one a rule someone can check>

## Consequences
<what follows, good and bad, and what is not known yet>

Decisions on a change

A decision is the owner's. No agent can merge, and no agent's "yes" counts: a reviewer's accept is advice the owner reads, not a decision.

Rules every decision follows

  • One of four outcomes: accept, accept-with-conditions, reject or close-without-shipping.
  • The reason is written by the person who decides. The owner writes it himself, in his own words. A decision without a reason is not published.
  • Conditions are named. If the owner accepts with conditions, each one says what closes it and in which later change.
  • Every decision states how the change went, over all its rounds: who built it on which model, how many repair rounds it took, and how many BLOCKING and OWED conditions the reviews found. From 25 October it states no cost. The same line goes into ../LEDGER.md.
  • A rejected change keeps its documents. The order, the status report and the review of every round stay in this repository, including the ones that were sent back.

Template

# DECISION — <slug> · round <n>

- outcome: <accept | accept-with-conditions | reject | close-without-shipping>
- decided by: the owner
- review: hackathon/fleet/reviews/REVIEW_<slug>_r<n>.md
- merged as: <commit — or "not merged">
- rounds: <n> (<n-1> repair rounds)
- built by: <model per round, e.g. r1 model-a · r2 model-a>
- reviewed by: <model per round>
- conditions over all rounds: <n> BLOCKING · <n> OWED · <n> NOTE
- decided: <date and time, UTC>

## Reason
<the owner's own words>

## Conditions
<each condition and the change that closes it — or "none">

On this page