Repository navigation
fix(advise): derive reflex patterns from proposal categories (ticket-106) - #129
Conversation
…106) reflex analyze has no 'patterns' key, so advise always saw zero reflex patterns. Build one pattern per proposal category and require two repeats instead of turning every one-off event into a proposal. Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
Validator approval after policy checks for exact head 97ec37e4462ab3b0dde8e12a96cd4df4aab35b43.
Ticket: ticket-106
Correlation ID: local-semcod-monag-pr-129-ticket-106
Model: openai/cursor-auto
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). The PR successfully addresses the issue where collect_reflex_patterns failed to find patterns from reflex analyze output. It properly groups proposals by category and computes frequencies and group counts using the new _patterns_from_proposals function. Additionally, REFLEX_MIN_REPEAT is correctly increased to 2 to prevent one-off failures from being reported as patterns. Tests and intent metadata correctly track the changes.
Advisory findings: none
The LLM output above is advisory and was not used as the approval trust root.
Semantic review prerequisite: not_required; policy 676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7.
Actual PR impact radar
Exact range: 452d655cdd4287c86a94a89c9b8816cf3d799b67...97ec37e4462ab3b0dde8e12a96cd4df4aab35b43
Change digest: b3c13a55e9508a52de28dcbb4e5513b3ee921f4d39a8a7f88e1e898c3e4df660
Score: 56/100 (L), estimated 72 min, split recommended: true
Affected services/components: repository-wide/unclassified
Machine-readable radar JSONL and SVG
{"actual_change":{"additions":99,"base_sha":"452d655cdd4287c86a94a89c9b8816cf3d799b67","binary_files":0,"categories":{"code":1,"configuration":1,"docs":1,"tests":1},"change_digest":"b3c13a55e9508a52de28dcbb4e5513b3ee921f4d39a8a7f88e1e898c3e4df660","comparison":"452d655cdd4287c86a94a89c9b8816cf3d799b67...97ec37e4462ab3b0dde8e12a96cd4df4aab35b43","deletions":4,"file_count":4,"files":["project/ticket-106/README.md","project/ticket-106/intent.json","src/monag/advise.py","tests/test_advise.py"],"head_sha":"97ec37e4462ab3b0dde8e12a96cd4df4aab35b43","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":2,"scope":3,"uncertainty":3,"validation":1},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":72,"within_budget":false},"impact":{"components":["192","267","3377","claude.com","project","src/monag","tests"],"files":["192/19","267/65","3377/136","claude.com/claude-code","project/ticket-106/README.md","project/ticket-106/intent.json","src/monag/advise.py","tests/test_advise.py"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":56,"split":{"parts":[{"estimated_minutes":10,"name":"Implement 192","scope":["192"]},{"estimated_minutes":10,"name":"Implement 267","scope":["267"]},{"estimated_minutes":10,"name":"Implement 3377","scope":["3377"]},{"estimated_minutes":10,"name":"Implement claude.com","scope":["claude.com"]},{"estimated_minutes":10,"name":"Implement project","scope":["project"]},{"estimated_minutes":15,"name":"Validate and project to trackers","scope":["tests","planfile","github/gitlab/jira projections"]}],"reason":"estimated_minutes_exceed_budget","recommended":true},"standards":[{"id":"wellmanifest/dsl","revision":"6c60fc4e0dd1f1bb74f46a7745e28019908d1203","version":"0.1.0-dev"},{"id":"wellmanifest/ticket-lifecycle","revision":"5bf581907a87b46a13a73e6c033d3abe4d9a306f","version":"0.1.0-dev"},{"id":"wellmanifest/git-lifecycle","revision":"7d77d4b7af57e69bc75c3a0290b3a4805c5c4438","version":"0.2.0-dev"},{"id":"wellmanifest/logs","revision":"48c284ef7a069055c0bcb6b900147ce5e65f8b43","version":"0.3.0"}],"ticket_ref":"ticket-106"}<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-106: fix(advise): derive reflex patterns from proposal categories (ticket-106)</title><rect width="128" height="128" rx="12" fill="#f8fafc"/><g stroke-width="1"><polygon points="64,55 72,61 69,71 59,71 56,61" fill="none" stroke="#d7dde5"/><polygon points="64,47 80,59 74,78 54,78 48,59" fill="none" stroke="#d7dde5"/><polygon points="64,38 89,56 79,85 49,85 39,56" fill="none" stroke="#d7dde5"/><polygon points="64,30 97,53 84,92 44,92 31,53" fill="none" stroke="#d7dde5"/><polygon points="64,21 105,51 89,99 39,99 23,51" fill="none" stroke="#d7dde5"/><line x1="64" y1="64" x2="64" y2="21" stroke="#aab4c0"/><line x1="64" y1="64" x2="105" y2="51" stroke="#aab4c0"/><line x1="64" y1="64" x2="89" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="39" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="23" y2="51" stroke="#aab4c0"/></g><polygon points="64,38 105,51 79,85 59,71 48,59" fill="#fb923c" fill-opacity="0.45" stroke="#c2410c" stroke-width="2"/><circle cx="64" cy="64" r="3" fill="#c2410c"/><g font-family="sans-serif" font-size="7" fill="#334155"><text x="64" y="11" text-anchor="middle">SCO</text><text x="114" y="48" text-anchor="middle">COU</text><text x="95" y="107" text-anchor="middle">UNC</text><text x="33" y="107" text-anchor="middle">VAL</text><text x="14" y="48" text-anchor="middle">DEL</text></g><text x="64" y="124" text-anchor="middle" font-family="sans-serif" font-size="8" fill="#0f172a">L · 72m</text></svg>DECISION D-106-3424
TICKET ticket-106
HEAD_SHA 97ec37e4462ab3b0dde8e12a96cd4df4aab35b43
CORRELATION_ID local-semcod-monag-pr-129-ticket-106
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["governance / remote lifecycle=PASS","governance / enforce=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["onedev/local-verify","governance / remote lifecycle","governance / enforce"]
INPUT required_checks_source = "protected registry (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT semantic_review_assessment = {"schema":"subactor.validator/semantic-review-assessment/v1","subject":{"repository":"semcod/monag","pull_request":129,"head_sha":"97ec37e4462ab3b0dde8e12a96cd4df4aab35b43","base_sha":"452d655cdd4287c86a94a89c9b8816cf3d799b67","diff_sha256":"ff94faaeea9e5e88917ef20697b3f61a8bf5919359a7aa0341f9a7e33acd5961"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/ticket-106/README.md","project/ticket-106/intent.json","src/monag/advise.py","tests/test_advise.py"]},"grounding":"full-diff-not-per-finding-proof","execution_authority":false,"status":"not_required","reason":null,"review_sha256":null,"unresolved":[]}
INPUT superseded_checks = []
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"452d655cdd4287c86a94a89c9b8816cf3d799b67","head_sha":"97ec37e4462ab3b0dde8e12a96cd4df4aab35b43","change_digest":"b3c13a55e9508a52de28dcbb4e5513b3ee921f4d39a8a7f88e1e898c3e4df660","score":56,"complexity":"L","estimated_minutes":72,"split_recommended":true,"services":[],"authority":"ADVISORY","promotion":"FORBIDDEN"}
VERDICT APPROVE AUTHORITY DETERMINISTIC
REJECTED REQUEST_CHANGES BECAUSE NO_UNSAFE_CHANGE_REASON_FOUND
ADVISORY llm_verdict = "APPROVE" MODEL "openai/cursor-auto"
ASSERT VERDICT_AUTHORITY != "ADVISORY"
Problem
collect_reflex_patternsreadanalysis['patterns'], butreflex analyzereturnsproposals/events/statistics, with nopatternskey.monag advisetherefore always reported "0 wzorców reflex", and the priority readings ignored recurring failures. It also usedmin_repeat=1, so every one-off event became a proposal (595 on an 8-hour transcript corpus).Change
_patterns_from_proposals(): one pattern per proposal category, with summed frequency and group count, used by both the import and CLI runners.REFLEX_MIN_REPEAT = 2.Evidence
On the 8 h tool-failure projection: 228 proposals → patterns
operational-failure 3377/136,test-feedback 267/65,governance-friction 192/19,credential-readiness,provider-unavailability. Before the fix:patterns=[].Full suite: 467 passed. Governance GOV-PASS. Ruff: no new findings in the touched files (one fewer).
Ticket: ticket-106
🤖 Generated with Claude Code