Skip to content

fix: expose incomplete executor metrics to diagnostics and LLM context (ticket-061) - #62

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/061-metrics-error-diagnostics
Sep 9, 2026
Merged

fix: expose incomplete executor metrics to diagnostics and LLM context (ticket-061)#62
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/061-metrics-error-diagnostics

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

When optional executor metrics cannot read a Python file, Planfile previously discarded the error and supplied partial metrics without marking them as incomplete. Expected filesystem and decoding errors now emit stable warning codes and partial file-read coverage reaches the LLM prompt. Unexpected implementation errors propagate from the collector; the module logger is available for imported callers.

The change qualifies Doctor findings subactor/doctor-agent#377 and #378 and implements PLF-13735 / #61 (ticket-061). It does not change repair admission or CI policy.

Validation: 475 tests passed, 6 skipped; six regression tests cover decoding, permission and enumeration failures, unexpected errors, successful reads and partial prompt context. Five baseline regression cases failed before the patch. Documentation placement/metadata checks and test-file Ruff checks passed.

Canonical documentation: docs/information/executor-metrics.md.

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

Ticket: ticket-061
Correlation ID: local-semcod-planfile-pr-62-ticket-061
Model: zai/glm-5.3
Reviewed diff chunks: 2
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 2 diff chunk(s). The change narrows exception handling in _get_project_metrics to expected OSError/UnicodeDecodeError, adds files_failed/complete coverage fields to metrics and the LLM prompt, emits stable redacted warning codes (exception class only, no paths/messages), promotes the module logger so imported callers hit the logging boundary, and adds six regression tests covering encoding, permission, enumeration, unexpected-error propagation, happy path, and prompt content. All hosted checks pass. Documentation and ticket metadata are consistent with the implementation. | This chunk contains only a regression test verifying that a file-read error (invalid UTF-8 bytes) is surfaced in the executor prompt with coverage-complete=False and an omitted-files count. Tests are consistent with the PR description, all CI checks pass, and no security or policy issues are visible.
Advisory findings: none
The LLM output above is advisory and was not used as the approval trust root.

Actual PR impact radar

Exact range: 59dcc7a65f04de5cb31f4caa99df157697875058...f5daa1b571b203758ba6826ab16fac5a6833dc5d
Change digest: 68a2f7b0ee9aad8ac758e717bbcddca61608df088f5cceee59fa380ed379c640
Score: 56/100 (L), estimated 70 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":213,"base_sha":"59dcc7a65f04de5cb31f4caa99df157697875058","binary_files":0,"categories":{"code":1,"configuration":1,"docs":3,"tests":1},"change_digest":"68a2f7b0ee9aad8ac758e717bbcddca61608df088f5cceee59fa380ed379c640","comparison":"59dcc7a65f04de5cb31f4caa99df157697875058...f5daa1b571b203758ba6826ab16fac5a6833dc5d","deletions":6,"file_count":6,"files":["docs/README.md","docs/information/executor-metrics.md","planfile/executor_standalone.py","project/ticket-061/README.md","project/ticket-061/intent.json","tests/test_executor_metrics.py"],"head_sha":"f5daa1b571b203758ba6826ab16fac5a6833dc5d","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":70,"within_budget":false},"impact":{"components":["docs","placement","planfile","project","subactor","tests"],"files":["docs/README.md","docs/information/executor-metrics.md","placement/metadata","planfile/executor_standalone.py","project/ticket-061/README.md","project/ticket-061/intent.json","subactor/doctor-agent","tests/test_executor_metrics.py"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":56,"split":{"parts":[{"estimated_minutes":10,"name":"Implement docs","scope":["docs"]},{"estimated_minutes":10,"name":"Implement placement","scope":["placement"]},{"estimated_minutes":10,"name":"Implement planfile","scope":["planfile"]},{"estimated_minutes":10,"name":"Implement project","scope":["project"]},{"estimated_minutes":10,"name":"Implement subactor","scope":["subactor"]},{"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-061"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-061: fix: expose incomplete executor metrics to diagnostics and LLM context (ticket-061)</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 · 70m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-061-6376
TICKET ticket-061
HEAD_SHA f5daa1b571b203758ba6826ab16fac5a6833dc5d
CORRELATION_ID local-semcod-planfile-pr-62-ticket-061
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["notify=PASS","ci-loop=PASS","test (3.13)=PASS","test (3.10)=PASS"]
INPUT required_checks = ["ci-loop","notify"]
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":"59dcc7a65f04de5cb31f4caa99df157697875058","head_sha":"f5daa1b571b203758ba6826ab16fac5a6833dc5d","change_digest":"68a2f7b0ee9aad8ac758e717bbcddca61608df088f5cceee59fa380ed379c640","score":56,"complexity":"L","estimated_minutes":70,"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 51b0c94 into main Sep 9, 2026
4 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/061-metrics-error-diagnostics branch September 9, 2026 22:02
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