Skip to content

feat!: a version-2 verdict proves every leg it records - #1239

Merged
REPPL merged 13 commits into
mainfrom
build/ideate-verdict-legs
Oct 29, 2026
Merged

REPPL merged 13 commits into
mainfrom
build/ideate-verdict-legs

Conversation

@REPPL

@REPPL REPPL commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator

An ideate verdict now proves each of its three legs. The recorder takes schema version 2, and refuses a verdict whose legs claim more than they show.

  • Every record id in every leg resolves. That covers claims, grill notes, kill attempts, reviewer sources, the ruling, rejected alternatives, origin sources and the reframing. The refusal names the leg the id was in. An id-shaped segment inside a web address is part of the address, not a citation.
  • A primary source has a checked shape. It must be an https:// address, a filed source:<key> (resolved against the sources corpus where one exists) or a record id.
  • An empty grill says what it searched. Each search is recorded as terms, places and count, and a grill with no hits and no searches is refused.
  • Each reviewer is kept under its own label. A reviewer has its own kill attempts, verdict and consulted sources. A split between reviewers is refused unless the ruling that settled it says who ruled, the verdict and the reason.
  • Quoted is told apart from verified. The verdict names where the idea came from, and a claim marked verified against one of those sources is refused as a self-quotation. Its proper status is quoted. This holds however the source is written: a trailing slash, an anchor, the host's case, a padded id, or a source named inside a longer origin entry.
  • A reframed verdict carries its reframing.
  • A version-1 payload is refused, naming version 2. It is never upgraded.
  • The command page's leg 3 tells the runner to give each reviewer one idea per context, and its payload example is version 2.

The ideate brief chapter describes the new shape.

Tests: each of the nine acceptance criteria has a case in internal/core/ideate/v2_test.go. Each case was watched fail with its rule removed from a copy of the code and pass with it in place. The review pair's findings (the version-1 decode, normalising sources in the self-quotation check, any kind of space in an address, ids inside addresses) were fixed test-first, and each new case was watched fail against the earlier code.

A docs review of the ideate brief chapter and command page was recorded for the branch head, and an intent fidelity audit of the delivered range judged all nine criteria met.

Delivers: itd-2610141646454347
Refs: spc-2610142138047122
Resolves: iss-2610141647304982
Resolves: iss-2610141647307807
Resolves: iss-2610141647308358
Resolves: iss-2610141647315880
Resolves: iss-2610141647313018
Refs: iss-2610141647309012

Assisted-by: Claude:claude-opus-5-5

REPPL added 13 commits October 28, 2026 16:04
ValidKey exposes the source-key grammar and Unfiled reports which of a
set of keys a corpus carries no entry for, reading the corpus once and
keeping ErrNoCorpus distinct, so a caller that cites a source by key can
tell "nothing to resolve against" from "not filed".

Assisted-by: Claude:claude-opus-5-5
The verdict payload moves to schema version 2 (spc-2610142138047122).
It carries the sources the idea came from; the record grill says what it
searched (terms, places, count); the adversarial leg keeps each reviewer's
kill attempts, verdict and sources under its own label, with the ruling
that settled a split; a reframed verdict carries its reframing in a field
of its own; and a claim may be marked quoted.

`ideate record` now refuses, writing nothing: a record id in any leg that
does not resolve, naming the leg and the id; a primary source that is not
an https:// address, a filed source key or a record id; an empty grill
with no searches; a reframed verdict without a reframing; reviewers who
disagree with no ruling; a verified claim resting on the idea's own
source; and a version-1 payload, with a message naming version 2. The
research note renders the origins, the searches, each reviewer's section,
the ruling and the reframing. The command page moves to the same shape
and tells the runner to give each reviewer one idea per context.

Assisted-by: Claude:claude-opus-5-5
The record front door hands the core the person's default sources
corpus, so a source:<key> citation is checked against it when it exists
and accepted on its shape when it does not. The human result shows the
quoted claims, the grill's searches and the number of reviewers.

Assisted-by: Claude:claude-opus-5-5
Assisted-by: Claude:claude-opus-5-5
The version-2 verdict resolves every record id in every leg, checks the
shape of each primary source, records the grill's searches, keeps each
reviewer under its own label, refuses a split with no ruling and tells
a quoted claim from a verified one, so the five issues it was planned
to fix move to resolved/.

Resolves: iss-2610141647304982
Resolves: iss-2610141647307807
Resolves: iss-2610141647308358
Resolves: iss-2610141647315880
Resolves: iss-2610141647313018
Refs: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
The ideate chapter now names the quoted claim status and the three
primary-source shapes, the grill's recorded searches, the per-reviewer
sections and the ruling a split needs, the origin sources and the
reframing, and the refusals that guard them.

Refs: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
…es by meaning

A version-1 payload an older command page composed carries its kill
attempts on the adversarial leg, so the strict decode stopped at that
field and never said to compose version 2; the version is now read
first. A claim marked verified against the idea's own source written
another way (a trailing slash, an anchor, a host's case, a padded
record id, or a source named inside a longer origin entry) is refused
as a self-quotation. An address is checked for every kind of space,
and an id-shaped segment inside a web address is no longer read as a
citation of a record in this repository.

Refs: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
…sources only whole

An address in running text now ends at a quote, bracket, comma or
semicolon, so an id written straight after one is still resolved. An
origin's words count as its sources only when they are an address or a
filed source key, as written or with punctuation trimmed, so an address
ending in a bracket matches; a record id counts only as a whole origin
entry, so a claim checked against a record an origin merely mentions is
a primary check, not a self-quotation.

Refs: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
The brief chapter and the command page said every record id anywhere
in the verdict is resolved; the recorder resolves the ids in the
claims, sources, notes, kill attempts, the ruling's reason, the
rejected alternatives, the origin sources and the reframing, outside
web addresses, and leaves the grill's searches unchecked by design.
The chapter also now says what happens when a rolled-back verdict
cannot be removed.

Refs: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
Every acceptance criterion of the version-2 verdict is built and
tested, so the spec moves to closed/ and its intent to shipped/.

Delivers: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
…'s author

An unresolved id written in a reviewer's label or in who ruled was
recorded; both are part of the adversarial leg, so they are now
resolved like the rest of it, and the brief chapter and command page
list them.

Refs: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
The fidelity audit of the delivered range judged all nine acceptance
criteria met and all three scope conditions survived.

Refs: itd-2610141646454347
Refs: spc-2610142138047122
Assisted-by: Claude:claude-opus-5-5
@REPPL
REPPL enabled auto-merge October 29, 2026 21:48
@REPPL
REPPL added this pull request to the merge queue Oct 29, 2026
Merged via the queue into main with commit a76f809 Oct 29, 2026
14 checks passed
@REPPL
REPPL deleted the build/ideate-verdict-legs branch October 29, 2026 23:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant