Repository navigation
fix(ci): restore Nxdo coverage and internal dependency gates - #182
Conversation
Bumps the internal-packages group with 2 updates: costs and [clickmd](https://github.com/wronai/clickmd). Updates `costs` from 0.2.0 to 0.2.1 Updates `clickmd` from 1.1.15 to 1.1.16 - [Changelog](https://github.com/semcod/clickmd/blob/main/CHANGELOG.md) - [Commits](semcod/clickmd@v1.1.15...v1.1.16) --- updated-dependencies: - dependency-name: costs dependency-version: 0.2.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: internal-packages - dependency-name: clickmd dependency-version: 1.1.16 dependency-type: indirect update-type: version-update:semver-patch dependency-group: internal-packages ... Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Koru Agent <agent@coru.dev>
There was a problem hiding this comment.
Validator approval after policy checks for exact head 8a15f944dabd4fb968b341311d1fa0e71ac83abc.
Ticket: ticket-296
Correlation ID: local-semcod-nxdo-pr-182-ticket-296
Model: openai/cursor-auto
Reviewed diff chunks: 7
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 7 diff chunk(s). The visible changes replace silent exception suppression with diagnostic logging while preserving nonfatal update behavior, and add focused coverage for cache TTL handling, disabled checks, detached subprocesses, upgrade opt-in, version comparison fallbacks, and CLI continuity. All four protected required test checks passed. | The visible chunk contains internally consistent lockfile dependency upgrades and removal of obsolete transitive packages. No unresolved correctness or security defect is evident in this chunk, and all protected required checks passed. | The visible lockfile chunk updates goal from 2.2.0 to 2.2.1 with pinned artifact hashes and removes transitive packages no longer present in the resolved dependency graph. No semantic code or security defect is evident in this chunk. All protected required checks passed. | The visible lockfile changes are internally consistent with dependency-resolution pruning and marker normalization. No code or security defect is evident in this chunk. All four protected required test checks passed. | The visible chunk contains only removal of transitive package entries from uv.lock. No independently evidenced code, dependency-integrity, or security defect is visible. All protected required checks passed. | The visible chunk contains lockfile cleanup removing package artifacts and dependency entries. No independently evidenced correctness or security defect is present in this chunk. All four protected required test checks passed. | The visible chunk removes obsolete transitive dependency entries from uv.lock. No independently evidenced correctness or security defect is present in this chunk, and all protected required checks passed.
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: d4bf05c0c6b0d557a885a536719a4e0ee5264965...8a15f944dabd4fb968b341311d1fa0e71ac83abc
Change digest: d088df647b03a4b586644018eeea5e3b15d76538d1fbe48e43b310e0bf2a582b
Score: 52/100 (L), estimated 64 min, split recommended: true
Affected services/components: repository-wide/unclassified
Machine-readable radar JSONL and SVG
{"actual_change":{"additions":183,"base_sha":"d4bf05c0c6b0d557a885a536719a4e0ee5264965","binary_files":0,"categories":{"code":3,"tests":1},"change_digest":"d088df647b03a4b586644018eeea5e3b15d76538d1fbe48e43b310e0bf2a582b","comparison":"d4bf05c0c6b0d557a885a536719a4e0ee5264965...8a15f944dabd4fb968b341311d1fa0e71ac83abc","deletions":554,"file_count":4,"files":["src/nxdo/autoupdate.py","src/nxdo/cli.py","tests/test_autoupdate.py","uv.lock"],"head_sha":"8a15f944dabd4fb968b341311d1fa0e71ac83abc","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":3,"delivery":3,"scope":3,"uncertainty":3,"validation":1},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":64,"within_budget":false},"impact":{"components":["repository-root","src/nxdo","tests"],"files":["src/nxdo/autoupdate.py","src/nxdo/cli.py","tests/test_autoupdate.py","uv.lock"],"public_interfaces":[],"runtime_dependencies":1},"schema":"subactor.ticket-radar/v1","score":52,"split":{"parts":[{"estimated_minutes":18,"name":"Implement repository-root","scope":["repository-root"]},{"estimated_minutes":18,"name":"Implement src/nxdo","scope":["src/nxdo"]},{"estimated_minutes":18,"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-296"}<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-296: fix(ci): restore Nxdo coverage and internal dependency gates</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 89,56 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 · 64m</text></svg>DECISION D-296-7612
TICKET ticket-296
HEAD_SHA 8a15f944dabd4fb968b341311d1fa0e71ac83abc
CORRELATION_ID local-semcod-nxdo-pr-182-ticket-296
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "dependabot[bot]"
INPUT observed_checks = ["freshness=PASS","test (3.13)=PASS","test (3.12)=PASS","test (3.10)=PASS","test (3.11)=PASS"]
INPUT required_checks = ["test (3.10)","test (3.11)","test (3.12)","test (3.13)"]
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/nxdo","pull_request":182,"head_sha":"8a15f944dabd4fb968b341311d1fa0e71ac83abc","base_sha":"d4bf05c0c6b0d557a885a536719a4e0ee5264965","diff_sha256":"3aa8943d05b748ba177ec811706bf5a25e47629c8f93bb1335eebcbe2cf558dc"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["src/nxdo/autoupdate.py","src/nxdo/cli.py","tests/test_autoupdate.py","uv.lock"]},"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":"d4bf05c0c6b0d557a885a536719a4e0ee5264965","head_sha":"8a15f944dabd4fb968b341311d1fa0e71ac83abc","change_digest":"d088df647b03a4b586644018eeea5e3b15d76538d1fbe48e43b310e0bf2a582b","score":52,"complexity":"L","estimated_minutes":64,"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"
The internal dependency update passed 179 tests but failed the unchanged 95% coverage requirement at 92.03%. This change adds isolated tests for update-cache TTL, upgrade opt-in, detached subprocess boundaries and nonfatal failures. Optional update errors now retain exception diagnostics while CLI execution proceeds. Goal is locked to 2.2.1, preserving the original package upgrades.
Validation: 205 tests pass on each of Python 3.10, 3.11, 3.12 and 3.13; coverage is 96.46–96.88%. Mypy, Ruff, import-layer checks and committed examples pass on all four versions. No workflow or threshold changes. Native ticket: PLF-296. Publication requires independent protected review.