From 11a3f6732a7b002ff5581132735b9ed56ae0a42a Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Wed, 11 Nov 2026 19:13:49 -0500 Subject: [PATCH 1/5] docs: fix the dead links the online link check reports The weekly online link check has failed every run; run 42809150911 listed 63 dead-link locations. 40 sit in eval cases, which the standards caller now skips (melodic-software/standards#990). This fixes the rest: renamed anchors on code.claude.com and platform.claude.com, fragments only JavaScript renders (staticcheck, Chrome DevTools, Apple HIG, unversioned npm docs), moved Bun and refusals pages, a deleted x.com reply, an expired run link, a removed skill linked at its last commit, and placeholder URLs moved into code spans. Two live pages that refuse the runner get exact .lycheeignore entries. maintenance-file-dead-links.yml listens for the link check under both its current and its renamed name, so the rename in standards#990 does not disconnect it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe --- .github/workflows/maintenance-file-dead-links.yml | 6 ++++-- .lycheeignore | 6 ++++++ docs/plugin-philosophy.md | 2 +- .../claude-dev-building-effective-agent-automations.md | 2 +- .../warpdotdev-common-skills-agents-skills-merge-risk.md | 2 +- .../x-com-addyosmani-status-2119332146485891501.md | 4 ++-- plugins/ai-slop/CHANGELOG.md | 2 +- plugins/code-tidying/skills/audit-dead-code/SKILL.md | 2 +- plugins/context-guard/reference/reader-contract.md | 2 +- plugins/discovery/agents/intent-tracer.md | 2 +- plugins/discovery/agents/researcher.md | 2 +- plugins/discovery/skills/explore/reference/workflow.md | 2 +- plugins/evals/skills/plugin-eval/SKILL.md | 4 ++-- .../skills/audit-instructions/reference/criteria.md | 8 ++++---- .../skills/audit-pass/reference/doctor-handoff.md | 2 +- .../harness-ops/skills/inventory/reference/extraction.md | 2 +- plugins/knowledge/skills/absorb-upstream/SKILL.md | 2 +- .../knowledge/skills/absorb-upstream/templates/record.md | 2 +- .../mcp-tools/skills/audit-posture/reference/checklist.md | 2 +- plugins/playbooks/reference/prompt-caching.md | 2 +- plugins/playwright/skills/demo-video/SKILL.md | 2 +- plugins/skill-quality/reference/invocation-probes.md | 2 +- plugins/source-control/CHANGELOG.md | 2 +- plugins/user-interface/reference/types/web/color.md | 4 ++-- 24 files changed, 38 insertions(+), 30 deletions(-) diff --git a/.github/workflows/maintenance-file-dead-links.yml b/.github/workflows/maintenance-file-dead-links.yml index da5bde1d2eb..c3a213c033a 100644 --- a/.github/workflows/maintenance-file-dead-links.yml +++ b/.github/workflows/maintenance-file-dead-links.yml @@ -30,13 +30,15 @@ name: Maintenance File Dead Links # puts the issue in the untriaged queue. A reopened rollup keeps its state. # # The trigger names the link-check workflow by its `name:`, which the -# standards component owns: a rename there disconnects this workflow. +# standards component owns: a rename there disconnects this workflow. Both +# names stay listed until the sync carrying standards#990's rename lands; then +# drop the old one. on: # Runs this file from the default branch and executes no code from the # link-check run: the artifact is data, checked before use. workflow_run: # zizmor: ignore[dangerous-triggers] - workflows: [Maintenance Check Links Online Claude Code Plugins] + workflows: [Maintenance Check Links Online, Maintenance Check Links Online Claude Code Plugins] types: [completed] branches: [main] diff --git a/.lycheeignore b/.lycheeignore index 3d454399d28..c3719db314d 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -92,3 +92,9 @@ github\.com/meridian-labs/agent-cli/releases/tag/ ^https://api\.github\.com/repos/anthropics/claude-code/releases$ ^https://api\.github\.com/repos/anthropics/claude-code/releases/tags/v2\.1\.269$ ^https://api\.github\.com/repos/anthropics/claude-code/tags$ + +# Publisher bot block: 403 to the runner and to a browser User-Agent; the DOI resolves to the cited Parnas paper on dl.acm.org (verified 2026-11-11). +^https://doi\.org/10\.1145/361598\.361623$ + +# claude.ai connectors settings page behind sign-in: 403 on the runner (online run 42809150911) and to a signed-out browser User-Agent (verified 2026-11-11). +^https://claude\.ai/customize/connectors$ diff --git a/docs/plugin-philosophy.md b/docs/plugin-philosophy.md index d86bba9f43a..4558ece00f9 100644 --- a/docs/plugin-philosophy.md +++ b/docs/plugin-philosophy.md @@ -107,7 +107,7 @@ Keep plugins horizontally decoupled: the fallback runs, the skill says once which plugin it would use and what that plugin would add, so the user can install or enable it. The first versioned dependency brings a release-tag step with it. - **Pointer**: when a plugin here gains its first versioned dependency, read - [release a plugin that others depend on](https://code.claude.com/docs/en/plugins/dependencies#release-a-plugin-that-others-depend-on) + [release a plugin that others depend on](https://code.claude.com/docs/en/plugins/dependencies#tag-plugin-releases-for-version-resolution) for who tags which repository, and [create a release tag](https://code.claude.com/docs/en/plugins/dependencies#create-a-release-tag) for the tag name and the command that makes it, live. diff --git a/docs/upstream/claude-dev-building-effective-agent-automations.md b/docs/upstream/claude-dev-building-effective-agent-automations.md index 01cb6b5f24c..b5d9b0dfcbe 100644 --- a/docs/upstream/claude-dev-building-effective-agent-automations.md +++ b/docs/upstream/claude-dev-building-effective-agent-automations.md @@ -68,7 +68,7 @@ correlate. `none` marks an in-repo decision with no upstream section. Shared for | A15 Per-item ledger | Deferred: whether morning-brief's readers need a report of changes since the previous brief. If they do, it folds into #7578 or a new issue | #7578; no docs page covers a per-item report ledger as of 2026-10-16 | | A16 Open egress for CI lanes | Deferred: a security-class owner question whose trade-off ADR 0049 records. Revisit only with evidence that hosted runners offer default-deny egress | [ADR 0049](../adr/0049-run-ci-lanes-on-github-hosted-runners-under-trigger-and-token-hardening.md) | | A17 Approval defaults per surface | Rejected as a new artifact: the [loop-lane convention, "Permission modes"](../contracts/loop-lane/README.md#permission-modes) already fixes the permission mode per lane surface (`auto` for local lanes, `dontAsk` for intake and review) | When a lane's approval behavior is in question, fetch [Available modes](https://code.claude.com/docs/en/permission-modes#available-modes) and [Turn off permission prompts in unattended runs](https://code.claude.com/docs/en/headless#turn-off-permission-prompts-in-unattended-runs) live | -| A18 Managed Agents as an execution target | First workload: a scheduled re-read of the docs-page pointers in `docs/upstream/` records through the rung-1 docs lookup ([fetch route](../contracts/upstream-drift/README.md#reading-the-basis-the-fetch-route)), reporting each row whose section is gone, moved or no longer supports it. Those rechecks are manual today ([upstream-drift](../contracts/upstream-drift/README.md#drift-signal-content-hashing-deferred)); git-pinned pages already have the monthly drift check. Basis: a cloud environment mounts this public repository with no token and reaches only the docs hosts the pointers name, so no local machine; it holds no credential or vault and reports in its final message, so it is read-only and editing a record stays a reviewed step; its data is public repository content and public pages only, so the surface's ZDR and HIPAA BAA ineligibility does not bar it. Failure detection: a succeeded deployment run is not success. A run fails when its deployment run carries an error, the deployment is paused or archived, no run lands in its window, its session terminates or is not idle by the check's deadline, it goes idle on any stop reason but `end_turn`, or its final message lacks the completion line the prompt requires. The check reads deployment runs and each session's past events through the API and trusts no webhook. Who runs the check and which plan funds the runs stay on #6970; running the onboarding stays the operator's (A19) | When evaluating it, fetch [Beta access](https://platform.claude.com/docs/en/managed-agents/overview#beta-access), [GitHub MCP and session resources](https://platform.claude.com/docs/en/managed-agents/github#github-mcp-and-session-resources), [Networking](https://platform.claude.com/docs/en/managed-agents/environments#networking), [Deployment runs](https://platform.claude.com/docs/en/managed-agents/scheduled-deployments#deployment-runs), [Failure behavior](https://platform.claude.com/docs/en/managed-agents/scheduled-deployments#failure-behavior), [Respond when the session goes idle](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#respond-when-the-session-goes-idle), [List past events](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#list-past-events), [Supported event types](https://platform.claude.com/docs/en/managed-agents/webhooks#supported-event-types) and [Delivery behavior](https://platform.claude.com/docs/en/managed-agents/webhooks#delivery-behavior) live; as of 2026-10-26; #7675 | +| A18 Managed Agents as an execution target | First workload: a scheduled re-read of the docs-page pointers in `docs/upstream/` records through the rung-1 docs lookup ([fetch route](../contracts/upstream-drift/README.md#reading-the-basis-the-fetch-route)), reporting each row whose section is gone, moved or no longer supports it. Those rechecks are manual today ([upstream-drift](../contracts/upstream-drift/README.md#drift-signal-content-hashing-deferred)); git-pinned pages already have the monthly drift check. Basis: a cloud environment mounts this public repository with no token and reaches only the docs hosts the pointers name, so no local machine; it holds no credential or vault and reports in its final message, so it is read-only and editing a record stays a reviewed step; its data is public repository content and public pages only, so the surface's ZDR and HIPAA BAA ineligibility does not bar it. Failure detection: a succeeded deployment run is not success. A run fails when its deployment run carries an error, the deployment is paused or archived, no run lands in its window, its session terminates or is not idle by the check's deadline, it goes idle on any stop reason but `end_turn`, or its final message lacks the completion line the prompt requires. The check reads deployment runs and each session's past events through the API and trusts no webhook. Who runs the check and which plan funds the runs stay on #6970; running the onboarding stays the operator's (A19) | When evaluating it, fetch [Beta access](https://platform.claude.com/docs/en/managed-agents/overview#beta-access), [GitHub MCP and session resources](https://platform.claude.com/docs/en/managed-agents/github#git-hub-mcp-and-session-resources), [Networking](https://platform.claude.com/docs/en/managed-agents/environments#networking), [Deployment runs](https://platform.claude.com/docs/en/managed-agents/scheduled-deployments#deployment-runs), [Failure behavior](https://platform.claude.com/docs/en/managed-agents/scheduled-deployments#failure-behavior), [Respond when the session goes idle](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#respond-when-the-session-goes-idle), [List past events](https://platform.claude.com/docs/en/managed-agents/events-and-streaming#list-past-events), [Supported event types](https://platform.claude.com/docs/en/managed-agents/webhooks#supported-event-types) and [Delivery behavior](https://platform.claude.com/docs/en/managed-agents/webhooks#delivery-behavior) live; as of 2026-10-26; #7675 | | A19 Onboarding path and reference implementation | Rejected: a version-floor skill rule, since `.claude/rules/skill-bodies-state-current-rules.md` already allows the pointer and forbids a restated version. Running the onboarding is the operator's call; the reference implementation's agent definition is read only inside #7675 | #7675 | | A20 Brevity and links from the source | Rejected: ai-briefing already requires a working source URL per item and forbids invented details (`plugins/ai-briefing/skills/generate/SKILL.md`) | none | | A21 Digest tagging rulings | Deferred inside the digest slice; no repository decision depends on them | none | diff --git a/docs/upstream/warpdotdev-common-skills-agents-skills-merge-risk.md b/docs/upstream/warpdotdev-common-skills-agents-skills-merge-risk.md index 1a507c4a76d..4ac9d505f90 100644 --- a/docs/upstream/warpdotdev-common-skills-agents-skills-merge-risk.md +++ b/docs/upstream/warpdotdev-common-skills-agents-skills-merge-risk.md @@ -47,7 +47,7 @@ not from a file at the pin, so they are not drift inputs. | Idea | Our surface | Disposition | |---|---|---| | A PR body can carry text that tells the grader to approve ([reply](https://x.com/kurtextrem/status/2112833622893871390)); no mitigation was given | The lanes read the PR body as data (`plugins/review/skills/code-review/SKILL.md:142`, `docs/contracts/untrusted-content/README.md:13-25`); merge-risk marks `area`, `why` and `checker` as data (`SKILL.md`, step 5) | **already have** | -| Bind the verdict to the commit it graded ([reply](https://x.com/3clown3/status/2112894564788756825)) | `/review:merge-risk` step 4 re-reads the head and diff, and its result names the head; `plugins/verification/scripts/confirm-verdict.sh:11-12` | **already have** | +| Bind the verdict to the commit it graded (an x.com reply, since deleted) | `/review:merge-risk` step 4 re-reads the head and diff, and its result names the head; `plugins/verification/scripts/confirm-verdict.sh:11-12` | **already have** | | A PR that edits the grader's own rules rates high ([reply](https://x.com/wfouaaad/status/2117641184638091709)) | The floor's `trust` and `gate` classes (`HOLD_PATH_CLASSES` rows for `docs/conventions/pr-pipeline.yaml`, `**/.claude/**`, `**/CLAUDE.md`, `merge-holds.mjs` itself, `docs/review/**` and the `pr-review-*` workflows), held off by Q15; `plugins/review/**`, which holds the CI lane skill bodies, is not in the floor | **already have** (gap noted, no change while Q15 stands) | | Grade the stack as a whole, intermediate states included ([reply](https://x.com/harrisonju/status/2112950775190036673)) | `/work-items:ship` lands an integration branch through one PR (`plugins/work-items/skills/ship/SKILL.md:110-119`); close-out review covers the whole container (`plugins/review/skills/quality-gate/context/close-out.md:15-18`) | **reject:** we do not ship GitHub PR stacks | | Grade with a model other than the author's ([reply](https://x.com/heyarunb/status/2112806554911297791)) | `plugins/review/agents/lane-verifier.md:5` is `model: inherit`; `/review:fanout` model diversity is opt-in | **open:** owner decision on a different grader model, pending | diff --git a/docs/upstream/x-com-addyosmani-status-2119332146485891501.md b/docs/upstream/x-com-addyosmani-status-2119332146485891501.md index 62c428917dc..04aa90188ce 100644 --- a/docs/upstream/x-com-addyosmani-status-2119332146485891501.md +++ b/docs/upstream/x-com-addyosmani-status-2119332146485891501.md @@ -40,10 +40,10 @@ reason. The idea column names the article section; its link is the post. | [Set clear context: start loose for discovery work](https://x.com/addyosmani/status/2119332146485891501) | Exploratory work begins from a broad prompt that sharpens as findings arrive | Some work cannot be specified until it has been explored. **Stated** ([source](https://code.claude.com/docs/en/best-practices#write-a-specific-prompt)) | Forcing a spec before the shape is known | **already have:** `/planning:brainstorm` (`plugins/planning/skills/brainstorm/SKILL.md:2`), `/discovery:explore` | | [Set clear context: interview, save the spec, build fresh](https://x.com/addyosmani/status/2119332146485891501) | The agent questions the person until a spec can be written, the spec goes to a file, and a new session builds from it and reviews against it | Thinking that is not yet a prompt still needs a route to one. **Stated** ([source](https://code.claude.com/docs/en/best-practices#brainstorm-with-claude-first)) | Underspecified tasks | **already have:** `/planning:interview` (`plugins/planning/skills/interview/SKILL.md:2`) and fresh-session execution (`plugins/session-flow/skills/workflow/context/continuation.md:151`) | | [Set clear context: give it the tools a new hire gets](https://x.com/addyosmani/status/2119332146485891501) | The agent is connected to the tracker, error dashboards and chat the team uses | An agent that cannot see the tracker or the errors works from a partial picture. **Stated** ([source](https://code.claude.com/docs/en/best-practices#connect-the-tools-claude-needs)) | Which connections a repo wires is each consumer's setup, not a plugin surface | **reject:** choosing a consumer's connections stays with that consumer; `/harness-config:audit-automation-gaps` already judges whether an MCP server earns its place (`plugins/harness-config/skills/audit-automation-gaps/SKILL.md:2`) and `/harness-ops:prerequisites` reports the tools the installed plugins need | -| [Make every correction compound: twice corrected, written down](https://x.com/addyosmani/status/2119332146485891501) | A correction repeated across sessions becomes a line in shared instructions or a shared skill | Fixes kept in one person's head or one machine are repaid every session. **Stated** ([source](https://code.claude.com/docs/en/best-practices#keep-claudemd-short)) | Recurring mistakes | **already have:** `/corrections:codify` (`plugins/corrections/skills/codify/SKILL.md:2`) and the enforcement ladder's recurring-correction rule (`docs/contracts/enforcement-ladder/README.md:129`) | +| [Make every correction compound: twice corrected, written down](https://x.com/addyosmani/status/2119332146485891501) | A correction repeated across sessions becomes a line in shared instructions or a shared skill | Fixes kept in one person's head or one machine are repaid every session. **Stated** ([source](https://code.claude.com/docs/en/best-practices#keep-claude-md-short)) | Recurring mistakes | **already have:** `/corrections:codify` (`plugins/corrections/skills/codify/SKILL.md:2`) and the enforcement ladder's recurring-correction rule (`docs/contracts/enforcement-ladder/README.md:129`) | | [Make every correction compound: recheck on each new model](https://x.com/addyosmani/status/2119332146485891501) | Each standing correction is tested again when the model changes, and dropped when no longer needed | Corrections written for an older model can outlive their reason. **Stated** ([source](https://code.claude.com/docs/en/best-practices#what-you-can-stop-doing)) | Stale instructions after a model change | **already have:** `/harness-config:unhobble` (`plugins/harness-config/skills/unhobble/SKILL.md:2`) | | [Make every correction compound: tag the agent in code review](https://x.com/addyosmani/status/2119332146485891501) | A reviewer mentions the agent on a review comment so the feedback becomes a standing rule | Review feedback given once is lost unless something writes it down. **Stated** ([source](https://x.com/addyosmani/status/2119332146485891501)) | Review comments that never become checks | **already have (partial), reject for the rest:** `/corrections:codify reviews` mines merged review comments (`plugins/corrections/skills/codify/SKILL.md:31`), and ADR 0088 relays a listed human's reply on an escalated thread. A standing mention trigger is a GitHub App feature, not a plugin surface | -| [Make every correction compound: what belongs in CLAUDE.md](https://x.com/addyosmani/status/2119332146485891501) | The instruction file holds verify commands, misleading code areas, off-repo decisions and repeated corrections, and stays short | A long file loses lines; a file holding derivable facts crowds out the ones the agent cannot find. **Stated** ([source](https://code.claude.com/docs/en/best-practices#keep-claudemd-short)) | Bloated instruction files | **already have:** `/harness-memory:audit` (criteria at `plugins/harness-memory/skills/audit/reference/criteria.md:323`), `/docs-hygiene:write-for-agents` | +| [Make every correction compound: what belongs in CLAUDE.md](https://x.com/addyosmani/status/2119332146485891501) | The instruction file holds verify commands, misleading code areas, off-repo decisions and repeated corrections, and stays short | A long file loses lines; a file holding derivable facts crowds out the ones the agent cannot find. **Stated** ([source](https://code.claude.com/docs/en/best-practices#keep-claude-md-short)) | Bloated instruction files | **already have:** `/harness-memory:audit` (criteria at `plugins/harness-memory/skills/audit/reference/criteria.md:323`), `/docs-hygiene:write-for-agents` | | [Let it decide: requests versus requirements](https://x.com/addyosmani/status/2119332146485891501) | Prompt text, instruction files and skills are inputs the model weighs; hooks, deny rules and admin-managed settings are enforced by the harness | Treating a guideline as a guarantee, or hard-coding a preference, both misfire. **Stated** ([source](https://code.claude.com/docs/en/best-practices#deterministic-and-non-deterministic-instructions)) | Picking the enforcement strength for a rule | **already have:** the enforcement ladder (`docs/contracts/enforcement-ladder/README.md:16`). Hooks of type `prompt` and `agent` hand the decision to a model, so they sit with the requests, not the requirements | | [Let it decide: promote the ignored line, retire the preference hook](https://x.com/addyosmani/status/2119332146485891501) | An instruction the agent keeps missing moves to a hook; a hook enforcing a mere preference is removed | Emphasis does not make a soft rule hard, and a hard rule on a preference over-constrains. **Stated** ([source](https://code.claude.com/docs/en/best-practices#deterministic-and-non-deterministic-instructions)) | Rules at the wrong strength | **already have:** `docs/contracts/enforcement-ladder/README.md:129`; retiring a gate is `/overengineering:audit` and `/overengineering:realign` | | [Let it decide: drop habits the model outgrew](https://x.com/addyosmani/status/2119332146485891501) | Emphasis in capitals, depth requests in prompt text, and keep-going exhortations are removed when the model changes | Current models act on a plain line; the old crutches now push the model to over-apply or over-work. **Stated** ([source](https://code.claude.com/docs/en/best-practices#what-you-can-stop-doing)) | Our instruction audit flags capitals (`plugins/harness-config/skills/audit-instructions/reference/criteria.md:2149`) and depth steers, but its think-carefully row I8-f is scoped to Opus 5.5 because an unscoped row would contradict the base row's source (`criteria.md:765`), and no row flags keep-going or don't-be-lazy lines | **adapt:** in `/harness-config:audit-instructions`, add a detect row for keep-going exhortations, fenced so it never flags the finish line or carry-on statement that P6 requires of an autonomous component (`plugins/harness-config/skills/audit-prompting-postures/reference/postures.md:145`). The docs table does not meet I8-f's promotion gate as written (`criteria.md:133`): it says those phrases are not an effort control, not that they cost latency for no gain, so at most a narrower unscoped claim ("change effort for depth") could pass. ADR 0006 keeps model doctrine per version behind that gate (`docs/adr/0006-scope-model-doctrine-per-version-behind-a-promotion-gate.md`) | diff --git a/plugins/ai-slop/CHANGELOG.md b/plugins/ai-slop/CHANGELOG.md index 2f2ee37cb5c..ef51689d4f6 100644 --- a/plugins/ai-slop/CHANGELOG.md +++ b/plugins/ai-slop/CHANGELOG.md @@ -218,7 +218,7 @@ off, so a target repository's own config cannot make an audit run a program. A probe of the fix-docs lane showed a nested repository's `core.fsmonitor` running under `detect.sh --list-targets` - ([run 39782588972](https://github.com/melodic-software/claude-code-plugins/actions/runs/39782588972)). + (run 39782588972). ## [0.14.4] - 2026-10-20 diff --git a/plugins/code-tidying/skills/audit-dead-code/SKILL.md b/plugins/code-tidying/skills/audit-dead-code/SKILL.md index e0ee6c9800c..3fb21b1d49d 100644 --- a/plugins/code-tidying/skills/audit-dead-code/SKILL.md +++ b/plugins/code-tidying/skills/audit-dead-code/SKILL.md @@ -213,7 +213,7 @@ verdicts live in the report and in a comment at the declaration, and the same ca Say so rather than emitting a directive. The probe behind the Go half is in [context/adjudication.md](context/adjudication.md#suppression-formats) "Suppression formats"; `//lint:ignore` belongs to staticcheck, per -[Ignoring problems with linter directives](https://staticcheck.dev/docs/configuration/#ignoring-problems-with-linter-directives) +[Ignoring problems with linter directives](https://staticcheck.dev/docs/configuration/) (as of 2026-11-03; recheck when that section names gopls among the tools that read it). `dead` and `uncertain` verdicts are session-scoped: an un-suppressed `uncertain` returns next run. diff --git a/plugins/context-guard/reference/reader-contract.md b/plugins/context-guard/reference/reader-contract.md index 7e0d18ccbf8..33c6fb0a98c 100644 --- a/plugins/context-guard/reference/reader-contract.md +++ b/plugins/context-guard/reference/reader-contract.md @@ -475,7 +475,7 @@ precedence. | Surface | Kind | What this plugin relies on | Pointer | |---|---|---|---| | `autoCompactWindow` | settings key (top level or per model) | A token count that moves the trigger for the model it applies to. Unset, the default is the docs' default-thresholds section (pointer above). Set, the module reads the window the engine settled on and, when it is smaller than the model's window, publishes it as `bands.auto_compact_window`, which the shell resolver reads too (below). Normalize it into the percentage shape before comparing (below). | [settings-reference: `autoCompactWindow`](https://code.claude.com/docs/en/settings-reference#autocompactwindow); [settings-reference: `modelSettings`](https://code.claude.com/docs/en/settings-reference#modelsettings); [model-config: Set the auto-compact window](https://code.claude.com/docs/en/model-config#set-the-auto-compact-window) | -| `autoCompactWindow` | subagent frontmatter | A subagent can carry its own window. The snapshot cannot see that window, and the surface is not probed, so we never assume a subagent shares the session's trigger. | [sub-agents: Set the auto-compact window for one subagent](https://code.claude.com/docs/en/sub-agents#set-the-auto-compact-window-for-one-subagent) | +| `autoCompactWindow` | subagent frontmatter | A subagent can carry its own window. The snapshot cannot see that window, and the surface is not probed, so we never assume a subagent shares the session's trigger. | [sub-agents: Subagent auto-compact window](https://code.claude.com/docs/en/sub-agents#subagent-auto-compact-window) | | `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | environment variable | Read as the effective window ahead of the setting, the command, and the flag, unless Claude Code ignores its value. | [env-vars: Variables](https://code.claude.com/docs/en/env-vars#variables); [model-config: values and warnings](https://code.claude.com/docs/en/model-config#claude_code_auto_compact_window-values) | | `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | environment variable | Read as able only to move the trigger earlier, never later. | [env-vars: Variables](https://code.claude.com/docs/en/env-vars#variables) | | `autoCompactEnabled` / `DISABLE_AUTO_COMPACT` | `settings.json` key / environment variable | Either one turning auto-compact off leaves the heavy band as the only tripwire. `DISABLE_AUTO_COMPACT` leaves the manual `/compact` command available. | [settings-reference: `autoCompactEnabled`](https://code.claude.com/docs/en/settings-reference#autocompactenabled); [env-vars: Variables](https://code.claude.com/docs/en/env-vars#variables) | diff --git a/plugins/discovery/agents/intent-tracer.md b/plugins/discovery/agents/intent-tracer.md index 8be25510f9b..e787788c9cf 100644 --- a/plugins/discovery/agents/intent-tracer.md +++ b/plugins/discovery/agents/intent-tracer.md @@ -227,7 +227,7 @@ when there is no repo root. Your limit is `maxTurns: 40`, from this definition's frontmatter. What the harness does at that limit is the `maxTurns` row of -[subagents: frontmatter reference](https://code.claude.com/docs/en/sub-agents#frontmatter-reference)'s +[subagents: frontmatter reference](https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields)'s to say (as of 2026-11-03; recheck when that row changes what happens at the limit). Whatever is not on disk when the run stops is invisible to the parent's gate. Count your own turns as you go. Stop gathering by turn 30, or earlier when your dispatch prompt's `Turn budget:` line names a lower diff --git a/plugins/discovery/agents/researcher.md b/plugins/discovery/agents/researcher.md index 89c8d8d1b6c..2601563d896 100644 --- a/plugins/discovery/agents/researcher.md +++ b/plugins/discovery/agents/researcher.md @@ -288,7 +288,7 @@ when there is no repo root. Your limit is `maxTurns: 40`, from this definition's frontmatter. What the harness does at that limit is the `maxTurns` row of -[subagents: frontmatter reference](https://code.claude.com/docs/en/sub-agents#frontmatter-reference)'s +[subagents: frontmatter reference](https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields)'s to say (as of 2026-11-03; recheck when that row changes what happens at the limit). Whatever is not on disk when the run stops is invisible to the parent's gate. Count your own turns as you go. Stop gathering by turn 30, or earlier when your dispatch prompt's `Turn budget:` line names a lower diff --git a/plugins/discovery/skills/explore/reference/workflow.md b/plugins/discovery/skills/explore/reference/workflow.md index 802a971f9ed..ef19f0ec1c4 100644 --- a/plugins/discovery/skills/explore/reference/workflow.md +++ b/plugins/discovery/skills/explore/reference/workflow.md @@ -27,7 +27,7 @@ Read the actual code before forming opinions about it. - **Targeted files**. Read files directly relevant to the task. Use Glob by pattern, Grep by content - **Adjacent code**. Read code that calls, is called by, or is structurally similar to the target. Understand the neighborhood, not just the target - **Existing patterns**. Before proposing a new pattern, search for how the same concern is handled elsewhere in the repo. Reuse > reinvent (unless the existing pattern is an anti-pattern or well outside modern best practices and not documented as a pragmatic decision) -- **Convention files**. Read the path-scoped rule files under `.claude/rules/` and any nested `AGENTS.md` covering the target area for conventions that constrain the solution space, without counting on the exploration's other reads to have loaded them. Read the root `CLAUDE.md` and the files it imports only when they are not already in your context. Which instruction files load at the start and which load later is [memory: how CLAUDE.md files load](https://code.claude.com/docs/en/memory#how-claudemd-files-load)'s to say (as of 2026-11-03; recheck when that section changes which files load at startup or on demand) +- **Convention files**. Read the path-scoped rule files under `.claude/rules/` and any nested `AGENTS.md` covering the target area for conventions that constrain the solution space, without counting on the exploration's other reads to have loaded them. Read the root `CLAUDE.md` and the files it imports only when they are not already in your context. Which instruction files load at the start and which load later is [memory: how CLAUDE.md files load](https://code.claude.com/docs/en/memory#how-claude-md-files-load)'s to say (as of 2026-11-03; recheck when that section changes which files load at startup or on demand) - **Reference source as spec**, when the task points at an existing implementation to match (a vendored library, another module, even another language), READ that source as the authoritative spec ### 2. Git history diff --git a/plugins/evals/skills/plugin-eval/SKILL.md b/plugins/evals/skills/plugin-eval/SKILL.md index c08e432b1c9..48662dc1d4d 100644 --- a/plugins/evals/skills/plugin-eval/SKILL.md +++ b/plugins/evals/skills/plugin-eval/SKILL.md @@ -100,7 +100,7 @@ rather than measuring anything, and the route. - `absent` or `unknown`: the backend is missing. On Linux or WSL2, install each missing package, restart Claude Code, and confirm with `/sandbox`. Otherwise: WSL2, a Linux host with `bubblewrap` and `socat`, macOS, or a Claude cloud session, whose host and missing packages come - from fetching [What's available in cloud sessions](https://code.claude.com/docs/en/cloud-environments#whats-available-in-cloud-sessions) (host) and [Installed tools](https://code.claude.com/docs/en/cloud-environments#installed-tools) (packages) live and applying the matching table row. + from fetching [What's available in cloud sessions](https://code.claude.com/docs/en/cloud-environments#what%E2%80%99s-available-in-cloud-sessions) (host) and [Installed tools](https://code.claude.com/docs/en/cloud-environments#installed-tools) (packages) live and applying the matching table row. - `not-ready`: the backend is present and the packages resolve; the cause is the named links, and the route is to resolve them or run on a host without them. Never suggest repointing `DOCKER_CONFIG` to get past the check, which bypasses a sandbox safety check. On `platform: wsl2`, when `DOCKER_CONFIG` is unset (the swap changes only `~/.docker`), every link (or `~/.docker` itself) points under `/mnt/`, and no link target holds a `tls/` directory (the script refuses one), run the CLI through the link swap without asking, and say so in the run report (`` there is `${CLAUDE_SKILL_DIR}`), so the run sees no links: [sandboxes.md, Docker link swap](reference/sandboxes.md#docker-link-swap). When any of the three fails, refuse and name the links. @@ -477,7 +477,7 @@ record a drift outcome in this plugin's CHANGELOG. | Docker credential-store refusal and the `~/.docker/bin` exemption | (2.1.293); no docs page covers it | 2026-10-10 | A docs page documents the check, or a release note touches sandbox credential exclusion or exempt paths | | `eval_tmpdir` 24-character bound and its refusal | [unix(7)](https://man7.org/linux/man-pages/man7/unix.7.html) `sun_path`; sandbox-runtime's bridge sockets and the 63- and 24-character pair in [sandboxes.md, Sandbox start](reference/sandboxes.md#sandbox-start) | 2026-10-31 | sandbox-runtime renames its bridge sockets, a release note touches `plugin eval` sandbox paths or `TMPDIR`, or a `` within the bound fails with the bridge-socket error | | Sandbox network denial report, read by the permission denials check | [Sandboxing, The unsandboxed retry escape hatch](https://code.claude.com/docs/en/sandboxing#the-unsandboxed-retry-escape-hatch) says only that the result names the denied host; no page documents the report's format, observed in a with-arm Bash result on Claude Code 2.1.317 (issue #12988), its shape kept in `scripts/fixtures/run-validity/traces/network-denied.jsonl` | 2026-11-04 | That page documents the violation report, a release note touches sandbox violation reporting, or a kept trace shows a network denial the check missed | -| Cloud route host and packages | [What's available in cloud sessions](https://code.claude.com/docs/en/cloud-environments#whats-available-in-cloud-sessions) (host), [Installed tools](https://code.claude.com/docs/en/cloud-environments#installed-tools) (packages) | 2026-11-04 | That section changes its host description or package list | +| Cloud route host and packages | [What's available in cloud sessions](https://code.claude.com/docs/en/cloud-environments#what%E2%80%99s-available-in-cloud-sessions) (host), [Installed tools](https://code.claude.com/docs/en/cloud-environments#installed-tools) (packages) | 2026-11-04 | That section changes its host description or package list | | Read-only tool set | | 2026-10-10 | That section's allowed-tools sentence changes | | Worktree Bash guard refusal of `claude plugin eval --help`, and which session shapes it covers | Observed on Claude Code 2.1.318 ([records.md](reference/records.md#worktrees)) | 2026-11-04 | A release note touches worktree isolation or `plugin eval` | | Worktree Bash guard refusal of the user's `!` command | Observed on Claude Code 2.1.285 ([records.md](reference/records.md#worktrees)) | 2026-10-01 | A release note touches worktree isolation or `plugin eval` | diff --git a/plugins/harness-config/skills/audit-instructions/reference/criteria.md b/plugins/harness-config/skills/audit-instructions/reference/criteria.md index a17337ab098..53821a2c7d5 100644 --- a/plugins/harness-config/skills/audit-instructions/reference/criteria.md +++ b/plugins/harness-config/skills/audit-instructions/reference/criteria.md @@ -941,10 +941,10 @@ per model; promotion gate unmet, see "Unscoping considered" below). - **Widened to `fable-5-1` on 2026-09-03**, first on the bundled `claude-api` skill's model-migration reference. That basis's trigger fired when the Fable 5.1 guide was published. - The widening now rests on the refusals section of Fable 5.1's own model page. Pointer: [What's - new in Claude Fable 5.1, refusals, fallback, and - billing](https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1#refusals-fallback-and-billing). - As of: 2026-10-01. Recheck trigger: that section stops covering the `reasoning_extraction` + The widening now rests on the refusal categories of the refusals and fallback page, which + lists Fable 5.1. Pointer: [Refusals and fallback, What a refusal + looks like](https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback#refusal-response). + As of: 2026-11-11. Recheck trigger: that section stops covering the `reasoning_extraction` category for Fable 5.1. - **Widened to `opus-5-5` on 2026-09-23:** the Opus 5.5 guide, "Safeguard refusals", documents the `reasoning_extraction` category for that model, and how server-side fallback handles those diff --git a/plugins/harness-config/skills/audit-pass/reference/doctor-handoff.md b/plugins/harness-config/skills/audit-pass/reference/doctor-handoff.md index 66332500c21..f0beee35071 100644 --- a/plugins/harness-config/skills/audit-pass/reference/doctor-handoff.md +++ b/plugins/harness-config/skills/audit-pass/reference/doctor-handoff.md @@ -128,7 +128,7 @@ a determinism gate, and including it in either property would make the gate repo run does not have. - **Pointer**: when deciding whether `/doctor` still runs as a model-driven skill, fetch - [skills: check your setup with `/doctor`](https://code.claude.com/docs/en/skills#check-your-setup-with-doctor) + [skills: check your setup with `/doctor`](https://code.claude.com/docs/en/skills#check-your-setup-with-/doctor) live. - **As of**: 2026-11-03 - **Recheck trigger**: that section stops listing `/doctor` among the bundled skills, or moves. diff --git a/plugins/harness-ops/skills/inventory/reference/extraction.md b/plugins/harness-ops/skills/inventory/reference/extraction.md index 1bb81c6c36f..9efbbc7acbf 100644 --- a/plugins/harness-ops/skills/inventory/reference/extraction.md +++ b/plugins/harness-ops/skills/inventory/reference/extraction.md @@ -270,7 +270,7 @@ list, so a release that adds a shape this reader cannot follow is filed rather t | Claim | Basis | As of | Recheck trigger | |---|---|---|---| -| The bytecode bundle is about two thousand concatenated modules, each opening with a `// @bun` header, and minified names repeat between them | 2,125 `// @bun` headers counted in the bundle `read_bundle` returns for the Claude Code 2.1.285 native build (release: , 2.1.285 entry; Bun's bytecode output: ); `jd` bound to `"Workflow"` in one module and to a `"host_exit"` ternary in another | 2026-09-30, Claude Code 2.1.285 | A release drops the `// @bun` module header or the header count falls to one; `--self-check` reports it as a changed layout | +| The bytecode bundle is about two thousand concatenated modules, each opening with a `// @bun` header, and minified names repeat between them | 2,125 `// @bun` headers counted in the bundle `read_bundle` returns for the Claude Code 2.1.285 native build (release: , 2.1.285 entry; Bun's bytecode output: ); `jd` bound to `"Workflow"` in one module and to a `"host_exit"` ternary in another | 2026-09-30, Claude Code 2.1.285 | A release drops the `// @bun` module header or the header count falls to one; `--self-check` reports it as a changed layout | | `design` is the only description the reader leaves unresolved | `inventory.py --binary-only` on the 2.1.285 build of that release: `integrity.undetermined.description_unresolved` lists `design` alone (14 names before this reader). This is derived per run, so no document restates it | 2026-09-30, Claude Code 2.1.285 | That list changes on any run; `/harness-ops:changelog apply` files each new name | ### 8. Find bundled workflows by what the registrar does diff --git a/plugins/knowledge/skills/absorb-upstream/SKILL.md b/plugins/knowledge/skills/absorb-upstream/SKILL.md index 4f0a1f8f438..12186fca176 100644 --- a/plugins/knowledge/skills/absorb-upstream/SKILL.md +++ b/plugins/knowledge/skills/absorb-upstream/SKILL.md @@ -5,7 +5,7 @@ user-invocable: true disable-model-invocation: false --- -**Arguments.** ` [--scope ] [--out ]`. e.g., /knowledge:absorb-upstream https://github.com/acme/skills --scope skills +**Arguments.** ` [--scope ] [--out ]`. e.g., `/knowledge:absorb-upstream https://github.com/acme/skills --scope skills` # Absorb Upstream diff --git a/plugins/knowledge/skills/absorb-upstream/templates/record.md b/plugins/knowledge/skills/absorb-upstream/templates/record.md index ae41c0a538f..0da70871998 100644 --- a/plugins/knowledge/skills/absorb-upstream/templates/record.md +++ b/plugins/knowledge/skills/absorb-upstream/templates/record.md @@ -3,7 +3,7 @@ # Upstream source: / () This page records what this repository takes from, adapts, already has, or rejects in -[/](https://github.com//) (). Rows hold our decisions +`https://github.com//` (). Rows hold our decisions and our own descriptions of each idea, under the upstream-drift convention's [What a row may describe](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/contracts/upstream-drift/README.md#what-a-row-may-describe); read upstream at each row's link for what it says. diff --git a/plugins/mcp-tools/skills/audit-posture/reference/checklist.md b/plugins/mcp-tools/skills/audit-posture/reference/checklist.md index 3add1300c25..f64d1f5b6f4 100644 --- a/plugins/mcp-tools/skills/audit-posture/reference/checklist.md +++ b/plugins/mcp-tools/skills/audit-posture/reference/checklist.md @@ -56,7 +56,7 @@ Reads the `launcher` and `pin` columns. Mechanical: no judgment beyond this tabl - A floating tag on a container launcher is WARN, not FAIL. It is still not pinned: only an `@sha256:` digest is. - **Pointer**: when checking how a package runner resolves a spec, fetch the - [npx Description](https://docs.npmjs.com/cli/commands/npx#description) live; when checking + [npx Description](https://docs.npmjs.com/cli/v11/commands/npx#description) live; when checking whether the npm registry lets a published version change, fetch the [npm unpublish policy, Considerations](https://docs.npmjs.com/policies/unpublish#considerations) live. diff --git a/plugins/playbooks/reference/prompt-caching.md b/plugins/playbooks/reference/prompt-caching.md index 61127e5396f..2647aa9e437 100644 --- a/plugins/playbooks/reference/prompt-caching.md +++ b/plugins/playbooks/reference/prompt-caching.md @@ -68,7 +68,7 @@ This section covers requests you send through the API; for what an effort change session does to the cache, read Claude Code's own page instead of applying this section. - **Pointer**: for per-message effort and its model list, see - [Change effort mid-conversation](https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation) + [Change effort mid-conversation](https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation-beta) and its "Per-message effort (beta)" subsection (correlate with Cognition's devin-fusion post, 2026-06-29, for the compaction-moment practice, which no docs page covers as of 2026-11-01); for a Claude Code session, see diff --git a/plugins/playwright/skills/demo-video/SKILL.md b/plugins/playwright/skills/demo-video/SKILL.md index 84c33620f04..0400aab8cc6 100644 --- a/plugins/playwright/skills/demo-video/SKILL.md +++ b/plugins/playwright/skills/demo-video/SKILL.md @@ -75,7 +75,7 @@ removes its layer in either style. Pass them to `build_edl.py` as screenshots arrive at about 4 fps (`record.mjs` prints the rate of each recording). Capture uses device-pixel screenshots, not Chromium's screencast. Pointer: when weighing the screencast as a capture source, fetch - [Page.startScreencast](https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-startScreencast) + [Page.startScreencast](https://chromedevtools.github.io/devtools-protocol/tot/Page/) live. As of: 2026-11-03. Recheck trigger: that method changes its frame size parameters. 4. **Narration (only when `demo_narration` is true).** When the speech plugin is installed, run `/speech:narrate` once per line into `/audio//`, `/audio/.outcome/` and, diff --git a/plugins/skill-quality/reference/invocation-probes.md b/plugins/skill-quality/reference/invocation-probes.md index eceb849d70c..b3fba418c9a 100644 --- a/plugins/skill-quality/reference/invocation-probes.md +++ b/plugins/skill-quality/reference/invocation-probes.md @@ -214,7 +214,7 @@ interval has zero width, so read the probe count before trusting it. - **Pointer**: for what one `claude plugin eval` run loads, the case-level `plugins` field, and how many times a case runs by default, fetch , - and + and live. **As of**: 2026-11-02. **Recheck trigger**: any of those sections changing what one run loads, how `plugins` paths resolve, or the default run count. diff --git a/plugins/source-control/CHANGELOG.md b/plugins/source-control/CHANGELOG.md index 51ab3713981..275d1ac09ac 100644 --- a/plugins/source-control/CHANGELOG.md +++ b/plugins/source-control/CHANGELOG.md @@ -2719,7 +2719,7 @@ Internal simplification, no behavior change. ### Changed -- `resolve-conflicts ci` runs no command and stages nothing: it reads the merge context the runner writes to `.lane/merge/` (each conflicted path's base, ours and theirs versions and both sides' history) in place of git, resolves each conflicted file in place, edits no other file, and leaves a path it cannot resolve with its conflict markers, which hands the run to a person ([`SKILL.md`](https://github.com/melodic-software/claude-code-plugins/blob/main/plugins/source-control/skills/resolve-conflicts/SKILL.md#ci-mode)). The CI-mode evals follow: `resolve-conflicts-ci-mode-stages-resolved-paths` becomes `resolve-conflicts-ci-mode-resolves-in-place`. +- `resolve-conflicts ci` runs no command and stages nothing: it reads the merge context the runner writes to `.lane/merge/` (each conflicted path's base, ours and theirs versions and both sides' history) in place of git, resolves each conflicted file in place, edits no other file, and leaves a path it cannot resolve with its conflict markers, which hands the run to a person ([`SKILL.md`](https://github.com/melodic-software/claude-code-plugins/blob/38eda1ecac7fd1b602ae837e2bd657dc1ea4be61/plugins/source-control/skills/resolve-conflicts/SKILL.md#ci-mode)). The CI-mode evals follow: `resolve-conflicts-ci-mode-stages-resolved-paths` becomes `resolve-conflicts-ci-mode-resolves-in-place`. ## [2.11.8] - 2026-10-23 diff --git a/plugins/user-interface/reference/types/web/color.md b/plugins/user-interface/reference/types/web/color.md index 94951463774..bf2a59f9091 100644 --- a/plugins/user-interface/reference/types/web/color.md +++ b/plugins/user-interface/reference/types/web/color.md @@ -212,7 +212,7 @@ scale's L assignments. The remap, and the severity of that finding, are in them. - **Pointer**: raised surfaces lighter than the base in dark mode, in - [Apple HIG Dark Mode, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/dark-mode#iOS-iPadOS); + [Apple HIG Dark Mode, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/dark-mode); [Material dialog container color](https://github.com/material-components/material-components-android/blob/66b0eeb53afeb6025ffbbd37734b08e5bce197ed/docs/components/Dialog.md#container-attributes) and [Material color roles](https://github.com/material-components/material-components-android/blob/66b0eeb53afeb6025ffbbd37734b08e5bce197ed/docs/theming/Color.md#using-the-color-theming-system); @@ -235,7 +235,7 @@ lines, so treat the split as a default, not a hard rule. - **Pointer**: translucent and opaque 1px lines in dark mode, in [shadcn/ui dark `--border`](https://github.com/shadcn-ui/ui/blob/4233ed1caded8c38f4bc14b14afe1f93ebcaf966/apps/v4/app/globals.css#L160); - [Apple HIG Color, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/color#iOS-iPadOS); + [Apple HIG Color, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/color); [Material outlined card stroke](https://github.com/material-components/material-components-android/blob/66b0eeb53afeb6025ffbbd37734b08e5bce197ed/docs/components/Card.md#container-attribute) - **As of**: 2026-10-29 - **Recheck trigger**: any of them changes its dark-mode line to the other form, or one of them From 72e879901e0b0d628e8628a035d764b309831ab3 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Wed, 11 Nov 2026 19:14:22 -0500 Subject: [PATCH 2/5] chore: add changelog fragments for the dead-link fixes Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe --- .changes/ai-slop/docs-fix-online-dead-links-44e3a27d.md | 5 +++++ .changes/code-tidying/docs-fix-online-dead-links-65c15d73.md | 5 +++++ .../context-guard/docs-fix-online-dead-links-500567c7.md | 5 +++++ .changes/discovery/docs-fix-online-dead-links-542594d9.md | 5 +++++ .changes/evals/docs-fix-online-dead-links-e132850e.md | 5 +++++ .../harness-config/docs-fix-online-dead-links-e958e6e1.md | 5 +++++ .changes/harness-ops/docs-fix-online-dead-links-88d8e80e.md | 5 +++++ .changes/knowledge/docs-fix-online-dead-links-9563a194.md | 5 +++++ .changes/mcp-tools/docs-fix-online-dead-links-97b012f5.md | 5 +++++ .changes/playbooks/docs-fix-online-dead-links-69d33461.md | 5 +++++ .changes/playwright/docs-fix-online-dead-links-98b8c5a7.md | 5 +++++ .../skill-quality/docs-fix-online-dead-links-89c60d1b.md | 5 +++++ .../source-control/docs-fix-online-dead-links-86d203d7.md | 5 +++++ .../user-interface/docs-fix-online-dead-links-c9f5284a.md | 5 +++++ 14 files changed, 70 insertions(+) create mode 100644 .changes/ai-slop/docs-fix-online-dead-links-44e3a27d.md create mode 100644 .changes/code-tidying/docs-fix-online-dead-links-65c15d73.md create mode 100644 .changes/context-guard/docs-fix-online-dead-links-500567c7.md create mode 100644 .changes/discovery/docs-fix-online-dead-links-542594d9.md create mode 100644 .changes/evals/docs-fix-online-dead-links-e132850e.md create mode 100644 .changes/harness-config/docs-fix-online-dead-links-e958e6e1.md create mode 100644 .changes/harness-ops/docs-fix-online-dead-links-88d8e80e.md create mode 100644 .changes/knowledge/docs-fix-online-dead-links-9563a194.md create mode 100644 .changes/mcp-tools/docs-fix-online-dead-links-97b012f5.md create mode 100644 .changes/playbooks/docs-fix-online-dead-links-69d33461.md create mode 100644 .changes/playwright/docs-fix-online-dead-links-98b8c5a7.md create mode 100644 .changes/skill-quality/docs-fix-online-dead-links-89c60d1b.md create mode 100644 .changes/source-control/docs-fix-online-dead-links-86d203d7.md create mode 100644 .changes/user-interface/docs-fix-online-dead-links-c9f5284a.md diff --git a/.changes/ai-slop/docs-fix-online-dead-links-44e3a27d.md b/.changes/ai-slop/docs-fix-online-dead-links-44e3a27d.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/ai-slop/docs-fix-online-dead-links-44e3a27d.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/code-tidying/docs-fix-online-dead-links-65c15d73.md b/.changes/code-tidying/docs-fix-online-dead-links-65c15d73.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/code-tidying/docs-fix-online-dead-links-65c15d73.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/context-guard/docs-fix-online-dead-links-500567c7.md b/.changes/context-guard/docs-fix-online-dead-links-500567c7.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/context-guard/docs-fix-online-dead-links-500567c7.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/discovery/docs-fix-online-dead-links-542594d9.md b/.changes/discovery/docs-fix-online-dead-links-542594d9.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/discovery/docs-fix-online-dead-links-542594d9.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/evals/docs-fix-online-dead-links-e132850e.md b/.changes/evals/docs-fix-online-dead-links-e132850e.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/evals/docs-fix-online-dead-links-e132850e.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/harness-config/docs-fix-online-dead-links-e958e6e1.md b/.changes/harness-config/docs-fix-online-dead-links-e958e6e1.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/harness-config/docs-fix-online-dead-links-e958e6e1.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/harness-ops/docs-fix-online-dead-links-88d8e80e.md b/.changes/harness-ops/docs-fix-online-dead-links-88d8e80e.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/harness-ops/docs-fix-online-dead-links-88d8e80e.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/knowledge/docs-fix-online-dead-links-9563a194.md b/.changes/knowledge/docs-fix-online-dead-links-9563a194.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/knowledge/docs-fix-online-dead-links-9563a194.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/mcp-tools/docs-fix-online-dead-links-97b012f5.md b/.changes/mcp-tools/docs-fix-online-dead-links-97b012f5.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/mcp-tools/docs-fix-online-dead-links-97b012f5.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/playbooks/docs-fix-online-dead-links-69d33461.md b/.changes/playbooks/docs-fix-online-dead-links-69d33461.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/playbooks/docs-fix-online-dead-links-69d33461.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/playwright/docs-fix-online-dead-links-98b8c5a7.md b/.changes/playwright/docs-fix-online-dead-links-98b8c5a7.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/playwright/docs-fix-online-dead-links-98b8c5a7.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/skill-quality/docs-fix-online-dead-links-89c60d1b.md b/.changes/skill-quality/docs-fix-online-dead-links-89c60d1b.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/skill-quality/docs-fix-online-dead-links-89c60d1b.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/source-control/docs-fix-online-dead-links-86d203d7.md b/.changes/source-control/docs-fix-online-dead-links-86d203d7.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/source-control/docs-fix-online-dead-links-86d203d7.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/user-interface/docs-fix-online-dead-links-c9f5284a.md b/.changes/user-interface/docs-fix-online-dead-links-c9f5284a.md new file mode 100644 index 00000000000..22289b57a4f --- /dev/null +++ b/.changes/user-interface/docs-fix-online-dead-links-c9f5284a.md @@ -0,0 +1,5 @@ +--- +bump: none +--- + +No release needed (docs): fix the dead links the online link check reports From 38e48ad2afcb55328d0acbba1e124dd4c423f922 Mon Sep 17 00:00:00 2001 From: "melodic-automation-lanes[bot]" <337595936+melodic-automation-lanes[bot]@users.noreply.github.com> Date: Thu, 12 Nov 2026 00:42:58 +0000 Subject: [PATCH 3/5] Apply fix-docs on docs/fix-online-dead-links Lane-Activity: pr-refine/fix-docs --- plugins/skill-quality/reference/invocation-probes.md | 4 ++-- plugins/user-interface/reference/types/web/color.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/skill-quality/reference/invocation-probes.md b/plugins/skill-quality/reference/invocation-probes.md index b3fba418c9a..432a9bd5933 100644 --- a/plugins/skill-quality/reference/invocation-probes.md +++ b/plugins/skill-quality/reference/invocation-probes.md @@ -176,8 +176,8 @@ skill's folder (each row 27 runs per arm, 9 should-trigger probes at 3 runs, all | `code-metrics:audit-duplication` | 27/27 / 27/27 / 0/27 | | `code-metrics:audit-suppressions` | 27/27 / 27/27 / 0/27 | -A renaming control shows that a probe set can fail, and nothing about the description: it removes -the skill from view, so it falls all or nothing and never certifies a cut. These three are +A renaming control shows that a probe set can fail, and nothing about the description, because it +removes the skill from view, so it falls all or nothing and never certifies a cut. These three are unmeasurable and keep the before text. `naming:name-it-better` above shows the description control can still drop, on Sonnet 5.5. diff --git a/plugins/user-interface/reference/types/web/color.md b/plugins/user-interface/reference/types/web/color.md index bf2a59f9091..92bfa479060 100644 --- a/plugins/user-interface/reference/types/web/color.md +++ b/plugins/user-interface/reference/types/web/color.md @@ -117,7 +117,7 @@ chroma behind a `@media (color-gamut: p3)` gate on top of an sRGB base value. Pa Chroma beyond the sRGB ceiling with no fallback → clips unpredictably; clamp, then layer P3 via media query. The severity is in `color/gamut-and-p3.md`. -**HSL lies about lightness.** Blue at 50% L and yellow at 50% L are nowhere near equal +**HSL lightness does not match perceived lightness.** Blue at 50% L and yellow at 50% L are nowhere near equal perceptually. Use OKLCH when lightness must actually match. ## 4. Numbers worth memorizing @@ -158,7 +158,7 @@ passes contrast checks on some backgrounds and fails on others; the token is pre ## 6. Neutrals and status colors -Neutrals should agree with the brand hue: blue UIs want cool grays. Warm grays fight blue. +Neutrals should agree with the brand hue: blue UIs want cool grays. Warm grays clash with a blue brand hue. Never use pure `#808080` gray: it reads as placeholder. Tint neutrals with a slight hue bias and they read as designed. From e40ce5c59f816f269d3fcadad27a1a18be4554de Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Wed, 11 Nov 2026 19:59:31 -0500 Subject: [PATCH 4/5] docs: keep section anchors that only JavaScript renders A skill pointer must name its section (.claude/rules/skill-bodies-state-current-rules.md), so the staticcheck, Chrome DevTools Protocol and Apple HIG anchors return. lychee reads the served HTML, where those pages carry no heading ids, so each exact URL gets a .lycheeignore entry with its reason. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe --- .lycheeignore | 6 ++++++ plugins/code-tidying/skills/audit-dead-code/SKILL.md | 2 +- plugins/playwright/skills/demo-video/SKILL.md | 2 +- plugins/user-interface/reference/types/web/color.md | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.lycheeignore b/.lycheeignore index c3719db314d..e031b7444a9 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -98,3 +98,9 @@ github\.com/meridian-labs/agent-cli/releases/tag/ # claude.ai connectors settings page behind sign-in: 403 on the runner (online run 42809150911) and to a signed-out browser User-Agent (verified 2026-11-11). ^https://claude\.ai/customize/connectors$ + +# Section anchors rendered only by the page's JavaScript: lychee reads the served HTML, which carries no heading ids (1 id on staticcheck.dev and the Chrome DevTools Protocol page, 6 on Apple HIG pages, verified 2026-11-11). The anchors are kept because skill pointers must name their section. +^https://staticcheck\.dev/docs/configuration/#ignoring-problems-with-linter-directives$ +^https://chromedevtools\.github\.io/devtools-protocol/tot/Page/#method-startScreencast$ +^https://developer\.apple\.com/design/human-interface-guidelines/color#iOS-iPadOS$ +^https://developer\.apple\.com/design/human-interface-guidelines/dark-mode#iOS-iPadOS$ diff --git a/plugins/code-tidying/skills/audit-dead-code/SKILL.md b/plugins/code-tidying/skills/audit-dead-code/SKILL.md index 3fb21b1d49d..e0ee6c9800c 100644 --- a/plugins/code-tidying/skills/audit-dead-code/SKILL.md +++ b/plugins/code-tidying/skills/audit-dead-code/SKILL.md @@ -213,7 +213,7 @@ verdicts live in the report and in a comment at the declaration, and the same ca Say so rather than emitting a directive. The probe behind the Go half is in [context/adjudication.md](context/adjudication.md#suppression-formats) "Suppression formats"; `//lint:ignore` belongs to staticcheck, per -[Ignoring problems with linter directives](https://staticcheck.dev/docs/configuration/) +[Ignoring problems with linter directives](https://staticcheck.dev/docs/configuration/#ignoring-problems-with-linter-directives) (as of 2026-11-03; recheck when that section names gopls among the tools that read it). `dead` and `uncertain` verdicts are session-scoped: an un-suppressed `uncertain` returns next run. diff --git a/plugins/playwright/skills/demo-video/SKILL.md b/plugins/playwright/skills/demo-video/SKILL.md index 0400aab8cc6..84c33620f04 100644 --- a/plugins/playwright/skills/demo-video/SKILL.md +++ b/plugins/playwright/skills/demo-video/SKILL.md @@ -75,7 +75,7 @@ removes its layer in either style. Pass them to `build_edl.py` as screenshots arrive at about 4 fps (`record.mjs` prints the rate of each recording). Capture uses device-pixel screenshots, not Chromium's screencast. Pointer: when weighing the screencast as a capture source, fetch - [Page.startScreencast](https://chromedevtools.github.io/devtools-protocol/tot/Page/) + [Page.startScreencast](https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-startScreencast) live. As of: 2026-11-03. Recheck trigger: that method changes its frame size parameters. 4. **Narration (only when `demo_narration` is true).** When the speech plugin is installed, run `/speech:narrate` once per line into `/audio//`, `/audio/.outcome/` and, diff --git a/plugins/user-interface/reference/types/web/color.md b/plugins/user-interface/reference/types/web/color.md index bf2a59f9091..94951463774 100644 --- a/plugins/user-interface/reference/types/web/color.md +++ b/plugins/user-interface/reference/types/web/color.md @@ -212,7 +212,7 @@ scale's L assignments. The remap, and the severity of that finding, are in them. - **Pointer**: raised surfaces lighter than the base in dark mode, in - [Apple HIG Dark Mode, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/dark-mode); + [Apple HIG Dark Mode, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/dark-mode#iOS-iPadOS); [Material dialog container color](https://github.com/material-components/material-components-android/blob/66b0eeb53afeb6025ffbbd37734b08e5bce197ed/docs/components/Dialog.md#container-attributes) and [Material color roles](https://github.com/material-components/material-components-android/blob/66b0eeb53afeb6025ffbbd37734b08e5bce197ed/docs/theming/Color.md#using-the-color-theming-system); @@ -235,7 +235,7 @@ lines, so treat the split as a default, not a hard rule. - **Pointer**: translucent and opaque 1px lines in dark mode, in [shadcn/ui dark `--border`](https://github.com/shadcn-ui/ui/blob/4233ed1caded8c38f4bc14b14afe1f93ebcaf966/apps/v4/app/globals.css#L160); - [Apple HIG Color, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/color); + [Apple HIG Color, iOS and iPadOS](https://developer.apple.com/design/human-interface-guidelines/color#iOS-iPadOS); [Material outlined card stroke](https://github.com/material-components/material-components-android/blob/66b0eeb53afeb6025ffbbd37734b08e5bce197ed/docs/components/Card.md#container-attribute) - **As of**: 2026-10-29 - **Recheck trigger**: any of them changes its dark-mode line to the other form, or one of them From a8da92ba6ebe15397bff81c1ab967d71159a51c8 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Wed, 11 Nov 2026 20:48:14 -0500 Subject: [PATCH 5/5] docs: keep the template's upstream link and drop two stale fragments The absorb-upstream record template goes back to a markdown link, so filled records keep the link form the existing records use; its unfilled placeholder URL gets an exact .lycheeignore entry. The code-tidying and playwright fragments go: since the anchors were restored, this branch no longer changes those plugins. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe --- .changes/code-tidying/docs-fix-online-dead-links-65c15d73.md | 5 ----- .changes/playwright/docs-fix-online-dead-links-98b8c5a7.md | 5 ----- .lycheeignore | 3 +++ plugins/knowledge/skills/absorb-upstream/templates/record.md | 2 +- 4 files changed, 4 insertions(+), 11 deletions(-) delete mode 100644 .changes/code-tidying/docs-fix-online-dead-links-65c15d73.md delete mode 100644 .changes/playwright/docs-fix-online-dead-links-98b8c5a7.md diff --git a/.changes/code-tidying/docs-fix-online-dead-links-65c15d73.md b/.changes/code-tidying/docs-fix-online-dead-links-65c15d73.md deleted file mode 100644 index 22289b57a4f..00000000000 --- a/.changes/code-tidying/docs-fix-online-dead-links-65c15d73.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -bump: none ---- - -No release needed (docs): fix the dead links the online link check reports diff --git a/.changes/playwright/docs-fix-online-dead-links-98b8c5a7.md b/.changes/playwright/docs-fix-online-dead-links-98b8c5a7.md deleted file mode 100644 index 22289b57a4f..00000000000 --- a/.changes/playwright/docs-fix-online-dead-links-98b8c5a7.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -bump: none ---- - -No release needed (docs): fix the dead links the online link check reports diff --git a/.lycheeignore b/.lycheeignore index e031b7444a9..bad6046c7e3 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -104,3 +104,6 @@ github\.com/meridian-labs/agent-cli/releases/tag/ ^https://chromedevtools\.github\.io/devtools-protocol/tot/Page/#method-startScreencast$ ^https://developer\.apple\.com/design/human-interface-guidelines/color#iOS-iPadOS$ ^https://developer\.apple\.com/design/human-interface-guidelines/dark-mode#iOS-iPadOS$ + +# Unfilled placeholder link in the absorb-upstream record template: filled per record, never a real URL. +^https://github\.com/(%3C|<)owner(%3E|>)/(%3C|<)repo(%3E|>)$ diff --git a/plugins/knowledge/skills/absorb-upstream/templates/record.md b/plugins/knowledge/skills/absorb-upstream/templates/record.md index 0da70871998..ae41c0a538f 100644 --- a/plugins/knowledge/skills/absorb-upstream/templates/record.md +++ b/plugins/knowledge/skills/absorb-upstream/templates/record.md @@ -3,7 +3,7 @@ # Upstream source: / () This page records what this repository takes from, adapts, already has, or rejects in -`https://github.com//` (). Rows hold our decisions +[/](https://github.com//) (). Rows hold our decisions and our own descriptions of each idea, under the upstream-drift convention's [What a row may describe](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/contracts/upstream-drift/README.md#what-a-row-may-describe); read upstream at each row's link for what it says.