Skip to content

perf(ticket-006): optimize Prolog validation with indexed rules and fast path pattern matching in sumd - #11

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/006-optimize-prolog-validation-and-pattern-matching-in-sumd
Oct 13, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/006-optimize-prolog-validation-and-pattern-matching-in-sumd

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Summary

  • Implement functor-indexed SLD resolution via IndexedPythonPrologEngine in sumd/validator.py, indexing rules and clauses by functor for O(1) candidate lookup rather than O(N) scanning over thousands of clauses.
  • Add fast-path ground fact resolution: skip variable renaming on ground facts without bodies, avoiding millions of allocations.
  • Add _filter_rule_relevant_facts to filter facts down to only predicates declared in rules.pl before feeding into the resolution database.
  • Add fast non-wildcard branch to _path_matches_pattern_cached in sumd/extractor.py to bypass expensive fnmatch translations.
  • Short-circuit ignore evaluation in _is_path_ignored when no negation patterns exist.

@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.

Validator approval after policy checks for exact head 7f8601a614ce56ebd1a01544cc54405e5fa03c87.

Ticket: ticket-006
Correlation ID: local-autogrammar-sumd-pr-11-ticket-006
Model: gemini/gemini-3.8-flash
Advisory LLM review: LLM_UNAVAILABLE
Reason: No module named 'litellm'
This approval rests on the deterministic checks alone; no advisory opinion was recorded for this head.
Semantic review prerequisite: not_required; policy 676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7.

Actual PR impact radar

Exact range: 18e73dd3acec19df2e620bb65d4fdfb7f74dd6c9...7f8601a614ce56ebd1a01544cc54405e5fa03c87
Change digest: 29d7bab8577ebb221045f16fee378c3c3c0bc9e4f33be81ae72069dba7db7007
Score: 44/100 (M), estimated 50 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":205,"base_sha":"18e73dd3acec19df2e620bb65d4fdfb7f74dd6c9","binary_files":0,"categories":{"code":2,"configuration":1,"docs":1},"change_digest":"29d7bab8577ebb221045f16fee378c3c3c0bc9e4f33be81ae72069dba7db7007","comparison":"18e73dd3acec19df2e620bb65d4fdfb7f74dd6c9...7f8601a614ce56ebd1a01544cc54405e5fa03c87","deletions":4,"file_count":4,"files":["project/ticket-006/README.md","project/ticket-006/intent.json","sumd/extractor.py","sumd/validator.py"],"head_sha":"7f8601a614ce56ebd1a01544cc54405e5fa03c87","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":2,"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":50,"within_budget":false},"impact":{"components":["project","sumd"],"files":["project/ticket-006/README.md","project/ticket-006/intent.json","sumd/extractor.py","sumd/validator.py"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":44,"split":{"parts":[{"estimated_minutes":20,"name":"Implement project","scope":["project"]},{"estimated_minutes":20,"name":"Implement sumd","scope":["sumd"]},{"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-006"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-006: perf(ticket-006): optimize Prolog validation with indexed rules and fast path pattern matching in sumd</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 80,59 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 · 50m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-006-7829
TICKET ticket-006
HEAD_SHA 7f8601a614ce56ebd1a01544cc54405e5fa03c87
CORRELATION_ID local-autogrammar-sumd-pr-11-ticket-006
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["quality=PASS","governance / remote lifecycle=PASS","governance / enforce=PASS"]
INPUT required_checks = ["quality"]
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":"autogrammar/sumd","pull_request":11,"head_sha":"7f8601a614ce56ebd1a01544cc54405e5fa03c87","base_sha":"18e73dd3acec19df2e620bb65d4fdfb7f74dd6c9","diff_sha256":"a1c0912c67fc89015fef58a14ade9aa068ec6e6af2d5a00aa6e211e13397dc0e"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/ticket-006/README.md","project/ticket-006/intent.json","sumd/extractor.py","sumd/validator.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":"18e73dd3acec19df2e620bb65d4fdfb7f74dd6c9","head_sha":"7f8601a614ce56ebd1a01544cc54405e5fa03c87","change_digest":"29d7bab8577ebb221045f16fee378c3c3c0bc9e4f33be81ae72069dba7db7007","score":44,"complexity":"M","estimated_minutes":50,"split_recommended":true,"services":[],"authority":"ADVISORY","promotion":"FORBIDDEN"}
VERDICT APPROVE AUTHORITY DETERMINISTIC
REJECTED REQUEST_CHANGES BECAUSE NO_UNSAFE_CHANGE_REASON_FOUND
ADVISORY llm_verdict = "" MODEL "gemini/gemini-3.8-flash"
ASSERT VERDICT_AUTHORITY != "ADVISORY"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit b668635 into main Oct 13, 2026
3 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/006-optimize-prolog-validation-and-pattern-matching-in-sumd branch October 13, 2026 04:33
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.

1 participant