{"id":18197,"plugin_id":"plugins_6a82b32a6ee8819191258c0368112b78","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:14:44.008Z","digest":"e8dde9e1284acd643ed13f07fc1ad986b5e5443df74cb6708d589993e7ccc2a0","against":null,"payload":{"description":"Internal API pytest script generation from per-TR test design","included_files":[],"name":"zuora-uat-generate-api","skill_md_contents":"---\nname: zuora-uat-generate-api\ndescription: Internal API pytest script generation from per-TR test design\n---\n\n# Generate API test script (internal)\n\nImplements `execution/tests/test_scenarios/test_<feature>/test_<feature>_tr{n}_api.py` from `tr{n}_test_design.md`.\n\n## Gap-fill\n\nSkip when `force_overwrite=false` and `*_tr{n}_api.py` exists.\n\n## Requirements\n\n- One test method per TR (one debug log file per run)\n- Class-based pytest with `@pytest.fixture(autouse=True)` setup/teardown\n- `FEATURE_ID` = testmatrix feature string (stem of `design/testmatrix/<Feature>_TRs.md`)\n- Before `create_debug_logger`, delete stale logs: `glob_debug_log_files(FEATURE_ID, \"TR<n>\")`\n- `create_debug_logger(test_name=\"TR<n>_...\", feature_id=FEATURE_ID, debug_dir=\"debugging\", api_client=self.api_client)`\n- Every API call: `self.debug_logger.log_request_response(step=..., request_data=..., response_data=...)`\n- Include UI-needed IDs in `response_data` (`accountId`, `subscriptionNumber`, etc.)\n- In `finally`: `self.debug_logger.cleanup_if_passed()` (preserves log when `CLEANUP_DEBUG_FILES=false`)\n- Real API calls via `APIClient` (no mocks); use `tests/test_utils/debug_utils.py` from customer repo (copy missing files from `${CLAUDE_PLUGIN_ROOT}/references/uat-test/execution/tests/test_utils/`)\n- Follow `${CLAUDE_PLUGIN_ROOT}/references/uat-test/execution/docs/E2E_TEST_IMPLEMENTATION_GUIDELINE.md`\n- Follow `${CLAUDE_PLUGIN_ROOT}/references/uat-test/execution/docs/DEBUGGING_MECHANISM_GUIDE.md`\n\n## MCP\n\n`mcp__zuora-mcp__zuora_codegen` for request/response shapes. Search repo + guidelines before `ask_zuora`.\n\n## Tenant\n\nGeneration is tenant-free. Scripts use `APIClient` which supports `environment=mcp` via env vars when no `test_config.yaml`.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}