Repository navigation
fix: avoid unrelated service cwd failures in agent observation - #136
Conversation
There was a problem hiding this comment.
Validator approval after policy checks for exact head a328bb8e2b01df8285d3c2da7a1daf1fb32c0f40.
Ticket: ticket-113
Correlation ID: monag-113-ready-a328bb8
Model: openai/cursor-auto
Reviewed diff chunks: 2
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 2 diff chunk(s). The process monitoring logic has been correctly restructured to perform a two-pass evaluation. It now resolves process identity and ancestry before reading working directories, ensuring that cwd read denials from unrelated processes do not block the visibility of identified agent trees. PID reuse race conditions during the second pass are safely handled. Test fixtures in test_mcp.py were properly isolated. | The diff chunk contains Python unit tests for the monag.monitor module, validating graceful handling of PermissionError when reading process metadata, reported agent matching, unreadable metadata handling, and PID reuse scenarios. The tests align with the PR description and provide good coverage for edge cases in /proc metadata access.
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: d1ad4ec5ed07d488dbcd02088480949aca556b17...a328bb8e2b01df8285d3c2da7a1daf1fb32c0f40
Change digest: cd8da02bde9fa1c032694a2f9a90dc3e8671a980287996c7b494e19b384b9497
Score: 52/100 (M), estimated 59 min, split recommended: true
Affected services/components: repository-wide/unclassified
Machine-readable radar JSONL and SVG
{"actual_change":{"additions":237,"base_sha":"d1ad4ec5ed07d488dbcd02088480949aca556b17","binary_files":0,"categories":{"code":1,"configuration":1,"docs":2,"tests":2},"change_digest":"cd8da02bde9fa1c032694a2f9a90dc3e8671a980287996c7b494e19b384b9497","comparison":"d1ad4ec5ed07d488dbcd02088480949aca556b17...a328bb8e2b01df8285d3c2da7a1daf1fb32c0f40","deletions":8,"file_count":6,"files":["project/TICKETS.md","project/ticket-113/README.md","project/ticket-113/intent.json","src/monag/monitor.py","tests/test_mcp.py","tests/test_monitor.py"],"head_sha":"a328bb8e2b01df8285d3c2da7a1daf1fb32c0f40","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":4,"delivery":2,"scope":3,"uncertainty":3,"validation":1},"complexity":"M","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":59,"within_budget":false},"impact":{"components":["proc","project","src/monag","tests"],"files":["proc/PID/cwd","project/TICKETS.md","project/ticket-113/README.md","project/ticket-113/intent.json","src/monag/monitor.py","tests/test_mcp.py","tests/test_monitor.py"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":52,"split":{"parts":[{"estimated_minutes":13,"name":"Implement proc","scope":["proc"]},{"estimated_minutes":13,"name":"Implement project","scope":["project"]},{"estimated_minutes":13,"name":"Implement src/monag","scope":["src/monag"]},{"estimated_minutes":13,"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-113"}<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-113: fix: avoid unrelated service cwd failures in agent observation</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 97,53 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">M · 59m</text></svg>DECISION D-113-2568
TICKET ticket-113
HEAD_SHA a328bb8e2b01df8285d3c2da7a1daf1fb32c0f40
CORRELATION_ID monag-113-ready-a328bb8
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["governance / enforce=PASS","governance / remote lifecycle=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":136,"head_sha":"a328bb8e2b01df8285d3c2da7a1daf1fb32c0f40","base_sha":"d1ad4ec5ed07d488dbcd02088480949aca556b17","diff_sha256":"72e3bf106494a275f441ca56be28545708cbb4bdd07c2090c8816a8d8edb41e6"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/TICKETS.md","project/ticket-113/README.md","project/ticket-113/intent.json","src/monag/monitor.py","tests/test_mcp.py","tests/test_monitor.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":"d1ad4ec5ed07d488dbcd02088480949aca556b17","head_sha":"a328bb8e2b01df8285d3c2da7a1daf1fb32c0f40","change_digest":"cd8da02bde9fa1c032694a2f9a90dc3e8671a980287996c7b494e19b384b9497","score":52,"complexity":"M","estimated_minutes":59,"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"
Monag invalidates otherwise complete agent observations when unrelated services deny access to /proc/PID/cwd. Read identity and ancestry for all processes first, then resolve working directories for recognized or reported agents and descendants. Missing identity metadata, cwd denials inside agent trees and PID reuse remain incomplete observations.
Validation: full suite 498 passed, 1 skipped, 42 subtests; after PID-reuse coverage 54 focused tests pass. Managed governance passes. Live host scan retains 19 agents and reports zero inaccessible relevant processes. Ticket: ticket-113. Local OneDev and independent exact-head Validator own publication.