Skip to content

refactor(ticket-189): split supervisor question LLM answering into focused helpers (STARTER-606) - #373

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/189-opencode-supervisor-question-llm
Sep 20, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/189-opencode-supervisor-question-llm

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Extract the LLM question-answering stages (SubLLM import resolution, question spec building, subllm transport, JSON salvage parsing, answer normalization) from _question_answers_via_llm (src/koruapi/opencode_supervisor.py, CC 26 → 9) into focused module-level helpers (_load_subllm, _question_spec, _subllm_answer_stdout, _parse_answer_payload, _normalize_answer_set). Behavior unchanged: guard order, log messages, and answer normalization preserved; no public API change.

Ticket: ticket-189 (workstream: application, status: IN_PROGRESS).
Planfile source: STARTER-606 (code2llm high-CC function).

Validation evidence (branch ticket/189-opencode-supervisor-question-llm, head b3eb435f, base origin/main = 0f60955f): recorded in project/ticket-189/README.md on the branch — code2llm CC re-run under 15 plus independent AST recount and 17-case differential harness, tests/test_dashboard_terminals.py passes unmodified, ruff check/format clean, ./project/governance-check.sh --base origin/main passes.

…cused helpers (STARTER-606)

_question_answers_via_llm drops from cyclomatic complexity 26 to 9 by
extracting behavior-preserving module helpers: _load_subllm (optional import
resolution), _question_spec (spec building), _subllm_answer_stdout (transport
and exit-status handling), _parse_answer_payload (strict JSON parse with
prose salvage), _normalize_answer_set (label filtering, invented-label
fallback, single-choice trimming). Guard order, log messages and answer
semantics are unchanged (verified by a 17-case differential harness); the
module is also made ruff-clean by fixing its two pre-existing findings
(UP035 Callable import, one E501 f-string split with identical value).

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

Ticket: ticket-189
Correlation ID: local-semcod-koru-pr-373-ticket-189
Model: zai/glm-5.3
Reviewed diff chunks: 2
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 2 diff chunk(s). Behavior-preserving refactor of _question_answers_via_llm into module-level helpers, consistent with the stated CC-reduction goal. Required checks (onedev/local-verify, standard packs / conformance) all PASS per protected assessment; required_checks_passed is true. README claims of differential testing, ruff cleanup, and governance pass are corroborated by passing required checks. | Refactoring chunk extracts LLM question-answering stages from _question_answers_via_llm into module-level helpers. Required checks (onedev/local-verify, standard packs / conformance) all PASS per protected check assessment. Behavior preserved: early return None on invalid subllm answer matches the previous valid-flag break; question-spec, parsing, and normalization guard order retained. Remaining diffs are formatting-only line reflows.
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: 0f60955f2e2a7c61ecd585c6567177e7aac83927...b3eb435fcc57c7a31b6d1962814de73738ac827d
Change digest: 249b4eba5ebe4d1c04c8017563072145420d0bf2cf5716a5acaabd399025815b
Score: 64/100 (L), estimated 78 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":230,"base_sha":"0f60955f2e2a7c61ecd585c6567177e7aac83927","binary_files":0,"categories":{"code":1,"configuration":1,"docs":1},"change_digest":"249b4eba5ebe4d1c04c8017563072145420d0bf2cf5716a5acaabd399025815b","comparison":"0f60955f2e2a7c61ecd585c6567177e7aac83927...b3eb435fcc57c7a31b6d1962814de73738ac827d","deletions":49,"file_count":3,"files":["project/ticket-189/README.md","project/ticket-189/intent.json","src/koruapi/opencode_supervisor.py"],"head_sha":"b3eb435fcc57c7a31b6d1962814de73738ac827d","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":3,"scope":3,"uncertainty":3,"validation":2},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":78,"within_budget":false},"impact":{"components":["check","origin","project","src/koruapi","tests","ticket"],"files":["check/format","origin/main","project/governance-check.sh","project/ticket-189/README.md","project/ticket-189/intent.json","src/koruapi/opencode_supervisor.py","tests/test_dashboard_terminals.py","ticket/189-opencode-supervisor-question-llm"],"public_interfaces":["src/koruapi/opencode_supervisor.py"],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":64,"split":{"parts":[{"estimated_minutes":20,"name":"Define contract and acceptance boundary","scope":["src/koruapi/opencode_supervisor.py"]},{"estimated_minutes":10,"name":"Implement check","scope":["check"]},{"estimated_minutes":10,"name":"Implement origin","scope":["origin"]},{"estimated_minutes":10,"name":"Implement project","scope":["project"]},{"estimated_minutes":10,"name":"Implement src/koruapi","scope":["src/koruapi"]},{"estimated_minutes":10,"name":"Implement tests","scope":["tests"]},{"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-189"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-189: refactor(ticket-189): split supervisor question LLM answering into focused helpers (STARTER-606)</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 54,78 39,56" 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 · 78m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-189-1913
TICKET ticket-189
HEAD_SHA b3eb435fcc57c7a31b6d1962814de73738ac827d
CORRELATION_ID local-semcod-koru-pr-373-ticket-189
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["standard packs / conformance=PASS","governance / remote lifecycle=PASS","governance / enforce=PASS","standard packs / conformance=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["onedev/local-verify","standard packs / conformance"]
INPUT required_checks_source = "protected registry + GitHub applied rules (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT semantic_review_assessment = {"schema":"subactor.validator/semantic-review-assessment/v1","subject":{"repository":"semcod/koru","pull_request":373,"head_sha":"b3eb435fcc57c7a31b6d1962814de73738ac827d","base_sha":"0f60955f2e2a7c61ecd585c6567177e7aac83927","diff_sha256":"47c8b0e137dabde1c92d2e0b68f81e23a045a8fcdb55a9c3da1e21728a327e1e"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/ticket-189/README.md","project/ticket-189/intent.json","src/koruapi/opencode_supervisor.py"]},"grounding":"full-diff-not-per-finding-proof","execution_authority":false,"status":"not_required","reason":null,"review_sha256":null,"unresolved":[]}
INPUT superseded_checks = ["smoke"]
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"0f60955f2e2a7c61ecd585c6567177e7aac83927","head_sha":"b3eb435fcc57c7a31b6d1962814de73738ac827d","change_digest":"249b4eba5ebe4d1c04c8017563072145420d0bf2cf5716a5acaabd399025815b","score":64,"complexity":"L","estimated_minutes":78,"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 bea8ab2 into main Sep 20, 2026
6 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/189-opencode-supervisor-question-llm branch September 20, 2026 06:16
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