Skip to content

docs(contracts): leave stubs at the moved contracts' old paths - #10957

Closed
kyle-sexton wants to merge 3 commits into
docs/7537-b-movefrom
docs/7537-b2-stubs
Closed

kyle-sexton wants to merge 3 commits into
docs/7537-b-movefrom
docs/7537-b2-stubs

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

Refs: #7537

Summary

Part B2 of the #7537 split, stacked on B1 (#10952). It leaves a stub at each moved contract's old path, so links and readers that still name docs/conventions/<name>/ keep resolving after the move, and it removes B1's temporary .lycheeignore entry. It targets B1's branch until B1 merges, then main.

Fix

  • 59 stubs: one README per moved folder (48), plus the 11 old sub-paths that something cites. Each stub points to the file's new home under docs/contracts/<name>/.
  • The no-suite entry for the stub example YAMLs.
  • .lycheeignore: the TEMPORARY (#7537) entry is removed, so offline link checking covers the old paths again.

Verification

  • On main + A2 + B1 + this branch, lychee offline with the repo's flags reports 0 errors with the entry removed: the stubs carry the links and anchors.
  • scripts/check-affected.sh on the same tree exits 0.

Related

🤖 Generated with Claude Code

kyle-sexton and others added 3 commits October 29, 2026 08:45
Each contract folder moved to docs/contracts/ keeps a README at its old
docs/conventions/<name>/ path that points at the new one and keeps every
section heading, so links from installed plugin versions keep resolving.
The 11 old sub-paths that files under plugins/, lib/, scripts/ or
.github/ cite also get a pointer stub: three sub-docs, six JSON Schemas
that keep their old $id and $ref the new one, and two comment-only
ecosystem-commands example stubs, recorded as no-suite paths.

Refs: #7537

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The old-path stubs now stand at docs/conventions/<name>/, so the
temporary .lycheeignore entry that skipped links into the 48 moved
contract folders is removed and those links are checked again.

Refs: #7537

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review October 29, 2026 14:14
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-29T14:16:19.059618Z eea68f8 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

Copy link
Copy Markdown
Contributor

claude-security-review reviewed eea68f8a6d4656a608536e43ca4872419c375be5: 0 finding(s), 0 as inline comments.

No security findings in this change.

critical-findings: 0

I read all 61 files of the diff and the pull request context. The change adds 59 pointer stubs at the old docs/conventions/<name>/ paths and removes one .lycheeignore entry. It also adds one no-suite glob to scripts/affected-tests-no-suite.txt. It has no script, workflow, action or manifest changes, so no manifest <field> line applies.

  • Instruction-surface lens: the instruction-exception-register and untrusted-content READMEs are now heading-only stubs that link to docs/contracts/.... Both targets exist in the checkout. The rules are not deleted, only moved, and the diff does not change what they forbid.
  • Lane-source protection: LANE_SOURCE_PREFIXES in plugins/source-control/skills/babysit-prs/scripts/babysit_review_evidence.py:77-85 lists both the docs/contracts/ and the docs/conventions/ paths. A pull request that edits those stubs still counts as having changed its own review, so no review record from the default branch's lane proves a review of it.
  • Stub schemas: the five JSON stubs (envelope.schema.json, three data/*.schema.json files, ecosystem.schema.json) hold only a $ref to the main raw URL of the moved schema. The standards.schema.json stub was not read in detail. lib/hook-test-sink.sh:71 and the hook-test-sink.sh copies under plugins/ fall back to the old envelope.schema.json path only when the new one is missing. They use it only to validate telemetry data, so it gates nothing and carries no secret or code. A $ref to a repository-controlled main URL adds no new trust boundary.
  • Example YAML stubs: the two example stubs (dotnet.yaml, go.yaml) are comments only, and the no-suite glob covers only those stubs.
  • .lycheeignore: removing the temporary entry makes link checking stricter, not weaker.

Nothing in the pull request context is an embedded instruction.

No spend: the change adds no billed resource and no turn, schedule or run-count change.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eea68f8a6d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/standards/standards.schema.json",
"description": "Moved to docs/contracts/standards/standards.schema.json; this schema refers there.",
"$ref": "https://github.com/melodic-software/claude-code-plugins/blob/main/docs/contracts/standards/standards.schema.json"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Point the schema reference at raw JSON

For validators or editor integrations loading the schema through its old path, this $ref resolves to GitHub’s HTML file-view page rather than the JSON schema. Reference resolution therefore fails instead of preserving validation compatibility. Use the raw.githubusercontent.com URL, as the other schema stubs in this change do; unlike $id, a remotely resolved $ref must retrieve a schema document.

Useful? React with 👍 / 👎.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 1 inline finding(s) on eea68f8a6d4656a608536e43ca4872419c375be5; the summary is in this lane's pull request comment.

claude-lane: claude-review

Comment on lines +1 to +3
# Moved → config-cascade

This contract moved to [`docs/contracts/consumer-config-layering/`](../../contracts/consumer-config-layering/README.md). This page keeps its

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This stub sends readers to the wrong place and describes itself inaccurately.

  • Two hops. docs/contracts/consumer-config-layering/README.md is itself a rename tombstone: "Moved → config-cascade", renamed in conventions: rename consumer-config-layering seam -> config-cascade #1188. A reader following this stub lands on that tombstone and needs a second hop to reach config-cascade. The heading # Moved → config-cascade promises a direct pointer, but the only link goes to the tombstone.
  • False sentence. Line 4 says "This page keeps its headings so links from installed plugin versions still reach each section". This page has no section headings, so the sentence is untrue here.
  • Fix. Link straight to ../../contracts/config-cascade/README.md, as the contract's own tombstone does. Drop or replace the "keeps its headings" sentence, and say that the contract was renamed.

claude-lane: claude-review

@github-actions

Copy link
Copy Markdown
Contributor

claude-review reviewed eea68f8a6d4656a608536e43ca4872419c375be5: 1 finding(s), 1 as inline comments.

Reviewed the whole diff (.claude-lane/pr.diff, 61 files) against the PR context. The PR has no closing issue; it only refs #7537, so there are no acceptance criteria to check. I could only read files in this session: I had no shell, so I ran no lychee, check-affected.sh or tests. The PR's "Verification" section is the author's claim and I did not confirm it.

Checked and fine

  • The 48 README stubs and 11 sub-path stubs point at docs/contracts/<name>/. The 48 destination READMEs exist on this checkout.
  • Anchor slugs I spot-checked (for example #the-skip-key-checksskipmissing and #location-of-the-team-layer-a-docs-convention-file-or-claudename) follow GitHub's slug rules.
  • The six JSON stubs keep their old $id and $ref the new location. The new locations hold the real schemas, and their $id URLs match the $ref targets (the blob/main form for standards.schema.json, raw.githubusercontent.com for the others).
  • lib/hook-test-sink.sh and its test already try the new path first and fall back to the old stub. A stub with no required list could not pass check_envelope through that fallback, so the old-path read is safe.
  • The docs/conventions/ecosystem-commands/examples/* no-suite glob is valid. That file's format is a bash glob where * crosses /, and it records that the real examples sit under docs/contracts/.
  • Dropping the TEMPORARY (#7537) .lycheeignore entry matches the PR's intent.

Not counted: plugins/harness-ops/skills/changelog/scripts/discover-surfaces.sh:72 counts docs/conventions/*/README.md as "conventions". After this PR that count includes the 48 stubs, and it never counts docs/contracts/. That count is advisory and the stubs are meant to exist, so I did not report it as a finding. The per-plugin follow-up PRs may be the right place to point it at docs/contracts/.

Spend: none. This is a docs-only change, so there is no cost hold.

@kyle-sexton

Copy link
Copy Markdown
Member Author

Superseded by the five stacked layers that split this change: #11031 (moves), #11056 (registry-named moves), #11060 (lane-source moves), #11062 (reference rewrites) and #11069 (stubs at the old paths). They merge in that order.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge Hard merge gate: do not merge while applied.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant