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
+9 -10
View File
@@ -1,18 +1,17 @@
"""The `lesson` kind — its trigger, its title, and its place in the vocabulary.
WHY THIS EXISTS (milestone 385 step 2, #3729)
WHY THIS EXISTS
A lesson is a note that must be findable by WHEN IT APPLIES rather than by what
it is about. That is a document-shape fact: the trigger has to reach the
embedded text, and decision #4157 put it in `notes.data` with a mirror in the
title and the head of the body — the shape snippets already use.
embedded text, so it lives in `notes.data` with a mirror in the title and the
head of the body — the shape snippets use.
THE ONE THAT MATTERS MOST
`test_one_join_builds_every_trigger_title`. Three kinds now rank on a
`{subject} — {trigger}` title: rules, snippets and lessons. That join had three
implementations before this step and would have had four; #3207 records what
that costs. The guard is behavioural rather than `assert a is b`, because the
`{subject} — {trigger}` title: rules, snippets and lessons, through ONE join —
a copy per kind is a fix that has to be found in three places. The guard is behavioural rather than `assert a is b`, because the
three are reached through different public names and a test that compared
identities would pass on a re-implementation that merely re-exported.
@@ -75,7 +74,7 @@ def test_one_join_builds_every_trigger_title():
expected = f"{subject} — {trigger}"
assert trigger_title(subject, trigger) == expected
# The two note kinds reach it through the EMBEDDED title (milestone 427),
# The two note kinds reach it through the EMBEDDED title,
# from their own mirror key — never a hand-rolled join.
from scribe.services.embeddings import document_title
assert document_title(subject, "lesson", {"when_to_apply": trigger}) == expected
@@ -95,7 +94,7 @@ def test_the_kind_is_in_the_browse_vocabulary():
Asserted through the public table rather than a literal, because the door's
validation, the counts and both dialects of the type filter are all
generated from it (#3161) — so this is the one place that decides.
generated from it — so this is the one place that decides.
"""
assert lessons_svc.LESSON_NOTE_TYPE in knowledge_svc.FACET_TYPES
assert lessons_svc.LESSON_NOTE_TYPE in knowledge_svc.NON_TASK_FACETS
@@ -104,7 +103,7 @@ def test_the_kind_is_in_the_browse_vocabulary():
def test_the_global_kinds_list_names_the_lesson_and_nothing_else():
"""`embeddings.GLOBAL_NOTE_TYPES` spells "lesson" as a literal because
`services.lessons` imports `trigger_title` from that module, so importing
it back would close a cycle (milestone 385 step 3). The copy is pinned
it back would close a cycle. The copy is pinned
here instead — the one thing a literal costs is that it can drift, and
this is what stops it.
"""
@@ -114,7 +113,7 @@ def test_the_global_kinds_list_names_the_lesson_and_nothing_else():
def test_a_lesson_is_not_a_task_on_either_arm_of_the_filter():
"""The cell left empty on purpose (#3163).
"""The cell left empty on purpose.
`is_task` IS `status is not None`, so a lesson that acquired a status would
become a task and start appearing in open-work listings — the one way