Skip to content

refactor(events): normalize matching keys once per handler pass - #2

Merged
ifuri-validator-agent[bot] merged 2 commits into
mainfrom
refactor/koru-event-matching
Sep 5, 2026
Merged

refactor(events): normalize matching keys once per handler pass#2
ifuri-validator-agent[bot] merged 2 commits into
mainfrom
refactor/koru-event-matching

Conversation

@tom-sapletta-com

@tom-sapletta-com tom-sapletta-com commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Ticket: ticket-004
Closes #4
Correlation ID: koru-code2schema-event-matching-pilot

Normalize event keywords once per handler pass and each matching function name once. Preserve ordering, duplicate matches, existing handlers, mixed case and empty event keywords.

The branch includes current main through a merge; the PR changes only the event analyzer and regression tests. Validation: all 26 tests passed with the current locked development environment. Earlier Koru execution and wellmanifest/performance measurements remain preserved in the local audit.

Protected publication depends on subactor/validator-agent PR339, which registers both existing locked test contexts.

@tom-sapletta-com
tom-sapletta-com marked this pull request as ready for review September 5, 2026 22:52

@ifuri-validator-agent ifuri-validator-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deterministic Validator approval for exact head 8d477dc20a99043b56d89c7f7907922ce96b84a3.

Ticket: ticket-004
Correlation ID: code2schema-pr-2-ticket-004
Model: zai/glm-5.3
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). Refactor hoists event keyword normalization out of the per-function loop, computing each event keyword once and lowercasing each handler name once. Semantics are preserved: keyword derivation (lower, strip 'event', strip whitespace), membership check, append order, and empty-keyword skip are identical. New regression tests cover ordering, duplicates, existing handlers, case-insensitivity, empty keywords, and no-op cases.
Advisory findings: none
The LLM output above is advisory and was not used as the approval trust root.

Actual PR impact radar

Exact range: 0852f7a8c92bf943e4da1968941e03f72a9a4d71...8d477dc20a99043b56d89c7f7907922ce96b84a3
Change digest: 35219864ab8e44f2a26f9143db4b85fa53a1ca13321cd83f709c5c5f0791a8d9
Score: 52/100 (M), estimated 53 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":35,"base_sha":"0852f7a8c92bf943e4da1968941e03f72a9a4d71","binary_files":0,"categories":{"migrations":1,"tests":1},"change_digest":"35219864ab8e44f2a26f9143db4b85fa53a1ca13321cd83f709c5c5f0791a8d9","comparison":"0852f7a8c92bf943e4da1968941e03f72a9a4d71...8d477dc20a99043b56d89c7f7907922ce96b84a3","deletions":3,"file_count":2,"files":["code2schema/analyzer/events.py","tests/test_event_handlers.py"],"head_sha":"8d477dc20a99043b56d89c7f7907922ce96b84a3","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":4,"delivery":2,"scope":2,"uncertainty":3,"validation":2},"complexity":"M","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":53,"within_budget":false},"impact":{"components":["code2schema","subactor","tests","wellmanifest"],"files":["code2schema/analyzer/events.py","subactor/validator-agent","tests/test_event_handlers.py","wellmanifest/performance"],"public_interfaces":["code2schema/analyzer/events.py"],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":52,"split":{"parts":[{"estimated_minutes":20,"name":"Define contract and acceptance boundary","scope":["code2schema/analyzer/events.py"]},{"estimated_minutes":10,"name":"Implement code2schema","scope":["code2schema"]},{"estimated_minutes":10,"name":"Implement subactor","scope":["subactor"]},{"estimated_minutes":10,"name":"Implement tests","scope":["tests"]},{"estimated_minutes":10,"name":"Implement wellmanifest","scope":["wellmanifest"]},{"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-004"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-004: refactor(events): normalize matching keys once per handler pass</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,47 97,53 79,85 54,78 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">M · 53m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-004-7612
TICKET ticket-004
HEAD_SHA 8d477dc20a99043b56d89c7f7907922ce96b84a3
CORRELATION_ID code2schema-pr-2-ticket-004
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["test (3.13)=PASS","test (3.10)=PASS"]
INPUT required_checks = ["test (3.10)","test (3.13)"]
INPUT required_checks_source = "protected registry (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT superseded_checks = []
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"0852f7a8c92bf943e4da1968941e03f72a9a4d71","head_sha":"8d477dc20a99043b56d89c7f7907922ce96b84a3","change_digest":"35219864ab8e44f2a26f9143db4b85fa53a1ca13321cd83f709c5c5f0791a8d9","score":52,"complexity":"M","estimated_minutes":53,"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 "zai/glm-5.3"
ASSERT VERDICT_AUTHORITY != "ADVISORY"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit a8a71c7 into main Sep 5, 2026
2 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the refactor/koru-event-matching branch September 5, 2026 23:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish Koru event-handler matching refactoring pilot

1 participant