Uh oh!
There was an error while loading. Please reload this page.
[docs] Update documentation for features from 2026-03-26 - #461
Conversation
- installation.md: add troubleshooting entry for glibc/devcontainer binary fallback to pip (#451) - skills.md: clarify presence-driven target deployment; Copilot always active, others deploy only when root dir exists; fix .opencode note (#453, #447) - lockfile-spec.md: document idempotent install -- no rewrite when dependencies are unchanged (#450) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Updates user-facing documentation to reflect recently merged behavior fixes (installer pip fallback on incompatible Linux binaries, presence-driven multi-target skill deployment including OpenCode, and idempotent lockfile writes).
Changes:
- Add installation troubleshooting note for older-Linux/devcontainer binary incompatibility and automatic pip fallback.
- Update skills guide to describe presence-driven target activation and skill deployment to active targets (including
.opencode/skills/). - Update lockfile spec lifecycle table to document idempotent
apm installlockfile writes (no timestamp churn when unchanged).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| docs/src/content/docs/getting-started/installation.md | Documents installer behavior when the binary cannot run on older glibc systems and the pip fallback path. |
| docs/src/content/docs/guides/skills.md | Updates skill integration + target detection docs to match presence-driven deployment and OpenCode support. |
| docs/src/content/docs/reference/lockfile-spec.md | Notes idempotent lockfile write behavior for subsequent installs. |
Comments suppressed due to low confidence (1)
docs/src/content/docs/guides/skills.md:304
- The docs suggest
apm install ... --target vscode, but the install command does not appear to support a--target/-toption (target flags exist onapm compile/apm pack). This "Override" example is likely misleading; consider removing theapm installexample or replacing it withapm compile --target ...and/or theapm.ymltarget:setting.
Override with:
```bash
apm install skill-name --target vscode
apm compile --target claude
</details>
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Liran Tal (lirantal)
commented
Mar 26, 2026
thanks Daniel Meppiel (@danielmeppiel) for putting this PR together the glibc issue solved on my end was moving from the Microsoft devcontainer's 24-bookworm to 24-trixie which has the glibc compatible version. Perhaps some notes on that on the README or on the failure could help agents/humans quickly understand the error and the go-to fix. |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Daniel Meppiel (danielmeppiel)
commented
Mar 27, 2026
Copilot take this into account and improve docs "the glibc issue solved on my end was moving from the Microsoft devcontainer's 24-bookworm to 24-trixie which has the glibc compatible version. Perhaps some notes on that on the README or on the failure could help agents/humans quickly understand the error and the go-to fix." |
Agent-Logs-Url: https://github.com/microsoft/apm/sessions/aa1bd54d-ae2c-4ff4-b699-24ff933c8bec Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com>
…ance, fix broken code block Agent-Logs-Url: https://github.com/microsoft/apm/sessions/aa1bd54d-ae2c-4ff4-b699-24ff933c8bec Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com>
Updated in 52541ea. The troubleshooting section now:
|
Liran Tal (lirantal)
commented
Mar 28, 2026
Good stuff Daniel |
…t webhooks (#865) * ci: add merge-gate orchestrator (shadow) + stuck-PR watchdog PR #856 surfaced a structural CI fragility: required status checks are satisfied by two independent webhook channels (pull_request emits 'Build & Test (Linux)', pull_request_target emits the four Tier 2 stubs). When the pull_request delivery is dropped, 4/5 stubs go green and the 5th hangs in 'Expected -- Waiting' forever -- ambiguous yellow indistinguishable from a slow build. Recovery is folklore. This PR ships two safety nets in shadow mode: * .github/workflows/merge-gate.yml + scripts/ci/merge_gate_wait.sh Single orchestrator that polls the Checks API for 'Build & Test (Linux)' on the PR head SHA and aggregates into one verdict. Triggers on BOTH pull_request and pull_request_target so a single dropped delivery is recoverable; concurrency dedupes. Times out cleanly with a clear error message if Tier 1 never dispatched -- turning the invisible failure into a loud red check. NOT YET REQUIRED -- shadow observation first, ruleset flip after merge. * .github/workflows/watchdog-stuck-prs.yml + scripts/ci/watchdog_scan.sh Cron every 15 min. For open non-draft PRs with no ci.yml run on the head SHA AND non-paths-ignored files, posts one recovery comment. Backstop for any required check that stops dispatching. Tested live (dry-run) against microsoft/apm: watchdog correctly distinguishes stuck PRs (#853, #409) from docs-only PRs (#864, #461, #825). Both scripts shellcheck-clean. merge_gate_wait.sh tested end-to-end against PR #856 head SHA (success path, exit 0) and a non-existent SHA (timeout path, exit 2 with clear error annotation). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ci(merge-gate): handle self-bootstrap and use checkout on pull_request Two fixes for the script-fetch step: 1. On 'pull_request' the runner has no secrets and a read-only token, so actions/checkout of PR head is safe -- use it for simplicity. We only need API-fetch under 'pull_request_target' where checkout would be a security risk. 2. On 'pull_request_target', when the script does not yet exist on base (i.e. THIS PR is the one adding it), curl returns 404 and we degrade to a self-bootstrap no-op pass instead of failing. Once the script lands on main, the gate becomes real. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ci: address Copilot review feedback on PR #865 - merge_gate_wait.sh: use $EXPECTED_CHECK in failure annotation instead of hardcoded 'Build & Test (Linux)' so the orchestrator stays generic. - merge-gate.yml: add curl --retry/--max-time on the script bootstrap fetch so a transient GitHub API blip does not redden the gate. - watchdog_scan.sh: fail loudly with stderr capture if 'gh pr list' errors out, instead of silently treating it as zero PRs (which would hide auth regressions or rate limiting). - watchdog_scan.sh: paginate the changed-files API call so PRs touching >100 files cannot be misclassified as docs-only and skipped. - CHANGELOG: append (#865) to follow the repo convention. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ci: drop watchdog -- gate's dual-trigger redundancy is sufficient The watchdog (cron every 15min, posts recovery comments on stuck PRs) was originally justified for the shadow-mode transition window. Since we are flipping to required immediately after this PR merges, that justification disappears. The merge-gate workflow already triggers on both 'pull_request' and 'pull_request_target' with concurrency dedup, so a single dropped webhook still fires the gate. The watchdog only added value for the double-drop case (both webhook channels fail for the same PR), which is vanishingly rare. We can add it back later if we ever observe one. Removes: - .github/workflows/watchdog-stuck-prs.yml - .github/scripts/ci/watchdog_scan.sh Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…atch-fixes-91bccf8a1df49dbb
Installer's REQUIRED_GLIBC=2.35 (install.sh:161); previous text said 'Bookworm 2.36 / Ubuntu 24.04 2.39' which misrepresented the actual fallback trigger. Aligns docs with the script's behavior. Addresses Copilot review comment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
…t webhooks (#865) * ci: add merge-gate orchestrator (shadow) + stuck-PR watchdog PR #856 surfaced a structural CI fragility: required status checks are satisfied by two independent webhook channels (pull_request emits 'Build & Test (Linux)', pull_request_target emits the four Tier 2 stubs). When the pull_request delivery is dropped, 4/5 stubs go green and the 5th hangs in 'Expected -- Waiting' forever -- ambiguous yellow indistinguishable from a slow build. Recovery is folklore. This PR ships two safety nets in shadow mode: * .github/workflows/merge-gate.yml + scripts/ci/merge_gate_wait.sh Single orchestrator that polls the Checks API for 'Build & Test (Linux)' on the PR head SHA and aggregates into one verdict. Triggers on BOTH pull_request and pull_request_target so a single dropped delivery is recoverable; concurrency dedupes. Times out cleanly with a clear error message if Tier 1 never dispatched -- turning the invisible failure into a loud red check. NOT YET REQUIRED -- shadow observation first, ruleset flip after merge. * .github/workflows/watchdog-stuck-prs.yml + scripts/ci/watchdog_scan.sh Cron every 15 min. For open non-draft PRs with no ci.yml run on the head SHA AND non-paths-ignored files, posts one recovery comment. Backstop for any required check that stops dispatching. Tested live (dry-run) against microsoft/apm: watchdog correctly distinguishes stuck PRs (#853, #409) from docs-only PRs (#864, #461, #825). Both scripts shellcheck-clean. merge_gate_wait.sh tested end-to-end against PR #856 head SHA (success path, exit 0) and a non-existent SHA (timeout path, exit 2 with clear error annotation). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ci(merge-gate): handle self-bootstrap and use checkout on pull_request Two fixes for the script-fetch step: 1. On 'pull_request' the runner has no secrets and a read-only token, so actions/checkout of PR head is safe -- use it for simplicity. We only need API-fetch under 'pull_request_target' where checkout would be a security risk. 2. On 'pull_request_target', when the script does not yet exist on base (i.e. THIS PR is the one adding it), curl returns 404 and we degrade to a self-bootstrap no-op pass instead of failing. Once the script lands on main, the gate becomes real. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ci: address Copilot review feedback on PR #865 - merge_gate_wait.sh: use $EXPECTED_CHECK in failure annotation instead of hardcoded 'Build & Test (Linux)' so the orchestrator stays generic. - merge-gate.yml: add curl --retry/--max-time on the script bootstrap fetch so a transient GitHub API blip does not redden the gate. - watchdog_scan.sh: fail loudly with stderr capture if 'gh pr list' errors out, instead of silently treating it as zero PRs (which would hide auth regressions or rate limiting). - watchdog_scan.sh: paginate the changed-files API call so PRs touching >100 files cannot be misclassified as docs-only and skipped. - CHANGELOG: append (#865) to follow the repo convention. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ci: drop watchdog -- gate's dual-trigger redundancy is sufficient The watchdog (cron every 15min, posts recovery comments on stuck PRs) was originally justified for the shadow-mode transition window. Since we are flipping to required immediately after this PR merges, that justification disappears. The merge-gate workflow already triggers on both 'pull_request' and 'pull_request_target' with concurrency dedup, so a single dropped webhook still fires the gate. The watchdog only added value for the double-drop case (both webhook channels fail for the same PR), which is vanishingly rare. We can add it back later if we ever observe one. Removes: - .github/workflows/watchdog-stuck-prs.yml - .github/scripts/ci/watchdog_scan.sh Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: update docs for batch bug fixes from #456 - installation.md: add troubleshooting entry for glibc/devcontainer binary fallback to pip (#451) - skills.md: clarify presence-driven target deployment; Copilot always active, others deploy only when root dir exists; fix .opencode note (#453, #447) - lockfile-spec.md: document idempotent install -- no rewrite when dependencies are unchanged (#450) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * docs: fix installation troubleshooting section Agent-Logs-Url: https://github.com/microsoft/apm/sessions/aa1bd54d-ae2c-4ff4-b699-24ff933c8bec Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com> * docs: fix glibc troubleshooting -- generic version, devcontainer guidance, fix broken code block Agent-Logs-Url: https://github.com/microsoft/apm/sessions/aa1bd54d-ae2c-4ff4-b699-24ff933c8bec Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com> * docs: correct glibc threshold to match installer (#461) Installer's REQUIRED_GLIBC=2.35 (install.sh:161); previous text said 'Bookworm 2.36 / Ubuntu 24.04 2.39' which misrepresented the actual fallback trigger. Aligns docs with the script's behavior. Addresses Copilot review comment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: GitHub Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <copilot-rework@github.com>
Description
Updates user-facing documentation to reflect recently merged behavior fixes from #456.
Features Documented
apm installnorapm compileadd skills from third-party transitive dependencies #447)Changes Made
Updated
docs/src/content/docs/getting-started/installation.md: Added troubleshooting entry for binary install failures on older Linux (devcontainers, Debian-based images). Uses a generic glibc version reference instead of hardcoding a specific version, explains the Bookworm/Ubuntu 24.04 mismatch as context, documents the automatic pip fallback behavior and PATH considerations, and includes a recommended fix for devcontainers (switch frombookwormtotrixie). Also fixed a broken markdown code block that was missing thepip installcommand and closing fence.Updated
docs/src/content/docs/guides/skills.md: Corrected Step 2 description and Target Detection table to accurately reflect presence-driven deployment. Copilot (.github/skills/) is always active; Claude, Cursor, and OpenCode only deploy when their root directory exists. Also clarifies that.opencode/skills/now receives skill deployments. Fixed Unicode em dash to ASCII per repo encoding policy.Updated
docs/src/content/docs/reference/lockfile-spec.md: Updated the lifecycle table to document thatapm installis idempotent -- the lockfile is only written when semantic content changes (dependencies, MCP servers/configs,lockfile_version), with no churn fromgenerated_atorapm_versionfields.Notes
All three changes are user-facing behavior fixes that were missing from docs. No breaking changes to document.
Type of change
Testing
📍 Connect Copilot coding agent with Jira, Azure Boards or Linear to delegate work to Copilot in one click without leaving your project management tool.