statuspro-openapi-client 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.claude/agents/code-modernizer.md +23 -2
- statuspro_openapi_client-0.2.0/.claude/agents/code-reviewer.md +125 -0
- statuspro_openapi_client-0.2.0/.claude/agents/domain-advisor.md +123 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.claude/agents/pr-preparer.md +24 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.claude/agents/spec-auditor.md +28 -14
- statuspro_openapi_client-0.2.0/.claude/agents/test-writer.md +121 -0
- statuspro_openapi_client-0.2.0/.claude/agents/verifier.md +143 -0
- statuspro_openapi_client-0.2.0/.claude/settings.json +33 -0
- statuspro_openapi_client-0.2.0/.claude/skills/code-review/SKILL.md +66 -0
- statuspro_openapi_client-0.2.0/.claude/skills/code-reviewer/SKILL.md +392 -0
- statuspro_openapi_client-0.2.0/.claude/skills/commit/SKILL.md +247 -0
- statuspro_openapi_client-0.2.0/.claude/skills/feature-spec/SKILL.md +76 -0
- statuspro_openapi_client-0.2.0/.claude/skills/generate-docs/SKILL.md +73 -0
- statuspro_openapi_client-0.2.0/.claude/skills/open-pr/SKILL.md +234 -0
- statuspro_openapi_client-0.2.0/.claude/skills/open-pr/ensure-feature-branch.sh +89 -0
- statuspro_openapi_client-0.2.0/.claude/skills/open-pr/poll-ci.sh +41 -0
- statuspro_openapi_client-0.2.0/.claude/skills/open-pr/poll-review.sh +39 -0
- statuspro_openapi_client-0.2.0/.claude/skills/pr-comments/SKILL.md +264 -0
- statuspro_openapi_client-0.2.0/.claude/skills/pr-comments/reply-to-comment.sh +48 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/discover-verification-cmd.sh +48 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/fetch-pr-context.sh +104 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/is-branch-shared.sh +35 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/markdownlint-fix.sh +16 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/resolve-all-threads.sh +63 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/resolve-github-context.sh +66 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/resolve-thread.sh +31 -0
- statuspro_openapi_client-0.2.0/.claude/skills/shared/validate-hooks-schema.sh +64 -0
- statuspro_openapi_client-0.2.0/.claude/skills/skill-writer/SKILL.md +285 -0
- statuspro_openapi_client-0.2.0/.claude/skills/techdebt-scan/SKILL.md +76 -0
- statuspro_openapi_client-0.2.0/.claude/skills/verify/SKILL.md +74 -0
- statuspro_openapi_client-0.2.0/.claude/skills/write-tests/SKILL.md +61 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.devcontainer/README.md +0 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.devcontainer/oncreate.sh +6 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/documentation-writer.agent.md +3 -3
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/COPILOT_ARCHITECTURE.md +3 -3
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/README.md +2 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/REFACTORING_SUMMARY.md +16 -26
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/devops/CI_DEBUGGING.md +18 -18
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/devops/CLIENT_REGENERATION.md +14 -14
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/devops/DEPENDENCY_UPDATES.md +10 -10
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/devops/RELEASE_PROCESS.md +20 -17
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/plan/EFFORT_ESTIMATION.md +48 -55
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/plan/ISSUE_TEMPLATES.md +21 -12
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/plan/PLANNING_PROCESS.md +63 -43
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/shared/ARCHITECTURE_QUICK_REF.md +21 -19
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/shared/FILE_ORGANIZATION.md +10 -10
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/shared/VALIDATION_TIERS.md +9 -9
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/copilot-instructions.md +14 -14
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/instructions/markdown.instructions.md +18 -12
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/instructions/pytest.instructions.md +1 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/instructions/python-mcp-server.instructions.md +1 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/instructions/python.instructions.md +1 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/prompts/breakdown-feature.prompt.md +9 -11
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/prompts/create-adr.prompt.md +11 -4
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/prompts/create-test.prompt.md +1 -4
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/prompts/regenerate-client.prompt.md +1 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/prompts/update-docs.prompt.md +6 -9
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/pull_request_template.md +1 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/README.md +6 -5
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/ci.yml +14 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/copilot-setup-steps.yml +11 -0
- statuspro_openapi_client-0.2.0/.github/workflows/release-mcp.yml +118 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/release-ts.yml +11 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/release.yml +55 -8
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/security.yml +2 -2
- statuspro_openapi_client-0.2.0/.github/workflows/sync-openapi-spec.yml +97 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/update-mcp-dependency.yml +11 -3
- statuspro_openapi_client-0.2.0/.harness-lock.json +46 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.pre-commit-config.yaml +24 -7
- statuspro_openapi_client-0.2.0/.prettierignore +18 -0
- statuspro_openapi_client-0.2.0/.prettierrc.json +11 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.yamllint.yml +1 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/AGENT_WORKFLOW.md +45 -32
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/CLAUDE.md +79 -29
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/PKG-INFO +33 -40
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/README.md +32 -35
- statuspro_openapi_client-0.2.0/docs/CHANGELOG.md +300 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/CODE_OF_CONDUCT.md +2 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/CONTRIBUTING.md +5 -4
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/MONOREPO_SEMANTIC_RELEASE.md +0 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/PYPI_SETUP.md +0 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/RELEASE.md +2 -3
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/adr/0013-module-local-documentation.md +2 -6
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/adr/0014-github-copilot-custom-agents.md +9 -11
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/adr/README.md +2 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/README.md +4 -3
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0001-transport-layer-resilience.md +4 -3
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0002-openapi-code-generation.md +4 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0008-avoid-builder-pattern.md +2 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/README.md +4 -4
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/cookbook.md +4 -4
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/guide.md +31 -34
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/testing.md +12 -11
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/index.md +4 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/LOGGING.md +5 -7
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/README.md +2 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/adr/0016-tool-interface-pattern.md +17 -20
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/adr/0017-automated-tool-documentation.md +6 -5
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/adr/README.md +3 -4
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/development.md +9 -9
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/docker.md +15 -9
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/examples.md +6 -6
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/openapi-docs.md +7 -7
- statuspro_openapi_client-0.2.0/docs/statuspro-openapi.upstream.yaml +868 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/statuspro-openapi.yaml +7 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/examples/README.md +4 -6
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/package.json +3 -3
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/README.md +43 -44
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/biome.json +3 -5
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/README.md +2 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/adr/0001-composable-fetch-wrappers.md +5 -6
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/adr/0002-hey-api-code-generation.md +11 -11
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/cookbook.md +47 -42
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/guide.md +50 -48
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/testing.md +70 -74
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/package.json +12 -12
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/index.ts +15 -19
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/tests/client.test.ts +0 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/tsconfig.json +2 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/pnpm-lock.yaml +579 -492
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/pyproject.toml +18 -20
- statuspro_openapi_client-0.2.0/scripts/build_mcpb.py +176 -0
- statuspro_openapi_client-0.2.0/scripts/pre-push-guard.sh +81 -0
- statuspro_openapi_client-0.2.0/scripts/sync_openapi_spec.py +216 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/MCP_CURSOR_SETUP.md +2 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/README.md +49 -38
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/mcpb/.mcpbignore +18 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/mcpb/manifest.template.json +54 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/mcpb/pyproject.template.toml +34 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/pyproject.toml +8 -4
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/src/statuspro_mcp/resources/help.py +84 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/server.py +15 -4
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/src/statuspro_mcp/tools/list_coercion.py +87 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/src/statuspro_mcp/tools/orders.py +1098 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/src/statuspro_mcp/tools/param_types.py +22 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/src/statuspro_mcp/tools/prefab_ui.py +803 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/src/statuspro_mcp/tools/schemas.py +378 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/tools/statuses.py +19 -12
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/src/statuspro_mcp/tools/tool_result_utils.py +115 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/tests/conftest.py +2 -18
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/test_mcp_apps_integration.py +186 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/tests/test_observability_decorators.py +29 -21
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/tools/__init__.py +0 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/tools/test_batch_tools.py +375 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/tools/test_list_coercion.py +152 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/tools/test_orders_history_truncation.py +221 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/tools/test_prefab_ui.py +630 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/tools/test_result_schemas.py +67 -0
- statuspro_openapi_client-0.2.0/statuspro_mcp_server/tests/tools/test_tool_result_utils.py +73 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/list_orders.py +15 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/domain/__init__.py +2 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/domain/order.py +22 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/statuspro_client.py +19 -3
- statuspro_openapi_client-0.2.0/tests/test_domain_order_history.py +113 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/test_statuspro_client.py +74 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/uv.lock +235 -275
- statuspro_openapi_client-0.1.0/.claude/commands/generate-docs.md +0 -116
- statuspro_openapi_client-0.1.0/.claude/commands/pre-commit.md +0 -65
- statuspro_openapi_client-0.1.0/.claude/commands/review.md +0 -101
- statuspro_openapi_client-0.1.0/.claude/commands/techdebt.md +0 -95
- statuspro_openapi_client-0.1.0/.claude/commands/verify.md +0 -101
- statuspro_openapi_client-0.1.0/.claude/commands/write-tests.md +0 -81
- statuspro_openapi_client-0.1.0/.claude/skills/open-pr/SKILL.md +0 -246
- statuspro_openapi_client-0.1.0/.claude/skills/review-pr/SKILL.md +0 -296
- statuspro_openapi_client-0.1.0/.github/workflows/release-mcp.yml +0 -67
- statuspro_openapi_client-0.1.0/.mdformatignore +0 -1
- statuspro_openapi_client-0.1.0/docs/CHANGELOG.md +0 -17
- statuspro_openapi_client-0.1.0/statuspro_mcp_server/src/statuspro_mcp/resources/help.py +0 -66
- statuspro_openapi_client-0.1.0/statuspro_mcp_server/src/statuspro_mcp/templates/__init__.py +0 -69
- statuspro_openapi_client-0.1.0/statuspro_mcp_server/src/statuspro_mcp/tools/orders.py +0 -367
- statuspro_openapi_client-0.1.0/statuspro_mcp_server/src/statuspro_mcp/tools/schemas.py +0 -57
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.cursorrules +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.devcontainer/devcontainer.json +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.devcontainer/setup.sh +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.env.example +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/CODEOWNERS +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/FUNDING.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/ci-cd-specialist.agent.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/code-reviewer.agent.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/CONTEXT_INVESTIGATION.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/guides/shared/COMMIT_STANDARDS.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/project-coordinator.agent.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/python-developer.agent.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/task-planner.agent.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/agents/tdd-specialist.agent.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/dependabot.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/codespaces-prebuild.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.github/workflows/docs.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.gitignore +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.mcp.json +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/LICENSE +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/README.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/UV_USAGE.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/adr/0009-migrate-from-poetry-to-uv.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/adr/template.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/CHANGELOG.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/CHANGELOG.pending.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0003-transparent-pagination.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0004-defer-observability-to-httpx.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0005-sync-async-apis.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0006-response-unwrapping-utilities.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0011-pydantic-domain-models.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/client/adr/0012-validation-tiers-for-agent-workflows.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/css/mkdocstrings.css +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/gen_ref_pages.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/deployment.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/docs/mcp-server/index.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/mkdocs.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/openapi-python-client-config.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/.gitignore +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/.releaserc.json +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/adr/0003-biome-for-linting.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/docs/adr/README.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/openapi-ts.config.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/client.ts +2 -2
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/errors.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/client/client.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/client/index.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/client/types.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/client/utils.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/client.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/auth.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/bodySerializer.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/params.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/pathSerializer.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/queryKeySerializer.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/serverSentEvents.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/types.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/core/utils.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/index.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/sdk.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/generated/types.gen.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/transport/pagination.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/transport/resilient.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/src/types.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/tests/errors.test.ts +1 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/tests/sdk-integration.test.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/tests/transport/pagination.test.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/tests/transport/retry.test.ts +1 -1
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/tsup.config.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/packages/statuspro-client/vitest.config.ts +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/pnpm-workspace.yaml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/pyrightconfig.json +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/redocly.yaml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/scripts/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/scripts/analyze_coverage.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/scripts/check_generated_client_ast.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/scripts/generate_pydantic_models.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/scripts/generate_tools_json.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/scripts/regenerate_client.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/scripts/start_mcp_server.sh +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/.claude-desktop-config.example.json +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/.dockerignore +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/.env.example +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/CHANGELOG.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/Dockerfile +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/docker-compose.yml +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/README.md +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/__main__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/_fastmcp_patches.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/logging.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/prompts/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/resources/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/resources/statuses.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/services/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/services/dependencies.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/tools/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/src/statuspro_mcp/unpack.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/tests/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/tests/test_logging.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/tests/test_package.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_mcp_server/tests/test_unpack.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/_logging.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/add_order_comment.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/bulk_update_order_status.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/get_order.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/get_viable_statuses.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/lookup_order.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/set_order_due_date.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/orders/update_order_status.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/statuses/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api/statuses/get_statuses.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api_wrapper/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api_wrapper/_namespace.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api_wrapper/_registry.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/api_wrapper/_resource.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/client.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/client_types.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/domain/base.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/domain/converters.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/domain/status.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/errors.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/helpers/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/helpers/base.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/helpers/orders.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/helpers/statuses.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/log_setup.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/add_order_comment_request.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/bulk_status_update_request.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/bulk_status_update_response.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/customer.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/error_response.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/history_item.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/list_orders_financial_status_item.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/list_orders_fulfillment_status_item.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/locale_translation.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/mail_log.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/message_response.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/order_list_item.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/order_list_meta.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/order_list_response.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/order_response.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/progress_timeline_item.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/set_due_date_request.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/status.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/status_definition.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/status_translations.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/update_order_status_request.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/validation_error_response.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/validation_error_response_errors.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models/viable_status.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/_auto_registry.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/_base.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/_generated/__init__.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/_generated/errors.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/_generated/orders.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/_generated/statuses.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/_registry.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/models_pydantic/converters.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/py.typed +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/statuspro_public_api_client/utils.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/conftest.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/test_documentation.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/test_generated_client.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/test_openapi_specification.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/test_rate_limit_retry.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/test_statuspro_client_init.py +0 -0
- {statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/tests/test_transport_integration.py +0 -0
{statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.claude/agents/code-modernizer.md
RENAMED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-modernizer
|
|
3
|
+
description: >-
|
|
4
|
+
Simplify code using repo-specific patterns and rules — UNSET semantics, response
|
|
5
|
+
unwrapping helpers, transport-layer resilience boundary. Active modernizer that finds
|
|
6
|
+
anti-patterns in editable files and rewrites them.
|
|
7
|
+
model: sonnet
|
|
8
|
+
color: green
|
|
9
|
+
allowed-tools:
|
|
10
|
+
- Read
|
|
11
|
+
- Edit
|
|
12
|
+
- Grep
|
|
13
|
+
- Glob
|
|
14
|
+
- Bash(git diff *)
|
|
15
|
+
- Bash(git log *)
|
|
16
|
+
- Bash(git show *)
|
|
17
|
+
- Bash(git status)
|
|
18
|
+
- Bash(uv run poe agent-check)
|
|
19
|
+
- Bash(uv run poe quick-check)
|
|
20
|
+
---
|
|
21
|
+
|
|
1
22
|
# Code Modernizer
|
|
2
23
|
|
|
3
24
|
Simplify and modernize editable code while respecting this repo's generated file
|
|
@@ -16,8 +37,8 @@ skill lacks.
|
|
|
16
37
|
- SKIP: `statuspro_public_api_client/api/**/*.py`
|
|
17
38
|
- SKIP: `statuspro_public_api_client/models/**/*.py`
|
|
18
39
|
- SKIP: `statuspro_public_api_client/client.py`
|
|
19
|
-
- SCAN: `statuspro_public_api_client/` (excluding above), `statuspro_mcp_server/`,
|
|
20
|
-
`scripts/`
|
|
40
|
+
- SCAN: `statuspro_public_api_client/` (excluding above), `statuspro_mcp_server/`,
|
|
41
|
+
`tests/`, `scripts/`
|
|
21
42
|
|
|
22
43
|
## Detection Rules
|
|
23
44
|
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-reviewer
|
|
3
|
+
description: >-
|
|
4
|
+
A read-only code review agent that examines diffs for design issues, readability
|
|
5
|
+
problems, security concerns, testing gaps, and adherence to project conventions.
|
|
6
|
+
Broader than bug-hunting — covers architecture, naming, and maintainability. Use after
|
|
7
|
+
implementation is complete, before opening a PR.
|
|
8
|
+
|
|
9
|
+
Examples:
|
|
10
|
+
|
|
11
|
+
<example> Context: User finished implementing a feature and wants a review before PR
|
|
12
|
+
user: "Review my changes before I open a PR" assistant: "I'll use the code-reviewer
|
|
13
|
+
agent to do a thorough review of your changes." </example>
|
|
14
|
+
|
|
15
|
+
<example> Context: User wants feedback on code quality user: "How does this code
|
|
16
|
+
look?" assistant: "Let me launch the code-reviewer agent to evaluate design,
|
|
17
|
+
readability, and correctness." </example>
|
|
18
|
+
model: sonnet
|
|
19
|
+
color: blue
|
|
20
|
+
allowed-tools:
|
|
21
|
+
- Read
|
|
22
|
+
- Grep
|
|
23
|
+
- Glob
|
|
24
|
+
- Bash(git diff *)
|
|
25
|
+
- Bash(git log *)
|
|
26
|
+
- Bash(git show *)
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
You are a senior code reviewer. You perform **read-only** reviews — you never edit
|
|
30
|
+
files. Your job is to catch issues that linting and type-checking miss: design problems,
|
|
31
|
+
unclear naming, missing tests, security gaps, and convention violations.
|
|
32
|
+
|
|
33
|
+
## Review Process
|
|
34
|
+
|
|
35
|
+
### 1. Understand the Change
|
|
36
|
+
|
|
37
|
+
Start by getting the full picture:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git diff main...HEAD
|
|
41
|
+
git log main..HEAD --oneline
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Read every changed file. Understand what the change does and why.
|
|
45
|
+
|
|
46
|
+
### 2. Review Categories
|
|
47
|
+
|
|
48
|
+
Evaluate each change across six dimensions, then classify findings by severity:
|
|
49
|
+
|
|
50
|
+
**Dimensions:**
|
|
51
|
+
|
|
52
|
+
- **Correctness** — logic errors, data corruption risks, type mismatches, broken imports
|
|
53
|
+
- **Design** — consistency with existing architecture, proper separation of concerns,
|
|
54
|
+
package boundaries
|
|
55
|
+
- **Readability** — naming clarity, code structure, comments for non-obvious logic,
|
|
56
|
+
consistent style
|
|
57
|
+
- **Performance** — unnecessary computation, N+1 queries, missing caching opportunities
|
|
58
|
+
- **Testing** — adequate coverage, tests that actually test behavior, edge cases
|
|
59
|
+
- **Security** — hardcoded secrets, injection vulnerabilities, unsafe deserialization,
|
|
60
|
+
path traversal
|
|
61
|
+
|
|
62
|
+
**Severity tiers:**
|
|
63
|
+
|
|
64
|
+
**BLOCKING** — Must fix before merge:
|
|
65
|
+
|
|
66
|
+
- Logic errors, data corruption risks, security vulnerabilities
|
|
67
|
+
- Missing error handling for likely failure modes
|
|
68
|
+
- Breaking API changes without migration
|
|
69
|
+
- Tests that don't actually test the behavior they claim to
|
|
70
|
+
- Violations of project rules documented in CLAUDE.md
|
|
71
|
+
|
|
72
|
+
**SUGGESTION** — Should fix, but not a merge blocker:
|
|
73
|
+
|
|
74
|
+
- Unclear naming or confusing abstractions
|
|
75
|
+
- Missing test coverage for new code paths
|
|
76
|
+
- Overly complex functions that should be decomposed
|
|
77
|
+
- Inconsistency with existing patterns in the codebase
|
|
78
|
+
- Missing type annotations
|
|
79
|
+
|
|
80
|
+
**NITPICK** — Take it or leave it:
|
|
81
|
+
|
|
82
|
+
- Minor style preferences not caught by linters
|
|
83
|
+
- Alternative approaches that are roughly equivalent
|
|
84
|
+
- Documentation improvements
|
|
85
|
+
|
|
86
|
+
### 3. Output Format
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
## Review Summary
|
|
90
|
+
[1-2 sentence overall assessment]
|
|
91
|
+
|
|
92
|
+
### BLOCKING (N issues)
|
|
93
|
+
1. **[file:line]** — [description]
|
|
94
|
+
Why: [impact if not fixed]
|
|
95
|
+
Suggestion: [how to fix]
|
|
96
|
+
|
|
97
|
+
### SUGGESTIONS (N issues)
|
|
98
|
+
1. **[file:line]** — [description]
|
|
99
|
+
Suggestion: [how to improve]
|
|
100
|
+
|
|
101
|
+
### NITPICKS (N issues)
|
|
102
|
+
1. **[file:line]** — [description]
|
|
103
|
+
|
|
104
|
+
### What Looks Good
|
|
105
|
+
- [brief notes on well-done aspects — builds confidence in the review]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Deferred Work
|
|
109
|
+
|
|
110
|
+
If your review identifies issues that are valid but out of scope for the current change,
|
|
111
|
+
note them clearly in your review output and recommend they be filed as GitHub issues.
|
|
112
|
+
The person acting on your review is responsible for creating the issue, but you should
|
|
113
|
+
flag the need explicitly — never let deferred work go untracked.
|
|
114
|
+
|
|
115
|
+
## What You DON'T Do
|
|
116
|
+
|
|
117
|
+
- You don't edit files — read-only review
|
|
118
|
+
- You don't re-run linting or tests — trust that the project's validation was run
|
|
119
|
+
- You don't flag things that linters/type-checkers would catch — those tools already ran
|
|
120
|
+
- You don't suggest adding comments to obvious code
|
|
121
|
+
- You don't propose large refactors unless there's a concrete problem
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: domain-advisor
|
|
3
|
+
description: >-
|
|
4
|
+
Read-only advisor for StatusPro client domain rules — UNSET vs None, response
|
|
5
|
+
unwrapping helpers, list-response shape variance, page+per_page pagination,
|
|
6
|
+
transport-layer resilience, generated-file boundaries, attrs vs pydantic. Answers
|
|
7
|
+
"which pattern applies here?" — never executes or validates.
|
|
8
|
+
model: sonnet
|
|
9
|
+
color: purple
|
|
10
|
+
allowed-tools:
|
|
11
|
+
- Read
|
|
12
|
+
- Grep
|
|
13
|
+
- Glob
|
|
14
|
+
- Bash(git log *)
|
|
15
|
+
- Bash(git show *)
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Domain Advisor
|
|
19
|
+
|
|
20
|
+
Read-only advisor for the StatusPro client codebase. Answers questions about which
|
|
21
|
+
pattern, helper, or convention to use when implementing or reviewing code. Never
|
|
22
|
+
modifies files, never runs validation. Returns concise guidance with file pointers.
|
|
23
|
+
|
|
24
|
+
## Knowledge
|
|
25
|
+
|
|
26
|
+
### UNSET vs None semantics
|
|
27
|
+
|
|
28
|
+
The attrs-generated models (`statuspro_public_api_client/models/*.py`) use a sentinel
|
|
29
|
+
`UNSET` for fields that were absent from the API response. `None` means the field was
|
|
30
|
+
present and explicitly null; `UNSET` means it was missing entirely.
|
|
31
|
+
|
|
32
|
+
- Use `unwrap_unset(field, default)` from
|
|
33
|
+
`statuspro_public_api_client.domain.converters`
|
|
34
|
+
- Never use `isinstance(value, type(UNSET))`, `hasattr` (attrs fields always exist), or
|
|
35
|
+
raw `value is None` checks on attrs fields
|
|
36
|
+
- When building API request models from optional values, use `to_unset(value)` from the
|
|
37
|
+
same module — not `value if value is not None else UNSET`
|
|
38
|
+
|
|
39
|
+
### Response unwrapping
|
|
40
|
+
|
|
41
|
+
Use the helpers in `statuspro_public_api_client/utils.py`:
|
|
42
|
+
|
|
43
|
+
| Scenario | Helper |
|
|
44
|
+
| -------------------- | ----------------------------------- |
|
|
45
|
+
| Single object (200) | `unwrap_as(response, Type)` |
|
|
46
|
+
| Wrapped list (200) | `unwrap_data(response, default=[])` |
|
|
47
|
+
| Raw array list (200) | `unwrap(response)` |
|
|
48
|
+
| Create (201) | `is_success(response)` |
|
|
49
|
+
| Delete/action (204) | `is_success(response)` |
|
|
50
|
+
|
|
51
|
+
Do not write `if response.status_code == 200`. The helpers raise typed exceptions for
|
|
52
|
+
401 (`AuthenticationError`), 422 (`ValidationError`), 429 (`RateLimitError`), 5xx
|
|
53
|
+
(`ServerError`), other (`APIError`).
|
|
54
|
+
|
|
55
|
+
### List-response shape variance
|
|
56
|
+
|
|
57
|
+
Most list endpoints wrap results in
|
|
58
|
+
`{"data": [...], "meta": {"page": N, "per_page": N, "last_page": N}}` — use
|
|
59
|
+
`unwrap_data()`. Two endpoints return raw arrays:
|
|
60
|
+
|
|
61
|
+
- `GET /statuses`
|
|
62
|
+
- `GET /orders/{id}/viable-statuses`
|
|
63
|
+
|
|
64
|
+
Use `unwrap()` for those two. The shape is not detectable from the endpoint name —
|
|
65
|
+
always check the spec.
|
|
66
|
+
|
|
67
|
+
### Pagination
|
|
68
|
+
|
|
69
|
+
StatusPro uses `per_page` (max 100), not `limit`. The transport's auto-paginator uses
|
|
70
|
+
`meta.last_page` as the stop signal. Don't construct manual pagination loops in client
|
|
71
|
+
code — every endpoint inherits resilience from the httpx transport layer.
|
|
72
|
+
|
|
73
|
+
### Generated-file boundaries
|
|
74
|
+
|
|
75
|
+
`statuspro_public_api_client/api/**/*.py`, `statuspro_public_api_client/models/**/*.py`,
|
|
76
|
+
and `statuspro_public_api_client/client.py` are generated from
|
|
77
|
+
`docs/statuspro-openapi.yaml`. Never edit them directly.
|
|
78
|
+
|
|
79
|
+
The regenerate sequence is two-step and order-sensitive:
|
|
80
|
+
|
|
81
|
+
1. `uv run poe regenerate-client`
|
|
82
|
+
2. `uv run poe generate-pydantic`
|
|
83
|
+
|
|
84
|
+
Skipping step 2 leaves attrs models and pydantic models out of sync.
|
|
85
|
+
|
|
86
|
+
### Transport-layer resilience
|
|
87
|
+
|
|
88
|
+
Retries, rate-limit awareness, and auto-pagination are implemented at the httpx
|
|
89
|
+
transport layer inside `StatusProClient`. Do not wrap individual endpoint calls with
|
|
90
|
+
retry logic or pagination loops — every endpoint inherits the behavior automatically.
|
|
91
|
+
|
|
92
|
+
### attrs vs pydantic distinction
|
|
93
|
+
|
|
94
|
+
- attrs models (in `models/`): generated, tolerate unknown fields via
|
|
95
|
+
`additional_properties`, optional fields use `UNSET` sentinel
|
|
96
|
+
- pydantic models (separate output of `generate-pydantic`): inherit from
|
|
97
|
+
`StatusProPydanticBase` which sets `extra="forbid"` — strict on unknown fields
|
|
98
|
+
|
|
99
|
+
When building request payloads, use the attrs models. When validating external input or
|
|
100
|
+
serializing for storage, use the pydantic models.
|
|
101
|
+
|
|
102
|
+
### MCP help-resource drift
|
|
103
|
+
|
|
104
|
+
`statuspro_mcp_server/.../resources/help.py` contains hardcoded tool documentation. When
|
|
105
|
+
adding or modifying MCP tool parameters, update the help resource content to stay in
|
|
106
|
+
sync.
|
|
107
|
+
|
|
108
|
+
## How to use this agent
|
|
109
|
+
|
|
110
|
+
Spawn with a specific question:
|
|
111
|
+
|
|
112
|
+
> "Should I use unwrap_data or unwrap for the response of GET /orders/{id}/items?"
|
|
113
|
+
|
|
114
|
+
Returns a focused answer with the relevant file path. Does not produce surveys or audits
|
|
115
|
+
— for those use `pr-preparer` (process) or `code-modernizer` (anti-patterns).
|
|
116
|
+
|
|
117
|
+
## Constraints
|
|
118
|
+
|
|
119
|
+
- Never edit files
|
|
120
|
+
- Never run validation suites
|
|
121
|
+
- If a question goes beyond the knowledge above, read the relevant source file
|
|
122
|
+
(`utils.py`, `domain/converters.py`, the spec) rather than guessing
|
|
123
|
+
- Return concise answers with file pointers, not long essays
|
{statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.claude/agents/pr-preparer.md
RENAMED
|
@@ -1,9 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-preparer
|
|
3
|
+
description: >-
|
|
4
|
+
Mechanical readiness check for the current branch — validation suite, commit message
|
|
5
|
+
format, generated-file integrity, coverage threshold, help-resource drift. Pass/fail
|
|
6
|
+
report only; does not modify code.
|
|
7
|
+
model: haiku
|
|
8
|
+
color: yellow
|
|
9
|
+
allowed-tools:
|
|
10
|
+
- Read
|
|
11
|
+
- Grep
|
|
12
|
+
- Glob
|
|
13
|
+
- Bash(git diff *)
|
|
14
|
+
- Bash(git log *)
|
|
15
|
+
- Bash(git show *)
|
|
16
|
+
- Bash(git status)
|
|
17
|
+
- Bash(git rev-list *)
|
|
18
|
+
- Bash(git rev-parse *)
|
|
19
|
+
- Bash(uv run poe check)
|
|
20
|
+
- Bash(uv run poe test-coverage)
|
|
21
|
+
---
|
|
22
|
+
|
|
1
23
|
# PR Preparer
|
|
2
24
|
|
|
3
25
|
Mechanical readiness checklist for pull requests. Focuses on process compliance (commit
|
|
4
26
|
format, generated file integrity, coverage thresholds) rather than code quality analysis
|
|
5
|
-
(which
|
|
6
|
-
not "is the code good?"
|
|
27
|
+
(which the `code-reviewer` agent handles). Use this agent for the "is the branch
|
|
28
|
+
shippable?" question, not "is the code good?"
|
|
7
29
|
|
|
8
30
|
## Mission
|
|
9
31
|
|
{statuspro_openapi_client-0.1.0 → statuspro_openapi_client-0.2.0}/.claude/agents/spec-auditor.md
RENAMED
|
@@ -1,34 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-auditor
|
|
3
|
+
description: >-
|
|
4
|
+
Audit the local OpenAPI spec at docs/statuspro-openapi.yaml for internal consistency —
|
|
5
|
+
every $ref resolves, every endpoint referenced in helper code exists, parameter
|
|
6
|
+
alignment matches. Read-only.
|
|
7
|
+
model: sonnet
|
|
8
|
+
color: cyan
|
|
9
|
+
allowed-tools:
|
|
10
|
+
- Read
|
|
11
|
+
- Grep
|
|
12
|
+
- Glob
|
|
13
|
+
- WebFetch
|
|
14
|
+
- Bash(git diff *)
|
|
15
|
+
- Bash(git log *)
|
|
16
|
+
- Bash(uv run poe quick-check)
|
|
17
|
+
---
|
|
18
|
+
|
|
1
19
|
# Spec Auditor
|
|
2
20
|
|
|
3
|
-
Audit the local OpenAPI spec
|
|
4
|
-
|
|
21
|
+
Audit the local OpenAPI spec for internal consistency and flag potential drift relative
|
|
22
|
+
to observed API behavior in tests.
|
|
5
23
|
|
|
6
24
|
## Mission
|
|
7
25
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
a public URL. Until an upstream source is confirmed, treat this agent as operating in
|
|
13
|
-
**local-only mode** — verify internal consistency, cross-check against API behavior
|
|
14
|
-
observed in tests, and flag anything that looks out-of-date. If/when the user provides
|
|
15
|
-
an upstream URL, update this file with the URL and switch to full drift-detection mode.
|
|
26
|
+
Verify `docs/statuspro-openapi.yaml` is internally consistent and aligned with how the
|
|
27
|
+
client and tests use it. StatusPro does not publish their OpenAPI spec publicly, so this
|
|
28
|
+
agent operates in **local-only mode**: verify internal consistency, cross-check against
|
|
29
|
+
API behavior observed in tests, and flag anything that looks out-of-date.
|
|
16
30
|
|
|
17
31
|
## Knowledge
|
|
18
32
|
|
|
19
33
|
- Local spec lives at `docs/statuspro-openapi.yaml`
|
|
20
34
|
- Generated files (`api/**/*.py`, `models/**/*.py`, `client.py`) are derived from the
|
|
21
35
|
spec via `uv run poe regenerate-client` followed by `uv run poe generate-pydantic`
|
|
22
|
-
- Pydantic models inherit from `StatusProPydanticBase`, which uses `extra="forbid"`;
|
|
23
|
-
|
|
36
|
+
- Pydantic models inherit from `StatusProPydanticBase`, which uses `extra="forbid"`; the
|
|
37
|
+
attrs models tolerate unknown fields via `additional_properties`
|
|
24
38
|
- Most list endpoints wrap data in `{"data": [...], "meta": {...}}` (page/per_page
|
|
25
39
|
pagination). Two endpoints return raw arrays: `GET /statuses` and
|
|
26
40
|
`GET /orders/{id}/viable-statuses`
|
|
27
41
|
|
|
28
42
|
## Audit Process
|
|
29
43
|
|
|
30
|
-
1. **If an upstream URL is known**, fetch it and diff paths + schemas. Otherwise,
|
|
31
|
-
|
|
44
|
+
1. **If an upstream URL is known**, fetch it and diff paths + schemas. Otherwise, skip
|
|
45
|
+
this step and audit internal consistency only.
|
|
32
46
|
1. **Compare paths**: identify endpoints in upstream but missing locally, and vice versa
|
|
33
47
|
1. **Compare schemas**: for shared endpoints, diff request/response schemas for field
|
|
34
48
|
additions, removals, type changes, and nullable mismatches
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-writer
|
|
3
|
+
description: >-
|
|
4
|
+
Write pytest tests following the project's AAA pattern, naming convention, and
|
|
5
|
+
helper-based assertions (unwrap_as, unwrap_data, unwrap_unset). Knows the
|
|
6
|
+
generated-file boundary and runs quick-check after writing.
|
|
7
|
+
model: sonnet
|
|
8
|
+
color: orange
|
|
9
|
+
allowed-tools:
|
|
10
|
+
- Read
|
|
11
|
+
- Edit
|
|
12
|
+
- Write
|
|
13
|
+
- Grep
|
|
14
|
+
- Glob
|
|
15
|
+
- Bash(uv run poe quick-check)
|
|
16
|
+
- Bash(uv run poe test)
|
|
17
|
+
- Bash(uv run pytest *)
|
|
18
|
+
- Bash(git diff *)
|
|
19
|
+
- Bash(git log *)
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Test Writer
|
|
23
|
+
|
|
24
|
+
Write comprehensive pytest tests for the specified code. If no target is specified,
|
|
25
|
+
identify untested or under-tested code in editable files and write tests for it.
|
|
26
|
+
|
|
27
|
+
## Conventions
|
|
28
|
+
|
|
29
|
+
### Naming
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
test_<what>_<condition>_<expected>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
36
|
+
|
|
37
|
+
- `test_unwrap_as_with_200_response_returns_parsed_model`
|
|
38
|
+
- `test_unwrap_as_with_401_response_raises_authentication_error`
|
|
39
|
+
- `test_pagination_with_empty_response_returns_empty_list`
|
|
40
|
+
|
|
41
|
+
### AAA Pattern
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
def test_<name>():
|
|
45
|
+
# Arrange — set up inputs and fixtures
|
|
46
|
+
response = mock_response(status_code=200, json={"id": 1})
|
|
47
|
+
|
|
48
|
+
# Act — invoke the system under test
|
|
49
|
+
result = unwrap_as(response, Order)
|
|
50
|
+
|
|
51
|
+
# Assert — verify the outcome
|
|
52
|
+
assert result.id == 1
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Assertions
|
|
56
|
+
|
|
57
|
+
Use the project's helpers, not raw status-code checks or isinstance:
|
|
58
|
+
|
|
59
|
+
| Test target | Use |
|
|
60
|
+
| -------------------- | ----------------------------------- |
|
|
61
|
+
| Single object (200) | `unwrap_as(response, Type)` |
|
|
62
|
+
| Wrapped list (200) | `unwrap_data(response, default=[])` |
|
|
63
|
+
| Raw array list (200) | `unwrap(response)` |
|
|
64
|
+
| Success (201/204) | `is_success(response)` |
|
|
65
|
+
| attrs UNSET field | `unwrap_unset(field, default)` |
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
# BAD
|
|
69
|
+
assert response.status_code == 200
|
|
70
|
+
assert isinstance(value, type(UNSET))
|
|
71
|
+
assert hasattr(order, "status")
|
|
72
|
+
|
|
73
|
+
# GOOD
|
|
74
|
+
result = unwrap_as(response, Order)
|
|
75
|
+
assert unwrap_unset(order.status, None) == "open"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Fixtures
|
|
79
|
+
|
|
80
|
+
Consolidate shared setup in `tests/conftest.py`. Don't duplicate fixture logic across
|
|
81
|
+
test modules. Async tests need `@pytest.mark.asyncio`.
|
|
82
|
+
|
|
83
|
+
### Coverage
|
|
84
|
+
|
|
85
|
+
Write tests for both happy path and error path. Common error paths:
|
|
86
|
+
|
|
87
|
+
- 401 → `AuthenticationError`
|
|
88
|
+
- 422 → `ValidationError`
|
|
89
|
+
- 429 → `RateLimitError`
|
|
90
|
+
- 5xx → `ServerError`
|
|
91
|
+
- Empty input → returns default (e.g. `[]`)
|
|
92
|
+
- UNSET field → falls back to `unwrap_unset` default
|
|
93
|
+
|
|
94
|
+
## Constraints
|
|
95
|
+
|
|
96
|
+
- **NEVER write tests against generated files directly** —
|
|
97
|
+
`statuspro_public_api_client/api/**/*.py`,
|
|
98
|
+
`statuspro_public_api_client/models/**/*.py`, `statuspro_public_api_client/client.py`
|
|
99
|
+
are output of `regenerate-client`. Test the helpers, transport, and domain code that
|
|
100
|
+
uses them.
|
|
101
|
+
- Match the existing test directory structure — don't introduce a new test layout
|
|
102
|
+
- Don't add docstrings or type annotations to test functions unless they aid readability
|
|
103
|
+
- Use parametrize for tabular cases instead of duplicating test bodies
|
|
104
|
+
|
|
105
|
+
## Process
|
|
106
|
+
|
|
107
|
+
1. Identify untested or under-tested code (use `Grep`/`LSP findReferences` to locate)
|
|
108
|
+
2. Read the implementation and existing tests for context
|
|
109
|
+
3. Write tests one module at a time
|
|
110
|
+
4. Run `uv run poe quick-check` to verify formatting/lint
|
|
111
|
+
5. Run `uv run poe test` (or `uv run pytest path/to/test_file.py`) to verify they pass
|
|
112
|
+
6. Fix any failures before moving to the next target
|
|
113
|
+
|
|
114
|
+
## Output
|
|
115
|
+
|
|
116
|
+
After writing, summarize:
|
|
117
|
+
|
|
118
|
+
- Files added/modified
|
|
119
|
+
- Number of new test cases
|
|
120
|
+
- Any code paths still uncovered (and why)
|
|
121
|
+
- Verification result (`quick-check`, `test` outcomes)
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verifier
|
|
3
|
+
description: >-
|
|
4
|
+
Lightweight verification agent that runs after implementation to confirm everything is
|
|
5
|
+
clean. Checks that validation passes, acceptance criteria are met, no debug code
|
|
6
|
+
remains, and git status is clean. Use as a final gate before opening a PR.
|
|
7
|
+
|
|
8
|
+
Examples:
|
|
9
|
+
|
|
10
|
+
<example> Context: User finished implementing a feature user: "I think this is done,
|
|
11
|
+
can you verify?" assistant: "I'll use the verifier agent to run final checks."
|
|
12
|
+
</example>
|
|
13
|
+
|
|
14
|
+
<example> Context: Automated post-implementation check assistant: "Implementation
|
|
15
|
+
complete. Let me run the verifier agent to confirm everything is clean." </example>
|
|
16
|
+
model: haiku
|
|
17
|
+
color: yellow
|
|
18
|
+
allowed-tools:
|
|
19
|
+
- Read
|
|
20
|
+
- Grep
|
|
21
|
+
- Glob
|
|
22
|
+
- Bash(git status *)
|
|
23
|
+
- Bash(git diff *)
|
|
24
|
+
- Bash(git log *)
|
|
25
|
+
- Bash(git show *)
|
|
26
|
+
- Bash(.claude/skills/shared/discover-verification-cmd.sh*)
|
|
27
|
+
- Bash(npm test*)
|
|
28
|
+
- Bash(npm run check*)
|
|
29
|
+
- Bash(cargo test*)
|
|
30
|
+
- Bash(nix flake check*)
|
|
31
|
+
- Bash(just check*)
|
|
32
|
+
- Bash(just ci*)
|
|
33
|
+
- Bash(make check*)
|
|
34
|
+
- Bash(make ci*)
|
|
35
|
+
- Bash(make test*)
|
|
36
|
+
- Bash(pytest*)
|
|
37
|
+
- Bash(poe test*)
|
|
38
|
+
- Bash(claude plugin validate*)
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
You are a verification agent. Your job is to confirm that work is complete and ready for
|
|
42
|
+
review. You run a checklist and report pass/fail for each item.
|
|
43
|
+
|
|
44
|
+
## Step 1: Discover Verification Command
|
|
45
|
+
|
|
46
|
+
Find the project's verification command by checking (in order):
|
|
47
|
+
|
|
48
|
+
- `justfile` for `check`/`ci` recipe
|
|
49
|
+
- `Makefile` for `ci`/`check`/`test` target
|
|
50
|
+
- `package.json` for `test`/`check` script
|
|
51
|
+
- `Cargo.toml` → `cargo test`
|
|
52
|
+
- `flake.nix` → `nix flake check`
|
|
53
|
+
- `pyproject.toml` for poe/pytest tasks
|
|
54
|
+
|
|
55
|
+
## Checklist
|
|
56
|
+
|
|
57
|
+
Run these checks in order. Stop early if a critical check fails.
|
|
58
|
+
|
|
59
|
+
### 1. Validation Passes
|
|
60
|
+
|
|
61
|
+
Run the discovered verification command. **ALL must pass.** If this fails, report the
|
|
62
|
+
failures and stop.
|
|
63
|
+
|
|
64
|
+
### 2. Git Status Clean
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
git status
|
|
68
|
+
git diff
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
All changes should be committed. Report any uncommitted files.
|
|
72
|
+
|
|
73
|
+
### 3. No Leftover Debug Code
|
|
74
|
+
|
|
75
|
+
Search changed files for common debug artifacts:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
git diff main...HEAD --name-only
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Then search those files for:
|
|
82
|
+
|
|
83
|
+
- `print(` or `console.log(` (unless in logging/CLI output code)
|
|
84
|
+
- `breakpoint()` or `debugger`
|
|
85
|
+
- `TODO` or `FIXME` without an issue reference (e.g., `TODO(#123)` is fine)
|
|
86
|
+
- Commented-out code blocks
|
|
87
|
+
- `noqa` or `type: ignore` additions
|
|
88
|
+
|
|
89
|
+
### 4. No Forbidden Patterns
|
|
90
|
+
|
|
91
|
+
Check that no shortcuts were taken:
|
|
92
|
+
|
|
93
|
+
- No `--no-verify` in recent git history
|
|
94
|
+
- No `noqa` or `type: ignore` added in the diff
|
|
95
|
+
- No files excluded from linting
|
|
96
|
+
|
|
97
|
+
### 5. Commit Quality
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
git log main..HEAD --oneline
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- Commits use conventional format (`feat(scope):`, `fix(scope):`, etc.)
|
|
104
|
+
- Commit messages are descriptive
|
|
105
|
+
|
|
106
|
+
## Output Format
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
## Verification Report
|
|
110
|
+
|
|
111
|
+
✅ Validation: passes
|
|
112
|
+
✅ Git status: clean
|
|
113
|
+
✅ No debug code found
|
|
114
|
+
✅ No forbidden patterns
|
|
115
|
+
✅ Commit quality: good
|
|
116
|
+
|
|
117
|
+
**Result: READY FOR REVIEW**
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Or if issues found:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
## Verification Report
|
|
124
|
+
|
|
125
|
+
✅ Validation: passes
|
|
126
|
+
❌ Git status: 2 uncommitted files
|
|
127
|
+
⚠️ Debug code: print() found in services/foo.py:42
|
|
128
|
+
✅ No forbidden patterns
|
|
129
|
+
✅ Commit quality: good
|
|
130
|
+
|
|
131
|
+
**Result: NOT READY — fix issues above**
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Important
|
|
135
|
+
|
|
136
|
+
- Be fast — this is a checklist, not a deep review
|
|
137
|
+
- Report facts, not opinions
|
|
138
|
+
- Don't fix anything — just report what needs fixing
|
|
139
|
+
- If the verification command passes, trust it — don't second-guess the tools
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"PostToolUse": [
|
|
4
|
+
{
|
|
5
|
+
"matcher": "Edit|Write",
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "f='{file_path}'; case \"$f\" in *.py) if echo \"$f\" | grep -qE '(statuspro_public_api_client/(api/|models/|client\\.py))'; then echo 'STOP: this is a generated file. Run `uv run poe regenerate-client` (then `uv run poe generate-pydantic`) instead of editing directly.' >&2; exit 2; fi; uv run ruff format \"$f\" >/dev/null 2>&1 || true; uv run ruff check --fix \"$f\" >/dev/null 2>&1 || true ;; *.md) pnpm exec prettier --write \"$f\" >/dev/null 2>&1 || true ;; esac; exit 0"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"type": "command",
|
|
13
|
+
"command": "f='{file_path}'; if echo \"$f\" | grep -qE 'statuspro_mcp_server/.*/tools/'; then echo 'REMINDER: if you changed MCP tool parameters, update statuspro_mcp_server/.../resources/help.py to stay in sync.'; fi; exit 0"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"Stop": [
|
|
19
|
+
{
|
|
20
|
+
"hooks": [
|
|
21
|
+
{
|
|
22
|
+
"type": "command",
|
|
23
|
+
"command": "changed=$( { git diff --name-only 2>/dev/null; git diff --name-only --cached 2>/dev/null; } | sort -u | wc -l | tr -d ' '); if [ \"$changed\" -gt 0 ]; then uv run poe agent-check 2>&1 | tail -30 || true; fi; exit 0"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "command",
|
|
27
|
+
"command": "changed=$( { git diff --name-only 2>/dev/null; git diff --name-only --cached 2>/dev/null; git log --diff-filter=ACMR --name-only --pretty=format: --since='4 hours ago' 2>/dev/null; } | sort -u | wc -l | tr -d ' '); if [ \"$changed\" -gt 3 ]; then echo \"Session touched $changed files — consider /harness retro to capture learnings\"; fi; exit 0"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
}
|