#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 suggestedlesson_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.
## 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)
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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What this ships
#4637 "Soft links" (
dbbab85), from milestone 440 "Lessons point at rules"./retrieveon a prompt,/prior-arton a write), the pair is recorded as evidence on a suggestedlesson_rule_linksrow.judge_lesson_link. A passed-over pair is asked again after 6 hours at most.evidencecolumn. 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