S9: the lesson-candidate question names the cluster topic, not the headline #1294
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#1294
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
After #1289 and #1293, the live S9 refresh on the real Store (2026-10-23) writes 2 eligible lesson candidates. Both questions read
In 3 sessions you ruled on "## Prediction". Is this a rule? (y/n).LessonCandidate#questionusesPatternCluster#headline, the stored first line of the seed moment, but the clusters now group moments by topic text (MomentTopic). The S9b SessionStart hook asks this question word for word, and Jared cannot answer a question that names no topic. The candidate file was moved out of the Store until this ships.Approach
PatternClustereralready computes the topic text of each ruling moment. It gives eachPatternClusterthe topic text of its seed moment, without theclustering:prefix.PatternCluster#topicreturns it.LessonCandidate#questionusestopicin place ofheadline.PatternCluster#headlinehas no other caller and is removed.Required work:
PatternClustertakes the seed topic text and answers#topic— check: presentattr_reader :topicinplugins/os-me/lib/os_me/pattern_cluster.rbLessonCandidate#questionnames the cluster topic — check: present@cluster.topicinplugins/os-me/lib/os_me/lesson_candidate.rbPatternCluster#headline— check: absentdef headlineinplugins/os-me/lib/os_me/pattern_cluster.rbAcceptance criteria
## Predictionand a transcript AI message whose topic text isUse option B for the cache.(the fake embedder maps them to one vector), whenCandidateRefresh#runruns, then the candidate row'squestionisIn 3 sessions you ruled on "Use option B for the cache.". Is this a rule? (y/n).Decision: cache the index, whenCandidateRefresh#runruns, then the question namesDecision: cache the index.LessonCandidate#questionis read, then the question text holds noclustering:prefix.All criteria run in Minitest under
plugins/os-me/test, with fixture transcripts in a temp dir and a fake embedder. No model call, no network. Update existing tests that buildPatternClusteror read itsheadline.Owner sketch
Scope and blocking
In scope:
plugins/os-me/lib/os_me/pattern_cluster.rb,pattern_clusterer.rb,lesson_candidate.rb, and tests underplugins/os-me/test. Out of scope: candidate ids (they hash moment ids and do not change); the moved-aside candidate file, which the orchestrator regenerates after merge. Blocked by: none.Origin
plugins/os-me/lib/os_me/lesson_candidate.rb).VERDICT: CREATE (drafter follow-up of user-ruled #1289; backlog search only)
Work started on branch ticket-1294 (os-sdlc implement).
Resolution
Done: LessonCandidate#question names the seed topic via PatternCluster#topic; PatternCluster#headline removed
Evidence: Implementation 154 escalated (bound_exhausted suite-check, required-work check 1 literal def topic vs attr_reader); hand-finished: suite 372 runs 0 failures, rubocop clean, opus design audit pass
Follow-ups: none; live candidates rerun reported in session