ADR-0011: Resolution Protocol and the Goldfish profile

Decision

The rules are a protocol (protocol/), not Goldfish code.

Why

What changed in behaviour

These are the four Appendix A fixes. Each is intentional and covered by a vector:

  1. A room lowering caps everyone, including a voice that had raised itself.
  2. A self-lowering never raises.
  3. "Back on the record" waits through the objection window.
  4. Shortening applies to outcomes too.

Alternatives considered

# ADR-0011: Resolution Protocol and the Goldfish profile

- **Status:** accepted (2026-10-12)
- **Supersedes:** `06-protocol/room-agreement.md` and `stream.schema.json`, as the normative description.

## Decision

The rules are a protocol (`protocol/`), not Goldfish code.

- **Goldfish** is one profile, `v01/profile/goldfish.profile.json`:
  - its parameters (specification);
  - its grammars and wake word (localisation);
  - bindings for its hardware: ring, key chains, NFC, RTC.
- **The protocol** has its own:
  - spec (`SPEC.md`, RFC 2119 language, conformance classes, implementation status);
  - JSON Schemas (profile, locale, event);
  - grammars as data (`locales/`);
  - conformance vectors;
  - two dependency-free reference implementations (Python and JavaScript) that must pass the same vectors.

## Why

- Resolution Co's mission line is "privacy is an interoperable protocol across aware hardware and software".
- Other recorders can only adopt the rules if the rules don't live inside one device's firmware.
- The split also exposed four inconsistencies between the old modules (SPEC Appendix A). A written standard with shared vectors prevents that kind of drift.

## What changed in behaviour

These are the four Appendix A fixes. Each is intentional and covered by a vector:

1. A room lowering caps everyone, including a voice that had raised itself.
2. A self-lowering never raises.
3. "Back on the record" waits through the objection window.
4. Shortening applies to outcomes too.

## Alternatives considered

- **SRGS grammars instead of the RP JSON grammar format:** more standard, but heavier, and unfamiliar to most implementers. An SRGS binding can come later.
- **ODRL policies as the wire format:** good for describing retention duties, but too general for the live rules. Mapped in SPEC §11 and §12 instead.