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/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/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 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..bad6046c7e3 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -92,3 +92,18 @@ 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$ + +# 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$ + +# 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/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/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/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 3c18a5f122f..df15e3e7390 100644 --- a/plugins/playbooks/reference/prompt-caching.md +++ b/plugins/playbooks/reference/prompt-caching.md @@ -58,7 +58,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); for a Claude Code session, see diff --git a/plugins/skill-quality/reference/invocation-probes.md b/plugins/skill-quality/reference/invocation-probes.md index eceb849d70c..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. @@ -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 92e0ae2cd6c..2f7be42ee2a 100644 --- a/plugins/source-control/CHANGELOG.md +++ b/plugins/source-control/CHANGELOG.md @@ -2727,7 +2727,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..3fbf1aae549 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.