fix(install): preserve local declaring sources and audit current intent read-only - #2919
Draft
Daniel Meppiel (danielmeppiel) wants to merge 8 commits into
Draft
fix(install): preserve local declaring sources and audit current intent read-only#2919Daniel Meppiel (danielmeppiel) wants to merge 8 commits into
Daniel Meppiel (danielmeppiel) wants to merge 8 commits into
Conversation
Preserve exact five-artifact overlay from parent-owned normative commit 0858443a9930c996d4aaa2f63d4f27348f2263ab. Retained v0.1 artifacts already equal current main. Runtime and complete draft assessment remain in the combined successor; this does not activate or ratify the draft. Source-commit: 0858443a9930c996d4aaa2f63d4f27348f2263ab Co-authored-by: danielmeppiel <danielmeppiel@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…y witnesses Recover original source tests from 824b170 and preserve the added cached/fresh canonical Git identity proof for transfer into the parent-approved shared prerequisite. This bounded unpublished test commit is not final integrated acceptance. Source-commit: 824b170 Co-authored-by: danielmeppiel <danielmeppiel@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Recover the approved local-source and read-only current-intent audit hunks from 824b170 against current main, the exact shared source helper, and the reconciled inactive normative overlay. Preserve all original test cases, current-main skill-bundle validation, source anchoring and containment boundaries. Reduce install drift through equivalent local-bundle removal rather than raising the ratchet. Regenerate the complete 123-requirement draft binding inventory with explicit human and implementation qualifications. Canonical current apm.lock.yaml remains unchanged under VP approval to omit only the original 20-line machine-local receipt deletions. This is an unpublished preparation commit; external alias integration, actual foundation ancestry, final panels, native evidence and CI remain pending. Source-commit: 824b170 Co-authored-by: danielmeppiel <danielmeppiel@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Extract the exact cached restoration call from #2820 (824b170). Both independent successors inherit this same prerequisite. Move the two cached/fresh identity cases from 0119fc6 into their shared module; retain parsed URL assertions. No acquisition trust or local admission changes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Inherit the same committed caller and two-case behavioral witness as the aggregate successor, without aggregate runtime changes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
After inheriting exact prerequisite 63b3619, remove only the relocated two-case function and the combined-added duplicate static guard/mutant. Both cached/fresh cases now live in tests/unit/install/test_cached_source_identity.py. Original cached-route guard ownership returns to the aggregate successor; all original local admission and provenance tests remain. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve landed plugin no-op outcome semantics, diagnostics, documentation, and req-tg-011 binding. The five parent-owned normative overlay artifacts remain unchanged; published alias changes are not integrated. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
8 tasks
Daniel Meppiel (danielmeppiel)
added a commit
that referenced
this pull request
Sep 9, 2026
Preserve the original #2820 history while moving executable ownership to the published #2919 and #2923 successors. Restore current main runtime and the active v0.1 assessment verbatim; retain the exact corrective draft overlay and its release-note obligation. Final normative repin still follows qualified-human #2901 landing. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Daniel Meppiel (danielmeppiel)
added a commit
that referenced
this pull request
Sep 9, 2026
…endment Carry the full 124-requirement union without activating v0.2 or replacing human Section 9.3 review. Preserve exact prospective v0.1 schemas and all local/audit boundaries, with assessment owned by #2919. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fix(install): preserve local declaring sources and audit current intent read-only
TL;DR
Recover the combined local-source and current-intent audit portion of #2820, addressing #2815 and #2816 while preserving the #2818 process obligations.
Local children resolve from established declaring sources; audit replays current target intent without initializing live configuration.
The matching corrective draft and complete binding harness remain explicitly DRAFT / UNSATISFIED, not implementation certification or ratification.
This is a provisional lineage-preserving draft, not a landing-ready successor.
Important
Actual base:
mainatd26ccdaf2fbcb29775abc94b7413790b3e32b600.This PR is not yet based on the narrowed original foundation branch.
After both successor links permit #2820 to be narrowed, inherit the actual stable foundation and retarget truthfully.
#2901's runtime and normative changes are not integrated; its human landing and subsequent actual-main reconciliation remain separate prerequisites.
Do not request qualifying human approval against this moving draft.
Problem (WHY)
_local/...must not authorize local filesystem access.These boundaries use concrete regression cases rather than inferred success:
"Effective skills are grounded in real expertise."
The source/replay split preserves coherent responsibilities:
"you want it to encapsulate a coherent unit of work that composes well with other skills."
Execution evidence remains separate from generated inventories:
"Run the skill against real tasks, then feed the results — all of them, not just failures — back into the creation process."
Approach (WHAT)
user_scope_rejection_reasonat both resolution and acquisition, preserving the original declaring source.Implementation (HOW)
models/apm_package.py,deps/apm_resolver.pyinstall/package_resolution.py,install/phases/resolve.py,install/sources.pycore/target_detection.py,install/audit_target_roots.py,install/audit_replay.py,install/drift.pycli.py,config.py,deps/github_downloader.py,deps/git_auth_env.pyintegration/copilot_cowork_paths.py,integration/mcp_config_view.py,policy/_shared.py,policy/ci_checks.py,security/file_scanner.py.apm/architecture/owners/{core-runtime,install-deployment,contracts-tooling}.jsonand the five changed architecture-check modulestests/unit/{deps,install,core}/, config/protocol tests, resolver tests and architecture integration companionstests/integration/test_{audit_target_intent_e2e,global_local_transitive_dependency_e2e,audit_unrecorded_unicode_lifecycle,version_notification}.pytests/spec_conformance/*,tests/fixtures/spec-conformance/manifest/valid-local-parent.ymlopenapm-v0.2.md, its requirements manifest,docs/astro.config.mjslatestremain unchanged..github/workflows/spec-conformance.yml,.gitignore,CONFORMANCE.{json,md}CONTRIBUTING.md,CHANGELOG.md, CLI audit/config/install docs, conformance docs and packaged commands/dependencies guidanceExact lineage
824b17058826aef375c0446085197a81e1418dd8, original base8faecc6c0cbc25864e63fd0081f8eb22accd2359f1a605862d586773ee6e74ee37bf201a01722d4c, inherited as the exact commit63b3619905298efca014a6621b725b5448ffefff, inherited as the same object by both successors0858443a9930c996d4aaa2f63d4f27348f2263ab/9a45efde1faf5cd5d8e50a8335f12e0c1d0c417df8df1b75bytes, unchanged by current runtime based26ccdafapm.lock.yamlOriginal authorship and source-commit attribution are preserved in commits.
Prior general R1/R2/R3 and spec R2 receipts remain historical, not fresh approvals:
general recommendation,
shared specification review surface.
The same unfinished outer iteration 4 continues; both Copilot rounds are already consumed.
No new Copilot fetch or CI recovery was performed for this preparation.
Diagrams
Dashed stages show the corrected authority boundaries: original acquisition determines local admission, while current intent—not historical lock targets—determines audit replay.
flowchart LR subgraph Install["Local-source install"] R["_source_kind_for_dependency"] --> P["Acquisition-only proven_source_kind"] P --> A["user_scope_rejection_reason"] A -->|"admitted"| C["Original declaring source"] C --> D["Contained materialization destination"] A -->|"rejected"| E["No local acquisition"] end subgraph Audit["Read-only audit"] I["Current manifest and saved intent"] --> T["resolve_audit_targets"] T --> S["prepare_ci_audit_replay: scratch only"] S --> V["Compare expected and live outputs"] L["Historical lock claims"] --> V end classDef new stroke-dasharray: 5 5; class P,A,T,S new;Trade-offs
../source references are valid when established by a local declaring package; destination containment remains a separate authority. fix(alias): reject path-traversing dependency aliases — fixes #2900 #2901 integration is deferred until the permitted actual-main boundary, not simulated with copied dirty work.req-lk-023; future alias requirements are not guessed into it.req-lk-017. Internal resource-link dereferencing can still produce a false orphan; its narrow xfail and unsuppressed escaping-link refusal remain. Noreq-lk-017orreq-sc-015weakening.Benefits
Validation
Exact head:
fda7d05716718d960c677d68265fbdf163fce854, incorporating actual maind26ccdaf.The authorized single batch and complete current CI-mirror lint/architecture chain finished successfully.
This is local evidence; hosted CI has not yet been observed for this new PR.
Targeted command:
Current-head lint evidence and historical preparation boundaries
The canonical Ruff pair covered
src/,tests/,scripts/lint_architecture_boundaries.pyandscripts/architecture_linter/.The YAML-write, 2,100-line and portable-relative-path guards passed; pylint R0801, auth-signal lint, architecture boundaries and the narrower 1,020-line drift limit passed.
The working tree and tested head remained unchanged.
Earlier recovered-tree preparation: 548 local/resolver/source cases passed; complete source conformance collected 319 cases with 317 passed, one publisher-SHOULD waiver skip and one known internal-link replay xfail.
All 216 original conformance functions and parameterizations were retained, and generation was deterministic.
Those earlier executions are not borrowed as exact-current-head or native certification.
Behavioral mutation preparation made the local-admission and cached-restoration cases fail when their protected decisions were removed, then restored them.
Final owner evidence, native acceptance, general panel/docs-sync and the parent's sole final spec-guardian round remain pending their approved integration boundaries.
Scenario Evidence
The table identifies actual tests and their evidence level; e2e rows remain pending native allocation.
tests/unit/install/test_local_scope_admission.py::test_user_scope_preserves_local_parent_anchor(regression-trap for #2815);tests/integration/test_global_local_transitive_dependency_e2e.py::test_local_transitive_scope_paritytests/unit/deps/test_declaring_source_provenance.py::test_boundaries_refuse_nonlocal_declaring_contexttests/unit/install/test_cached_source_identity.py::test_cached_acquisition_restores_original_git_sourcetests/spec_conformance/test_audit_current_intent_contract.py::test_current_intent_overrides_old_target_ownership;::test_configured_target_keeps_integrity_and_membership_checkstests/integration/test_audit_target_intent_e2e.py::test_audit_startup_leaves_fresh_home_unchanged_outside_test_modetests/unit/test_protocol_config_precedence.py::test_downloader_config_bootstrap_preserves_transport_precedence;::test_read_only_windows_sentinel_preserves_temp_precedencetests/spec_conformance/test_spec_version_contract.pyHow to test
UV_FROZEN=1 uv run --frozen --extra dev pytest tests/spec_conformance -q; distinguish the documented skip/xfail from passing assertions.UV_FROZEN=1 uv run --frozen --extra dev python -m tests.spec_conformance.gen_statement, then inspectgit diff -- CONFORMANCE.json CONFORMANCE.md; expect deterministic DRAFT bindings, not ratification.Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com