Skip to content

chore(ticket-036): pinned Python 3.12 analysis environment for pfix/pipreqs - #33

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/036-analysis-env-python312
Oct 23, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/036-analysis-env-python312

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Closes #26 (PLF-036).

Co

  • scripts/analysis-env.sh — deterministyczne środowisko analizy .venv-analysis (Python 3.12, uv sync --locked --all-extras), tryb --check = uv pip check + smoke pipreqs.
  • docs/dependencies.md — sekcja „Analysis environment (pfix / pipreqs)": dlaczego (pipreqs 0.5.0 >=3.8.1,<3.13, brak nowszego wydania), jak używać, zasada do czasu dependency-lock review.
  • .gitignore: .venv-analysis/.
  • tests/test_analysis_env.py — 7 guardrail-i (pin 3.12, locked sync, izolacja od .venv, docs, ignore).

Dlaczego opcja „3.12 environment" z AC

pipreqs 0.5.0 to nadal najnowsze wydanie (PyPI, metadane <3.13), a pfix 0.1.80 wciąż wymaga pipreqs>=0.4.0 — replacement po stronie pfix/pipreqs jest poza tym repo. Zgodnie z AC: aplikacyjny .venv (3.13) nietknięty, środowisko analizy przypięte do 3.12.

Dowody

  • uv pip check: All installed packages are compatible (156 pakietów, Python 3.12.13)
  • smoke: pipreqs rozpoznaje importy third-party, filtruje stdlib
  • 7/7 testów przechodzi uruchomionych w samym .venv-analysis
  • uv pip check na aplikacyjnym .venv (3.13): przechodzi (176 pakietów) — formalna niezgodność metadanych pipreqs pozostaje widoczna w dokumentacji

…ipreqs

pipreqs 0.5.0 (newest published release) declares Requires-Python
>=3.8.1,<3.13, so the analyzer chain (clickmd/code2logic -> pfix ->
pipreqs) must not run on the Python 3.13 application .venv. Add
scripts/analysis-env.sh which materializes a locked .venv-analysis
(uv sync --locked --python 3.12 --all-extras), uv pip check + pipreqs
smoke under --check, document it in docs/dependencies.md, ignore
.venv-analysis/ and pin the guardrails with tests/test_analysis_env.py.

Verified: uv pip check 'All installed packages are compatible'
(156 packages, Python 3.12.13); pipreqs smoke resolves third-party
imports; 7 new tests pass under the analysis environment itself.
The application .venv is preserved untouched pending the
dependency-lock review. Closes #26

Co-authored-by: Koru Agent <agent@coru.dev>

@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 18592a01e94aa47749b0992667009417080956dd.

Ticket: ticket-036
Correlation ID: code2llm-pr-33-ticket-036
Model: zai/glm-5.3
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). The PR adds a pinned Python 3.12 analysis environment (script, docs, .gitignore entry, guardrail tests) to work around pipreqs 0.5.0's <3.13 constraint. Both required checks pass. The script uses set -euo pipefail, locked sync, and never targets the application .venv; smoke test logic is sound.
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: e1da49e665945cca276cc1972ff94c2ffef42a65...18592a01e94aa47749b0992667009417080956dd
Change digest: cfd1a909cec19c98bd7ad375434316208e77ce62027ef903df6fdf2fa1aa785a
Score: 60/100 (L), estimated 70 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":113,"base_sha":"e1da49e665945cca276cc1972ff94c2ffef42a65","binary_files":0,"categories":{"code":2,"docs":1,"tests":1},"change_digest":"cfd1a909cec19c98bd7ad375434316208e77ce62027ef903df6fdf2fa1aa785a","comparison":"e1da49e665945cca276cc1972ff94c2ffef42a65...18592a01e94aa47749b0992667009417080956dd","deletions":0,"file_count":4,"files":["gitignore","docs/dependencies.md","scripts/analysis-env.sh","tests/test_analysis_env.py"],"head_sha":"18592a01e94aa47749b0992667009417080956dd","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":4,"scope":2,"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":["7","docs","pfix","repository-root","scripts","tests"],"files":["7/7","docs/dependencies.md","gitignore","pfix/pipreqs","scripts/analysis-env.sh","tests/test_analysis_env.py"],"public_interfaces":[],"runtime_dependencies":1},"schema":"subactor.ticket-radar/v1","score":60,"split":{"parts":[{"estimated_minutes":10,"name":"Implement 7","scope":["7"]},{"estimated_minutes":10,"name":"Implement docs","scope":["docs"]},{"estimated_minutes":10,"name":"Implement pfix","scope":["pfix"]},{"estimated_minutes":10,"name":"Implement repository-root","scope":["repository-root"]},{"estimated_minutes":10,"name":"Implement scripts","scope":["scripts"]},{"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-036"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-036: chore(ticket-036): pinned Python 3.12 analysis environment for pfix/pipreqs</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,47 105,51 79,85 59,71 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 · 70m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-036-3201
TICKET ticket-036
HEAD_SHA 18592a01e94aa47749b0992667009417080956dd
CORRELATION_ID code2llm-pr-33-ticket-036
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["test (3.13)=PASS","test (3.10)=PASS"]
INPUT required_checks = ["test (3.10)","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/code2llm","pull_request":33,"head_sha":"18592a01e94aa47749b0992667009417080956dd","base_sha":"e1da49e665945cca276cc1972ff94c2ffef42a65","diff_sha256":"4bc28785c754a24c3f142237ce4b8af59158b5c23af8ecaec1ab6316fc663889"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":[".gitignore","docs/dependencies.md","scripts/analysis-env.sh","tests/test_analysis_env.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":"e1da49e665945cca276cc1972ff94c2ffef42a65","head_sha":"18592a01e94aa47749b0992667009417080956dd","change_digest":"cfd1a909cec19c98bd7ad375434316208e77ce62027ef903df6fdf2fa1aa785a","score":60,"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 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 18592a01e94aa47749b0992667009417080956dd.

Ticket: ticket-036
Correlation ID: plf-036-pr33
Model: gemini/gemini-3.8-flash
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). Adds scripts/analysis-env.sh and corresponding documentation/tests to maintain an isolated, locked Python 3.12 analysis environment due to pipreqs Python version constraints (<3.13). All tests and required checks pass cleanly.
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: e1da49e665945cca276cc1972ff94c2ffef42a65...18592a01e94aa47749b0992667009417080956dd
Change digest: cfd1a909cec19c98bd7ad375434316208e77ce62027ef903df6fdf2fa1aa785a
Score: 60/100 (L), estimated 70 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":113,"base_sha":"e1da49e665945cca276cc1972ff94c2ffef42a65","binary_files":0,"categories":{"code":2,"docs":1,"tests":1},"change_digest":"cfd1a909cec19c98bd7ad375434316208e77ce62027ef903df6fdf2fa1aa785a","comparison":"e1da49e665945cca276cc1972ff94c2ffef42a65...18592a01e94aa47749b0992667009417080956dd","deletions":0,"file_count":4,"files":["gitignore","docs/dependencies.md","scripts/analysis-env.sh","tests/test_analysis_env.py"],"head_sha":"18592a01e94aa47749b0992667009417080956dd","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":4,"scope":2,"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":["7","docs","pfix","repository-root","scripts","tests"],"files":["7/7","docs/dependencies.md","gitignore","pfix/pipreqs","scripts/analysis-env.sh","tests/test_analysis_env.py"],"public_interfaces":[],"runtime_dependencies":1},"schema":"subactor.ticket-radar/v1","score":60,"split":{"parts":[{"estimated_minutes":10,"name":"Implement 7","scope":["7"]},{"estimated_minutes":10,"name":"Implement docs","scope":["docs"]},{"estimated_minutes":10,"name":"Implement pfix","scope":["pfix"]},{"estimated_minutes":10,"name":"Implement repository-root","scope":["repository-root"]},{"estimated_minutes":10,"name":"Implement scripts","scope":["scripts"]},{"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-036"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-036: chore(ticket-036): pinned Python 3.12 analysis environment for pfix/pipreqs</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,47 105,51 79,85 59,71 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 · 70m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-036-1895
TICKET ticket-036
HEAD_SHA 18592a01e94aa47749b0992667009417080956dd
CORRELATION_ID plf-036-pr33
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["test (3.13)=PASS","test (3.10)=PASS"]
INPUT required_checks = ["test (3.10)","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/code2llm","pull_request":33,"head_sha":"18592a01e94aa47749b0992667009417080956dd","base_sha":"e1da49e665945cca276cc1972ff94c2ffef42a65","diff_sha256":"4bc28785c754a24c3f142237ce4b8af59158b5c23af8ecaec1ab6316fc663889"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":[".gitignore","docs/dependencies.md","scripts/analysis-env.sh","tests/test_analysis_env.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":"e1da49e665945cca276cc1972ff94c2ffef42a65","head_sha":"18592a01e94aa47749b0992667009417080956dd","change_digest":"cfd1a909cec19c98bd7ad375434316208e77ce62027ef903df6fdf2fa1aa785a","score":60,"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 "gemini/gemini-3.8-flash"
ASSERT VERDICT_AUTHORITY != "ADVISORY"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit e23613e into main Oct 23, 2026
2 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/036-analysis-env-python312 branch October 23, 2026 08:43
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.

Resolve existing pipreqs Python constraint in project analysis environment

1 participant