Skip to content

docs(wish): skills-everywhere-c — skill-content lint + contract/docs rewrite - #2888

Merged
namastex888 merged 21 commits into
devfrom
wish/skills-everywhere-c
Sep 1, 2026
Merged

namastex888 merged 21 commits into
devfrom
wish/skills-everywhere-c

Conversation

@namastex888

Copy link
Copy Markdown
Contributor

Executes the approved wish .genie/wishes/skills-everywhere-c/WISH.md (plan SHIP round 2): skills-lint BANNED-13 token + structure rules, the five skill-content corrections, the CLAUDE.md/AGENTS.md/README.md rewrite to the post-Wish-B world, the public docs rewrite + release-notes page (separate PR in automagik-dev/docs), and docs-lint coverage.

Waves land onto this branch via per-group PRs with review evidence (reviewer != engineer, <=2 fix loops). G3's docs-repo PR merge is human-gated; the .docs-vendor pointer bump follows it.

Draft until all groups + validation are green.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GKqeXSyZMD8YmQtk4vtXFZ

…ost-plugin world

Wish skills-everywhere-c, Group 2. Reduce the three contract files to the
three surfaces Wish B leaves behind — the signed binary, the skills.sh
channel, and the Orca plugin — and make the drift guard enforce it.

CLAUDE.md: drop the seven plugin-era gotchas (H3/H4/H6, hook dispatch,
the AskUserQuestion carve-out, Codex delivery/activation owners, the
.curated lane, SessionStart parity, the stamp root); rewrite the
post-delivery convergence gotcha to keep the argv protocol and drop the
second activation hop; point the Codex-OTel gotcha at migrateDeadGenieOtel;
add four new gotchas (the skills channel, --all consent widening, consent
none, the legacy-integration retirement). Remove the src/hooks rows from
the architecture tree, drop the setup --codex clause, and rewrite the
GENIE_AGENT_NAME / GENIE_AGENT_ID descriptions off the deleted hook
subsystem.

The skills-channel gotcha is transcribed from merged code, not from the
plan: argv from buildSkillsAddArgv, record fields from
skillsInstallRecordSchema (including dirDigests, which the plan omitted),
and the doctor comparison from checkSkillsChannel — doctor iterates
KNOWN_AGENT_SKILL_HOMES and compares the record's inventory and ref;
agentDirs is uninstall's removal authority, not doctor's.

AGENTS.md: rewrite the release contract (no both marketplaces), the Codex
runtime note (no .codex-plugin, no hook review), and the skills bullet;
record the git-state freeze as operator policy enforced only by
server-side branch protection.

README.md: replace the delivery/activation and hook-trust paragraphs with
the three-surface story, delete the five plugin-era Codex sections, and
rewrite the quickstart selectors, command table rows and the Omni
remote-approval bullet.

Drift test: RETIRED_FOSSILS gains the nine RETIRED-9 tokens plus
native-surfaces.md, .codex-plugin and 'both marketplaces'; the list is now
asserted against both files, 'hook' leaves REQUIRED_V5_COMMANDS, and both
files must name the public skills command and the install record.
…post-plugin contract

Two Group E assertions were drift guards for exactly the README passages
this group was mandated to delete, so they went red on the rewrite:

- "operator docs distinguish product, role-agent, personal, MCP, and hook
  inventories" required the five plugin-era inventory rows, the H3/H4/H6
  hook table and the fallback-quarantine section. Retargeted to the three
  delivery surfaces the rewritten README does describe (the public skills
  command, the install record, the shared agent skills home, MCP
  retirement, the consent-none line), with the plugin-era strings kept as
  negative assertions so they cannot come back.
- "lifecycle and operator docs name design, plan, and implementation
  review as distinct mandatory gates" additionally required three
  Codex-setup sentences. The three review-gate terms — the test's actual
  subject — still assert against both files; the setup sentences are
  dropped with the command they described.
…he architecture tree

The spot-check that every retained section names something that still
exists found src/lib/transcript.ts, src/lib/codex-logs.ts and
src/lib/claude-logs.ts in the architecture tree; all three left with the
v4 runtime deletion. Replaced with modules that do exist, and rewrote the
src/lib/ summary line to match them.
…ll dirs

Two new rule families in the existing gate, no parallel script and no new
`check` entry.

Token rule: BANNED-13 matched as PLAIN SUBSTRINGS (String.includes; no
regex, no word boundaries, no allowlist) on EVERY file the walk finds under
the scanned skills dir, .md and non-.md alike, so agents/openai.yaml starter
prompts are in scope. Each violation reports <path>:<line>, the offending
token, and the portable replacement. The scan runs BEFORE the
`skills-lint:ignore` bailout; the bailout now skips only the
command/resource checks it was introduced for.

Structure rules by IMPORT, not re-implementation: scanRepoSkills already
computes both findings and is already CI-gated, so skills-lint surfaces
them as `empty skill dir` / `nested skill dir` errors instead of silently
continuing. scanRepoSkills gains an explicit skillsRoot override so the
SKILLS_LINT_DIR fixture root reuses that one walk.

Fixtures: one negative per BANNED-13 token, one non-.md fixture, one
ignore-marker fixture, nested and empty-dir fixtures, and a positive prose
fixture - each asserting the exit code and the message text.

Also refreshes the parity script's stale header docstring (the published
inventory is the LOCAL checkout; skills@1.5.23 binds the third capture to
skillFilter, so an @<ref> suffix is ignored and the default branch is
served) and adds the newly imported helper to build-tarballs.yml's PR path
filter, which release-docs.test.ts derives transitively.
Applies the BANNED-13 -> portable-role mapping to the five skill files that
carried the retired tokens, taking `skills/` from 13 hits to 0:

- work/SKILL.md: the role table becomes implementor-low / implementor-mid /
  implementor-high / reviewer / fixer / final-gate / scout as bare names,
  the dispatch paragraph no longer promises a runtime custom-agent profile,
  and the git-state freeze is stated as operator policy - verbatim, in both
  the shared-workspace paragraph and the freeze block quoted into briefs.
  The block is additive and stays verbatim-quotable.
- wish/templates/wish-template.md: the routing rubric names the portable
  roles; the structural contract parseWishTemplateContract reads is
  unchanged (wishes:lint green over all 85 wishes).
- README.md: invocation is skills.sh discovery, not plugin selectors; the
  reason a starter card stays selector-free survives as a reason. The
  distribution contract drops the deleted plugin mirror and its generator,
  the inventory table gains the three genie-orca lanes, and the count is 25.
- trace/SKILL.md and genie-hacks/references/catalog.md: bare `scout` and
  `implementor-low`; the catalog's identity comment no longer credits a
  deleted hook-dispatch subsystem.

skills-installer.ts: bumping SKILLS_CLI_VERSION now explicitly requires
re-auditing KNOWN_AGENT_SKILL_HOMES and the post-install discovery scan, and
the timeout rationale drops its stale "22 skills" literal.

release-docs.test.ts moves with the README rewrite it guards.
automagik-dev/docs has no .github/workflows, so the 'Mintlify docs-lint run on
that PR is green' criterion was unsatisfiable as written; it now names the four
checks that repository actually runs and points at Group 4 for the genie-side
docs-lint gate. The validation block no longer opens with 'git submodule update
--init .docs-vendor', which resets the submodule to the still-unbumped
superproject pointer and turns the hooks.mdx and RETIRED-9 assertions into false
negatives while making merge-base --is-ancestor a false pass.
@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

lint:docs-markdown and lint:docs-links now cover docs/installation.mdx and
the new docs/release-notes.mdx alongside SECURITY.md and the canisterworm
runbook, so the two pages this wish rewrites are gated like the rest.

Mintlify pages link to site-absolute routes (/genie/<page>), which the
existing ^/ replacement resolved to a path that does not exist on disk.
A new replacement pattern maps /genie/<page>[#anchor] to the real file
under docs/, so the cross-page anchor from release-notes into the
installation page is verified rather than skipped.
A third job greps docs/ for RETIRED-9 plus the docs-only 'plugin
marketplace add' bootstrap step and fails with the matches printed. The
pattern is byte-identical to the wish's Group 3 validation grep (137
bytes, sha256 12fe1d4a37f66d04...): one list, two call sites.

It lives in CI and deliberately not in 'bun run check': docs/ is a
symlink into the .docs-vendor submodule, so a contributor with an
unpopulated submodule would see a false failure, while every job here
checks out with submodules: recursive. Decision 11's blind spot -- a
violation landed on docs main after the last pointer bump stays invisible
until the next bump -- is recorded in the workflow header.

package.json joins the path triggers because it now carries the
lint:docs-markdown / lint:docs-links target lists.
…able

grep exits 2, not 1, when docs/ does not resolve — an unpopulated
.docs-vendor, or the docs repo moving the genie/ subdir the symlink
points at. Read as a plain `if` condition that status was
indistinguishable from a clean scan, so the job printed its success line
and exited 0 having read nothing.

Assert docs/ is populated before grepping, and treat any grep status
other than 0 (matched) or 1 (clean) as a failure. The 137-byte
RETIRED-9 + 'plugin marketplace add' pattern is untouched and still
byte-identical to the wish's Group 3 validation grep (sha256
12fe1d4a37f66d046bf661d127630841021f1b8761caff9d16709df820a9bc61).
markdownlint-cli2 treats every argument as a glob, so a target that does
not exist is silently skipped and the run reports green over fewer files
than it was asked for: 'markdownlint-cli2 SECURITY.md
docs/release-notes-DOES-NOT-EXIST.mdx' prints 'Linting: 1 file' and exits
0. With docs/ backed by the .docs-vendor submodule that turns an
unpopulated (or not-yet-bumped) pointer into an uncovered pass.

Gate the run on the three docs/ targets resolving first, so a missing
page fails the script instead of shrinking its scope. lint:docs-links
already failed correctly (markdown-link-check throws ENOENT).
The new replacement maps /genie/<route> to docs/<route>.mdx, which holds
for every /genie/ link in the two newly-linted pages but not for a route
served by a directory index (/genie/config) or written with a trailing
slash (/genie/installation/) — either would resolve to a path that does
not exist and be reported dead. Latent, not current; note the assumption
in the config so the next reader extends the pattern instead of deleting
a good link.
@namastex888
namastex888 marked this pull request as ready for review September 1, 2026 04:29
@namastex888
namastex888 merged commit 9f4bd06 into dev Sep 1, 2026
21 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 1, 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-09-01T04:30:35.011620Z fd882b3 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.

@automagik-genie
automagik-genie deleted the wish/skills-everywhere-c branch September 25, 2026 04:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant