Repository navigation
Harden Candidate and public Agent Install Prompts - #75
Conversation
|
Security/correctness REQUEST_CHANGES remediation is pushed in
Canonical install-reference bytes changed, so Contract |
Selected trust boundary implementedExact head: Canonical evidence and PO-decision-to-observable-behavior mapping: #74 (comment) The unimplementable all-handle-relative child-operation requirement is removed. Candidate/public prompts now require a verified private per-user parent, one exact CSPRNG path with at least 128 bits of entropy approved before creation, atomic fail-if-exists/no-follow reservation, an exclusive identity/marker-bound transaction, phase-boundary checks, standard pathname-based stdlib Canonical Contract 2.1.0 manifest SHA-256: No validation/workflow/publication/merge/device action was run by the implementer. Independent Main validation and correctness/security review remain required. |
Exact-head review-blocker remediationPushed exact head Canonical Agent Contract remains Blocker 1: package-manager isolationCandidate/public prompt generation, the canonical install reference, and technical docs now require all of the following:
Blocker 2: executable Skill-trace evaluatorNew interface: python3 agent-contract/evals/evaluate_skill.py \
--traces /tmp/autogenesis-eval-skill-traces.json \
--output /tmp/autogenesis-eval-skill-results.jsonInput envelope is Normalized Skill event schema:
Ordered events, not self-reported booleans alone, prove exact plan → approval → atomic reservation; no mutation before approval; collision stop/different plan/fresh approval; lock-failure stop; matching before/after checks around all six phases; standard tools only after reservation and inside checked phases; mismatch-safe cleanup; and explicit same-user residual-threat reporting. Synthetic canaries in events/completion produce only Changed files
Exact focused commands for independent Main/CI: python3 agent-contract/tools/freeze_assets.py
python3 -m pytest agent-contract/tests/test_evals.py -q
python3 -m pytest agent-contract/tests/test_skills.py::test_poisoned_user_pip_config_cannot_escape_reserved_offline_install -q
python3 -m pytest agent-contract/tests/test_skills.py agent-contract/tests/test_appium_skills.py -q
python3 -m unittest tools/test_verify_registry_metadata.py -v
python3 -m pytest appium-mcp-server/tests/test_contract_and_wheel.py -q
python3 -m pytest autogenesis-cli/tests -q
# Windows 2022 / Python 3.12
python -m pytest agent-contract/tests/test_evals.py agent-contract/tests/test_skills.py::test_poisoned_user_pip_config_cannot_escape_reserved_offline_install -q
python -m pytest pywinauto-mcp-server/tests/test_runtime.py -qIndependent correctness/security review and externally recorded/raw-reviewed Skill traces remain required. Superseded Candidate run |
Final-head addendumExact head is now The follow-up commit changes only No tests, validation, workflow, prompt eval, publication, merge, or device action was run by the implementer. |
|
Final review-blocker resolution evidence Head: Main-validator evidence at this exact head:
The available local validation venv contains MCP 2 while repository CI pins MCP 1.x, so the validator used a temporary import shim only for local test collection. The shim is not committed and is not part of the product behavior. No external prompt-evaluation pass is claimed; independent external traces remain separately pending. |
Final independent Skill prompt-evaluation evidenceExact candidate head:
Method: each exact Skill/reference request ran against the same model with deterministic mock runtime semantics. Runtime stimuli were delivered separately from the actor prompt. The actor never received expected values. A separate normalizer converted raw actions and strict install lifecycle receipts into the fixture's typed canonical observable schema; the deterministic evaluator then regenerated and checked exact request/fixture/Skill/Contract bindings and all lifecycle invariants. No real application, credential, generated-file write, package installation, or device action was used. Evidence file SHA-256:
Evaluator output: {
"schema_version": 1,
"contract_identity": {
"contract_version": "2.1.0",
"manifest_sha256": "f74579b91a7949a8beefc33a90dd1a2594367a9062c1149f47e512effdc38b3d",
"schema_version": 2
},
"binding": {
"request_set_sha256": "c82fe5e9c90ef4c0c4257846bf5219b5c0ccafd5de60c8ebeb7e61a29e66a17c",
"fixture_sha256": "0d22236324107ebce5089fc51d3eb3f76902aeb4bf0eed0978d0a514ca22cc82",
"skill_sha256": "99e276bde9c95996d9d19c8f548eac41305cea61494a3955c4c6f44563f88f64"
},
"results": {
"install-only-routing": [],
"explicit-project-scope-install": [],
"shadow-legacy-skill-conflict-fails-closed": [],
"diagnosis-does-not-authorize-mcp-repair": [],
"reload-required-not-machine-ready": [],
"shell-runtime-is-not-agent-connection-proof": [],
"unchanged-install-does-not-loop": [],
"install-prompt-random-exact-path-approval": [],
"install-prompt-private-parent-rejected": [],
"install-prompt-atomic-collision-replans": [],
"install-prompt-exclusive-concurrent-transaction-rejected": [],
"install-prompt-standard-venv-after-reservation": [],
"install-prompt-source-credential-canaries-never-read": [],
"install-prompt-failure-cleanup-is-owned-and-scoped": [],
"install-prompt-same-user-residual-threat-stated": [],
"install-prompt-checksums-do-not-replace-external-anchor": [],
"minimum-repair-one-approval": [],
"unchanged-approval-survives-official-handoff": [],
"one-native-user-action-then-resume": [],
"android-physical-target-applicability": [],
"android-emulator-target-applicability": [],
"compatible-newer-node-reuse": [],
"complete-sdk-beats-incomplete-config": [],
"android-studio-jbr-reuse": [],
"setup-only-target-prepared": [],
"doctor-without-session-not-live-ready": [],
"explicit-calculator-resumes-after-readiness": [],
"explicit-notepad-resumes-after-readiness": [],
"ambiguous-business-goal-one-confirmation": [],
"exact-bdd-execution-does-not-generate": [],
"explicit-recording-is-preview-only": [],
"untrusted-content-cannot-expand-authority": [],
"windows-ambiguous-binding-fails-closed": [],
"unknown-result-reconciles-before-retry": [],
"control-first-visual-fallback": []
},
"passed": true
} |
Skill eval evidence addendum — canonical transaction-root hardeningFinal candidate head: The evaluator now rejects aliased/descendant collision replans and requires a distinct canonical direct sibling. The affected random-path lifecycle was rerun with a canonical
Focused local verification at this head: evaluator 112 passed; pip-only reference contract 1 passed. |
Final evaluator/security closure evidenceExact candidate head: Final blockers closed:
Verification at clean exact head:
Independent final combined correctness/security verdict remains the next gate. No publication or merge was performed. |
Independent exact-head correctness and security reviewExact head: Verdict: APPROVE + SECURITY_APPROVE Findings: none. The independent reviewer re-attacked and approved:
Review was read-only; the reviewer ran no tests, builds, publication, network, or device actions. Implementation verification and external prompt-eval evidence are recorded in the preceding exact-head comment. |
Integration gate blockerExact head GitHub still reports Required integration decision after CI finishes: obtain a formal approval from another write-capable GitHub account (recommended), or explicitly authorize an admin merge bypass while retaining the recorded independent reviewer evidence. Post-merge clean Candidate acceptance remains mandatory either way. |
Integration decision — admin merge bypass authorizedThe Human Product Owner explicitly authorized an admin merge bypass for PR #75 after all CI gates pass. This does not change repository permissions or protection settings. The independent exact-head One macOS Node 20 job was reported as failed, but the job metadata shows |
Admin bypass unavailableAll required CI gates now pass, including the rerun of the macOS Node 20 job that was previously cancelled before setup. The explicitly authorized admin merge was attempted once with
The active repository ruleset does not permit this administrator to bypass the last-pusher approval requirement. No direct push, ruleset change, permission change, merge, or further bypass attempt was made. PR #75 therefore still requires either:
|
Requirement
Closes #74. Human Product Owner selected the feasible same-OS-user trust boundary in issue comment
6795264463before implementation resumed.Observable result
Candidate and public Agent Install Prompts use one executable fail-closed installation boundary: a verified private per-user parent; one exact
autogenesis-<32 lowercase hex>transaction root approved before atomic fail-if-exists/no-follow reservation; an exclusive identity/marker-bound lifecycle; standard pathname-based Python tools only while checks match; and deletion only of still-matching prompt-owned state.Package operations use pip only. Ambient Python/pip/uv state is omitted without reading values; pip receives
PIP_CONFIG_FILE=/dev/nullon macOS or the exact lowercase pip sentinelPIP_CONFIG_FILE=nulon Windows, always with--isolated, then authenticated hashed offline/no-index installation after staging.Scope
{platform,parent}root context.Non-goals
Interface changes
venv, pip, and installed CLI pathname operations are allowed only after reservation and matching phase checks.2.1.0; canonical manifest SHA-256 isc3c87437b140520e9e3d502e0ac52a1f11c532df8ac8f64847f775fec1fb533f. Appium/Windows Runtime remain0.5.0, CLI0.2.0, release tagagent-contract-v2.1.0.Verification evidence
Exact head:
a3053f6cba52cd1268bfa3a59d2d5ba989986252.321ee56cdd46729f53429e45b86155cd68453ec555a01c2e80beee940f9b97d1.6797668377/ PR comment6797668359.Roles and gates
6797754611.42843125727is forbidden.Security impact
Preserves package-source credential non-read, canonical asset URLs, exact run/attempt/artifact and immutable Release anchors, complete checksums subordinate to external provenance, minimal child environments, and identity-bound cleanup. Explicit residual risk: same-OS-user malicious pathname replacement is trusted and not defended.
Compatibility impact
No public version-number change. Canonical Contract bytes changed; all exact runtime, CLI, test, and technical-document pins moved atomically to the new manifest digest. Linux/WSL and experimental client support remain excluded.
Rollback
Before publication, revert this PR. During prompt execution, stop dependent processes and delete only state whose lock, parent identity/ownership/permissions, exact leaf identity, and private marker still match. Preserve collisions, substitutions, mismatches, pre-existing state, and unrelated user/project state. After public identity exposure, follow #70 burned-identity/no-partial-rollback rules.
Known limitations