Skip to content

fix(ticket-185): skip detected setup.py with computed version as a version source - #188

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/185-setup-py-computed-version
Oct 17, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/185-setup-py-computed-version

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Problem

goal -a --bump patch in semcod/fixos stopped with:

Error: Version sources are unreadable or unsupported
- setup.py:version: selector version was not found

fixos's setup.py reads its version from VERSION (single source of truth since fixos ticket-066/068). collect_version_sources treats every root-level detected file as a primary source, so a computed version= made the release fail even though goal.yaml only configures VERSION and pyproject.toml:version.

Fix

Skip an auto-detected setup.py with no version literal. A setup.py:version source configured in goal.yaml still fails closed.

Validation

  • New tests: computed version → skipped, bump resolves to 1.2.4; configured without literal → VersionStateError.
  • pytest tests/test_version_state.py tests/test_version_sync.py → 57 passed; governance GOV-PASS.
  • Dry-run of goal -a --bump patch in semcod/fixos with this branch passes the version stage.

🤖 Generated with Claude Code

@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 82699a9ac2d92b9a6adc09b0f1943efe57e80b0b.

Ticket: ticket-185
Correlation ID: local-semcod-goal-pr-188-ticket-185
Model: openai/cursor-auto
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). The change narrowly skips only auto-detected setup.py sources that lack a readable literal version while preserving fail-closed behavior for explicitly configured setup.py:version sources. The added tests cover both paths, 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: 84d01ba2d8250d1c274cad299fb07178939fe511...82699a9ac2d92b9a6adc09b0f1943efe57e80b0b
Change digest: 43ff378fff3f50cd5ee90085ffee75e9a2219c773451cc75bd33b7ec7396cd7c
Score: 68/100 (L), estimated 84 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":148,"base_sha":"84d01ba2d8250d1c274cad299fb07178939fe511","binary_files":0,"categories":{"code":1,"configuration":1,"docs":1,"tests":1},"change_digest":"43ff378fff3f50cd5ee90085ffee75e9a2219c773451cc75bd33b7ec7396cd7c","comparison":"84d01ba2d8250d1c274cad299fb07178939fe511...82699a9ac2d92b9a6adc09b0f1943efe57e80b0b","deletions":0,"file_count":4,"files":["goal/cli/version_state.py","project/ticket-185/README.md","project/ticket-185/intent.json","tests/test_version_state.py"],"head_sha":"82699a9ac2d92b9a6adc09b0f1943efe57e80b0b","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":4,"scope":3,"uncertainty":3,"validation":2},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":84,"within_budget":false},"impact":{"components":["claude.com","goal","project","semcod","tests","ticket-066"],"files":["claude.com/claude-code","goal/cli/version_state.py","project/ticket-185/README.md","project/ticket-185/intent.json","semcod/fixos","tests/test_version_state.py","tests/test_version_sync.py","ticket-066/068"],"public_interfaces":[],"runtime_dependencies":1},"schema":"subactor.ticket-radar/v1","score":68,"split":{"parts":[{"estimated_minutes":13,"name":"Implement claude.com","scope":["claude.com"]},{"estimated_minutes":13,"name":"Implement goal","scope":["goal"]},{"estimated_minutes":13,"name":"Implement project","scope":["project"]},{"estimated_minutes":13,"name":"Implement semcod","scope":["semcod"]},{"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-185"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-185: fix(ticket-185): skip detected setup.py with computed version as a version source</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 31,53" 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 · 84m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-185-9056
TICKET ticket-185
HEAD_SHA 82699a9ac2d92b9a6adc09b0f1943efe57e80b0b
CORRELATION_ID local-semcod-goal-pr-188-ticket-185
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["test (3.13)=PASS","governance / remote lifecycle=PASS","test (3.12)=PASS","governance / enforce=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["test (3.12)","test (3.13)","governance / remote lifecycle","governance / enforce"]
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/goal","pull_request":188,"head_sha":"82699a9ac2d92b9a6adc09b0f1943efe57e80b0b","base_sha":"c34dd9d0ba4232fa8c1848987bc53f6fc938306b","diff_sha256":"8d5cedf0eaaa1f1f7ff1ecb6edaf63e90cd6479f55dd66486ea0df0f6290331a"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["goal/cli/version_state.py","project/ticket-185/README.md","project/ticket-185/intent.json","tests/test_version_state.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":"84d01ba2d8250d1c274cad299fb07178939fe511","head_sha":"82699a9ac2d92b9a6adc09b0f1943efe57e80b0b","change_digest":"43ff378fff3f50cd5ee90085ffee75e9a2219c773451cc75bd33b7ec7396cd7c","score":68,"complexity":"L","estimated_minutes":84,"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"

…rsion source [ticket-185]

A setup.py that reads its version from VERSION or pyproject.toml has no
literal to read or bump; treating every root-level file as primary made
'goal -a' fail with 'setup.py:version: selector version was not found'.
A configured setup.py:version source without a literal still fails.

Co-Authored-By: Claude <noreply@anthropic.com>
@tom-sapletta-com
tom-sapletta-com force-pushed the ticket/185-setup-py-computed-version branch from 0a55ddf to 9155c4c Compare October 17, 2026 23:13

@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 9155c4c19a42bd25c02c4808234f4dde64647fd6.

Ticket: ticket-185
Correlation ID: local-semcod-goal-pr-188-ticket-185
Model: openai/cursor-auto
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). The change correctly excludes only auto-detected setup.py files lacking a literal version while preserving fail-closed behavior for explicitly configured setup.py sources. Targeted regression tests cover both paths, 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: c34dd9d0ba4232fa8c1848987bc53f6fc938306b...9155c4c19a42bd25c02c4808234f4dde64647fd6
Change digest: 6492ec8639f9d01dc0002e985e3adfe6c7f4262aa3155a16b6ac5abad388451b
Score: 68/100 (L), estimated 84 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":148,"base_sha":"c34dd9d0ba4232fa8c1848987bc53f6fc938306b","binary_files":0,"categories":{"code":1,"configuration":1,"docs":1,"tests":1},"change_digest":"6492ec8639f9d01dc0002e985e3adfe6c7f4262aa3155a16b6ac5abad388451b","comparison":"c34dd9d0ba4232fa8c1848987bc53f6fc938306b...9155c4c19a42bd25c02c4808234f4dde64647fd6","deletions":0,"file_count":4,"files":["goal/cli/version_state.py","project/ticket-185/README.md","project/ticket-185/intent.json","tests/test_version_state.py"],"head_sha":"9155c4c19a42bd25c02c4808234f4dde64647fd6","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":4,"scope":3,"uncertainty":3,"validation":2},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":84,"within_budget":false},"impact":{"components":["claude.com","goal","project","semcod","tests","ticket-066"],"files":["claude.com/claude-code","goal/cli/version_state.py","project/ticket-185/README.md","project/ticket-185/intent.json","semcod/fixos","tests/test_version_state.py","tests/test_version_sync.py","ticket-066/068"],"public_interfaces":[],"runtime_dependencies":1},"schema":"subactor.ticket-radar/v1","score":68,"split":{"parts":[{"estimated_minutes":13,"name":"Implement claude.com","scope":["claude.com"]},{"estimated_minutes":13,"name":"Implement goal","scope":["goal"]},{"estimated_minutes":13,"name":"Implement project","scope":["project"]},{"estimated_minutes":13,"name":"Implement semcod","scope":["semcod"]},{"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-185"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-185: fix(ticket-185): skip detected setup.py with computed version as a version source</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 31,53" 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 · 84m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-185-6356
TICKET ticket-185
HEAD_SHA 9155c4c19a42bd25c02c4808234f4dde64647fd6
CORRELATION_ID local-semcod-goal-pr-188-ticket-185
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["governance / enforce=PASS","test (3.13)=PASS","governance / remote lifecycle=PASS","test (3.12)=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["test (3.12)","test (3.13)","governance / remote lifecycle","governance / enforce"]
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/goal","pull_request":188,"head_sha":"9155c4c19a42bd25c02c4808234f4dde64647fd6","base_sha":"c34dd9d0ba4232fa8c1848987bc53f6fc938306b","diff_sha256":"8d5cedf0eaaa1f1f7ff1ecb6edaf63e90cd6479f55dd66486ea0df0f6290331a"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["goal/cli/version_state.py","project/ticket-185/README.md","project/ticket-185/intent.json","tests/test_version_state.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":"c34dd9d0ba4232fa8c1848987bc53f6fc938306b","head_sha":"9155c4c19a42bd25c02c4808234f4dde64647fd6","change_digest":"6492ec8639f9d01dc0002e985e3adfe6c7f4262aa3155a16b6ac5abad388451b","score":68,"complexity":"L","estimated_minutes":84,"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"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit b650160 into main Oct 17, 2026
5 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/185-setup-py-computed-version branch October 17, 2026 23: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