You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bump pyproject.toml and uv.lock to 0.27.0, move the user-facing changes since v0.26.0 into a dated changelog section, and confirm the lint mirror is green.
Post-merge: tag v0.27.0 to trigger the release workflow.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f1d182b1-b222-463e-8beb-e3f1334c61e1
@@ -7,140 +7,93 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
-
### Fixed
10
+
##[0.27.0] - 2026-07-31
11
11
12
-
- On-prem Azure DevOps Server hosts configured with `ADO_HOST` or
13
-
`APM_ADO_HOSTS` are no longer misclassified as GitHub Enterprise Server when
14
-
`GITHUB_HOST` overlaps, keeping ADO credentials isolated end to end.
15
-
The contract is pinned by `req-sc-013` in
16
-
`docs/src/content/docs/specs/openapm-v0.1.md`.
17
-
(by @sergio-sisternes-epam, #2365)
18
-
- Package-declared targets now restrict dependency primitive deployment without expanding project or consumer authorization, preventing Claude-only hooks from leaking into Cursor and repairing stale owned entries on update; the contract is cited in `docs/src/content/docs/specs/openapm-v0.1.md`. By @sergio-sisternes-epam (#2362)
19
-
- Saved targets from `apm config set target` now drive package, MCP, and LSP
20
-
phases in `apm install` and `apm update`; unresolved or failed required
21
-
service writes exit non-zero with a next step instead of silently succeeding.
22
-
(reported by @ryodocx, #2414, closes #2345)
12
+
### Added
23
13
24
-
- Copilot hook packages with JavaScript scripts no longer fail with "hooks: hooks must be an object"; APM keeps generated `package.json` and nested JSON bundle assets out of project `.github/hooks/scripts/` and user `~/.copilot/hooks/scripts/`, where Copilot's recursive hook-loader scan would reject them as descriptors; use `.mjs` for ES module scripts targeting Copilot or VS Code. (#2322)
14
+
-`apm.lock.yaml` can now record `materialization_repo_url` separately from
15
+
canonical dependency identity, preserving source casing in `apm_modules/` and
16
+
generated links while safely migrating stale case-only paths. Reported by
17
+
@rcollette. (#2409)
18
+
19
+
### Fixed
20
+
21
+
-`apm self-update` now downloads GitHub and GHES installers from the selected
22
+
release tag and passes that same normalized version to the installer.
- Run `apm install` and commit the regenerated lockfile to resolve new
44
-
`unrecorded` failures that `apm audit --ci` may surface on upgrade when
45
-
deployed files were committed without an `apm.lock.yaml` claim. This closes
46
-
a gap where `content-integrity` silently skipped such files; shared hook
47
-
merge targets remain exempt. (by @salpers, #2380)
48
-
- A project whose `apm.yml` declares only `dependencies.mcp` now gets an
49
-
`apm.lock.yaml`. Such a project never entered the install pipeline that
50
-
writes one, so `apm audit` failed with "Lockfile missing -- run 'apm
51
-
install'" immediately after a successful install, and the resolved MCP
52
-
servers went unpinned. (by @edenfunf, #2373)
53
-
- Projects that declare only MCP servers now install and audit cleanly on the
54
-
first try. Normal install creates `apm.lock.yaml` with the resolved MCP
55
-
state; frozen install fails without writing when that state is missing or
56
-
stale. The matching `openapm-v0.1.md` frozen-install requirement now covers
57
-
MCP state and all durable writes. (by @edenfunf, #2390; fixes #2373)
58
-
- Package-declared targets now restrict dependency primitive deployment without expanding project or consumer authorization, preventing Claude-only hooks from leaking into Cursor and repairing stale owned entries on update; the contract is cited in `docs/src/content/docs/specs/openapm-v0.1.md`. By @sergio-sisternes-epam (#2362)
59
-
-`apm install --target vscode` now preserves typed MCP Registry v0.1
60
-
arguments for non-container npm, PyPI, and generic launchers while keeping
61
-
one semantic package identity and legacy `value_hint` compatibility.
62
-
(by @edenfunf, closes #2388, #2407)
63
-
64
-
-`apm install --target vscode` now launches container servers with their full
65
-
registry-supplied run options, including bind mounts whose values APM just
66
-
collected. VS Code previously read only the legacy `value_hint` spelling, so
67
-
MCP Registry v0.1 arguments were skipped and the launcher fell back to a bare
68
-
`run -i --rm <image>`. (by @edenfunf, #2377)
69
-
70
-
71
-
- MCP servers whose registry entry uses the MCP Registry v0.1 container type
72
-
`oci` now render a `docker` launcher. They previously matched no launcher
73
-
branch and fell through to the generic `npx` default, which handed the
74
-
container image reference to npm as a package name. (by @edenfunf, #2376)
75
-
76
-
### Changed
77
-
78
-
- A server publishing both a container and a pypi package now resolves to the
79
-
container on Copilot, Codex, Gemini and the adapters inheriting them,
80
-
following the documented `npm, docker, pypi` selection order. Such a server
81
-
previously fell through to `uvx` and now requires a Docker daemon. VS Code
82
-
keeps its own `npm, pypi, docker` order. (by @edenfunf, #2376)
83
-
- Consuming projects no longer inherit a dependency author's development-only
84
-
MCP servers. Only `dependencies.mcp` from direct and transitive packages
85
-
propagates; the root project's `dependencies.mcp` and `devDependencies.mcp`
86
-
remain active for its authoring environment.
87
-
(by @sergio-sisternes-epam, #2340)
88
-
-`apm audit` now scans for hidden Unicode across every file under the deploy
89
-
trees the project's targets govern, instead of only the files
90
-
`apm.lock.yaml` records. Hash verification needs a recorded baseline and
91
-
stays lockfile-scoped, but a bidi override needs none -- so a deployed file
92
-
the lockfile omits (for example a target committed without the regenerated
93
-
lockfile) was exempt from scanning for as long as it stayed unrecorded, in
94
-
`--ci` and `--no-drift` runs alike. `apm audit --strip` cleans those files
- Repeated `apm install` runs with unchanged self-defined MCP dependencies and
97
-
explicit target mappings now preserve `generated_at`, deployment ownership,
98
-
and `mcp_target_servers`, leaving `apm.lock.yaml` byte-identical instead of
99
-
rewriting it. (#2306)
100
-
- Marketplace semver range resolution now honours the `tagPattern` declared by the producer; `version: "~2.1.0"` entries no longer silently fall back to the hardcoded `{name}--v{version}` tag pattern. Existing marketplace files without `tag_pattern` keep the legacy convention. Bare versions also fail closed when no tag matches; use an explicit tag ref instead. (#2366)
101
-
- On-prem Azure DevOps Server hosts configured with `ADO_HOST` or
102
-
`APM_ADO_HOSTS` are no longer misclassified as GitHub Enterprise Server when
103
-
`GITHUB_HOST` overlaps, keeping ADO credentials isolated end to end.
104
-
The contract is pinned by `req-sc-013` in
105
-
`docs/src/content/docs/specs/openapm-v0.1.md`.
106
-
(by @sergio-sisternes-epam, #2365)
107
-
- Package-declared targets now restrict dependency primitive deployment without expanding project or consumer authorization, preventing Claude-only hooks from leaking into Cursor and repairing stale owned entries on update; the contract is cited in `docs/src/content/docs/specs/openapm-v0.1.md`. By @sergio-sisternes-epam (#2362)
108
-
- Copilot hooks now normalize session lifecycle aliases to documented `sessionStart` and `agentStop` keys while preserving Claude's `SessionStart` and `Stop` output (reported by @SaulMoro, closes #2337, #2405)
109
-
-`apm install --target intellij` now writes JetBrains Copilot MCP servers to
110
-
the plugin-read config location, migrates only APM-owned entries from the
111
-
obsolete data path, and preserves user-authored entries in both files.
112
-
Reported by @xalvarez. (#2410, closes #2344)
113
-
- JetBrains Copilot on Linux and macOS now sees MCP servers installed by
114
-
`apm install --target intellij`: APM writes the plugin-read config path,
115
-
migrates only APM-owned entries from the obsolete data path, and preserves
116
-
user-authored entries in both files. (closes #2344) (by @xalvarez, #2410)
78
+
`apm deps list` and rejects missing or ambiguous batches before writing.
79
+
Reported by @sproott. (#2412)
117
80
- Saved targets from `apm config set target` now drive package, MCP, and LSP
118
-
phases in `apm install` and `apm update`; unresolved or failed required
119
-
service writes exit non-zero instead of skipping with success.
120
-
(by @ryodocx, closes #2345)
121
-
122
-
- Mixed-case GitHub dependency paths now retain source casing in
123
-
`apm_modules/` and generated links while lockfile and deduplication identity
124
-
stays canonical; reinstall migrates stale case-only paths safely.
125
-
`docs/src/content/docs/specs/openapm-v0.1.md` now defines this split in
126
-
`req-lk-022`. Reported by @rcollette. (closes #2347, #2409)
127
-
-`apm install --dry-run` no longer lists the project's own `includes: auto`
128
-
self-managed files under "Files that would be removed"; the orphan preview
129
-
now excludes the synthesized lockfile self-entry, matching the real install
130
-
which never removes them. (by @mia106dev, #2069)
131
-
- Teammates with different harnesses installed no longer rewrite each other's
132
-
`mcp_target_servers`; lockfile ownership now follows declared `apm.yml`
133
-
`targets:` before local runtime detection. (by @rrazvd, closes #2298, #2307)
81
+
phases in `apm install` and `apm update`; failed required service writes exit
82
+
nonzero with a next step instead of silently succeeding. Reported by
83
+
@ryodocx. (#2414)
134
84
135
85
### Security
136
86
87
+
- On-prem Azure DevOps Server hosts are no longer misclassified as GitHub
88
+
Enterprise Server when host settings overlap, keeping ADO credentials isolated
89
+
end to end. (by @sergio-sisternes-epam, #2365)
90
+
-`apm audit` now scans every governed deploy-tree file for hidden Unicode,
91
+
including files omitted from `apm.lock.yaml`; `--package` remains
0 commit comments