docs(6209): forge, dedup, tuning, registry, reply shapes and discipline, checkpoint, lesson kind tests
CI & Build / Python lint (push) Successful in 4s
CI & Build / Plugin hooks (push) Successful in 25s
CI & Build / TypeScript typecheck (push) Successful in 56s
CI & Build / integration (push) Successful in 1m24s
CI & Build / Python tests (push) Successful in 2m13s
CI & Build / Build & push image (push) Successful in 13s

Eight more test files state their properties without issue, milestone,
rule and decision numbers. The tuning and suspension notes describe the
symptom a shipped default or a late ledger produces instead of one
install's dated readings; the reply-discipline and checkpoint docstrings
state the failure they prevent instead of the session that measured it.
test_empty_selector_is_the_rule_115_baseline is renamed for what it
checks: the no-forge baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-21 21:30:54 -04:00
co-authored by Claude Opus 5.5
parent 0e658bf275
commit b3e6a27dc1
8 changed files with 97 additions and 110 deletions
+15 -15
View File
@@ -43,7 +43,7 @@ async def test_short_body_skips_semantic_check():
@pytest.mark.asyncio
async def test_semantic_match_when_body_substantial():
# A note blocks only in the copy band (#4306).
# A note blocks only in the copy band.
hit = fake_note(id=20, title="Existing", note_type="note")
sem = AsyncMock(return_value=[(0.99, hit)])
with patch("scribe.services.dedup.async_session",
@@ -60,8 +60,8 @@ async def test_semantic_match_when_body_substantial():
@pytest.mark.asyncio
async def test_a_near_note_is_surfaced_not_blocked():
"""#4306: sibling notes — the next dev-log, another part of one design —
measured 0.90–0.98, so a match there is shown for the session to judge
"""Sibling notes — the next dev-log, another part of one design — measure
0.90–0.98, so a match there is shown for the session to judge
instead of refusing the write."""
from scribe.services.dedup import _NOTE_OVERLAP_FLOOR
@@ -133,9 +133,9 @@ def test_a_batch_overlap_names_its_record():
@pytest.mark.asyncio
async def test_gate_catches_a_duplicate_hiding_in_a_later_chunk():
"""The capability #280 adds to the gate: a long candidate that duplicates
an existing record in ONE SECTION is caught, where the whole-document
query this replaces diluted exactly the section that mattered. The gate
"""A long candidate that duplicates an existing record in ONE SECTION is
caught; a whole-document query would dilute exactly the section that
matters. The gate
queries once per chunk and any chunk's hit blocks."""
para = ("This section restates an existing decision in enough words to be "
"a real paragraph of content for the chunker to keep. ") * 4
@@ -202,13 +202,13 @@ def test_duplicate_response_shape():
assert "update_task" in r["message"]
# --- snippet structural identity (#2518) -------------------------------------
# --- snippet structural identity ---------------------------------------------
#
# The gate used to compare a snippet's rendered DOCUMENT, which is mostly prose
# about the code. Measured on the button corpus, that failed in both directions
# at once: two deliberately-parallel variants were refused at 0.92, while a
# verbatim re-record of one snippet under a different name scored below 0.90 and
# was created. These tests pin the structural signals that replaced it.
# A snippet's rendered DOCUMENT is mostly prose about the code, and comparing
# it fails in both directions at once: two deliberately-parallel variants
# refused at 0.92, while a verbatim re-record under a different name scores
# below 0.90 and is created. These tests pin the structural signals used
# instead.
def _session_sequence(results):
@@ -371,7 +371,7 @@ def test_duplicate_response_names_what_matched_for_structural_hits():
assert "identical code" in r["message"]
# --- the generalised report (#2547) ------------------------------------------
# --- the generalised report -------------------------------------------------
@pytest.mark.asyncio
@@ -404,7 +404,7 @@ def test_every_kind_has_a_suggestion_and_none_proposes_merging_notes():
"""The suggestion is the report's point: what to DO differs by what the
records are, and 'merge' is only ever the answer for snippets — folding two
notes destroys what each said, which is why consolidated_at was dropped
rather than built (#2483)."""
rather than built."""
from scribe.services.dedup import _KIND_SUGGESTION, _REPORT_KINDS
for kind in _REPORT_KINDS:
@@ -418,7 +418,7 @@ def test_every_kind_has_a_suggestion_and_none_proposes_merging_notes():
assert "supersedes" in _KIND_SUGGESTION["note"]
# ── the plan gate (milestone 415, step 4) ─────────────────────────────────────
# ── the plan gate ─────────────────────────────────────────────────────────────
@pytest.mark.asyncio