Skip to content

Keep Monag discovery non-executing and defer limited publication (ticket-117) - #140

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/117-nonexecuting-discovery
Oct 15, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/117-nonexecuting-discovery

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Read-only ecosystem discovery no longer starts arbitrary executables with --version. It reads static distribution metadata only when the distribution RECORD owns the actual observed CLI/module path; unknown versions remain unknown. Ecosystem tests use isolated tools and service fixtures. Bulk publication also defers remaining PRs after an API rate limit, preserving independent adapter refusal and avoiding repeated requests or browser fallback.

A harmless isolated PATH executable proved the original startup side effect; the same fixture no longer starts after this change. No causal attribution of the real owner merges is established. This ticket also preserves the genuine rate-limit delta omitted when another writer owner-merged PR #139 and removed the active ticket-116 checkout. The exact omitted commit and verified archive are retained; the published controller accepted a fenced owner handoff into this newly allocated ticket.

Validation: complete local suite 520 passed, one skipped, 47 subtests in 263.83s; 45 focused discovery/publication/MCP tests plus five subtests; six Testless security cases and 20 advisory planfiles; pinned Ruff 0.15.11 and native governance passed. The earlier local full attempt was interrupted after 326.96s at 156 passed, so no complete baseline ratio is claimed. Required full OneDev unittest/build gates are unchanged.

Publication must use exact-head independent Validator approval and merge. PR #139 was owner-merged without reviews; this source does not retroactively approve it. Runtime installation is deferred until this material source is independently published.

Ticket: ticket-117.

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

Ticket: ticket-117
Correlation ID: local-semcod-monag-pr-140-ticket-117
Model: zai/glm-5.3
Reviewed diff chunks: 2
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 2 diff chunk(s). Chunk 1 of 2 (ticket metadata plus ecosystem.py changes). The security-relevant change is sound: _probe_version, which executed arbitrary PATH-discovered binaries with --version, is removed and replaced with static importlib.metadata reads gated on the distribution RECORD owning the observed path. Dynamically discovered PATH executables now report version=None, and the directory scan still checks executable bits before recording. All required checks (governance/remote lifecycle, governance/enforce, onedev/local-verify) pass per the protected assessment. Note: this is a partial diff chunk; prs.py and test changes continue in chunk 2 and this approval applies to the visible scope only. | Chunk 2 adds rate-limit detection and bulk deferral in prs.py plus security-hardened ecosystem tests. The _rate_limited heuristic flags transport-level 429 markers, merge_open_prs stops issuing further API requests after a retry_pending result while preserving independent adapter refusal (no browser fallback), and deferred PRs get an explicit PUBLICATION_DEFERRED record. Tests cover rate-limit propagation, deferral without extra calls, no arbitrary executable startup during discovery, distribution-RECORD path ownership for metadata versioning, and no fallback to executing binaries on missing metadata. All required protected checks (onedev/local-verify, governance/enforce, governance/remote lifecycle) pass.
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: d23feeb5899434002020068fc7bf974b8c51ef3c...a361dbc815a76ee00debd882a857c6a5c27ed056
Change digest: 6ecac0b5d45211cf1b98c1e92b33a8eb8e675476295d5797763f948b8c02dea8
Score: 68/100 (L), estimated 78 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":263,"base_sha":"d23feeb5899434002020068fc7bf974b8c51ef3c","binary_files":0,"categories":{"code":2,"configuration":1,"docs":2,"tests":2},"change_digest":"6ecac0b5d45211cf1b98c1e92b33a8eb8e675476295d5797763f948b8c02dea8","comparison":"d23feeb5899434002020068fc7bf974b8c51ef3c...a361dbc815a76ee00debd882a857c6a5c27ed056","deletions":39,"file_count":7,"files":["project/TICKETS.md","project/ticket-117/README.md","project/ticket-117/intent.json","src/monag/ecosystem.py","src/monag/prs.py","tests/test_ecosystem_tools.py","tests/test_prs.py"],"head_sha":"a361dbc815a76ee00debd882a857c6a5c27ed056","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":3,"scope":5,"uncertainty":3,"validation":1},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":78,"within_budget":false},"impact":{"components":["CLI","discovery","project","src/monag","tests","unittest"],"files":["CLI/module","discovery/publication/MCP","project/TICKETS.md","project/ticket-117/README.md","project/ticket-117/intent.json","src/monag/ecosystem.py","src/monag/prs.py","tests/test_ecosystem_tools.py","tests/test_prs.py","unittest/build"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":68,"split":{"parts":[{"estimated_minutes":12,"name":"Implement CLI","scope":["CLI"]},{"estimated_minutes":12,"name":"Implement discovery","scope":["discovery"]},{"estimated_minutes":12,"name":"Implement project","scope":["project"]},{"estimated_minutes":12,"name":"Implement src/monag","scope":["src/monag"]},{"estimated_minutes":12,"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-117"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-117: Keep Monag discovery non-executing and defer limited publication (ticket-117)</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,21 105,51 79,85 59,71 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-117-8702
TICKET ticket-117
HEAD_SHA a361dbc815a76ee00debd882a857c6a5c27ed056
CORRELATION_ID local-semcod-monag-pr-140-ticket-117
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["governance / remote lifecycle=PASS","governance / enforce=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":140,"head_sha":"a361dbc815a76ee00debd882a857c6a5c27ed056","base_sha":"d23feeb5899434002020068fc7bf974b8c51ef3c","diff_sha256":"29d7df77bd8f08d70a7d52eb75ec76035e214dda2b2a6c401e3e3a92206ffd8f"},"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-117/README.md","project/ticket-117/intent.json","src/monag/ecosystem.py","src/monag/prs.py","tests/test_ecosystem_tools.py","tests/test_prs.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":"d23feeb5899434002020068fc7bf974b8c51ef3c","head_sha":"a361dbc815a76ee00debd882a857c6a5c27ed056","change_digest":"6ecac0b5d45211cf1b98c1e92b33a8eb8e675476295d5797763f948b8c02dea8","score":68,"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 18649ba into main Oct 15, 2026
3 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/117-nonexecuting-discovery branch October 15, 2026 12:00
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