fix: enforce hermetic Python execution - #144
Conversation
Signed-off-by: Danil Silantyev <danilsilantyevwork@gmail.com>
Hermetic Python split — prior recovery cycle Final Attempt3 terminal handoffCanonical lineage for issue #129 and PR #144. The prior recovery cycle is exhausted; the newly authorized Recovery Attempt1 is a distinct cycle, not Attempt4. Published PR head remains Exact first focused command: Exact result: exit Every subsequent Generated parity, full The new Recovery Attempt1 must derive |
Signed-off-by: Danil Silantyev <danilsilantyevwork@gmail.com>
Signed-off-by: Danil Silantyev <danilsilantyevwork@gmail.com>
Signed-off-by: Danil Silantyev <danilsilantyevwork@gmail.com>
Signed-off-by: Danil Silantyev <danilsilantyevwork@gmail.com>
Summary
Implements the first isolated slice of #129: one hermetic Python execution and child-environment contract for all repository validators and generators.
PYTHON*key, canonicalizes locale, permits only registered inheritance, and records names-only stripped/inherited evidence;The Android/Flutter/Qt fixture WIP remains separately preserved and is intentionally absent from this PR.
Type of change
Threat-model note (required for workflow / permission changes)
The prior validators inherited ambient process state, so
PYTHONHOME,PYTHONPATH, startup hooks, shadow modules, locale and unrelated secrets could alter nested fixtures or interpreter bootstrap. The new boundary reconstructs bothsys.pathand each child environment from machine-owned allowlists. Additional inherited names are explicit per subject and evidence contains names only, never values. Unknown tools, dependencies, inheritance and process edges fail closed. Mutating generators are cold-imported but never executed by the cold gate.Permissions diff (required for workflow / permission changes)
No
permissions:entry changes. Existing jobs retain their exact scopes. Three evidence-summary jobs add the already SHA-pinnedactions/setup-pythonstep and remaincontents: read; no token write scope, OIDC, secret access or new runner class is introduced.Checklist
# vX.Y.Zversion comment.permissionsremain unchanged.concurrencyandtimeout-minutescontracts remain intact; no job was added.persist-credentials: falseremains on the changed evidence-job checkouts.run:.actionlintpasses locally.zizmor@1.26.1 --persona regular --min-severity lowgate passes locally with no findings.CHANGELOG.mdis updated under[Unreleased].Validation
--check: PASS;validate_all.pyall tiers: PASS;actionlint: PASS;Tier impact