Skip to content

python: expand service and testing workflows - #165

Merged
gaelic-ghost merged 2 commits into
mainfrom
python-skills/audit-guidance
Jul 29, 2026
Merged

python: expand service and testing workflows#165
gaelic-ghost merged 2 commits into
mainfrom
python-skills/audit-guidance

Conversation

@gaelic-ghost

@gaelic-ghost gaelic-ghost commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add FastAPI and FastMCP maintenance workflows.
  • Replace the narrow pytest skill with python-testing-workflow.
  • Reconcile bootstrap policy, FastMCP documentation ownership, CI/package guidance, Hermes exports, and the architecture inventory.

Verification

  • uv run scripts/validate_repo_metadata.py
  • uv run pytest
  • uv run ruff check .
  • uv run mypy .
  • uv run scripts/validate_socket_metadata.py
  • uv run scripts/validate_claude_compatibility.py
  • uv run scripts/export_hermes_skills.py --check
  • uv run scripts/validate_hermes_compatibility.py
  • uv run plugins/productivity-skills/skills/maintain-project-architecture/scripts/maintain_project_architecture.py --project-root . --run-mode check-only
  • Isolated local-marketplace add/remove smoke test.

Summary by CodeRabbit

  • New Features
    • Added workflows for maintaining FastAPI and FastMCP services.
    • Added a standardized Python testing workflow with pytest and uv support, including workspace targeting, coverage options, diagnostics, and smoke testing.
    • Added shared guidance for Python project, service, configuration, validation, and handoff practices.
  • Documentation
    • Expanded Python workflow catalogs, architecture references, export listings, and maintenance plans.
    • Clarified FastMCP documentation lookup and version-aware fallback guidance.
  • Refactor
    • Replaced the former pytest workflow with the broader Python testing workflow.

Why:
Add the missing FastAPI and FastMCP maintenance guidance, replace the narrow pytest skill, and reconcile portable exports and bootstrap policy.

Verification:
uv run scripts/validate_repo_metadata.py
uv run pytest
uv run ruff check .
uv run mypy .
uv run scripts/validate_socket_metadata.py
uv run scripts/validate_claude_compatibility.py
uv run scripts/export_hermes_skills.py --check
uv run scripts/validate_hermes_compatibility.py
uv run mypy
@gaelic-ghost gaelic-ghost added the enhancement New feature or request label Jul 29, 2026
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 982f914e-3181-4ccc-8934-216ca4bff702

📥 Commits

Reviewing files that changed from the base of the PR and between 0043a6d and cc81a94.

📒 Files selected for processing (55)
  • README.md
  • ROADMAP.md
  • docs/agents/bundled-subagent-role-candidates.md
  • docs/architecture/ARCHITECTURE.md
  • docs/architecture/architecture.json
  • docs/maintainers/hermes-compatibility.md
  • docs/maintainers/python-skills-plugin-plan.md
  • plugins/python-skills/.codex-plugin/plugin.json
  • plugins/python-skills/shared/bootstrap-contract.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/SKILL.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/agents/openai.yaml
  • plugins/python-skills/skills/bootstrap-python-mcp-service/references/fastmcp-docs-lookup.md
  • plugins/python-skills/skills/bootstrap-python-service/SKILL.md
  • plugins/python-skills/skills/bootstrap-uv-python-workspace/SKILL.md
  • plugins/python-skills/skills/build-python-agent-service/SKILL.md
  • plugins/python-skills/skills/choose-python-project-shape/SKILL.md
  • plugins/python-skills/skills/fastapi-service-workflow/SKILL.md
  • plugins/python-skills/skills/fastapi-service-workflow/agents/openai.yaml
  • plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md
  • plugins/python-skills/skills/fastmcp-service-workflow/agents/openai.yaml
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/SKILL.md
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/agents/openai.yaml
  • plugins/python-skills/skills/python-ci-workflow/SKILL.md
  • plugins/python-skills/skills/python-package-workflow/SKILL.md
  • plugins/python-skills/skills/python-testing-workflow/SKILL.md
  • plugins/python-skills/skills/python-testing-workflow/agents/openai.yaml
  • plugins/python-skills/skills/python-testing-workflow/assets/profiles/bootstrap_pytest_uv.config.yaml
  • plugins/python-skills/skills/python-testing-workflow/assets/profiles/run_pytest_uv.config.yaml
  • plugins/python-skills/skills/python-testing-workflow/references/customization.md
  • plugins/python-skills/skills/python-testing-workflow/references/interactive-customization.md
  • plugins/python-skills/skills/python-testing-workflow/references/pytest-workflow.md
  • plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md
  • plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
  • plugins/python-skills/skills/python-testing-workflow/scripts/run_pytest_uv.sh
  • plugins/python-skills/skills/uv-pytest-unit-testing/SKILL.md
  • plugins/python-skills/skills/uv-pytest-unit-testing/agents/openai.yaml
  • plugins/python-skills/tests/test_build_python_agent_service_skill.py
  • plugins/python-skills/tests/test_plugin_smoke.py
  • scripts/export_hermes_skills.py
  • skills.sh.json
  • skills/build-python-agent-service/SKILL.md
  • skills/fastapi-service-workflow/SKILL.md
  • skills/fastapi-service-workflow/agents/openai.yaml
  • skills/fastmcp-service-workflow/SKILL.md
  • skills/fastmcp-service-workflow/agents/openai.yaml
  • skills/python-testing-workflow/SKILL.md
  • skills/python-testing-workflow/agents/openai.yaml
  • skills/python-testing-workflow/assets/profiles/bootstrap_pytest_uv.config.yaml
  • skills/python-testing-workflow/assets/profiles/run_pytest_uv.config.yaml
  • skills/python-testing-workflow/references/customization.md
  • skills/python-testing-workflow/references/interactive-customization.md
  • skills/python-testing-workflow/references/pytest-workflow.md
  • skills/python-testing-workflow/references/uv-workspace-testing.md
  • skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
  • skills/python-testing-workflow/scripts/run_pytest_uv.sh
💤 Files with no reviewable changes (4)
  • plugins/python-skills/skills/uv-pytest-unit-testing/agents/openai.yaml
  • plugins/python-skills/skills/uv-pytest-unit-testing/SKILL.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/agents/openai.yaml
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/agents/openai.yaml

📝 Walkthrough

Walkthrough

The PR expands the Python skills plugin with FastAPI, FastMCP, and Python testing workflows; replaces the legacy pytest skill; centralizes bootstrap policies; removes packaged fastmcp_docs dependencies; updates CI and packaging guidance; and refreshes exports, architecture metadata, documentation, and smoke tests.

Changes

Python skills workflow expansion

Layer / File(s) Summary
Workflow inventory and planning
README.md, ROADMAP.md, docs/agents/*, docs/architecture/*, docs/maintainers/*, skills.sh.json, scripts/export_hermes_skills.py
Catalogs, plans, architecture inventories, Hermes exports, and skill listings now include the new workflows and replace uv-pytest-unit-testing with python-testing-workflow.
Shared bootstrap and documentation policy
plugins/python-skills/shared/*, plugins/python-skills/skills/bootstrap-*, plugins/python-skills/skills/integrate-fastapi-fastmcp/*, plugins/python-skills/.codex-plugin/plugin.json
Bootstrap skills use a shared contract for commands, configuration, validation, cleanup, and handoffs; FastMCP documentation is host-provided when available and otherwise resolved from version-aware official documentation.
FastAPI and FastMCP maintenance workflows
plugins/python-skills/skills/{fastapi-service-workflow,fastmcp-service-workflow}/*, skills/{fastapi-service-workflow,fastmcp-service-workflow}/*
Adds agent-configured workflows for maintaining FastAPI routes/settings/lifespan/OpenAPI surfaces and FastMCP tools/resources/prompts, transports, authorization, and client tests.
Python testing workflow and validation
plugins/python-skills/skills/python-testing-workflow/*, skills/python-testing-workflow/*, plugins/python-skills/tests/*, plugins/python-skills/skills/python-{ci,package}-workflow/SKILL.md
Adds uv-based pytest guidance, workspace references, configurable bootstrap/run scripts, smoke checks, and validation tests; CI sync and wheel/sdist smoke-check guidance are also updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: expanding Python service and testing workflows.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch python-skills/audit-guidance

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.

@gaelic-ghost
gaelic-ghost merged commit df2a829 into main Jul 29, 2026
1 of 2 checks passed
@gaelic-ghost
gaelic-ghost deleted the python-skills/audit-guidance branch July 29, 2026 13:45

@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: cc81a940a7

ℹ️ 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".

Comment on lines +44 to +45
Do not overwrite a non-empty target or existing `pyproject.toml` without the
entrypoint's explicit force flag. Initialize git only when requested by the

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 Preserve the unconditional pyproject refusal

When a target already contains pyproject.toml, this shared contract implies that supplying the entrypoint's force flag permits overwriting it, but skills/bootstrap-uv-python-workspace/scripts/init_uv_python_project.sh explicitly refuses the overwrite even with --force, and the FastAPI/FastMCP entrypoints delegate to that scaffold. This makes the newly authoritative contract impossible to follow; clarify that --force permits a non-empty directory but never an existing pyproject.toml.

AGENTS.md reference: AGENTS.md:L60-L61

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai 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.

Actionable comments posted: 9

🧹 Nitpick comments (1)
plugins/python-skills/skills/python-package-workflow/SKILL.md (1)

91-104: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Smoke-check commands match upstream uv guidance; tighten the lead-in prose.

The uv run --isolated --no-project --with dist/*.whl tests/smoke_test.py pattern matches astral-sh's own documented release-workflow example. However, the sentence introducing it ("create a temporary consumer outside the package tree and install the built artifact there") describes a manual external-directory approach that the shown commands don't actually use — --isolated --no-project already provides isolation without needing a directory outside the package tree. Consider rewording the lead-in so it doesn't imply an extra manual step.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/python-skills/skills/python-package-workflow/SKILL.md` around lines
91 - 104, Revise the lead-in before the uv smoke-check commands to describe
using an isolated, no-project environment to test the built artifact, rather
than requiring a temporary consumer directory outside the package tree. Keep the
existing wheel/sdist commands and smoke-test guidance unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/maintainers/python-skills-plugin-plan.md`:
- Around line 77-80: Update the documentation passage describing the older
twelve-skill architecture metadata claim. Since
docs/architecture/architecture.json now lists all fifteen Python skill
manifests, either present the twelve-skill statement strictly as historical
context or state that the regenerated metadata is synchronized, while preserving
the current fifteen-skill inventory as the audit source of truth.

In `@plugins/python-skills/shared/bootstrap-contract.md`:
- Line 58: Update the “Test setup or testing workflow” entry in the routing
table to explicitly scope it to existing-project test setup and maintenance,
while directing initial pytest/Ruff/mypy scaffolding to
bootstrap-uv-python-workspace.

In `@plugins/python-skills/skills/build-python-agent-service/SKILL.md`:
- Line 10: Restrict the allowed-tools entry in the build-python-agent-service
skill so Bash(uv:*) is replaced by only the specific uv subcommands required by
the workflow, preventing arbitrary Python execution through uv run variants. Add
regression coverage for uv run python -c, uv run -m, and uv run --with ...
python bypass forms, while retaining the check that Bash(python:*) is absent.

In `@plugins/python-skills/skills/fastapi-service-workflow/SKILL.md`:
- Line 3: Shorten the exported frontmatter descriptions to the repository’s
accepted length while preserving their core scope. Apply the same shortened
FastAPI description in
plugins/python-skills/skills/fastapi-service-workflow/SKILL.md:3 and
skills/fastapi-service-workflow/SKILL.md:3, and the same shortened FastMCP
description in plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md:3
and skills/fastmcp-service-workflow/SKILL.md:3.

In
`@plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md`:
- Around line 16-18: Update the package-scoped testing guidance in
uv-workspace-testing.md and the corresponding command in SKILL.md to run pytest
from the selected workspace member, using uv’s --directory <member-dir> option
or explicitly documenting the required working directory; ensure tests/unit
resolves relative to that member in both affected files.

In
`@plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh`:
- Line 10: Update the SKILL_NAME-derived profile handling in
plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
(lines 10-10) and run_pytest_uv.sh (lines 9-9) to load or migrate profiles from
the previous workflow namespace when the renamed namespace is absent. Document
the required one-time migration in skills/python-testing-workflow/SKILL.md
(lines 63-64), including the old and new namespaces and the expected user
action.

In `@plugins/python-skills/skills/python-testing-workflow/SKILL.md`:
- Around line 3-10: Update the frontmatter allowed-tools declaration in the
Python testing workflow skill to authorize Bash commands beginning with
scripts/bootstrap_pytest_uv.sh and scripts/run_pytest_uv.sh, while preserving
the existing uv and Read permissions.

In `@ROADMAP.md`:
- Around line 173-176: Resolve the contradictory pytest migration status in
ROADMAP.md by updating the earlier scope item that says the existing pytest
skill surfaces remain intact, or explicitly documenting the exception for
uv-pytest-unit-testing. Ensure the roadmap consistently reflects whether that
skill was replaced while preserving the broader migration status.

In `@skills/python-testing-workflow/SKILL.md`:
- Line 10: Align the allowed-tools declaration in SKILL.md with the documented
workflow commands: either add Bash permissions for
scripts/bootstrap_pytest_uv.sh and scripts/run_pytest_uv.sh, or change those
examples to use only uv-prefixed commands. Keep the permissions and examples
consistent.

---

Nitpick comments:
In `@plugins/python-skills/skills/python-package-workflow/SKILL.md`:
- Around line 91-104: Revise the lead-in before the uv smoke-check commands to
describe using an isolated, no-project environment to test the built artifact,
rather than requiring a temporary consumer directory outside the package tree.
Keep the existing wheel/sdist commands and smoke-test guidance unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 982f914e-3181-4ccc-8934-216ca4bff702

📥 Commits

Reviewing files that changed from the base of the PR and between 0043a6d and cc81a94.

📒 Files selected for processing (55)
  • README.md
  • ROADMAP.md
  • docs/agents/bundled-subagent-role-candidates.md
  • docs/architecture/ARCHITECTURE.md
  • docs/architecture/architecture.json
  • docs/maintainers/hermes-compatibility.md
  • docs/maintainers/python-skills-plugin-plan.md
  • plugins/python-skills/.codex-plugin/plugin.json
  • plugins/python-skills/shared/bootstrap-contract.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/SKILL.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/agents/openai.yaml
  • plugins/python-skills/skills/bootstrap-python-mcp-service/references/fastmcp-docs-lookup.md
  • plugins/python-skills/skills/bootstrap-python-service/SKILL.md
  • plugins/python-skills/skills/bootstrap-uv-python-workspace/SKILL.md
  • plugins/python-skills/skills/build-python-agent-service/SKILL.md
  • plugins/python-skills/skills/choose-python-project-shape/SKILL.md
  • plugins/python-skills/skills/fastapi-service-workflow/SKILL.md
  • plugins/python-skills/skills/fastapi-service-workflow/agents/openai.yaml
  • plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md
  • plugins/python-skills/skills/fastmcp-service-workflow/agents/openai.yaml
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/SKILL.md
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/agents/openai.yaml
  • plugins/python-skills/skills/python-ci-workflow/SKILL.md
  • plugins/python-skills/skills/python-package-workflow/SKILL.md
  • plugins/python-skills/skills/python-testing-workflow/SKILL.md
  • plugins/python-skills/skills/python-testing-workflow/agents/openai.yaml
  • plugins/python-skills/skills/python-testing-workflow/assets/profiles/bootstrap_pytest_uv.config.yaml
  • plugins/python-skills/skills/python-testing-workflow/assets/profiles/run_pytest_uv.config.yaml
  • plugins/python-skills/skills/python-testing-workflow/references/customization.md
  • plugins/python-skills/skills/python-testing-workflow/references/interactive-customization.md
  • plugins/python-skills/skills/python-testing-workflow/references/pytest-workflow.md
  • plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md
  • plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
  • plugins/python-skills/skills/python-testing-workflow/scripts/run_pytest_uv.sh
  • plugins/python-skills/skills/uv-pytest-unit-testing/SKILL.md
  • plugins/python-skills/skills/uv-pytest-unit-testing/agents/openai.yaml
  • plugins/python-skills/tests/test_build_python_agent_service_skill.py
  • plugins/python-skills/tests/test_plugin_smoke.py
  • scripts/export_hermes_skills.py
  • skills.sh.json
  • skills/build-python-agent-service/SKILL.md
  • skills/fastapi-service-workflow/SKILL.md
  • skills/fastapi-service-workflow/agents/openai.yaml
  • skills/fastmcp-service-workflow/SKILL.md
  • skills/fastmcp-service-workflow/agents/openai.yaml
  • skills/python-testing-workflow/SKILL.md
  • skills/python-testing-workflow/agents/openai.yaml
  • skills/python-testing-workflow/assets/profiles/bootstrap_pytest_uv.config.yaml
  • skills/python-testing-workflow/assets/profiles/run_pytest_uv.config.yaml
  • skills/python-testing-workflow/references/customization.md
  • skills/python-testing-workflow/references/interactive-customization.md
  • skills/python-testing-workflow/references/pytest-workflow.md
  • skills/python-testing-workflow/references/uv-workspace-testing.md
  • skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
  • skills/python-testing-workflow/scripts/run_pytest_uv.sh
💤 Files with no reviewable changes (4)
  • plugins/python-skills/skills/uv-pytest-unit-testing/agents/openai.yaml
  • plugins/python-skills/skills/uv-pytest-unit-testing/SKILL.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/agents/openai.yaml
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/agents/openai.yaml

Comment on lines +77 to +80
The shipped inventory has fifteen skills. The original expansion plan below
predates the later local-first agent-service addition, so this list is the
current source of truth for the audit rather than the older twelve-skill
summary in generated architecture metadata.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Update the stale architecture-metadata claim.

Line 77-80 says the generated architecture metadata still contains an older twelve-skill summary, but docs/architecture/architecture.json now lists the fifteen Python skill manifests, including the new service and testing workflows. Reword this as historical context or state that the regenerated metadata is synchronized.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/maintainers/python-skills-plugin-plan.md` around lines 77 - 80, Update
the documentation passage describing the older twelve-skill architecture
metadata claim. Since docs/architecture/architecture.json now lists all fifteen
Python skill manifests, either present the twelve-skill statement strictly as
historical context or state that the regenerated metadata is synchronized, while
preserving the current fifteen-skill inventory as the audit source of truth.

| New FastMCP server | `bootstrap-python-mcp-service` |
| Existing FastAPI and FastMCP integration | `integrate-fastapi-fastmcp` |
| Existing-project implementation | `build-python-project` |
| Test setup or testing workflow | `python-testing-workflow` |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Disambiguate initial test scaffolding from test maintenance.

Line 58 routes “Test setup” to python-testing-workflow, while the inventory says bootstrap-uv-python-workspace owns initial pytest/Ruff/mypy setup. Since this contract is read by bootstrap skills, new-project requests can be routed to the maintenance workflow instead of the bootstrap path. Change this to “Existing-project test setup or testing workflow,” or explicitly distinguish the two cases.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/python-skills/shared/bootstrap-contract.md` at line 58, Update the
“Test setup or testing workflow” entry in the routing table to explicitly scope
it to existing-project test setup and maintenance, while directing initial
pytest/Ruff/mypy scaffolding to bootstrap-uv-python-workspace.

repo: python-skills
category: python-agent-service
allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(uv:*) Bash(python:*)
allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(uv:*)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Repo files around target:"
fd -a 'SKILL.md|openai.yaml|README|.*permission.*|.*allowed.*|.*tool.*' . | sed 's#^\./##' | head -200

echo
echo "Target file:"
cat -n plugins/python-skills/skills/build-python-agent-service/SKILL.md | sed -n '1,120p'

echo
echo "Partner file if present:"
if [ -f plugins/python-skills/skills/build-python-agent-service/agents/openai.yaml ]; then
  cat -n plugins/python-skills/skills/build-python-agent-service/agents/openai.yaml | sed -n '1,240p'
fi

echo
echo "Search permission/allowed-tools/config for Bash(:*) wildcards:"
rg -n --hidden --glob '!**/.git/**' 'allowed-tools|Bash\(|Bash\([^)]*\):|\*\)' plugins .github scripts README.md 2>/dev/null | sed -n '1,240p'

echo
echo "Search documentation/tests mentioning Bash(python:*)/uv run/allowed tools:"
rg -n --hidden --glob '!**/.git/**' 'Bash\(python:\*|Bash\(uv:\*|allowed-tools|uv run|uv run python|Bash\(.*:\*\)' . | sed -n '1,320p'

Repository: gaelic-ghost/socket

Length of output: 18886


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Target files:"
sed -n '1,80p' plugins/python-skills/skills/build-python-agent-service/SKILL.md || true
if [ -f plugins/python-skills/skills/build-python-agent-service/agents/openai.yaml ]; then
  sed -n '1,220p' plugins/python-skills/skills/build-python-agent-service/agents/openai.yaml
fi

echo
echo "Target directory files:"
git ls-files plugins/python-skills/skills/build-python-agent-service

echo
echo "Locate host/matcher/permission docs and tests:"
for f in README.md docs/agents/README.md docs/maintainers/xcode-27-agentic-tooling-plan.md plugins/speak-swiftly-server README.md; do
  if [ -f "$f" ]; then
    echo "--- $f"
    rg -n --hidden --glob '!**/.git/**' 'allowed-tools|Bash\(|matcher|permission|tools' "$f" || true
  fi
done

echo
echo "Find test files mentioning allowed tools or Bash wildcards"
find . -path './.git' -prune -o \( -name '*test*.py' -o -name '*test*' \) -print | sed 's#^\./##' | head -200 | while read -r f; do
  if rg -q 'allowed-tools|Bash\(python:\*|Bash\(uv:\*|uv run|rg:|git:' "$f" 2>/dev/null; then
    echo "--- $f"
    rg -n 'allowed-tools|Bash\(python:\*|Bash\(uv:\*|uv run|rg:|git:' "$f" || true
  fi
done | sed -n '1,320p'

echo
echo "Find Python scripts or configs mentioning Bash allowed-tools:"
find . -path './.git' -prune -o \( -name '*.py' -o -name '*.yaml' -o -name '*.yml' -o -name '*.json' \) -print | while read -r f; do
  if [ -f "$f" ] && rg -q 'allowed-tools|Bash\([A-Za-z]' "$f" 2>/dev/null; then
    echo "--- $f"
    rg -n 'allowed-tools|Bash\([A-Za-z]' "$f" | sed -n '1,60p' || true
  fi
done | sed -n '1,260p'

Repository: gaelic-ghost/socket

Length of output: 17934


Keep Bash(uv:*) scoped to the required uv subcommands.

Removing Bash(python:*) does not block arbitrary Python execution if the host matcher allows wildcard arguments: uv run python -c ..., uv run -m ..., or uv run --with ... python ... still route through an allowed Bash(uv:*) tool. Replace the catch-all with only the uv commands this workflow needs and add regression coverage for these bypass forms; the regression only checks that Bash(python:*) is absent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/python-skills/skills/build-python-agent-service/SKILL.md` at line 10,
Restrict the allowed-tools entry in the build-python-agent-service skill so
Bash(uv:*) is replaced by only the specific uv subcommands required by the
workflow, preventing arbitrary Python execution through uv run variants. Add
regression coverage for uv run python -c, uv run -m, and uv run --with ...
python bypass forms, while retaining the check that Bash(python:*) is absent.

@@ -0,0 +1,89 @@
---
name: fastapi-service-workflow
description: Maintain existing uv-managed FastAPI services, including route and dependency composition, typed settings, lifespan, async and integration testing, OpenAPI review, deployment-readiness handoff, and service-specific diagnostics.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Shorten the exported skill descriptions to clear Hermes compatibility warnings.

The PR validation reports description-length warnings for Hermes exports. Shorten each frontmatter description to the repository’s accepted limit while preserving its key scope.

  • plugins/python-skills/skills/fastapi-service-workflow/SKILL.md#L3-L3: shorten the FastAPI description.
  • skills/fastapi-service-workflow/SKILL.md#L3-L3: apply the same shortened description.
  • plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md#L3-L3: shorten the FastMCP description.
  • skills/fastmcp-service-workflow/SKILL.md#L3-L3: apply the same shortened description.
📍 Affects 4 files
  • plugins/python-skills/skills/fastapi-service-workflow/SKILL.md#L3-L3 (this comment)
  • skills/fastapi-service-workflow/SKILL.md#L3-L3
  • plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md#L3-L3
  • skills/fastmcp-service-workflow/SKILL.md#L3-L3
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/python-skills/skills/fastapi-service-workflow/SKILL.md` at line 3,
Shorten the exported frontmatter descriptions to the repository’s accepted
length while preserving their core scope. Apply the same shortened FastAPI
description in plugins/python-skills/skills/fastapi-service-workflow/SKILL.md:3
and skills/fastapi-service-workflow/SKILL.md:3, and the same shortened FastMCP
description in plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md:3
and skills/fastmcp-service-workflow/SKILL.md:3.

DRY_RUN=0

SKILL_NAME="uv-pytest-unit-testing"
SKILL_NAME="python-testing-workflow"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Migrate existing customization profiles when renaming the workflow.

The SKILL_NAME rename changes the derived profile namespace, so existing profiles are silently ignored unless a fallback or explicit migration is provided.

  • plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh#L10-L10: load or migrate the old bootstrap profile namespace.
  • plugins/python-skills/skills/python-testing-workflow/scripts/run_pytest_uv.sh#L9-L9: load or migrate the old run profile namespace.
  • skills/python-testing-workflow/SKILL.md#L63-L64: document the required one-time migration.
📍 Affects 3 files
  • plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh#L10-L10 (this comment)
  • plugins/python-skills/skills/python-testing-workflow/scripts/run_pytest_uv.sh#L9-L9
  • skills/python-testing-workflow/SKILL.md#L63-L64
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh`
at line 10, Update the SKILL_NAME-derived profile handling in
plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
(lines 10-10) and run_pytest_uv.sh (lines 9-9) to load or migrate profiles from
the previous workflow namespace when the renamed namespace is absent. Document
the required one-time migration in skills/python-testing-workflow/SKILL.md
(lines 63-64), including the old and new namespaces and the expected user
action.

Comment on lines +3 to +10
description: Set up, run, and improve Python tests in uv projects and workspaces. Use for pytest configuration, focused and package-targeted runs, fixtures, parametrization, async and integration tests, coverage, CI parity, or failure triage.
license: Apache-2.0
compatibility: Designed for Codex and compatible Agent Skills clients on macOS with uv-managed Python projects, pytest, and shell access for the bundled setup and execution scripts.
metadata:
owner: gaelic-ghost
repo: python-skills
category: python-testing
allowed-tools: Bash(uv:*) Read

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Does Claude Code's allowed-tools Bash() pattern match only the literal command prefix, or does it also permit shell scripts that internally call the allowed command?

💡 Result:

Claude Code's Bash permission rules operate on the literal command string provided to the tool, and they do not automatically "permit" shell scripts (like.sh files) simply because the internal commands inside those scripts might match an allowlist [1][2]. The Bash tool's permission mechanism functions as follows: 1. Matching Process: Claude Code matches the specific string generated by the AI (or command-line instruction) against the configured allow/deny patterns [2][3]. These rules support glob patterns (e.g., Bash(npm run *)) [1][4]. 2. Script Execution: If Claude Code is instructed to execute a shell script (e.g.,./myscript.sh), it evaluates that specific command (the execution of the script itself) against the permission rules [3]. If you have an allow rule for Bash(npm run *), it does not grant blanket permission for a shell script to run those same commands unless the execution of the script itself is permitted [4]. 3. Compound Commands: Claude Code is designed to parse compound commands (e.g., using &&,;, |, ||) and evaluates each subcommand segment independently against the permission rules [4][3]. Each segment must independently satisfy the allowlist; it does not "permit" the entire chain based on a single prefix match [5][3]. 4. Security Enforcement: The system employs security validators and path constraints that operate on the command string before execution [3]. Because it evaluates the command emitted for execution, attempting to "hide" unapproved actions inside a script simply shifts the requirement to permit the script's execution path, rather than bypassing the need to authorize the specific command being run [4][3]. In summary, the allowlist pattern matching is not transitive; it does not inspect the contents of scripts to permit them based on their internal logic. To allow a shell script, you must explicitly permit the command used to invoke that script [1][4].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== candidate files =="
git ls-files | rg 'plugins/python-skills/skills/python-testing-workflow/(SKILL.md|agents/openai.yaml|scripts/).*' || true

echo
echo "== SKILL.md lines 1-90 =="
cat -n plugins/python-skills/skills/python-testing-workflow/SKILL.md | sed -n '1,90p'

echo
echo "== openai.yaml lines 1-160 =="
cat -n plugins/python-skills/skills/python-testing-workflow/agents/openai.yaml | sed -n '1,160p'

echo
echo "== scripts =="
find plugins/python-skills/skills/python-testing-workflow/scripts -maxdepth 1 -type f -print -exec sh -c 'echo "--- $1"; sed -n "1,80p" "$1"' sh {} \;

echo
echo "== allowed-tools patterns in python-skills skill frontmatter =="
rg -n '^allowed-tools:' plugins/python-skills/skills -A2 || true

Repository: gaelic-ghost/socket

Length of output: 14183


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

skill = Path("plugins/python-skills/skills/python-testing-workflow/SKILL.md")
text = skill.read_text()
m = re.search(r'allowed-tools:\s*(.*?)(?:\n(?:metadata:|description:|compatibility:|license:|$))', text, re.S)
allowed = (m.group(1).splitlines()[0].strip() if m else "")
print("allowed-tools:", allowed)

target_commands = [
    "scripts/bootstrap_pytest_uv.sh",
    "./scripts/bootstrap_pytest_uv.sh",
    "bash scripts/bootstrap_pytest_uv.sh",
    "run_pytest_uv.sh",
    "./run_pytest_uv.sh",
    "uv",
    "uv test",
]
def matches(command):
    # Model Claude-style Bash(prefix*) literal command-prefix matching discussed by verification source:
    # exact/substring comparison is not enough for compound commands, but keep this concise because commands here are simple.
    return any(command.startswith(prefix.rstrip("*")) for prefix in allowed.split())

for cmd in target_commands:
    print(cmd, "=>", matches(cmd))
PY

Repository: gaelic-ghost/socket

Length of output: 398


Add allowed-tools entries for the bundled script commands.

allowed-tools: Bash(uv:*) Read only authorizes Bash commands starting with uv, but the documented setup/execution entry points invoke scripts/bootstrap_pytest_uv.sh and scripts/run_pytest_uv.sh directly. Add Bash permissions for those command prefixes so agents are not blocked at the documented workflow step.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/python-skills/skills/python-testing-workflow/SKILL.md` around lines 3
- 10, Update the frontmatter allowed-tools declaration in the Python testing
workflow skill to authorize Bash commands beginning with
scripts/bootstrap_pytest_uv.sh and scripts/run_pytest_uv.sh, while preserving
the existing uv and Read permissions.

Comment thread ROADMAP.md
Comment on lines +173 to +176
- [x] Replace `python-skills:uv-pytest-unit-testing` with the broader `python-skills:python-testing-workflow` without a duplicate compatibility surface.
- [x] Update Python plugin metadata after the first new skill slice lands.
- [x] Run child validation with `uv run scripts/validate_repo_metadata.py`, `uv run pytest`, `uv run ruff check .`, and `uv run mypy .`.
- [ ] Run root metadata validation with `uv run scripts/validate_socket_metadata.py`.
- [x] Run root metadata validation with `uv run scripts/validate_socket_metadata.py`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Resolve the contradictory pytest migration status.

Line 161 still says the existing pytest skill surfaces remain intact, while this checklist says uv-pytest-unit-testing was replaced. Update the earlier scope item or explicitly document the exception so the roadmap reflects the actual inventory.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ROADMAP.md` around lines 173 - 176, Resolve the contradictory pytest
migration status in ROADMAP.md by updating the earlier scope item that says the
existing pytest skill surfaces remain intact, or explicitly documenting the
exception for uv-pytest-unit-testing. Ensure the roadmap consistently reflects
whether that skill was replaced while preserving the broader migration status.

owner: gaelic-ghost
repo: python-skills
category: python-testing
allowed-tools: Bash(uv:*) Read

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== candidate files =="
git ls-files | rg '(^skills/python-testing-workflow/SKILL\.md$|^skills/python-testing-workflow/scripts/|allowed-tools|Bash\()'

echo
echo "== SKILL front matter and relevant examples =="
cat -n skills/python-testing-workflow/SKILL.md | sed -n '1,90p'

echo
echo "== scripts permissions and contents =="
for f in $(git ls-files skills/python-testing-workflow/scripts); do
  echo "--- $f ---"
  ls -la "$f"
  sed -n '1,80p' "$f"
done

echo
echo "== allowed-tools usage across python-testing-workflow =="
rg -n "allowed-tools|allowed_tools|Bash|Read|scripts/bootstrap_pytest_uv.sh|scripts/run_pytest_uv.sh|uv run|uv" skills/python-testing-workflow/skills 2>/dev/null || true
rg -n "allowed-tools|allowed_tools|Bash|Read|scripts/bootstrap_pytest_uv.sh|scripts/run_pytest_uv.sh|uv run|uv" skills/python-testing-workflow -g '!skits/*' 2>/dev/null || true

Repository: gaelic-ghost/socket

Length of output: 16083


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== repository-wide Bash permission syntax =="
rg -n "allowed-tools: Bash\(|allowed-tools|allowed_tools" -g 'SKILL.md' -g '/*.md' -g '*.yaml' .

echo
echo "== nearby SKILL permissions =="
for f in $(git ls-files '**/SKILL.md' | head -50); do
  if rg -q '^allowed-tools:|allowed_tools:' "$f"; then
    echo "--- $f ---"
    sed -n '1,16p' "$f"
  fi
done

echo
echo "== scripts entry and run_cmd usage in scripts =="
python3 - <<'PY'
from pathlib import Path
import re
for p in [Path("skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh"),
          Path("skills/python-testing-workflow/scripts/run_pytest_uv.sh")]:
    text = p.read_text()
    print(f"--- {p} ---")
    for i, line in enumerate(text.splitlines(), 1):
        if re.search(r'function run_cmd|run_cmd=|run_cmd \(', line):
            print(f"{i}: {line}")
    # Show first and last 8 lines.
    lines = text.splitlines()
    print("first 12:")
    for i,l in enumerate(lines[:12],1):
        print(f"{i}: {l}")
    print("last 12:")
    for i,l in enumerate(lines[-12:], len(lines)-11):
        print(f"{i}: {l}")
PY

Repository: gaelic-ghost/socket

Length of output: 17887


🌐 Web query:

Codex agent skills Bash allowed tools prefix syntax Bash(file:*) Bash(uv:*) SKILL.md

💡 Result:

In the context of Codex agents, Bash is a primary tool used for task execution, often within a sandbox or pseudo-terminal (PTY) environment [1][2]. The syntax Bash(file:) and Bash(uv:) are not standard primitive keywords in the official Codex tool surface but represent pattern-based task instructions or references used within skill files (SKILL.md) to manage file scopes or package management [3][4]. Skill Syntax and SKILL.md The SKILL.md file serves as the instruction manual for an agent [4][5]. It must include YAML frontmatter defining metadata like name and description, and can optionally include an allowed-tools list [3][6]. Agents use this file to understand how to interact with the environment, apply guidelines, and execute tasks [3][4]. The "file:" or "uv:" syntax often appears in community or advanced agent configurations as a shorthand convention to inform the agent: 1. Bash(file:): Often used in prompt instructions or skill references to signal that the agent should only operate on specific files or within the defined file system boundary of the current task [7][8]. 2. Bash(uv:): Used to signify tasks that leverage uv for dependency management, script execution, or package installation, ensuring that the agent uses uv for portability and performance rather than traditional virtual environments or global pip [9][10]. Bash Tool Parameters When the agent invokes the Bash tool directly, it typically accepts the following parameters [2][11]: - command (string): The shell command to execute [2]. - pty (boolean): Set to true for interactive tasks; crucial for Codex to maintain TUI or interactive CLI state [2]. - workdir (string): Restricts the agent's operations to a specific folder [2][11]. - background (boolean): Runs the task asynchronously, returning a session ID for monitoring [2]. - timeout (number): Specifies the execution time limit [2]. Best Practices - Prefer Dedicated Tools: The Codex prompting guide emphasizes using built-in tools (e.g., read_file, apply_patch, git) over Bash shell commands when a dedicated tool exists [1]. - PTY Requirement: For Codex-based agents, always set pty:true when running interactive tools or sub-agents [2][11]. - Skill Enumeration: Systems often use a list-skills script or an agent-level configuration (like AGENTS.md) to parse YAML frontmatter from SKILL.md files, allowing the agent to discover tools without bloating the context window [3].

Citations:


🌐 Web query:

site:github.com/oferhalevi/codex-skills-integration Bash(file:*) Bash(uv:*) SKILL.md

💡 Result:

The terms Bash(file:) and Bash(uv:) do not appear to be standard technical nomenclature or documented features within the context of the codex-skills-integration framework or standard Bash scripting [1]. In the context of the codex-skills-integration project, SKILL.md is a mandatory file used to define individual agent skills [1]. Each SKILL.md file must contain YAML frontmatter including at least a name and a description, followed by Markdown-formatted instructions and guidelines for the skill [1]. While the framework utilizes uv to manage dependencies and execute scripts such as list-skills, there is no documented reference to Bash(file:) or Bash(uv:) syntax [1]. It is possible these terms are misinterpretations or specific, non-public shorthand references for internal tool configurations or script execution contexts not reflected in the available documentation [1].

Citations:


Align Bash permissions with the documented script commands.

allowed-tools: Bash(uv:*) Read limits Bash commands to uv prefixes, but the shared workflow examples use bare script commands like scripts/bootstrap_pytest_uv.sh ... and scripts/run_pytest_uv.sh .... Add matching script permissions or update the examples to run only allowed commands.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/python-testing-workflow/SKILL.md` at line 10, Align the allowed-tools
declaration in SKILL.md with the documented workflow commands: either add Bash
permissions for scripts/bootstrap_pytest_uv.sh and scripts/run_pytest_uv.sh, or
change those examples to use only uv-prefixed commands. Keep the permissions and
examples consistent.

@coderabbitai coderabbitai 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.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 9

🧹 Nitpick comments (1)
plugins/python-skills/skills/python-package-workflow/SKILL.md (1)

91-104: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Smoke-check commands match upstream uv guidance; tighten the lead-in prose.

The uv run --isolated --no-project --with dist/*.whl tests/smoke_test.py pattern matches astral-sh's own documented release-workflow example. However, the sentence introducing it ("create a temporary consumer outside the package tree and install the built artifact there") describes a manual external-directory approach that the shown commands don't actually use — --isolated --no-project already provides isolation without needing a directory outside the package tree. Consider rewording the lead-in so it doesn't imply an extra manual step.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/python-skills/skills/python-package-workflow/SKILL.md` around lines
91 - 104, Revise the lead-in before the uv smoke-check commands to describe
using an isolated, no-project environment to test the built artifact, rather
than requiring a temporary consumer directory outside the package tree. Keep the
existing wheel/sdist commands and smoke-test guidance unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/maintainers/python-skills-plugin-plan.md`:
- Around line 77-80: Update the documentation passage describing the older
twelve-skill architecture metadata claim. Since
docs/architecture/architecture.json now lists all fifteen Python skill
manifests, either present the twelve-skill statement strictly as historical
context or state that the regenerated metadata is synchronized, while preserving
the current fifteen-skill inventory as the audit source of truth.

In `@plugins/python-skills/shared/bootstrap-contract.md`:
- Line 58: Update the “Test setup or testing workflow” entry in the routing
table to explicitly scope it to existing-project test setup and maintenance,
while directing initial pytest/Ruff/mypy scaffolding to
bootstrap-uv-python-workspace.

In `@plugins/python-skills/skills/build-python-agent-service/SKILL.md`:
- Line 10: Restrict the allowed-tools entry in the build-python-agent-service
skill so Bash(uv:*) is replaced by only the specific uv subcommands required by
the workflow, preventing arbitrary Python execution through uv run variants. Add
regression coverage for uv run python -c, uv run -m, and uv run --with ...
python bypass forms, while retaining the check that Bash(python:*) is absent.

In `@plugins/python-skills/skills/fastapi-service-workflow/SKILL.md`:
- Line 3: Shorten the exported frontmatter descriptions to the repository’s
accepted length while preserving their core scope. Apply the same shortened
FastAPI description in
plugins/python-skills/skills/fastapi-service-workflow/SKILL.md:3 and
skills/fastapi-service-workflow/SKILL.md:3, and the same shortened FastMCP
description in plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md:3
and skills/fastmcp-service-workflow/SKILL.md:3.

In
`@plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md`:
- Around line 16-18: Update the package-scoped testing guidance in
uv-workspace-testing.md and the corresponding command in SKILL.md to run pytest
from the selected workspace member, using uv’s --directory <member-dir> option
or explicitly documenting the required working directory; ensure tests/unit
resolves relative to that member in both affected files.

In
`@plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh`:
- Line 10: Update the SKILL_NAME-derived profile handling in
plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
(lines 10-10) and run_pytest_uv.sh (lines 9-9) to load or migrate profiles from
the previous workflow namespace when the renamed namespace is absent. Document
the required one-time migration in skills/python-testing-workflow/SKILL.md
(lines 63-64), including the old and new namespaces and the expected user
action.

In `@plugins/python-skills/skills/python-testing-workflow/SKILL.md`:
- Around line 3-10: Update the frontmatter allowed-tools declaration in the
Python testing workflow skill to authorize Bash commands beginning with
scripts/bootstrap_pytest_uv.sh and scripts/run_pytest_uv.sh, while preserving
the existing uv and Read permissions.

In `@ROADMAP.md`:
- Around line 173-176: Resolve the contradictory pytest migration status in
ROADMAP.md by updating the earlier scope item that says the existing pytest
skill surfaces remain intact, or explicitly documenting the exception for
uv-pytest-unit-testing. Ensure the roadmap consistently reflects whether that
skill was replaced while preserving the broader migration status.

In `@skills/python-testing-workflow/SKILL.md`:
- Line 10: Align the allowed-tools declaration in SKILL.md with the documented
workflow commands: either add Bash permissions for
scripts/bootstrap_pytest_uv.sh and scripts/run_pytest_uv.sh, or change those
examples to use only uv-prefixed commands. Keep the permissions and examples
consistent.

---

Nitpick comments:
In `@plugins/python-skills/skills/python-package-workflow/SKILL.md`:
- Around line 91-104: Revise the lead-in before the uv smoke-check commands to
describe using an isolated, no-project environment to test the built artifact,
rather than requiring a temporary consumer directory outside the package tree.
Keep the existing wheel/sdist commands and smoke-test guidance unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 982f914e-3181-4ccc-8934-216ca4bff702

📥 Commits

Reviewing files that changed from the base of the PR and between 0043a6d and cc81a94.

📒 Files selected for processing (55)
  • README.md
  • ROADMAP.md
  • docs/agents/bundled-subagent-role-candidates.md
  • docs/architecture/ARCHITECTURE.md
  • docs/architecture/architecture.json
  • docs/maintainers/hermes-compatibility.md
  • docs/maintainers/python-skills-plugin-plan.md
  • plugins/python-skills/.codex-plugin/plugin.json
  • plugins/python-skills/shared/bootstrap-contract.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/SKILL.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/agents/openai.yaml
  • plugins/python-skills/skills/bootstrap-python-mcp-service/references/fastmcp-docs-lookup.md
  • plugins/python-skills/skills/bootstrap-python-service/SKILL.md
  • plugins/python-skills/skills/bootstrap-uv-python-workspace/SKILL.md
  • plugins/python-skills/skills/build-python-agent-service/SKILL.md
  • plugins/python-skills/skills/choose-python-project-shape/SKILL.md
  • plugins/python-skills/skills/fastapi-service-workflow/SKILL.md
  • plugins/python-skills/skills/fastapi-service-workflow/agents/openai.yaml
  • plugins/python-skills/skills/fastmcp-service-workflow/SKILL.md
  • plugins/python-skills/skills/fastmcp-service-workflow/agents/openai.yaml
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/SKILL.md
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/agents/openai.yaml
  • plugins/python-skills/skills/python-ci-workflow/SKILL.md
  • plugins/python-skills/skills/python-package-workflow/SKILL.md
  • plugins/python-skills/skills/python-testing-workflow/SKILL.md
  • plugins/python-skills/skills/python-testing-workflow/agents/openai.yaml
  • plugins/python-skills/skills/python-testing-workflow/assets/profiles/bootstrap_pytest_uv.config.yaml
  • plugins/python-skills/skills/python-testing-workflow/assets/profiles/run_pytest_uv.config.yaml
  • plugins/python-skills/skills/python-testing-workflow/references/customization.md
  • plugins/python-skills/skills/python-testing-workflow/references/interactive-customization.md
  • plugins/python-skills/skills/python-testing-workflow/references/pytest-workflow.md
  • plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md
  • plugins/python-skills/skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
  • plugins/python-skills/skills/python-testing-workflow/scripts/run_pytest_uv.sh
  • plugins/python-skills/skills/uv-pytest-unit-testing/SKILL.md
  • plugins/python-skills/skills/uv-pytest-unit-testing/agents/openai.yaml
  • plugins/python-skills/tests/test_build_python_agent_service_skill.py
  • plugins/python-skills/tests/test_plugin_smoke.py
  • scripts/export_hermes_skills.py
  • skills.sh.json
  • skills/build-python-agent-service/SKILL.md
  • skills/fastapi-service-workflow/SKILL.md
  • skills/fastapi-service-workflow/agents/openai.yaml
  • skills/fastmcp-service-workflow/SKILL.md
  • skills/fastmcp-service-workflow/agents/openai.yaml
  • skills/python-testing-workflow/SKILL.md
  • skills/python-testing-workflow/agents/openai.yaml
  • skills/python-testing-workflow/assets/profiles/bootstrap_pytest_uv.config.yaml
  • skills/python-testing-workflow/assets/profiles/run_pytest_uv.config.yaml
  • skills/python-testing-workflow/references/customization.md
  • skills/python-testing-workflow/references/interactive-customization.md
  • skills/python-testing-workflow/references/pytest-workflow.md
  • skills/python-testing-workflow/references/uv-workspace-testing.md
  • skills/python-testing-workflow/scripts/bootstrap_pytest_uv.sh
  • skills/python-testing-workflow/scripts/run_pytest_uv.sh
💤 Files with no reviewable changes (4)
  • plugins/python-skills/skills/uv-pytest-unit-testing/agents/openai.yaml
  • plugins/python-skills/skills/uv-pytest-unit-testing/SKILL.md
  • plugins/python-skills/skills/bootstrap-python-mcp-service/agents/openai.yaml
  • plugins/python-skills/skills/integrate-fastapi-fastmcp/agents/openai.yaml
🛑 Comments failed to post (1)
plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md (1)

16-18: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file existence =="
printf '%s\n' plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md skills/python-testing-workflow/SKILL.md 2>/dev/null | while read -r f; do
  if [ -e "$f" ]; then
    printf 'EXISTS %s\n' "$f"
    wc -l "$f"
  else
    printf 'MISSING %s\n' "$f"
  fi
done

echo "== target snippets =="
sed -n '1,80p' plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md
echo '---'
sed -n '45,70p' skills/python-testing-workflow/SKILL.md

echo "== related uv-workspace/run scripts =="
fd -a 'run_pytest|pytest|pyproject|uv-workspace|uv.*test' skills/python-testing-workflow plugins/python-skills/skills/python-testing-workflow 2>/dev/null | sed 's#^\./##' | head -100
for f in $(fd 'run_pytest_|uv|pyproject' skills/python-testing-workflow plugins/python-skills/skills/python-testing-workflow 2>/dev/null); do
  echo "---- $f"
  sed -n '1,220p' "$f"
done

Repository: gaelic-ghost/socket

Length of output: 28977


🌐 Web query:

astral uv cli run --package current directory workspace members arguments relative to workspace root or member

💡 Result:

When using uv run in a workspace, the handling of command arguments and file paths depends on the current working directory (CWD) and the configuration of the workspace. 1. Resolution of Command Arguments: Any command-line arguments (including relative paths) passed to uv run are resolved relative to your current working directory [1]. They are not automatically adjusted to be relative to the workspace root or the selected workspace member. 2. Workspace Member Selection: By default, uv run discovers the workspace member associated with your CWD [2]. You can explicitly target a specific workspace member using the --package <package> flag, which allows you to execute a command within the context of that package from anywhere in the workspace [3][4]. 3. Command Execution Context: While --package ensures the command runs with the environment and dependencies of the specified member, the command itself is still executed from your CWD [2]. For example, if you run uv run --package my-member pytest from the workspace root, pytest will attempt to run in the root directory rather than the directory of my-member, which may cause it to miss files or configuration if the tool relies on the CWD [2]. 4. Path Resolution Update: Recent versions of uv (as of mid-2026) have introduced features to improve workspace awareness. Notably, uv may now detect the workspace based on the target script's directory rather than the CWD if the --preview-features target-workspace-discovery flag is enabled (or in newer default behaviors) [1][5]. In summary, standard relative paths passed as arguments to uv run remain relative to your CWD [1]. If you need a command to execute relative to a specific package's directory, you may need to use the --directory <path> flag alongside --package <package> to change the working directory before the command runs [1].

Citations:


Make package-scoped test paths member-relative.

uv run --package <member> pytest tests/unit still resolves tests/unit from the current workspace directory; --package only selects the environment. Either document the required working directory or show/use --directory <member-dir> so the path selects the member.

📍 Affects 2 files
  • plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md#L16-L18 (this comment)
  • skills/python-testing-workflow/SKILL.md#L59-L59
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@plugins/python-skills/skills/python-testing-workflow/references/uv-workspace-testing.md`
around lines 16 - 18, Update the package-scoped testing guidance in
uv-workspace-testing.md and the corresponding command in SKILL.md to run pytest
from the selected workspace member, using uv’s --directory <member-dir> option
or explicitly documenting the required working directory; ensure tests/unit
resolves relative to that member in both affected files.

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

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant