os-me: backfill the 131 review-log rows into predictions.jsonl once #1079
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#1079
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
History before the record log would vanish from bin/os-me-report. The Store holds 131 review-log rows that carry the only record of earlier predictions.
Reproduce
n/a: feature work. Jared chose to keep this step on 2026-10-17.
Approach
Rules decided 2026-10-17 by the orchestrator after escalation 29, from the real
~/dev/os-me-store/learning/review-log.md. Only the table under## Logis read. Its columns are Date | Run | Finding | Change.live predict e8bce22a @12:59givese8bce22a). A row with no such token produces no record.:,,,., space, or end.Hitgiveshit,Partialgivespartial,Missgivesmiss, andUnscoredorNot scoredgivesunscored(stored as verdict null).2 hits, 1 missor3 match (...), 1 partial (...), 3 misssplits into one record per counted prediction.match/matches/hit/hitsgivehit;partial/partialsgivepartial;miss/missesgivemiss.Held,Dropped,Not processed,No score,Verdicts,Decision,Transcript, a hex id) produces no record.A,B,C... per session, in file order across all rows of that session.T<n>,A<n>,R<n>,C<n>token in the Finding and Change columns, unique, in order of first appearance.backfilled: true.scored_at: the row Date.PredictionLog#appendskips a record whoseidandsession_idalready exist in the log. This makes the backfill idempotent and also stops a secondappend TRANSCRIPTfrom writing duplicates (takedown grade X1, run 1079-20261017-094730).## Logmakes the backfill raise with a message that names the file; the CLI exits non-zero.bin/os-me-backfill [--review-log PATH] [--log PATH]prints one line: records appended, records already present, and rows without a record.Required work:
OsMe::ReviewLogBackfillwith the rules above — check: presentclass ReviewLogBackfillinplugins/os-me/lib/os_me/review_log_backfill.rbbackfilledtoPredictionLog::FIELDS— check: presentbackfilledinplugins/os-me/lib/os_me/prediction_log.rbbin/os-me-backfill— check: presentbackfillinplugins/os-me/bin/os-me-backfillPredictionLog#appendskip a record whoseidandsession_idalready exist in the log (proved by acceptance criteria 2 and 7)Orchestrator work: run
bin/os-me-backfillonce against the Store, commitlearning/predictions.jsonlin~/dev/os-me-store, and record the commit hash in this ticket.Acceptance criteria
2 hits, 1 miss, when the backfill runs, then the log holds seven records.live predict e8bce22a @12:59and whose Finding starts withHit:, when the backfill runs, then the record has sessione8bce22a, verdicthit, backfilled true, and confidence, depth and origin null.HeldorDropped, or a row with no hex session in its Run column, when the backfill runs, then it writes no record for that row.AandB.T16andC29, when the backfill runs, then the record's triggers areT16andC29.Afor sessions1, whenappendreceives a record with idAfor sessions1, then the log does not change.bin/os-me-backfillruns, then stdout reports the appended count, the already-present count, and the count of rows without a record.## Log, whenbin/os-me-backfillruns, then it exits non-zero and names the file.Owner sketch
Non-goals
Blocked by #1074
Origin
Work started on branch ticket-1079 (os-sdlc poodr-ticket-implementation). Takedown run 1079-20261017-094730 failed at green-suite (a lint offense in a failing test that polish cannot fix), so the ticket's own Approach drives the build.
Resolution
Done: OsMe::ReviewLogBackfill and bin/os-me-backfill parse the review-log Log table into prediction records (session from the Run hex id, verdict from the Finding start, multi-verdict splits, synthetic letters per session, T/A/R/C triggers, backfilled true). PredictionLog#append skips an existing id+session, which also removes takedown grade X1 (duplicate records on a second append). Backfill run once: 111 records appended, 20 rows without a record; Store commit f9ee1d8 (os-me-store, prediction-log.jsonl).
Evidence: Implementation 57 (poodr-ticket-implementation, 20 dispatches, 2 orchestrator reroutes after ticket-defect escalations 29 and 30, 4 retries): 9/9 criteria verified, suite and contract audit pass. Dry run on a copy: second run appends 0; no-table log exits 1 naming the file; os-me-report renders all four tables. LENS A10 and A12 challenged: heuristic holds; signals committed.
Follow-ups: none