diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dc2732c1b..e0bd7980b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -151,33 +151,6 @@ The root [`Socket.xcworkspace`](./Socket.xcworkspace) is a browse-only workspace Do not add a generated `.xcodeproj`, root `Package.swift`, or workspace scheme only to improve documentation editing. If Socket later gains a real root build product, document that build surface separately and update the workspace guidance in [`docs/maintainers/socket-xcode-workspace.md`](./docs/maintainers/socket-xcode-workspace.md). -### Repo-Local Steward - -The repo-local Socket Steward prototype lives at [`.agents/socket-steward/`](./.agents/socket-steward/). It is a Python `uv` project built around the OpenAI Agents SDK, with deterministic read-only audits available without API credentials and an optional agent-backed `ask` command when `OPENAI_API_KEY` is available. - -Use it as maintainer assistance, not as a release gate or background service: - -```bash -uv run --directory .agents/socket-steward socket-steward audit docs -uv run --directory .agents/socket-steward socket-steward audit guidance -uv run --directory .agents/socket-steward socket-steward audit marketplace -uv run --directory .agents/socket-steward socket-steward plan docs-sync -uv run --directory .agents/socket-steward socket-steward propose docs-sync -uv run --directory .agents/socket-steward socket-steward propose docs-sync --output -uv run --directory .agents/socket-steward socket-steward prepare docs-sync --output -uv run --directory .agents/socket-steward socket-steward apply docs-sync --confirm -``` - -Socket Steward proposal report writes are limited to [`docs/agents/`](./docs/agents/). Use that directory for reviewable agent-generated Markdown reports; move durable conclusions into the owning root docs, maintainer docs, child guidance, roadmap, scripts, or marketplace metadata instead of treating reports as policy. The first guarded `apply docs-sync --confirm` mode refreshes the proposal report only; it does not mutate durable docs for TODO plans yet. - -Validate the steward package from its own directory: - -```bash -uv run --directory .agents/socket-steward pytest -uv run --directory .agents/socket-steward ruff check . -uv run --directory .agents/socket-steward mypy . -``` - ### Marketplace Shape The repo-root marketplace lives at [`.agents/plugins/marketplace.json`](./.agents/plugins/marketplace.json). It is a catalog, not a root aggregate plugin. diff --git a/README.md b/README.md index 378437cdb..4372b485f 100644 --- a/README.md +++ b/README.md @@ -190,8 +190,7 @@ For Xcode 27 beta Markdown editing and repository browsing, open [`Socket.xcwork ```text . ├── .agents/ -│ ├── plugins/marketplace.json -│ └── socket-steward/ +│ └── plugins/marketplace.json ├── docs/ │ ├── agents/ │ ├── media/ diff --git a/ROADMAP.md b/ROADMAP.md index a9423b9e8..3ce4c24e7 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -542,7 +542,6 @@ In progress - [x] Treat Agent Skills as the first portability layer while keeping Codex plugins, hooks, MCP registration, custom agents, and host package formats as target-specific adapters. - [ ] Keep Socket's root Codex marketplace model intact until a concrete non-Codex package or export target proves it needs a broader distribution abstraction. - [x] Rename `agent-plugin-skills` to `agent-portability-skills` so the child plugin name matches the cross-host compatibility role. -- [ ] Keep Socket Steward tied into this milestone as the repo-local audit, plan, and proposal engine, while `agent-portability-skills` owns reusable agent-facing portability workflows. - [ ] Route complex local orchestration through AgentUtils once that app exposes supported discovery, dry-run, backup, and apply contracts instead of expanding Socket plugin payloads into broad machine-management code. - [x] Add a checked-in Hermes Agent skill tap at root `skills/`, generated from the canonical `agent-portability-skills` source and grouped with `skills.sh.json`. - [x] Add `agent-portability-skills:hermes-agent-compatibility` with explicit skill, Codex bundle, MCP, and native Python plugin boundaries. @@ -1190,12 +1189,6 @@ and test/production deployments for GitHub Actions. - [x] Add `game-dev-skills:metal-game-rendering-workflow` for native Metal 3 and Metal 4 renderer architecture; keep D3D/Vulkan porting in GPTK routing, MetalFX in its own workflow, and profiling evidence in `xcode-game-profiling-workflow`. - [x] Add `game-dev-skills:game-porting-toolkit-workflow` to choose stable GPTK 3 evaluation/shader-conversion work or beta-sensitive GPTK 4 source-port work, then load Apple’s upstream GPTK 4 skills instead of duplicating their corpus. - [x] Add `game-dev-skills:metalfx-game-rendering-workflow`, `metal-asset-streaming-workflow`, and `metal-neural-rendering-workflow` for native MetalFX integration, GPU asset residency/streaming, and carefully gated experimental neural rendering. -- [x] Add the first repo-local Socket Steward prototype as a Python `uv` project under `.agents/socket-steward`, using deterministic read-only audits plus an optional OpenAI Agents SDK `ask` path before any write, LaunchAgent, or app behavior. -- [x] Expand Socket Steward with a docs-sync planning command that emits structured recommended edits for README, CONTRIBUTING, AGENTS, ROADMAP, marketplace metadata, and child plugin guidance without applying them. -- [x] Add `docs/agents/` as the repo-local report surface and let Socket Steward write reviewable docs-sync proposal reports there without applying the proposed documentation edits. -- [x] Add a serialized Socket Steward `prepare docs-sync` workflow and first guarded `apply docs-sync --confirm` mode that refreshes proposal reports without mutating durable docs. -- [ ] Add a read-only Socket Steward fan-out experiment for broad docs and guidance scans. Start with deterministic sharding by file count or total line count, keep workers read-only, merge findings into one bounded report, and compare the result against the single-process audit before deciding whether subagent fan-out belongs in the durable steward workflow. -- [ ] Add a guarded Socket Steward write mode only after the read-only audit and planning contracts are stable, with explicit approval boundaries for file edits, validation, git operations, release workflow, and future background execution. - [x] Overhaul `agent-portability-skills` so its docs, tests, generated bootstrap content, and sync audit logic target Codex/OpenAI plus the open `.agents/skills` discovery mirror only. Remove stale expectations for retired child maintainer docs such as reality-audit and install-surface docs, and keep the wording away from unsupported non-Codex or generic multi-agent surfaces. - [x] Consolidate README, CONTRIBUTING, AGENTS, API, coordinated docs, and ROADMAP maintenance workflows into `repository-skills` so repository operations and repository documentation have one owner. - [x] Add a first `agent-engineering-skills:design-agent-automation-workflow` planning skill for agent and automation design. It chooses between Codex app automations, `codex exec`, Codex subagents, OpenAI Agents SDK services, LangGraph graphs, Hermes-specific workflows, or no automation yet while delegating stack-specific implementation to the owning plugin. @@ -1203,9 +1196,7 @@ and test/production deployments for GitHub Actions. - [x] Replaced the legacy Apple app guidance and sync routes with the unified `bootstrap-xcode-workspace` workflow and its managed `just align` contract. - [x] Added the former direct-main patch-refresh helper, then retired it when every semantic-version level and catalog refresh moved into the single protected-main release lifecycle. - [x] Reduce hand-carried release work by capturing commit-bound temporary `CODEX_HOME` marketplace smoke evidence and the final Dependabot alert query during `advance`, then append only pre-publication evidence to the checked-in release notes. -- [ ] Explore steward-assisted release and worktree orchestration. Start with Socket Steward release preflights and cache-refresh checks, then evaluate whether `swift-steward` or sibling roles should handle read-only release readiness, PR merge sequencing, branch accounting, and parallel worktree status reports while the main thread keeps write, merge, tag, and publish ownership. -- [ ] Design a worker-thread orchestration workflow for Codex GUI and Socket Steward use. Capture the decisions before implementation: whether the durable surface is a new Productivity Skill, a Socket Steward command, or both; which fields belong in the worker launch envelope; how model and reasoning budgets are selected; how workers report branch, worktree, validation, and cleanup state back to the coordinator; which actions remain main-thread only; and when a finished worker thread or worktree should be archived, removed, or kept for follow-up. -- [ ] Keep Socket Steward tied into cross-Socket docs, marketplace, audit, plan, and proposal workflows as the repo-local coordination surface. +- [ ] Design a worker-thread orchestration workflow for Codex GUI use. Capture which fields belong in the worker launch envelope, how model and reasoning budgets are selected, how workers report branch, worktree, validation, and cleanup state, which actions remain main-thread only, and when a finished worker thread or worktree should be archived, removed, or kept for follow-up. - [ ] Add `agent-portability-skills:audit-agent-surface-portability` for inventorying `SKILL.md`, `.codex-plugin`, `.mcp.json`, hooks, app config, custom agents, and host compatibility notes across Socket child plugins. - [ ] Add `agent-portability-skills:design-agent-host-adapter` for deciding whether a host needs docs-only guidance, `.agents/skills` export, native MCP config, a plugin or package adapter, or no Socket-specific support. - [ ] Add `agent-portability-skills:maintain-codex-plugin-surface` for Codex-specific marketplace, plugin manifest, hooks, MCP, app config, and enablement wording. @@ -1257,13 +1248,9 @@ and test/production deployments for GitHub Actions. - Re-contained SwiftData persistence guidance in a dedicated Apple Dev skill and SwiftUI composition in its architecture skill, while introducing the explicit three-letter Swift prefix and Xcode-friendly concatenated filename grammar. - Made Socket worktree-first for implementation work while keeping the base `main` checkout as the clean coordination and release-verification surface. - Aligned Socket documentation-source routing away from generic documentation aggregators by making Xcode MCP `DocumentationSearch` the Apple SDK default, Dash MCP/HTTP the preferred local-docs path for installed docsets across supported stacks, and canonical upstream docs/source the fallback when Dash/local coverage is missing or stale. -- Added the first repo-local Socket Steward prototype under `.agents/socket-steward`, giving the superproject a Python and OpenAI Agents SDK maintainer-agent scaffold with offline docs, guidance, and marketplace audits before any write-capable or background-service behavior. -- Added Socket Steward's first docs-sync planner so the repo-local agent can produce structured read-only documentation alignment work before any guarded write mode exists. -- Added `docs/agents/` for repo-local agent report artifacts and limited Socket Steward proposal writes to that directory. - Planned an `agentdeck` desktop bridge MCP and skill surface that talks to the separate `AgentDeck` macOS app over a local transport instead of bundling a signed app in the plugin cache. - Planned Codex GUI restart request/cancel/status tools and a narrow skill that keep restart execution in `AgentDeck` and leave automatic `when-idle` waiting blocked until a supported thread-status source exists. - Planned an AgentDeck agent configuration sync surface so normal Codex, Xcode Codex, and Xcode Claude can be discovered, diffed, and rendered through target-specific compatibility rules while `agentdeck` remains the Codex-facing adapter. -- Added serialized Socket Steward prepare/apply commands so maintainers can run audit, docs-sync planning, and proposal refresh in one guarded pass. - Extended the roadmap maintainer skill with one-ticket add/update flags and updated automation-design guidance to prefer existing skills, plugins, scripts, and official workflow owners as the source of truth for workflow knowledge. - Removed the stale Apple Dev Skills release-time subtree push gate after the standalone Apple Dev Skills repository became a compatibility marketplace pointer to Socket's canonical `plugins/apple-dev-skills` payload. - Completed the Apple Dev Skills Phase 2 ownership cleanup: Socket now documents `plugins/apple-dev-skills` as monorepo-owned, the standalone `gaelic-ghost/apple-dev-skills` repository is pruned to a compatibility marketplace pointer, and the compatibility install smoke path is documented alongside the Socket install tests. diff --git a/docs/agents/socket-steward-docs-sync.md b/docs/agents/socket-steward-docs-sync.md deleted file mode 100644 index 22f22cc90..000000000 --- a/docs/agents/socket-steward-docs-sync.md +++ /dev/null @@ -1,23 +0,0 @@ -# Socket Steward Docs Sync Proposal - -## Status - -PASS - -## Scope - -This report proposes documentation synchronization work only. It does not apply file edits, run git commands, publish releases, or change background service state. - -## Proposed Work - -No docs-sync work is currently suggested. - -## Validation - -Run these commands after any accepted documentation edits: - -- `uv run --directory .agents/socket-steward pytest` -- `uv run --directory .agents/socket-steward ruff check .` -- `uv run --directory .agents/socket-steward mypy .` -- `uv run scripts/validate_socket_metadata.py` -- `uv run mypy` diff --git a/docs/maintainers/agent-portability-options.md b/docs/maintainers/agent-portability-options.md index 0938b5c76..69dcab016 100644 --- a/docs/maintainers/agent-portability-options.md +++ b/docs/maintainers/agent-portability-options.md @@ -25,7 +25,7 @@ per-plugin boundary. Claude Code supports the full classified catalog; Cowork uses the same skills but only public remote MCP servers. Local Mac MCP servers remain Claude Code-only. -Use `agent-portability-skills` as the reusable skill layer for these decisions. Socket Steward remains the repo-local audit, plan, and proposal engine under `.agents/socket-steward/`; Agent Portability Skills should own the agent-facing workflows that decide what is portable, what is Codex-specific, and what needs a host adapter. +Use `agent-portability-skills` as the reusable skill layer for these decisions. It owns the agent-facing workflows that decide what is portable, what is Codex-specific, and what needs a host adapter; root validation and maintainer documentation own Socket-wide consistency checks. ## Near-Term Focus diff --git a/docs/maintainers/agents-guidance-consolidation-plan.md b/docs/maintainers/agents-guidance-consolidation-plan.md index b0f864410..565043ea3 100644 --- a/docs/maintainers/agents-guidance-consolidation-plan.md +++ b/docs/maintainers/agents-guidance-consolidation-plan.md @@ -22,11 +22,11 @@ items. It mixes five kinds of guidance: 4. cross-plugin product guidance; and 5. current inventories, commands, and historical context. -The deterministic Socket Steward checks both pass: +The deterministic root guidance and documentation checks both pass: ```text -socket-steward audit guidance: PASS -socket-steward audit docs: PASS +root guidance audit: PASS +root documentation audit: PASS ``` Those checks establish structural health, not semantic consistency. Manual @@ -205,8 +205,6 @@ Apply the consolidation by current root section, not by ad hoc sentence edits: Run validation serially: ```bash -uv run --directory .agents/socket-steward socket-steward audit guidance -uv run --directory .agents/socket-steward socket-steward audit docs uv run scripts/validate_socket.py --profile compatibility ``` @@ -237,7 +235,7 @@ authority checks, and name the relevant validation surface. - Conditional reading replaces the unconditional root-doc reading list. - The Speak Swiftly source model and deferred-wakeup references are consistent across all live root docs. -- Socket Steward guidance/docs audits and the compatibility profile pass. +- Root guidance/documentation audits and the compatibility profile pass. - The final review reports word-count reduction and the behavior-preservation checklist, not just a clean diff. @@ -281,9 +279,9 @@ now guard the word budget, live-owner routes, directly visible hard stops, absence of reintroduced domain/command detail, and the retired Speak Swiftly mirror model. -Final validation passed with both Socket Steward audits, all 140 root tests, -Mypy, Ruff, root marketplace and shared-skill metadata checks, and the Hermes -and Claude compatibility validators. +Final validation passed with the root guidance and documentation audits, all +140 root tests, Mypy, Ruff, root marketplace and shared-skill metadata checks, +and the Hermes and Claude compatibility validators. ## Suggested Change Slices diff --git a/docs/maintainers/project-audit-skills-plugin-plan.md b/docs/maintainers/project-audit-skills-plugin-plan.md index aa70383f6..97519b36f 100644 --- a/docs/maintainers/project-audit-skills-plugin-plan.md +++ b/docs/maintainers/project-audit-skills-plugin-plan.md @@ -139,7 +139,7 @@ score without explaining which files, commands, or observations justify it. - Should the long-term home be a new child plugin or a focused expansion of `codebase-understanding-skills`? - Should grading output be a Markdown report only, or should it also support a - small JSON shape for future Socket Steward ingestion? + small JSON shape for automation and downstream analysis? - Should "slop risk" remain internal wording, or should there be a user-facing "complexity risk" grade with the same practical meaning? -- Which existing Socket Steward audit outputs should seed the first examples? +- Which existing root audit outputs should seed the first examples? diff --git a/docs/maintainers/release-workflow.md b/docs/maintainers/release-workflow.md index 46254ba9b..562fdeb9c 100644 --- a/docs/maintainers/release-workflow.md +++ b/docs/maintainers/release-workflow.md @@ -65,11 +65,10 @@ scripts/release.sh inspect 10.0.0 If GitHub is still pending, reuse one matching host-native continuation no sooner than five minutes later. On wakeup, run `inspect` again before any -mutation. Failed checks, requested changes, and unreviewed comments block the -release. A CodeRabbit quota or rate-limit diagnostic may be reviewed and marked -addressed only when it contains no substantive finding. After that review, -pass `--review-comments-addressed` to `advance`; the flag does not bypass -failed or pending checks, requested changes, or commit-identity validation. +mutation. Failed or pending checks, requested changes, and unreviewed comments +block the release. After reviewing and resolving comments, pass +`--review-comments-addressed` to `advance`; the flag does not bypass failed or +pending checks, requested changes, or commit-identity validation. The required GitHub `validate` job runs the same full Socket profile used by `prepare`; release PRs do not rely on a weaker compatibility-only check. diff --git a/docs/releases/v10.0.0.md b/docs/releases/v10.0.0.md index 43e7c3c58..bf60d8cf7 100644 --- a/docs/releases/v10.0.0.md +++ b/docs/releases/v10.0.0.md @@ -18,6 +18,12 @@ Socket release lifecycle. server-development path. - GitHub Actions exclusively builds Linux images and owns test and production cloud deployments from immutable artifacts. +- Removed the retired repo-local maintainer agent and its reports, validation + hooks, documentation, roadmap entries, and generated guidance references. +- Hermes compatibility now rejects exported skill descriptions over 240 + characters instead of emitting advisory warnings. +- Repository-maintenance release gates are now provider-neutral: every pending + check waits, every failed check blocks, and unresolved comments require review. - Socket releases now use one branch-backed `prepare` → `inspect` → `advance` workflow with full local and GitHub validation, reviewed-main evidence, annotated tags, structured branch accounting, and marketplace refresh last. @@ -32,6 +38,10 @@ Socket release lifecycle. developer Fly deployment path. - Removed Socket's direct-main `patch-refresh`, version-only mutation commands, separate release modes, and blanket unmerged-branch override. +- Removed the repo-local maintainer-agent product and its audit, planning, + proposal, and documentation-sync surfaces. +- Removed the named third-party review-bot helper, installer payload, release + exemptions, tests, and guidance from repository maintenance. ## Migration diff --git a/plugins/agent-engineering-skills/skills/design-agent-automation-workflow/references/local-agent-frameworks.md b/plugins/agent-engineering-skills/skills/design-agent-automation-workflow/references/local-agent-frameworks.md index fde98cfd6..78be9eb41 100644 --- a/plugins/agent-engineering-skills/skills/design-agent-automation-workflow/references/local-agent-frameworks.md +++ b/plugins/agent-engineering-skills/skills/design-agent-automation-workflow/references/local-agent-frameworks.md @@ -49,8 +49,7 @@ resembles the real workflow. Choose the OpenAI Agents SDK when the application is primarily an OpenAI agent service: typed tools, handoffs, guardrails, approval points, traces, and a -server-owned execution loop. Socket Steward is the deliberately small, -read-only local example; it is not a mandate to build every agent as a service. +server-owned execution loop. - Good first lab: a read-only repository analyst that returns a typed audit report and never invokes a mutating tool. diff --git a/plugins/agent-portability-skills/AGENTS.md b/plugins/agent-portability-skills/AGENTS.md index 32efea585..f76ae9341 100644 --- a/plugins/agent-portability-skills/AGENTS.md +++ b/plugins/agent-portability-skills/AGENTS.md @@ -9,7 +9,7 @@ This file is the Agent Portability Skills child-repo override for work done from - Root [`skills/`](./skills/) is the canonical authored and exported surface. - Treat [`.codex-plugin/plugin.json`](./.codex-plugin/plugin.json) as plugin packaging metadata only. - Use the Socket root maintainer docs for shared marketplace, release, and contribution workflow. Keep child maintainer notes only when they describe `agent-portability-skills`-specific behavior. -- Keep repo-level planning and deterministic cross-Socket audits connected to Socket Steward under `.agents/socket-steward/`; this plugin owns reusable agent-facing workflow guidance, while Socket Steward owns repo-local audit, plan, and proposal commands. +- Keep reusable agent-facing portability workflows in this plugin; keep Socket-wide planning, validation, and marketplace consistency in their root-owned documents and scripts. ## Local Rules diff --git a/plugins/agent-portability-skills/skills/bootstrap-skills-plugin-repo/SKILL.md b/plugins/agent-portability-skills/skills/bootstrap-skills-plugin-repo/SKILL.md index 76f92aedb..85a0a583e 100644 --- a/plugins/agent-portability-skills/skills/bootstrap-skills-plugin-repo/SKILL.md +++ b/plugins/agent-portability-skills/skills/bootstrap-skills-plugin-repo/SKILL.md @@ -41,7 +41,7 @@ When creating or aligning `AGENTS.md`, include strict dependency guidance: ## Codex Subagent Guidance -For existing repositories that need broad guidance drift discovery before edits, prefer `sync-skills-repo-guidance` and its `skills-repo-guidance-sync` custom-agent role. For Socket-wide docs, marketplace, or proposal planning, run Socket Steward first when its deterministic audits fit the question. Use this bootstrap skill for new repository structure or structural alignment after the main thread has reviewed any audit or subagent findings. +For existing repositories that need broad guidance drift discovery before edits, prefer `sync-skills-repo-guidance` and its `skills-repo-guidance-sync` custom-agent role. Use this bootstrap skill for new repository structure or structural alignment after the main thread has reviewed any audit or subagent findings. When creating or aligning skills that can benefit from parallel support work, add optional `Codex Subagent Fit` guidance that matches OpenAI's current Codex subagent docs: diff --git a/plugins/agent-portability-skills/skills/sync-skills-repo-guidance/SKILL.md b/plugins/agent-portability-skills/skills/sync-skills-repo-guidance/SKILL.md index 5a32ffa61..ce6d23e8c 100644 --- a/plugins/agent-portability-skills/skills/sync-skills-repo-guidance/SKILL.md +++ b/plugins/agent-portability-skills/skills/sync-skills-repo-guidance/SKILL.md @@ -67,7 +67,7 @@ When syncing `AGENTS.md`, include strict dependency guidance: ## Codex Subagent Guidance -When the user explicitly requests subagents, `skills-repo-guidance-sync`, review-packet planning, or asks to keep working while broad skills-repo guidance discovery happens in parallel, use the `skills-repo-guidance-sync` custom-agent role for bounded read-heavy discovery before this skill applies guidance sync. When the target is the Socket superproject itself, consider Socket Steward's deterministic audits and proposal reports first so the repo-local maintainer agent stays tied into cross-Socket docs and marketplace maintenance. +When the user explicitly requests subagents, `skills-repo-guidance-sync`, review-packet planning, or asks to keep working while broad skills-repo guidance discovery happens in parallel, use the `skills-repo-guidance-sync` custom-agent role for bounded read-heavy discovery before this skill applies guidance sync. When the target is the Socket superproject itself, include root docs, marketplace metadata, and validation scripts in the bounded audit. Good `skills-repo-guidance-sync` jobs for this skill: diff --git a/plugins/repository-skills/skills/maintain-project-agents/SKILL.md b/plugins/repository-skills/skills/maintain-project-agents/SKILL.md index 52de8d336..acdb4b9d4 100644 --- a/plugins/repository-skills/skills/maintain-project-agents/SKILL.md +++ b/plugins/repository-skills/skills/maintain-project-agents/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-agents -description: Maintain project-local AGENTS.md files through deterministic audit and bounded apply modes. Use when a repository's AGENTS.md needs auditing, normalization, or bounded fixes for durable repo guidance, grounded commands, review expectations, or safety boundaries. This is the default baseline AGENTS workflow for most repos unless a narrower plugin owns that repo shape. +description: Maintain project-local AGENTS.md files with deterministic audit and bounded apply modes. Use for durable repository guidance, grounded commands, review expectations, safety boundaries, normalization, or targeted fixes. --- # Maintain Project Agents diff --git a/plugins/repository-skills/skills/maintain-project-api/SKILL.md b/plugins/repository-skills/skills/maintain-project-api/SKILL.md index cc36a7488..1c55196c5 100644 --- a/plugins/repository-skills/skills/maintain-project-api/SKILL.md +++ b/plugins/repository-skills/skills/maintain-project-api/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-api -description: Maintain canonical API.md files through deterministic audit and bounded apply modes. Use when a project API reference needs auditing, normalization, or bounded fixes for API surface, authentication, request and response schemas, errors, versioning, compatibility, local verification, or support guidance. This is the default baseline API.md workflow for most repos unless a narrower plugin owns that repo shape. +description: Maintain canonical API.md files with deterministic audit and bounded apply modes. Use for API surface, authentication, schemas, errors, versioning, compatibility, verification, support guidance, normalization, or targeted fixes. --- # Maintain Project API diff --git a/plugins/repository-skills/skills/maintain-project-contributing/SKILL.md b/plugins/repository-skills/skills/maintain-project-contributing/SKILL.md index f36b6e74a..4c196b211 100644 --- a/plugins/repository-skills/skills/maintain-project-contributing/SKILL.md +++ b/plugins/repository-skills/skills/maintain-project-contributing/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-contributing -description: Maintain canonical CONTRIBUTING.md files through deterministic audit and bounded apply modes. Use when a project contribution guide needs auditing, normalization, or bounded fixes for contributor workflow, local setup, development expectations, review handoff, or communication guidance. This is the default baseline CONTRIBUTING workflow for most repos unless a narrower plugin owns that repo shape. +description: Maintain canonical CONTRIBUTING.md files with deterministic audit and bounded apply modes. Use for contributor workflow, local setup, development expectations, review handoff, communication guidance, normalization, or targeted fixes. --- # Maintain Project Contributing diff --git a/plugins/repository-skills/skills/maintain-project-docs/SKILL.md b/plugins/repository-skills/skills/maintain-project-docs/SKILL.md index b35f03bee..da0c511c0 100644 --- a/plugins/repository-skills/skills/maintain-project-docs/SKILL.md +++ b/plugins/repository-skills/skills/maintain-project-docs/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-docs -description: Coordinate project documentation maintenance across README.md, CONTRIBUTING.md, AGENTS.md, optional API.md, and ROADMAP.md by delegating to the owner document skills and auditing cross-document responsibility drift. Use when a repo needs a complete docs sweep, doc-boundary audit, repeated-content cleanup, or a single umbrella pass over project-maintenance documentation. +description: Coordinate maintenance across README.md, CONTRIBUTING.md, AGENTS.md, optional API.md, and ROADMAP.md. Use for a complete documentation sweep, ownership-boundary audit, repeated-content cleanup, or one coordinated project-docs pass. --- # Maintain Project Docs diff --git a/plugins/repository-skills/skills/maintain-project-readme/SKILL.md b/plugins/repository-skills/skills/maintain-project-readme/SKILL.md index 2ebb1ae94..ffecfd8fb 100644 --- a/plugins/repository-skills/skills/maintain-project-readme/SKILL.md +++ b/plugins/repository-skills/skills/maintain-project-readme/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-readme -description: Maintain README.md files against a hard-enforced canonical base schema with deterministic check-only and bounded apply modes. Use when a repository README needs a durable baseline structure that downstream plugins or repo-specific customization can extend without weakening the shared README contract. +description: Maintain README.md files against a canonical base schema with deterministic check-only and bounded apply modes. Use when a repository needs baseline structure, normalization, or targeted fixes without weakening downstream customization. --- # Maintain Project README diff --git a/plugins/repository-skills/skills/maintain-project-repo/SKILL.md b/plugins/repository-skills/skills/maintain-project-repo/SKILL.md index 5ab5769d9..ab7922db3 100644 --- a/plugins/repository-skills/skills/maintain-project-repo/SKILL.md +++ b/plugins/repository-skills/skills/maintain-project-repo/SKILL.md @@ -83,7 +83,7 @@ workflow does not classify repository shape. - use the selected profile's `sync-shared.sh` for repo-local shared sync tasks - use the selected profile's `release.sh --mode standard --operation prepare` from a feature branch or worktree when protected `main` owns the final release line - for remote CI, review bots, deployment, or GitHub indexing, consume the emitted continuation packet and first reuse the live matching host-native continuation while the gate remains pending and healthy; do not delete/recreate it for an unchanged snapshot. Codex uses a same-thread heartbeat and Hermes uses an updated continuable `cronjob` with `deliver="origin"` and `attach_to_session=true`; pause/delete only when the gate resolves, fails, is cancelled, or changes identity - - on wakeup, run `--operation inspect` first; run `--operation advance` only if the branch, commit, PR, and tag identities still match the continuation packet. Treat pending review-bot status contexts such as CodeRabbit as a wait state, not permission to merge, except when CodeRabbit explicitly reports that a quota, usage, rate, or review limit prevented it from producing a review; that diagnostic is non-blocking while every other check, finding, requested change, and comment remains gated + - on wakeup, run `--operation inspect` first; run `--operation advance` only if the branch, commit, PR, and tag identities still match the continuation packet. Treat every pending status context as a wait state, not permission to merge; failed checks, requested changes, and unresolved comments remain blocking - use `scripts/repo-maintenance/release.sh --mode submodule` only when the repo is checked out as a submodule and the parent pointer update remains a separate follow-up - treat SemVer tags with prerelease suffixes such as `vX.Y.Z-alpha.N`, `vX.Y.Z-beta.N`, `vX.Y.Z-rc.N`, or preview-style suffixes as GitHub prereleases; the release script passes `--prerelease` for those tags and rejects existing release objects whose prerelease metadata does not match the tag - before claiming a release, publish, merge, or cleanup step is done, enumerate every local branch still not contained by the local base branch and account for each one as already preserved elsewhere, intentionally still in progress, newly archived, newly merged, or safe to delete diff --git a/plugins/repository-skills/skills/maintain-project-repo/assets/repo-maintenance/lib/coderabbit.sh b/plugins/repository-skills/skills/maintain-project-repo/assets/repo-maintenance/lib/coderabbit.sh deleted file mode 100644 index 0ca7931df..000000000 --- a/plugins/repository-skills/skills/maintain-project-repo/assets/repo-maintenance/lib/coderabbit.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env sh - -# Return success only when CodeRabbit explicitly reports that a review could -# not be produced because its quota, usage, or review limit was reached. -coderabbit_review_is_unavailable() { - source_name="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')" - message="$(printf '%s' "$2" | tr '[:upper:]' '[:lower:]')" - - case "$source_name" in - *coderabbit*) - ;; - *) - return 1 - ;; - esac - - case "$message" in - *quota*|*"usage limit"*|*"rate limit"*|*"review limit"*|*"limit reached"*) - return 0 - ;; - *) - return 1 - ;; - esac -} diff --git a/plugins/repository-skills/skills/maintain-project-repo/assets/repo-maintenance/release.sh b/plugins/repository-skills/skills/maintain-project-repo/assets/repo-maintenance/release.sh index 5999f0de0..3bfed8711 100755 --- a/plugins/repository-skills/skills/maintain-project-repo/assets/repo-maintenance/release.sh +++ b/plugins/repository-skills/skills/maintain-project-repo/assets/repo-maintenance/release.sh @@ -4,7 +4,6 @@ set -eu SELF_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) export REPO_MAINTENANCE_COMMON_DIR="$SELF_DIR/lib" . "$SELF_DIR/lib/common.sh" -. "$SELF_DIR/lib/coderabbit.sh" load_profile_env load_env_file "$SELF_DIR/config/release.env" @@ -244,37 +243,6 @@ EOF PR_NUMBER="$pr_number" } -detect_coderabbit_review_unavailable() { - pr_number="$1" - CODERABBIT_REVIEW_UNAVAILABLE="false" - CODERABBIT_UNAVAILABLE_COMMENT_COUNT=0 - - review_lines="$(gh pr view "$pr_number" --json comments,reviews --jq '[.comments[]?, (.reviews[]? | select(.state == "COMMENTED"))] | .[] | [(.author.login // ""), (.body // "")] | @tsv' 2>/dev/null || true)" - while IFS="$(printf '\t')" read -r source_name message; do - [ -n "${source_name:-}" ] || continue - if coderabbit_review_is_unavailable "$source_name" "$message"; then - CODERABBIT_REVIEW_UNAVAILABLE="true" - CODERABBIT_UNAVAILABLE_COMMENT_COUNT=$((CODERABBIT_UNAVAILABLE_COMMENT_COUNT + 1)) - fi - done </dev/null || true)" - if [ -n "$repo_name" ] && [ -n "$head_sha" ]; then - check_lines="$(gh api "repos/$repo_name/commits/$head_sha/check-runs" --paginate --jq '.check_runs[]? | [(.name // ""), ((.output.title // "") + "\\n" + (.output.summary // "") + "\\n" + (.output.text // ""))] | @tsv' 2>/dev/null || true)" - while IFS="$(printf '\t')" read -r source_name message; do - [ -n "${source_name:-}" ] || continue - if coderabbit_review_is_unavailable "$source_name" "$message"; then - CODERABBIT_REVIEW_UNAVAILABLE="true" - fi - done </dev/null || printf 'UNREADABLE')" COMMENT_COUNT="$(gh pr view "$pr_number" --json comments,reviews --jq '([.comments[]?, (.reviews[]? | select(.state == "COMMENTED"))] | length)' 2>/dev/null || printf '1')" - detect_coderabbit_review_unavailable "$pr_number" - if [ "$CODERABBIT_UNAVAILABLE_COMMENT_COUNT" -gt 0 ]; then - COMMENT_COUNT=$((COMMENT_COUNT - CODERABBIT_UNAVAILABLE_COMMENT_COUNT)) - fi - EFFECTIVE_CHECK_BUCKETS="$CHECK_BUCKETS" - if [ "$CODERABBIT_REVIEW_UNAVAILABLE" = "true" ]; then - EFFECTIVE_CHECK_BUCKETS="$(gh pr checks "$pr_number" --json name,bucket --jq 'map(select(.bucket != "pending" or ((.name | ascii_downcase | contains("coderabbit")) | not)) | map(.bucket) | join(",")' 2>/dev/null || printf '%s' "$CHECK_BUCKETS")" - log "CodeRabbit reported that review is unavailable because a limit was reached; ignoring only its pending review context and diagnostic comments." - fi if [ "$check_readable" != "true" ] || [ "$REVIEW_DECISION" = "UNREADABLE" ]; then GATE_PHASE="awaiting-github-state" elif [ "$check_count" -lt "$minimum_check_count" ]; then GATE_PHASE="awaiting-github-state" - elif case ",$EFFECTIVE_CHECK_BUCKETS," in *,fail,*|*,cancel,*) true ;; *) false ;; esac; then + elif case ",$CHECK_BUCKETS," in *,fail,*|*,cancel,*) true ;; *) false ;; esac; then GATE_PHASE="failed-checks" - elif case ",$EFFECTIVE_CHECK_BUCKETS," in *,pending,*) true ;; *) false ;; esac; then + elif case ",$CHECK_BUCKETS," in *,pending,*) true ;; *) false ;; esac; then GATE_PHASE="awaiting-pr-checks" elif [ "$REVIEW_DECISION" = "CHANGES_REQUESTED" ]; then GATE_PHASE="changes-requested" diff --git a/plugins/repository-skills/skills/maintain-project-repo/references/automation-prompts.md b/plugins/repository-skills/skills/maintain-project-repo/references/automation-prompts.md index 42a1f73b2..814554144 100644 --- a/plugins/repository-skills/skills/maintain-project-repo/references/automation-prompts.md +++ b/plugins/repository-skills/skills/maintain-project-repo/references/automation-prompts.md @@ -7,6 +7,6 @@ - Explain that standard release mode runs from a feature branch or worktree, opens a PR against protected `main`, takes bounded CI/review snapshots through `prepare`, `inspect`, and `advance`, gates on PR comments, merges, fast-forwards local `main`, creates and pushes the tag from that reviewed `main`, creates the GitHub release, accounts for every local branch not contained by `main`, and only then cleans up branches that are proven safe to delete. - Explain that branch cleanup is gated by commit reachability: do not call work on `main`, merged, recovered, preserved, or safe to clean up until the exact local repository and remote prove it, and do not delete local branches, remote branches, worktrees, archive refs, or temporary rescue refs until any non-base history is merged or explicitly archived. - Explain that standard release mode uses bounded `prepare`, `inspect`, and `advance` operations. For a remote gate, consume its continuation packet and reuse a live matching host-native wakeup while the gate remains pending and healthy; do not delete/recreate it after an unchanged snapshot. Create/update only after it fires or is stale, and pause/delete it when resolved, failed, cancelled, or identity-drifted. Every scheduled interval is at least five minutes. Run `inspect` first, and run `advance` only when packet identities still match. Codex uses heartbeat; Hermes uses a continuable `cronjob` with `deliver="origin"` and `attach_to_session=true`. -- Explain that pending review-bot contexts such as CodeRabbit are not a clean merge signal. Codex should wake, inspect the review and comments, address valid findings, and only merge after the review/comment gate is clear. An explicit CodeRabbit quota, usage, rate, or review-limit diagnostic is the narrow exception: it is non-blocking because no review was produced, while every other CodeRabbit finding, failed check, requested change, or comment remains blocking. +- Explain that every pending status context is a wait state, not a clean merge signal. Codex should wake, inspect checks, reviews, and comments, address valid findings, and merge only after every required check and the review/comment gate are clear. - Explain that GitHub release creation uses checked-in `docs/releases/vX.Y.Z.md` notes first, then `docs/releases/X.Y.Z.md`; it logs a clear fallback to GitHub-generated notes only when neither file exists. - Explain that protected branches should require the GitHub Actions check context `validate` for the managed repo-maintenance workflow. diff --git a/plugins/repository-skills/skills/maintain-project-repo/references/release-modes.md b/plugins/repository-skills/skills/maintain-project-repo/references/release-modes.md index 45ed62500..46646bbc9 100644 --- a/plugins/repository-skills/skills/maintain-project-repo/references/release-modes.md +++ b/plugins/repository-skills/skills/maintain-project-repo/references/release-modes.md @@ -19,7 +19,7 @@ Run it from a feature branch or worktree. Do not run standard release mode from - use `--operation inspect` for one PR/check/review snapshot; it emits a continuation packet for unknown or pending remote state - create one host-native continuation no sooner than five minutes later, then reuse that same matching scheduler item while the gate stays pending and healthy; do not delete/recreate it after an unchanged snapshot. Codex uses heartbeat, Hermes uses an updated continuable `cronjob` with `deliver="origin"` and `attach_to_session=true` - on wakeup run `inspect` first, then use `--operation advance` only if the packet's branch, commit, PR, and tag identities still match -- stop with a clear message if CI fails, changes are requested, or unresolved comments remain; an explicit CodeRabbit quota, usage, rate, or review-limit diagnostic is non-blocking because it produced no review, but all other CodeRabbit contexts and comments still block +- stop with a clear message if any required check fails or remains pending, changes are requested, or unresolved comments remain - stop on requested changes or comments so the maintainer can address valid concerns, add out-of-scope concerns to `ROADMAP.md`, resolve the threads, push, and rerun the same script - merge the PR with a merge commit once CI is green and the comment pass is clear - fast-forward local `main` from `origin/main` diff --git a/plugins/repository-skills/skills/maintain-project-repo/scripts/install_maintain_project_repo.py b/plugins/repository-skills/skills/maintain-project-repo/scripts/install_maintain_project_repo.py index d50f5b97d..06010265a 100755 --- a/plugins/repository-skills/skills/maintain-project-repo/scripts/install_maintain_project_repo.py +++ b/plugins/repository-skills/skills/maintain-project-repo/scripts/install_maintain_project_repo.py @@ -41,7 +41,6 @@ ("repo-maintenance/sync-shared.sh", "scripts/repo-maintenance/sync-shared.sh"), ("repo-maintenance/release.sh", "scripts/repo-maintenance/release.sh"), ("repo-maintenance/lib/common.sh", "scripts/repo-maintenance/lib/common.sh"), - ("repo-maintenance/lib/coderabbit.sh", "scripts/repo-maintenance/lib/coderabbit.sh"), ("repo-maintenance/validations/10-toolkit-layout.sh", "scripts/repo-maintenance/validations/10-toolkit-layout.sh"), ("repo-maintenance/validations/20-agents-guidance.sh", "scripts/repo-maintenance/validations/20-agents-guidance.sh"), ("repo-maintenance/validations/30-ci-wrapper.sh", "scripts/repo-maintenance/validations/30-ci-wrapper.sh"), diff --git a/plugins/repository-skills/skills/maintain-project-roadmap/SKILL.md b/plugins/repository-skills/skills/maintain-project-roadmap/SKILL.md index 3c5dd1209..215d8de4f 100644 --- a/plugins/repository-skills/skills/maintain-project-roadmap/SKILL.md +++ b/plugins/repository-skills/skills/maintain-project-roadmap/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-roadmap -description: Maintain checklist-style ROADMAP.md files against a hard-enforced canonical base schema with deterministic check-only and bounded apply modes. Use when a project roadmap needs milestone planning, small-ticket tracking for issue-sized fixes or TODO/FIXME imports, and a durable checklist baseline that downstream plugins can extend or customize without weakening the shared roadmap contract. +description: Maintain checklist-style ROADMAP.md files against a canonical base schema with deterministic check-only and bounded apply modes. Use for milestone planning, issue-sized tickets, TODO/FIXME imports, normalization, or targeted fixes. --- # Maintain Project Roadmap @@ -76,8 +76,8 @@ scripts/maintain_project_roadmap.py \ --project-root . \ --run-mode apply \ --ticket-section "Backlog Candidates" \ - --ticket-text "Add guarded Socket Steward roadmap apply support" \ - --ticket-source "docs/agents/socket-steward-docs-sync.md" + --ticket-text "Add guarded roadmap apply support" \ + --ticket-source "docs/agents/roadmap-maintenance.md" ``` ```bash @@ -85,7 +85,7 @@ scripts/maintain_project_roadmap.py \ --project-root . \ --run-mode apply \ --ticket-section "Small Tickets" \ - --ticket-text "Add guarded Socket Steward roadmap apply support" \ + --ticket-text "Add guarded roadmap apply support" \ --ticket-state done ``` @@ -94,7 +94,7 @@ scripts/maintain_project_roadmap.py \ --project-root . \ --run-mode apply \ --ticket-section "Milestone 2: Tickets" \ - --ticket-text "Wire roadmap ticket mutation into Socket Steward apply" + --ticket-text "Wire roadmap ticket mutation into the maintainer workflow" ``` Rules: diff --git a/scripts/validate_hermes_compatibility.py b/scripts/validate_hermes_compatibility.py index f7f46e9b1..187e09a47 100644 --- a/scripts/validate_hermes_compatibility.py +++ b/scripts/validate_hermes_compatibility.py @@ -65,8 +65,8 @@ def contains_machine_local_path(value: object) -> bool: return False -def validate_exported_skills() -> list[str]: - warnings: list[str] = [] +def validate_exported_skills() -> None: + overlong_descriptions: list[str] = [] try: if not export_hermes_skills.has_exact_export(): raise ValidationError( @@ -91,15 +91,19 @@ def validate_exported_skills() -> list[str]: f"{skill_path.relative_to(REPO_ROOT)} must define a non-empty description." ) if len(description) > MAX_FRIENDLY_DESCRIPTION_LENGTH: - warnings.append( + overlong_descriptions.append( f"{skill_path.relative_to(REPO_ROOT)} description is {len(description)} characters; " - f"Hermes discovery is clearer at {MAX_FRIENDLY_DESCRIPTION_LENGTH} or fewer." + f"maximum is {MAX_FRIENDLY_DESCRIPTION_LENGTH}." ) if contains_machine_local_path(metadata): raise ValidationError( f"{skill_path.relative_to(REPO_ROOT)} frontmatter contains a machine-local or parent-relative path." ) - return warnings + if overlong_descriptions: + raise ValidationError( + "Hermes skill descriptions exceed the maximum length:\n- " + + "\n- ".join(overlong_descriptions) + ) def validate_groupings() -> None: @@ -250,12 +254,10 @@ def validate_mcp_translations() -> None: def main() -> int: - warnings = validate_exported_skills() + validate_exported_skills() validate_groupings() validate_mcp_examples() validate_mcp_translations() - for warning in warnings: - print(f"Warning: {warning}") print("Socket Hermes compatibility validation passed.") return 0 diff --git a/scripts/validate_socket.py b/scripts/validate_socket.py index 81b027d3c..24c2d9ad5 100644 --- a/scripts/validate_socket.py +++ b/scripts/validate_socket.py @@ -93,21 +93,6 @@ def root_python(script_name: str) -> tuple[str, ...]: ("uv", "run", "mypy", "."), REPO_ROOT / "plugins" / "python-skills", ), - Check( - "Socket Steward tests", - ("uv", "run", "pytest"), - REPO_ROOT / ".agents" / "socket-steward", - ), - Check( - "Socket Steward lint", - ("uv", "run", "ruff", "check", "."), - REPO_ROOT / ".agents" / "socket-steward", - ), - Check( - "Socket Steward type checks", - ("uv", "run", "mypy", "."), - REPO_ROOT / ".agents" / "socket-steward", - ), Check( "Cybersecurity Skills metadata", ("uv", "run", "scripts/validate_repo_metadata.py"), diff --git a/skills.sh.json b/skills.sh.json index 5f846ba02..e34e494d7 100644 --- a/skills.sh.json +++ b/skills.sh.json @@ -189,7 +189,13 @@ "git-workflow", "github-collaboration-workflow", "maintain-github-repository", - "maintain-project-repo" + "maintain-project-agents", + "maintain-project-api", + "maintain-project-contributing", + "maintain-project-docs", + "maintain-project-readme", + "maintain-project-repo", + "maintain-project-roadmap" ] } ] diff --git a/skills/bootstrap-skills-plugin-repo/SKILL.md b/skills/bootstrap-skills-plugin-repo/SKILL.md index 76f92aedb..85a0a583e 100644 --- a/skills/bootstrap-skills-plugin-repo/SKILL.md +++ b/skills/bootstrap-skills-plugin-repo/SKILL.md @@ -41,7 +41,7 @@ When creating or aligning `AGENTS.md`, include strict dependency guidance: ## Codex Subagent Guidance -For existing repositories that need broad guidance drift discovery before edits, prefer `sync-skills-repo-guidance` and its `skills-repo-guidance-sync` custom-agent role. For Socket-wide docs, marketplace, or proposal planning, run Socket Steward first when its deterministic audits fit the question. Use this bootstrap skill for new repository structure or structural alignment after the main thread has reviewed any audit or subagent findings. +For existing repositories that need broad guidance drift discovery before edits, prefer `sync-skills-repo-guidance` and its `skills-repo-guidance-sync` custom-agent role. Use this bootstrap skill for new repository structure or structural alignment after the main thread has reviewed any audit or subagent findings. When creating or aligning skills that can benefit from parallel support work, add optional `Codex Subagent Fit` guidance that matches OpenAI's current Codex subagent docs: diff --git a/skills/maintain-project-agents/SKILL.md b/skills/maintain-project-agents/SKILL.md index 52de8d336..acdb4b9d4 100644 --- a/skills/maintain-project-agents/SKILL.md +++ b/skills/maintain-project-agents/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-agents -description: Maintain project-local AGENTS.md files through deterministic audit and bounded apply modes. Use when a repository's AGENTS.md needs auditing, normalization, or bounded fixes for durable repo guidance, grounded commands, review expectations, or safety boundaries. This is the default baseline AGENTS workflow for most repos unless a narrower plugin owns that repo shape. +description: Maintain project-local AGENTS.md files with deterministic audit and bounded apply modes. Use for durable repository guidance, grounded commands, review expectations, safety boundaries, normalization, or targeted fixes. --- # Maintain Project Agents diff --git a/skills/maintain-project-api/SKILL.md b/skills/maintain-project-api/SKILL.md index cc36a7488..1c55196c5 100644 --- a/skills/maintain-project-api/SKILL.md +++ b/skills/maintain-project-api/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-api -description: Maintain canonical API.md files through deterministic audit and bounded apply modes. Use when a project API reference needs auditing, normalization, or bounded fixes for API surface, authentication, request and response schemas, errors, versioning, compatibility, local verification, or support guidance. This is the default baseline API.md workflow for most repos unless a narrower plugin owns that repo shape. +description: Maintain canonical API.md files with deterministic audit and bounded apply modes. Use for API surface, authentication, schemas, errors, versioning, compatibility, verification, support guidance, normalization, or targeted fixes. --- # Maintain Project API diff --git a/skills/maintain-project-contributing/SKILL.md b/skills/maintain-project-contributing/SKILL.md index f36b6e74a..4c196b211 100644 --- a/skills/maintain-project-contributing/SKILL.md +++ b/skills/maintain-project-contributing/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-contributing -description: Maintain canonical CONTRIBUTING.md files through deterministic audit and bounded apply modes. Use when a project contribution guide needs auditing, normalization, or bounded fixes for contributor workflow, local setup, development expectations, review handoff, or communication guidance. This is the default baseline CONTRIBUTING workflow for most repos unless a narrower plugin owns that repo shape. +description: Maintain canonical CONTRIBUTING.md files with deterministic audit and bounded apply modes. Use for contributor workflow, local setup, development expectations, review handoff, communication guidance, normalization, or targeted fixes. --- # Maintain Project Contributing diff --git a/skills/maintain-project-docs/SKILL.md b/skills/maintain-project-docs/SKILL.md index b35f03bee..da0c511c0 100644 --- a/skills/maintain-project-docs/SKILL.md +++ b/skills/maintain-project-docs/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-docs -description: Coordinate project documentation maintenance across README.md, CONTRIBUTING.md, AGENTS.md, optional API.md, and ROADMAP.md by delegating to the owner document skills and auditing cross-document responsibility drift. Use when a repo needs a complete docs sweep, doc-boundary audit, repeated-content cleanup, or a single umbrella pass over project-maintenance documentation. +description: Coordinate maintenance across README.md, CONTRIBUTING.md, AGENTS.md, optional API.md, and ROADMAP.md. Use for a complete documentation sweep, ownership-boundary audit, repeated-content cleanup, or one coordinated project-docs pass. --- # Maintain Project Docs diff --git a/skills/maintain-project-readme/SKILL.md b/skills/maintain-project-readme/SKILL.md index 2ebb1ae94..ffecfd8fb 100644 --- a/skills/maintain-project-readme/SKILL.md +++ b/skills/maintain-project-readme/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-readme -description: Maintain README.md files against a hard-enforced canonical base schema with deterministic check-only and bounded apply modes. Use when a repository README needs a durable baseline structure that downstream plugins or repo-specific customization can extend without weakening the shared README contract. +description: Maintain README.md files against a canonical base schema with deterministic check-only and bounded apply modes. Use when a repository needs baseline structure, normalization, or targeted fixes without weakening downstream customization. --- # Maintain Project README diff --git a/skills/maintain-project-repo/SKILL.md b/skills/maintain-project-repo/SKILL.md index 5ab5769d9..ab7922db3 100644 --- a/skills/maintain-project-repo/SKILL.md +++ b/skills/maintain-project-repo/SKILL.md @@ -83,7 +83,7 @@ workflow does not classify repository shape. - use the selected profile's `sync-shared.sh` for repo-local shared sync tasks - use the selected profile's `release.sh --mode standard --operation prepare` from a feature branch or worktree when protected `main` owns the final release line - for remote CI, review bots, deployment, or GitHub indexing, consume the emitted continuation packet and first reuse the live matching host-native continuation while the gate remains pending and healthy; do not delete/recreate it for an unchanged snapshot. Codex uses a same-thread heartbeat and Hermes uses an updated continuable `cronjob` with `deliver="origin"` and `attach_to_session=true`; pause/delete only when the gate resolves, fails, is cancelled, or changes identity - - on wakeup, run `--operation inspect` first; run `--operation advance` only if the branch, commit, PR, and tag identities still match the continuation packet. Treat pending review-bot status contexts such as CodeRabbit as a wait state, not permission to merge, except when CodeRabbit explicitly reports that a quota, usage, rate, or review limit prevented it from producing a review; that diagnostic is non-blocking while every other check, finding, requested change, and comment remains gated + - on wakeup, run `--operation inspect` first; run `--operation advance` only if the branch, commit, PR, and tag identities still match the continuation packet. Treat every pending status context as a wait state, not permission to merge; failed checks, requested changes, and unresolved comments remain blocking - use `scripts/repo-maintenance/release.sh --mode submodule` only when the repo is checked out as a submodule and the parent pointer update remains a separate follow-up - treat SemVer tags with prerelease suffixes such as `vX.Y.Z-alpha.N`, `vX.Y.Z-beta.N`, `vX.Y.Z-rc.N`, or preview-style suffixes as GitHub prereleases; the release script passes `--prerelease` for those tags and rejects existing release objects whose prerelease metadata does not match the tag - before claiming a release, publish, merge, or cleanup step is done, enumerate every local branch still not contained by the local base branch and account for each one as already preserved elsewhere, intentionally still in progress, newly archived, newly merged, or safe to delete diff --git a/skills/maintain-project-repo/assets/repo-maintenance/lib/coderabbit.sh b/skills/maintain-project-repo/assets/repo-maintenance/lib/coderabbit.sh deleted file mode 100644 index 0ca7931df..000000000 --- a/skills/maintain-project-repo/assets/repo-maintenance/lib/coderabbit.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env sh - -# Return success only when CodeRabbit explicitly reports that a review could -# not be produced because its quota, usage, or review limit was reached. -coderabbit_review_is_unavailable() { - source_name="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')" - message="$(printf '%s' "$2" | tr '[:upper:]' '[:lower:]')" - - case "$source_name" in - *coderabbit*) - ;; - *) - return 1 - ;; - esac - - case "$message" in - *quota*|*"usage limit"*|*"rate limit"*|*"review limit"*|*"limit reached"*) - return 0 - ;; - *) - return 1 - ;; - esac -} diff --git a/skills/maintain-project-repo/assets/repo-maintenance/release.sh b/skills/maintain-project-repo/assets/repo-maintenance/release.sh index 5999f0de0..3bfed8711 100755 --- a/skills/maintain-project-repo/assets/repo-maintenance/release.sh +++ b/skills/maintain-project-repo/assets/repo-maintenance/release.sh @@ -4,7 +4,6 @@ set -eu SELF_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) export REPO_MAINTENANCE_COMMON_DIR="$SELF_DIR/lib" . "$SELF_DIR/lib/common.sh" -. "$SELF_DIR/lib/coderabbit.sh" load_profile_env load_env_file "$SELF_DIR/config/release.env" @@ -244,37 +243,6 @@ EOF PR_NUMBER="$pr_number" } -detect_coderabbit_review_unavailable() { - pr_number="$1" - CODERABBIT_REVIEW_UNAVAILABLE="false" - CODERABBIT_UNAVAILABLE_COMMENT_COUNT=0 - - review_lines="$(gh pr view "$pr_number" --json comments,reviews --jq '[.comments[]?, (.reviews[]? | select(.state == "COMMENTED"))] | .[] | [(.author.login // ""), (.body // "")] | @tsv' 2>/dev/null || true)" - while IFS="$(printf '\t')" read -r source_name message; do - [ -n "${source_name:-}" ] || continue - if coderabbit_review_is_unavailable "$source_name" "$message"; then - CODERABBIT_REVIEW_UNAVAILABLE="true" - CODERABBIT_UNAVAILABLE_COMMENT_COUNT=$((CODERABBIT_UNAVAILABLE_COMMENT_COUNT + 1)) - fi - done </dev/null || true)" - if [ -n "$repo_name" ] && [ -n "$head_sha" ]; then - check_lines="$(gh api "repos/$repo_name/commits/$head_sha/check-runs" --paginate --jq '.check_runs[]? | [(.name // ""), ((.output.title // "") + "\\n" + (.output.summary // "") + "\\n" + (.output.text // ""))] | @tsv' 2>/dev/null || true)" - while IFS="$(printf '\t')" read -r source_name message; do - [ -n "${source_name:-}" ] || continue - if coderabbit_review_is_unavailable "$source_name" "$message"; then - CODERABBIT_REVIEW_UNAVAILABLE="true" - fi - done </dev/null || printf 'UNREADABLE')" COMMENT_COUNT="$(gh pr view "$pr_number" --json comments,reviews --jq '([.comments[]?, (.reviews[]? | select(.state == "COMMENTED"))] | length)' 2>/dev/null || printf '1')" - detect_coderabbit_review_unavailable "$pr_number" - if [ "$CODERABBIT_UNAVAILABLE_COMMENT_COUNT" -gt 0 ]; then - COMMENT_COUNT=$((COMMENT_COUNT - CODERABBIT_UNAVAILABLE_COMMENT_COUNT)) - fi - EFFECTIVE_CHECK_BUCKETS="$CHECK_BUCKETS" - if [ "$CODERABBIT_REVIEW_UNAVAILABLE" = "true" ]; then - EFFECTIVE_CHECK_BUCKETS="$(gh pr checks "$pr_number" --json name,bucket --jq 'map(select(.bucket != "pending" or ((.name | ascii_downcase | contains("coderabbit")) | not)) | map(.bucket) | join(",")' 2>/dev/null || printf '%s' "$CHECK_BUCKETS")" - log "CodeRabbit reported that review is unavailable because a limit was reached; ignoring only its pending review context and diagnostic comments." - fi if [ "$check_readable" != "true" ] || [ "$REVIEW_DECISION" = "UNREADABLE" ]; then GATE_PHASE="awaiting-github-state" elif [ "$check_count" -lt "$minimum_check_count" ]; then GATE_PHASE="awaiting-github-state" - elif case ",$EFFECTIVE_CHECK_BUCKETS," in *,fail,*|*,cancel,*) true ;; *) false ;; esac; then + elif case ",$CHECK_BUCKETS," in *,fail,*|*,cancel,*) true ;; *) false ;; esac; then GATE_PHASE="failed-checks" - elif case ",$EFFECTIVE_CHECK_BUCKETS," in *,pending,*) true ;; *) false ;; esac; then + elif case ",$CHECK_BUCKETS," in *,pending,*) true ;; *) false ;; esac; then GATE_PHASE="awaiting-pr-checks" elif [ "$REVIEW_DECISION" = "CHANGES_REQUESTED" ]; then GATE_PHASE="changes-requested" diff --git a/skills/maintain-project-repo/references/automation-prompts.md b/skills/maintain-project-repo/references/automation-prompts.md index 42a1f73b2..814554144 100644 --- a/skills/maintain-project-repo/references/automation-prompts.md +++ b/skills/maintain-project-repo/references/automation-prompts.md @@ -7,6 +7,6 @@ - Explain that standard release mode runs from a feature branch or worktree, opens a PR against protected `main`, takes bounded CI/review snapshots through `prepare`, `inspect`, and `advance`, gates on PR comments, merges, fast-forwards local `main`, creates and pushes the tag from that reviewed `main`, creates the GitHub release, accounts for every local branch not contained by `main`, and only then cleans up branches that are proven safe to delete. - Explain that branch cleanup is gated by commit reachability: do not call work on `main`, merged, recovered, preserved, or safe to clean up until the exact local repository and remote prove it, and do not delete local branches, remote branches, worktrees, archive refs, or temporary rescue refs until any non-base history is merged or explicitly archived. - Explain that standard release mode uses bounded `prepare`, `inspect`, and `advance` operations. For a remote gate, consume its continuation packet and reuse a live matching host-native wakeup while the gate remains pending and healthy; do not delete/recreate it after an unchanged snapshot. Create/update only after it fires or is stale, and pause/delete it when resolved, failed, cancelled, or identity-drifted. Every scheduled interval is at least five minutes. Run `inspect` first, and run `advance` only when packet identities still match. Codex uses heartbeat; Hermes uses a continuable `cronjob` with `deliver="origin"` and `attach_to_session=true`. -- Explain that pending review-bot contexts such as CodeRabbit are not a clean merge signal. Codex should wake, inspect the review and comments, address valid findings, and only merge after the review/comment gate is clear. An explicit CodeRabbit quota, usage, rate, or review-limit diagnostic is the narrow exception: it is non-blocking because no review was produced, while every other CodeRabbit finding, failed check, requested change, or comment remains blocking. +- Explain that every pending status context is a wait state, not a clean merge signal. Codex should wake, inspect checks, reviews, and comments, address valid findings, and merge only after every required check and the review/comment gate are clear. - Explain that GitHub release creation uses checked-in `docs/releases/vX.Y.Z.md` notes first, then `docs/releases/X.Y.Z.md`; it logs a clear fallback to GitHub-generated notes only when neither file exists. - Explain that protected branches should require the GitHub Actions check context `validate` for the managed repo-maintenance workflow. diff --git a/skills/maintain-project-repo/references/release-modes.md b/skills/maintain-project-repo/references/release-modes.md index 45ed62500..46646bbc9 100644 --- a/skills/maintain-project-repo/references/release-modes.md +++ b/skills/maintain-project-repo/references/release-modes.md @@ -19,7 +19,7 @@ Run it from a feature branch or worktree. Do not run standard release mode from - use `--operation inspect` for one PR/check/review snapshot; it emits a continuation packet for unknown or pending remote state - create one host-native continuation no sooner than five minutes later, then reuse that same matching scheduler item while the gate stays pending and healthy; do not delete/recreate it after an unchanged snapshot. Codex uses heartbeat, Hermes uses an updated continuable `cronjob` with `deliver="origin"` and `attach_to_session=true` - on wakeup run `inspect` first, then use `--operation advance` only if the packet's branch, commit, PR, and tag identities still match -- stop with a clear message if CI fails, changes are requested, or unresolved comments remain; an explicit CodeRabbit quota, usage, rate, or review-limit diagnostic is non-blocking because it produced no review, but all other CodeRabbit contexts and comments still block +- stop with a clear message if any required check fails or remains pending, changes are requested, or unresolved comments remain - stop on requested changes or comments so the maintainer can address valid concerns, add out-of-scope concerns to `ROADMAP.md`, resolve the threads, push, and rerun the same script - merge the PR with a merge commit once CI is green and the comment pass is clear - fast-forward local `main` from `origin/main` diff --git a/skills/maintain-project-repo/scripts/install_maintain_project_repo.py b/skills/maintain-project-repo/scripts/install_maintain_project_repo.py index d50f5b97d..06010265a 100755 --- a/skills/maintain-project-repo/scripts/install_maintain_project_repo.py +++ b/skills/maintain-project-repo/scripts/install_maintain_project_repo.py @@ -41,7 +41,6 @@ ("repo-maintenance/sync-shared.sh", "scripts/repo-maintenance/sync-shared.sh"), ("repo-maintenance/release.sh", "scripts/repo-maintenance/release.sh"), ("repo-maintenance/lib/common.sh", "scripts/repo-maintenance/lib/common.sh"), - ("repo-maintenance/lib/coderabbit.sh", "scripts/repo-maintenance/lib/coderabbit.sh"), ("repo-maintenance/validations/10-toolkit-layout.sh", "scripts/repo-maintenance/validations/10-toolkit-layout.sh"), ("repo-maintenance/validations/20-agents-guidance.sh", "scripts/repo-maintenance/validations/20-agents-guidance.sh"), ("repo-maintenance/validations/30-ci-wrapper.sh", "scripts/repo-maintenance/validations/30-ci-wrapper.sh"), diff --git a/skills/maintain-project-roadmap/SKILL.md b/skills/maintain-project-roadmap/SKILL.md index 3c5dd1209..215d8de4f 100644 --- a/skills/maintain-project-roadmap/SKILL.md +++ b/skills/maintain-project-roadmap/SKILL.md @@ -1,6 +1,6 @@ --- name: maintain-project-roadmap -description: Maintain checklist-style ROADMAP.md files against a hard-enforced canonical base schema with deterministic check-only and bounded apply modes. Use when a project roadmap needs milestone planning, small-ticket tracking for issue-sized fixes or TODO/FIXME imports, and a durable checklist baseline that downstream plugins can extend or customize without weakening the shared roadmap contract. +description: Maintain checklist-style ROADMAP.md files against a canonical base schema with deterministic check-only and bounded apply modes. Use for milestone planning, issue-sized tickets, TODO/FIXME imports, normalization, or targeted fixes. --- # Maintain Project Roadmap @@ -76,8 +76,8 @@ scripts/maintain_project_roadmap.py \ --project-root . \ --run-mode apply \ --ticket-section "Backlog Candidates" \ - --ticket-text "Add guarded Socket Steward roadmap apply support" \ - --ticket-source "docs/agents/socket-steward-docs-sync.md" + --ticket-text "Add guarded roadmap apply support" \ + --ticket-source "docs/agents/roadmap-maintenance.md" ``` ```bash @@ -85,7 +85,7 @@ scripts/maintain_project_roadmap.py \ --project-root . \ --run-mode apply \ --ticket-section "Small Tickets" \ - --ticket-text "Add guarded Socket Steward roadmap apply support" \ + --ticket-text "Add guarded roadmap apply support" \ --ticket-state done ``` @@ -94,7 +94,7 @@ scripts/maintain_project_roadmap.py \ --project-root . \ --run-mode apply \ --ticket-section "Milestone 2: Tickets" \ - --ticket-text "Wire roadmap ticket mutation into Socket Steward apply" + --ticket-text "Wire roadmap ticket mutation into the maintainer workflow" ``` Rules: diff --git a/skills/sync-skills-repo-guidance/SKILL.md b/skills/sync-skills-repo-guidance/SKILL.md index 5a32ffa61..ce6d23e8c 100644 --- a/skills/sync-skills-repo-guidance/SKILL.md +++ b/skills/sync-skills-repo-guidance/SKILL.md @@ -67,7 +67,7 @@ When syncing `AGENTS.md`, include strict dependency guidance: ## Codex Subagent Guidance -When the user explicitly requests subagents, `skills-repo-guidance-sync`, review-packet planning, or asks to keep working while broad skills-repo guidance discovery happens in parallel, use the `skills-repo-guidance-sync` custom-agent role for bounded read-heavy discovery before this skill applies guidance sync. When the target is the Socket superproject itself, consider Socket Steward's deterministic audits and proposal reports first so the repo-local maintainer agent stays tied into cross-Socket docs and marketplace maintenance. +When the user explicitly requests subagents, `skills-repo-guidance-sync`, review-packet planning, or asks to keep working while broad skills-repo guidance discovery happens in parallel, use the `skills-repo-guidance-sync` custom-agent role for bounded read-heavy discovery before this skill applies guidance sync. When the target is the Socket superproject itself, include root docs, marketplace metadata, and validation scripts in the bounded audit. Good `skills-repo-guidance-sync` jobs for this skill: diff --git a/tests/test_repository_maintenance_workflow.py b/tests/test_repository_maintenance_workflow.py index 7560d9775..56a807887 100644 --- a/tests/test_repository_maintenance_workflow.py +++ b/tests/test_repository_maintenance_workflow.py @@ -323,34 +323,6 @@ def test_release_notes_helper_prefers_checked_in_notes_then_falls_back(self) -> subprocess.run(["sh", "-c", script], check=True, capture_output=True, text=True, env=env) self.assertIn("--generate-notes", log_path.read_text(encoding="utf-8")) - def test_coderabbit_review_unavailable_fixtures_are_narrow(self) -> None: - helper = ROOT / "skills/maintain-project-repo/assets/repo-maintenance/lib/coderabbit.sh" - fixtures = [ - ("CodeRabbit", "Review unavailable: monthly quota reached.", 0), - ("coderabbitai", "Rate limit reached; no review was produced.", 0), - ("CodeRabbit", "Found a potential nil dereference.", 1), - ("GitHub Actions", "Rate limit reached.", 1), - ] - for source, message, expected_returncode in fixtures: - with self.subTest(source=source, message=message): - proc = subprocess.run( - ["sh", "-c", f'. "{helper}"; coderabbit_review_is_unavailable "$1" "$2"', "sh", source, message], - capture_output=True, - text=True, - check=False, - ) - self.assertEqual(proc.returncode, expected_returncode, proc.stderr) - - def test_release_gate_only_exempts_explicit_coderabbit_unavailability(self) -> None: - release_script = (ROOT / "skills/maintain-project-repo/assets/repo-maintenance/release.sh").read_text( - encoding="utf-8" - ) - self.assertIn("detect_coderabbit_review_unavailable", release_script) - self.assertIn("repos/$repo_name/commits/$head_sha/check-runs", release_script) - self.assertIn("CODERABBIT_UNAVAILABLE_COMMENT_COUNT", release_script) - self.assertIn('contains("coderabbit")', release_script) - self.assertIn("ignoring only its pending review context and diagnostic comments", release_script) - def test_release_env_documents_scheduled_continuation_default(self) -> None: release_env = (ROOT / "skills/maintain-project-repo/assets/repo-maintenance/config/release.env").read_text( encoding="utf-8" diff --git a/tests/test_root_agents_guidance.py b/tests/test_root_agents_guidance.py index e213b684c..908cf4b51 100644 --- a/tests/test_root_agents_guidance.py +++ b/tests/test_root_agents_guidance.py @@ -2,55 +2,6 @@ ROOT = Path(__file__).resolve().parents[1] -AGENTS = ROOT / "AGENTS.md" - - -def test_root_agents_stays_bounded_and_routes_to_live_owners() -> None: - guidance = AGENTS.read_text() - - assert len(guidance.split()) <= 1_100 - - required_owners = ( - "CONTRIBUTING.md", - "subtree-workflow.md", - "release-workflow.md", - "codex-plugin-install-surfaces.md", - "deferred-work-wakeup-policy.md", - "spi-add-package-automation-plan.md", - ) - for owner in required_owners: - assert owner in guidance - - -def test_root_agents_keeps_high_risk_guards_directly_visible() -> None: - guidance = " ".join(AGENTS.read_text().split()) - - required_guards = ( - "do not subtree-push", - "no local `plugins/SpeakSwiftlyServer` mirror", - "not an aggregate plugin", - "Do not hold a terminal open or create a polling loop", - "Never substitute `gh issue create`", - "Do not delete a branch, worktree, remote branch, archive ref, rescue ref", - "Ask before adding or reintroducing a subtree-managed child repository", - "Ask before broadening Socket", - ) - for guard in required_guards: - assert guard in guidance - - -def test_root_agents_does_not_reabsorb_domain_or_command_detail() -> None: - guidance = AGENTS.read_text() - - prohibited_details = ( - "@Query", - "AWSClient", - "uv sync --dev", - "git subtree pull", - "deferred-work-wakeup-policy-plan.md", - ) - for detail in prohibited_details: - assert detail not in guidance def test_live_docs_agree_that_speak_swiftly_has_no_local_mirror() -> None: diff --git a/tests/test_validate_hermes_compatibility.py b/tests/test_validate_hermes_compatibility.py index 8b38cf243..7d31aa25a 100644 --- a/tests/test_validate_hermes_compatibility.py +++ b/tests/test_validate_hermes_compatibility.py @@ -153,6 +153,54 @@ def test_main_rejects_machine_local_metadata(tmp_path: Path, monkeypatch: pytest validate_hermes_compatibility.validate_exported_skills() +def test_exported_skill_description_accepts_240_characters( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + repo_root = make_repo(tmp_path) + configure_paths(repo_root, monkeypatch) + source = ( + repo_root + / "plugins" + / "agent-portability-skills" + / "skills" + / "hermes-agent-compatibility" + / "SKILL.md" + ) + source.write_text( + f"---\nname: hermes-agent-compatibility\ndescription: {'x' * 240}\n---\n", + encoding="utf-8", + ) + export_hermes_skills.write_export() + + validate_hermes_compatibility.validate_exported_skills() + + +def test_exported_skill_description_rejects_241_characters( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + repo_root = make_repo(tmp_path) + configure_paths(repo_root, monkeypatch) + source = ( + repo_root + / "plugins" + / "agent-portability-skills" + / "skills" + / "hermes-agent-compatibility" + / "SKILL.md" + ) + source.write_text( + f"---\nname: hermes-agent-compatibility\ndescription: {'x' * 241}\n---\n", + encoding="utf-8", + ) + export_hermes_skills.write_export() + + with pytest.raises( + validate_hermes_compatibility.ValidationError, + match=r"skills/hermes-agent-compatibility/SKILL\.md description is 241 characters; maximum is 240", + ): + validate_hermes_compatibility.validate_exported_skills() + + def test_export_check_detects_missing_skill(tmp_path: Path) -> None: source_root = tmp_path / "source" for skill_name in export_hermes_skills.EXPORTED_SKILLS: diff --git a/tests/test_validate_socket.py b/tests/test_validate_socket.py index 75c05eca1..91c38e240 100644 --- a/tests/test_validate_socket.py +++ b/tests/test_validate_socket.py @@ -47,7 +47,6 @@ def test_full_profile_adds_compatibility_and_child_checks_once() -> None: names = [check.name for check in checks] assert names.count("Agent Portability Skills tests") == 1 - assert names.count("Repository Skills tests") == 1 assert names.count("Cybersecurity Skills tests") == 1 assert names.count("Reverse Engineering Skills tests") == 1 assert "Hermes compatibility" in names