Soft links: a lesson and a rule arriving together are proposed as a link (milestone 440 step 3, #4637) #190

Merged
bvandeusen merged 1 commits from dev into main 2026-10-01 14:59:30 -04:00
Owner

What this ships

#4637 "Soft links" (dbbab85), from milestone 440 "Lessons point at rules".

  • When one hook response shows a lesson and a rule together (/retrieve on a prompt, /prior-art on a write), the pair is recorded as evidence on a suggested lesson_rule_links row.
  • Evidence counts distinct situations: the normalised prompt, or the file being written. The first co-arrival after 3 distinct situations carries one line asking the reader to judge the pair with judge_lesson_link. A passed-over pair is asked again after 6 hours at most.
  • Only pairs the reader could confirm are recorded. Judged pairs gather nothing more.
  • A suggested link changes nothing about what surfaces.
  • No migration, because evidence uses the existing evidence column. No plugin change.

Why now

#4632 "Link the lessons that already exist" waits on this evidence. Evidence gathering starts only at deploy.

Verification

CI on dev passed every job on dbbab85 (run 710), including the real-Postgres recorder tests.

🤖 Generated with Claude Code

## What this ships **#4637 "Soft links"** (dbbab85), from milestone 440 "Lessons point at rules". - When one hook response shows a lesson and a rule together (`/retrieve` on a prompt, `/prior-art` on a write), the pair is recorded as evidence on a **suggested** `lesson_rule_links` row. - Evidence counts distinct **situations**: the normalised prompt, or the file being written. The first co-arrival after 3 distinct situations carries one line asking the reader to judge the pair with `judge_lesson_link`. A passed-over pair is asked again after 6 hours at most. - Only pairs the reader could confirm are recorded. Judged pairs gather nothing more. - A suggested link changes nothing about what surfaces. - No migration, because evidence uses the existing `evidence` column. No plugin change. ## Why now #4632 "Link the lessons that already exist" waits on this evidence. Evidence gathering starts only at deploy. ## Verification CI on dev passed every job on dbbab85 (run 710), including the real-Postgres recorder tests. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bvandeusen added 1 commit 2026-10-01 14:59:27 -04:00
feat(lessons): soft links — a lesson and a rule arriving together in distinct situations are proposed as a link (milestone 440 step 3, #4637)
CI & Build / Python tests (push) Successful in 1m45s
CI & Build / Python lint (push) Successful in 4s
CI & Build / Plugin hooks (push) Successful in 12s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 54s
CI & Build / Build & push image (push) Successful in 30s
dbbab859ce
When one hook response puts a lesson and a rule in front of the reader, the
pair is recorded as evidence on a SUGGESTED lesson_rule_links row; once the
pair has arrived together in PROPOSE_SITUATIONS (3) distinct situations, the
next co-arrival carries one line asking the reader to judge it with
judge_lesson_link. Nothing about surfacing changes: a suggested link carries
no rule anywhere (that is #4633, confirmed links only).

- lesson_rules: co_surfaced (fail-open; only pairs the reader could confirm —
  a lesson they may write, a rule they own; judged pairs gather nothing; one
  proposal per response; PROPOSE_COOLDOWN 6h between asks), plus the pure
  counting rules: situation_key, add_evidence, proposal_due, evidence_summary.
  A situation is the prompt on /retrieve (word tokens, sorted and
  de-duplicated, so trivial rewordings count once) and the FILE on
  /prior-art (every edit to one file is one situation).
- rules_for_lessons shows a suggested link's evidence counts.
- plugin_context: build_autoinject_hint returns lesson_ids,
  build_prompt_rule_hint returns shown_rule_ids, build_write_path_hint records
  its own pair; routes/plugin /retrieve records the prompt pair. Shown lines,
  repeats included: relevance makes a co-arrival, not the session ledger.
- Evidence lives in the existing evidence column — no migration, and backup
  already carries it.
- Tests: counting rules (unit), the recorder against Postgres (bar, repeat,
  judged pairs, ownership, cooldown, evidence kept on confirm); conftest stubs
  co_surfaced for unit tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bvandeusen merged commit c08655914f into main 2026-10-01 14:59:30 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledScribe#190