docs(#1607): record recall-side rejected alternatives in ADR-550 (#1714)

Appends an 'Alternatives considered (recall / representation / packaging side)' addendum to ADR-550: the two NEW spec-phase-side rejections (the withdrawn LLM requirement classifier #652, and a deterministic prohibition-recall engine) plus cross-references to the two already-decided ones (no polarity field on truths — D3; deferred single dispatcher CLI — D7e). Enforcement-side alternatives stay in ADR-1606.

Closes #1607.
This commit is contained in:
Rezolv
2026-06-25 20:12:42 -04:00
committed by GitHub
parent a831c76f78
commit 0bd4c82389

View File

@@ -142,3 +142,40 @@ This ratifies the **deterministic SOURCE** for the test-tier `CheckDescriptor` t
5. **Out of scope (unchanged boundaries).** Machine-proven fail-first (a violation-fixture / RuleTester-invalid proof replacing the `failFirst` caller attestation) stays tracked as **#1279**. The `dispositionForProhibition` green/fail-closed **policy** is untouched. No new check kinds are added.
Net effect on D3: the prohibition-item shape is extended with three optional, backward-compatible flat-scalar keys that give the test-tier locate a deterministic spec-phase source; the contract's CI-testable surface (D5) gains the projection round-trip parity (CHK-03), the fail-closed guard (CHK-06), and the byte-stable backward-compat fixture (CHK-07). The decision also lives in `src/probe-core.cts` / `src/prohibition-enforcement.cts` comments, the `verify-phase.md` / `spec-phase.md` prose, and the #1278 changeset.
## Addendum (2026-06-22) — Alternatives considered (recall / representation / packaging side)
This consolidates the spec-phase-side rejected and deferred alternatives for the probe family,
so a re-proposal meets a recorded reason rather than a fresh debate. (The enforcement-mechanism
alternatives — the flat-vs-nested descriptor, the inline violation snippet, `failFirst`
attestation, and mandatory causation control — are recorded in **ADR-1606**, the
prohibition-enforcement verify-time seam.)
- **A standalone LLM requirement *classifier* as a feature — REJECTED (#652, closed
2026-06-04).** The enhancement "requirement classification in the spec phase should use an
LLM-assisted classifier" was closed without approval: the edge-probe's shape taxonomy plus
the prohibition probe's adversarial recall **already capture most of the value** a general
classifier would, without adding a separate model-dependent surface to maintain. *Re-open
only if* a classifier demonstrably beats both probes on a held-out battery.
- **A deterministic `prohibition-probe.cjs` recall engine — REJECTED.** Unlike the closed edge
taxonomy, the prohibition recall stage is inherently LLM prose reasoning; only the
schema/projection layer is real code (Decision 7b). A deterministic recall adapter is the
scope-creep flagged in `gsd-core/references/prohibition-probe.md`; recall is validated
offline (N18), not asserted in CI. *Re-open only if* recall can be made deterministic without
collapsing the adversarial open-question that gives it model-robust reach.
- **A `polarity` field on `truths` — REJECTED (already decided — see Decision 3).** `truths`
are positive observables with no `verify.cjs` handler; a prohibition parked there inherits
non-enforcement. Recorded in Decision 3 ("`truths` is left untouched — no `polarity` field is
added"); listed here only so the alternatives set is readable in one place.
- **A single dispatcher CLI for all probes — DEFERRED (already decided — see Decision 7e).**
Each probe ships its own bin calling a shared `runProbeCli(...)`; a unified dispatcher is
deferred as pure invocation plumbing with no migration debt. Recorded in Decision 7e; listed
here only for completeness.
*Net:* the two NEW entries (#652 classifier, deterministic recall engine) are the only ones
this addendum adds to 550's decision record; the other two are cross-references to existing
decisions, collected so the probe family's full "alternatives considered" set is readable in
one place.