[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HR5N8DCTGZ3WS7RW5KPC32":3,"skill-same:01M6HR5N8DCTGZ3WS7RW5KPC32":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":58,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":75},"01M6HR5N8DCTGZ3WS7RW5KPC32","generate-contract-tests",null,"Turn the API contract into executable tests: schema validation, Problem Details, authorization,\nidempotency and ArchUnit layering rules.","wfukatsu\u002Fnexus-architect","wfukatsu","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F11712747?v=4","01M6HR128TEJY1WD0C36TDQD7S","Wataru Fukatsu","01M6HR12D55WNY36YSW845YXZ1",13,"MIT","https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fgenerate-contract-tests\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"contract","generate contract tests","tests","generate","Rules","schema","auto","en","default","api contract","stack","api","dry","name","problem","pact","schemathesis","schema validation","true","run","2026-11-10 10:12:30",false,"---\ndescription: |\n  Turn the API contract into executable tests: schema validation, Problem Details, authorization,\n  idempotency and ArchUnit layering rules.\nargument-hint: '[--service=\u003Cname>] [--out=\u003Cpath>] [--stack=default|schemathesis|pact|archunit] [--confirm-versions|--no-confirm-versions] [--dry-run] [--auto] [--lang=en|ja]'\nmodel: sonnet\ndisable-model-invocation: true\n---\n\n# Contract Test Generation\n\nShared files: a path written `@rules\u002F…`, `@skills\u002F…`, `@templates\u002F…` or `@docs\u002F…` is relative to the\nplugin root, `${CLAUDE_PLUGIN_ROOT}` — not to the project being worked on. Read it from there.\n\n**Usage:** `\u002Farchitect:generate-contract-tests [--service=\u003Cname>] [--out=\u003Cpath>] [--stack=default|schemathesis|pact|archunit] [--confirm-versions|--no-confirm-versions] [--dry-run] [--auto] [--lang=en|ja]`\n\nGraphQL surfaces use `GraphQlTester` and schema inspection rather than an OpenAPI validator. Select\n`ExecutionGraphQlServiceTester`, `WebGraphQlTester`, `HttpGraphQlTester`,\n`WebSocketGraphQlTester`, or `RSocketGraphQlTester` from the approved transport design.\n\n## Desired Outcome\n\nExecutable tests that hold the code to the contract. This is the difference between a contract that\nis *documented* and one that is *enforced*: acceptance criteria in a skill file are instructions to a\nmodel, and a model that drifts from them produces plausible code that reads fine. A failing assertion\ndoes not read fine.\n\nGenerate, per service:\n\n- **Contract validation tests** — every request and response the suite exercises validated in-process\n  against the OpenAPI document\n- **Problem Details conformance tests** — every registered problem type reachable, correctly shaped\n- **Authorization tests** — unauthenticated, wrong role, and (where an ownership predicate applies)\n  another principal's or another tenant's object\n- **Idempotency tests** — replay, key reuse with a different body, missing required key\n- **Indeterminate-commit tests** — the `UnknownTransactionStatusException` contract, which is the one\n  most often generated wrong\n- **ArchUnit rules** — the layering the API layer specification declares\n\n## Stack\n\nPer @rules\u002Fapi-contract-fidelity.md §7, and read from `reports\u002F07_test-specs\u002Fcontract-test-specs.md`\nwhere `generate-test-specs` recorded the selection:\n\n| Tier | Stack | Default |\n|------|-------|---------|\n| Contract validation | `swagger-request-validator` (Atlassian) driven from `@WebMvcTest` \u002F `@SpringBootTest` slices | **on** for a Spring service |\n| Runtime fuzzing | Schemathesis against a running instance | opt-in |\n| Consumer-driven | Pact | opt-in |\n| Architecture | ArchUnit | opt-in, recommended wherever the API layer specification declares layering |\n\n`--stack` overrides the recorded selection for one run. The default is not optional for a Spring\nservice — in-process validation of every exercised request and response is what makes the rest of the\nsuite meaningful. For a non-Spring or non-JVM service, use the framework's equivalent in-process\nvalidator and record which one.\n\n## Decision Criteria\n\n- **Assert against the specification, not against the code.** A test whose expected values were read\n  out of the implementation passes whatever the implementation does, which is the failure mode this\n  skill exists to remove. Expected status codes, shapes, and problem types come from the OpenAPI\n  document and the problem type registry.\n- **Use the contract's own examples as fixtures.** They are in the specification for this reason\n  (@rules\u002Fapi-contract-fidelity.md §3). An operation with no example gets a shape test only, and the\n  missing example is reported.\n- **Never weaken a test to make it pass.** A generated test that fails is the intended outcome when\n  the code is wrong; report the failure, do not relax the assertion or mark it disabled.\n- **Cover the negative space.** A suite that only exercises declared success paths cannot detect an\n  endpoint the contract does not declare — the undeclared-endpoint check comes from\n  `api-contract-map.json`, and it is generated as an assertion, not left to review.\n\n## Prerequisites\n\n| File | Required\u002FRecommended | Source |\n|------|---------------------|--------|\n| reports\u002F03_design\u002Fapi-specifications\u002F | Required | \u002Farchitect:design-api — the contract the tests assert against |\n| reports\u002F03_design\u002Fapi-specifications\u002Fproblem-types.md | Required | \u002Farchitect:design-api |\n| reports\u002F06_implementation\u002Fapi-contract-map.json | Required | \u002Farchitect:generate-api-code or \u002Farchitect:implement-backlog — what to test and where it lives |\n| reports\u002F07_test-specs\u002Fcontract-test-specs.md | Required | \u002Farchitect:generate-test-specs — the assertions and the stack selection |\n| reports\u002F06_implementation\u002Fapi-layer-spec.md | Recommended | \u002Farchitect:design-implementation — the layering ArchUnit encodes |\n| reports\u002F08_infrastructure\u002Fsecurity-design.md | Recommended | \u002Farchitect:design-security — the authorization rules the tests assert |\n\n## Steps\n\n1. **Resolve the stack and the output root** — the recorded selection, overridden by `--stack`;\n   `--out`, else the service's `src\u002Ftest\u002F` under the contract map's `source_root`.\n2. **Pin the contract into the test tree** — copy the specification to\n   `src\u002Ftest\u002Fresources\u002Fcontract\u002Fopenapi\u002F\u003Cservice>.yaml` — and `api-contract-map.json` beside it,\n   which the inventory assertion needs for `out_of_scope_handlers` — and load both from the classpath. The design\n   copy lives under `reports\u002F`, which is git-ignored: a committed test that reads it there passes for\n   its author and fails the CI contract stage on a fresh checkout\n   (@rules\u002Fapi-contract-fidelity.md §7).\n3. **Generate the validation harness** — the OpenAPI validator wired into the test slice, so every\n   request and response in the suite is checked without per-test boilerplate. Resolve the validator\n   coordinate per @rules\u002Fapi-contract-fidelity.md §7: the module is `-mockmvc` (there is no\n   `-spring-mvc` artifact), and its JDK baseline must be at or below the project's target release —\n   the `3.x` line is Java 21 and will not compile into a Java 17 service.\n   For GraphQL, copy the approved SDL to test resources, configure the selected `GraphQlTester`,\n   inspect the executable schema, and derive resolver inventory independently. Test success shape,\n   nullability, validation, registered `errors[].extensions.type`, authorization, tenant isolation,\n   N+1 query count, query limits, and subscription controls per @rules\u002Fgraphql-security-checks.md.\n4. **Generate per-operation tests** from `contract-test-specs.md`: request validation, response\n   conformance, error conformance, authorization, idempotency, indeterminate commit.\n5. **Generate the inventory assertion — derived from the code, not read from the map.** Walk the\n   source tree for mapped routes and assert every one is declared by the specification or listed in\n   the map's `out_of_scope_handlers`. An assertion that only re-reads `api-contract-map.json` passes\n   whenever the map is wrong, which is exactly when it needs to fail: the first real run of this\n   pipeline produced a map claiming nothing unmapped while ten routes — including an unauthenticated\n   `\u002Fapi\u002Fadmin\u002Fusers` — were reachable and undeclared (@rules\u002Fapi-security-checks.md API9).\n\n   **The unit of comparison is `(HTTP method, normalized path)`, and normalization renames path\n   variables positionally.** Both halves matter, and getting either wrong under-counts silently:\n\n   - Rewrite each path variable to its **position** — `\u002Fapi\u002Forders\u002F{id}` and `\u002Forders\u002F{orderId}`\n     both become `\u002Fapi\u002Forders\u002F{1}` and `\u002Forders\u002F{1}`. Rewriting to a *fixed name* instead makes\n     genuinely different paths collide and vanish into a dedup.\n   - Key on the method too. `GET \u002Forders` and `POST \u002Forders` are two operations; deduping on path\n     alone counts them once.\n\n   An independent reviewer of that same first run counted ten undeclared operations where the\n   generated assertion reported six — the whole gap was these two mistakes. State the counting rule\n   in the generated test so a reader can check it, and report the count alongside the list.\n6. **Generate ArchUnit rules** when selected — layer direction as `api-layer-spec.md` states it for\n   its `layering_style` (`ddd`: controller -> application service -> domain -> repository; `clean`:\n   controllers depend on `usecase\u002F` boundaries only and never on an `*Interactor`, `usecase\u002F` never\n   depends on `api\u002F` or `infrastructure\u002F`, `api.presenter` and the input\u002Foutput data records import\n   no domain type, exactly one input boundary and one interactor per `operationId`, and each output\n   boundary implemented exactly once, in `api.presenter`), the transaction-opening rule stated **by\n   package** (only `application..` \u002F `usecase..` calls the runner — never by class-name suffix,\n   which the first shared collaborator breaks), no persistence or ScalarDB type in a controller\n   signature, no domain type in a response DTO, and the testability rules of @rules\u002Ftdd-workflow.md\n   §4: no `Instant.now()` \u002F `LocalDate.now()` \u002F `UUID.randomUUID()` call in `domain\u002F` or the\n   application package (`application\u002F`, or `usecase\u002F` under `clean`), no transaction type\n   (resolve its FQN from the code — `application.tx` or `usecase.tx`) held by a domain class, and\n   domain tests importing nothing from `infrastructure\u002F`. When an `ArchitectureTest` already exists,\n   merge into it; two rule classes drift.\n7. **Wire the build** — a test task the quality gate can invoke by name\n   (a separate `contractTest` source set is the right shape when the contract stack's JUnit\n   platform version cannot share the `test` classpath — jqwik pinning JUnit 5 against Spring 7's\n   JUnit 6 is the known case — with `contractTest` depending on the ArchUnit task so one name\n   still covers both)\n   (@rules\u002Fai-code-quality-gate.md stage 3), pinning versions per @rules\u002Fdependency-versions.md.\n8. **Report** — operations covered, operations with no example, assertions skipped and why, and\n   the run's counts and exit code as they were. A red suite is not a failed run of this skill:\n   the skill completes, the failures are listed with their cause (code defect fixed, contract\n   contradiction, spec drift → Open Question), and nothing was weakened to get to green.\n\n`--dry-run` reports the plan and coverage without writing tests.\n\n## Output\n\n| File | Content |\n|------|---------|\n| `generated\u002F{service}\u002Fsrc\u002Ftest\u002Fjava\u002F**\u002Fcontract\u002F` | Per-operation\u002Ffield-coordinate tests plus OpenAPI or GraphQlTester validation harness |\n| `generated\u002F{service}\u002Fsrc\u002Ftest\u002Fjava\u002F**\u002Farchitecture\u002F` | ArchUnit rules (when selected) |\n| `generated\u002F{service}\u002Fsrc\u002Ftest\u002Fresources\u002Fcontract\u002F` | Fixtures derived from the contract's examples |\n| `reports\u002F07_test-specs\u002Fcontract-test-coverage.md` | Which operations are covered, by which assertions, and what is not |\n\nWrite reports in the language configured in `work\u002Fpipeline-progress.json` (`options.output_language`).\nTest code and identifiers stay in English.\n\n## Acceptance Criteria\n\n- Every `operationId` in the contract map has at least one generated test, or is listed as uncovered\n  with the reason\n- Every GraphQL resolver-bound field coordinate has a generated test or an explicit uncovered entry;\n  SDL fields and source resolvers have no silent unmapped entries\n- The generated suite compiles and runs, and the task the gate invokes actually matched tests — a\n  filter matching nothing is a green task and an ungated build (@rules\u002Fai-code-quality-gate.md)\n- The specification the tests load is inside the test tree, not under `reports\u002F`\n- Every expected value in a generated test traces to the specification or the problem type registry —\n  none read from the implementation\n- Every registered problem type has a conformance assertion\n- The `UnknownTransactionStatusException` contract is asserted for every operation that can raise it,\n  including which of the two responses applies. For GraphQL execution, assert HTTP 200 and\n  `errors[].extensions.type`; protected mutations require same-key retry fields, while unprotected\n  mutations require reconcile-only fields. Assert forbidden retry fields, `Retry-After`, and raw\n  transaction identifiers are absent in the opposite branch (@rules\u002Fapi-error-standard.md §3.2)\n- The inventory assertion exists and fails when `api-contract-map.json` reports anything unmapped\n- The build exposes a named task the quality gate can invoke, and it was verified to run\n- No generated test was disabled or weakened to make the suite green\n\n## Related Skills\n\n| Skill | Relationship |\n|-------|-------------|\n| \u002Farchitect:generate-test-specs | Input source — the assertions and the stack selection |\n| \u002Farchitect:generate-api-code | Input source — the code under test and the contract map |\n| \u002Farchitect:design-api | Input source — the contract |\n| \u002Farchitect:verify-implementation | Runs this suite as stage 3 of the quality gate |\n| \u002Farchitect:generate-infra-code | Downstream — the CI workflow that runs this suite outside the session |\n","# Contract Test Generation\n\nShared files: a path written `@rules\u002F…`, `@skills\u002F…`, `@templates\u002F…` or `@docs\u002F…` is relative to the\nplugin root, `${CLAUDE_PLUGIN_ROOT}` — not to the project being worked on. Read it from there.\n\n**Usage:** `\u002Farchitect:generate-contract-tests [--service=\u003Cname>] [--out=\u003Cpath>] [--stack=default|schemathesis|pact|archunit] [--confirm-versions|--no-confirm-versions] [--dry-run] [--auto] [--lang=en|ja]`\n\nGraphQL surfaces use `GraphQlTester` and schema inspection rather than an OpenAPI validator. Select\n`ExecutionGraphQlServiceTester`, `WebGraphQlTester`, `HttpGraphQlTester`,\n`WebSocketGraphQlTester`, or `RSocketGraphQlTester` from the approved transport design.\n\n## Desired Outcome\n\nExecutable tests that hold the code to the contract. This is the difference between a contract that\nis *documented* and one that is *enforced*: acceptance criteria in a skill file are instructions to a\nmodel, and a model that drifts from them produces plausible code that reads fine. A failing assertion\ndoes not read fine.\n\nGenerate, per service:\n\n- **Contract validation tests** — every request and response the suite exercises validated in-process\n  against the OpenAPI document\n- **Problem Details conformance tests** — every registered problem type reachable, correctly shaped\n- **Authorization tests** — unauthenticated, wrong role, and (where an ownership predicate applies)\n  another principal's or another tenant's object\n- **Idempotency tests** — replay, key reuse with a different body, missing required key\n- **Indeterminate-commit tests** — the `UnknownTransactionStatusException` contract, which is the one\n  most often generated wrong\n- **ArchUnit rules** — the layering the API layer specification declares\n\n## Stack\n\nPer @rules\u002Fapi-contract-fidelity.md §7, and read from `reports\u002F07_test-specs\u002Fcontract-test-specs.md`\nwhere `generate-test-specs` recorded the selection:\n\n| Tier | Stack | Default |\n|------|-------|---------|\n| Contract validation | `swagger-request-validator` (Atlassian) driven from `@WebMvcTest` \u002F `@SpringBootTest` slices | **on** for a Spring service |\n| Runtime fuzzing | Schemathesis against a running instance | opt-in |\n| Consumer-driven | Pact | opt-in |\n| Architecture | ArchUnit | opt-in, recommended wherever the API layer specification declares layering |\n\n`--stack` overrides the recorded selection for one run. The default is not optional for a Spring\nservice — in-process validation of every exercised request and response is what makes the rest of the\nsuite meaningful. For a non-Spring or non-JVM service, use the framework's equivalent in-process\nvalidator and record which one.\n\n## Decision Criteria\n\n- **Assert against the specification, not against the code.** A test whose expected values were read\n  out of the implementation passes whatever the implementation does, which is the failure mode this\n  skill exists to remove. Expected status codes, shapes, and problem types come from the OpenAPI\n  document and the problem type registry.\n- **Use the contract's own examples as fixtures.** They are in the specification for this reason\n  (@rules\u002Fapi-contract-fidelity.md §3). An operation with no example gets a shape test only, and the\n  missing example is reported.\n- **Never weaken a test to make it pass.** A generated test that fails is the intended outcome when\n  the code is wrong; report the failure, do not relax the assertion or mark it disabled.\n- **Cover the negative space.** A suite that only exercises declared success paths cannot detect an\n  endpoint the contract does not declare — the undeclared-endpoint check comes from\n  `api-contract-map.json`, and it is generated as an assertion, not left to review.\n\n## Prerequisites\n\n| File | Required\u002FRecommended | Source |\n|------|---------------------|--------|\n| reports\u002F03_design\u002Fapi-specifications\u002F | Required | \u002Farchitect:design-api — the contract the tests assert against |\n| reports\u002F03_design\u002Fapi-specifications\u002Fproblem-types.md | Required | \u002Farchitect:design-api |\n| reports\u002F06_implementation\u002Fapi-contract-map.json | Required | \u002Farchitect:generate-api-code or \u002Farchitect:implement-backlog — what to test and where it lives |\n| reports\u002F07_test-specs\u002Fcontract-test-specs.md | Required | \u002Farchitect:generate-test-specs — the assertions and the stack selection |\n| reports\u002F06_implementation\u002Fapi-layer-spec.md | Recommended | \u002Farchitect:design-implementation — the layering ArchUnit encodes |\n| reports\u002F08_infrastructure\u002Fsecurity-design.md | Recommended | \u002Farchitect:design-security — the authorization rules the tests assert |\n\n## Steps\n\n1. **Resolve the stack and the output root** — the recorded selection, overridden by `--stack`;\n   `--out`, else the service's `src\u002Ftest\u002F` under the contract map's `source_root`.\n2. **Pin the contract into the test tree** — copy the specification to\n   `src\u002Ftest\u002Fresources\u002Fcontract\u002Fopenapi\u002F\u003Cservice>.yaml` — and `api-contract-map.json` beside it,\n   which the inventory assertion needs for `out_of_scope_handlers` — and load both from the classpath. The design\n   copy lives under `reports\u002F`, which is git-ignored: a committed test that reads it there passes for\n   its author and fails the CI contract stage on a fresh checkout\n   (@rules\u002Fapi-contract-fidelity.md §7).\n3. **Generate the validation harness** — the OpenAPI validator wired into the test slice, so every\n   request and response in the suite is checked without per-test boilerplate. Resolve the validator\n   coordinate per @rules\u002Fapi-contract-fidelity.md §7: the module is `-mockmvc` (there is no\n   `-spring-mvc` artifact), and its JDK baseline must be at or below the project's target release —\n   the `3.x` line is Java 21 and will not compile into a Java 17 service.\n   For GraphQL, copy the approved SDL to test resources, configure the selected `GraphQlTester`,\n   inspect the executable schema, and derive resolver inventory independently. Test success shape,\n   nullability, validation, registered `errors[].extensions.type`, authorization, tenant isolation,\n   N+1 query count, query limits, and subscription controls per @rules\u002Fgraphql-security-checks.md.\n4. **Generate per-operation tests** from `contract-test-specs.md`: request validation, response\n   conformance, error conformance, authorization, idempotency, indeterminate commit.\n5. **Generate the inventory assertion — derived from the code, not read from the map.** Walk the\n   source tree for mapped routes and assert every one is declared by the specification or listed in\n   the map's `out_of_scope_handlers`. An assertion that only re-reads `api-contract-map.json` passes\n   whenever the map is wrong, which is exactly when it needs to fail: the first real run of this\n   pipeline produced a map claiming nothing unmapped while ten routes — including an unauthenticated\n   `\u002Fapi\u002Fadmin\u002Fusers` — were reachable and undeclared (@rules\u002Fapi-security-checks.md API9).\n\n   **The unit of comparison is `(HTTP method, normalized path)`, and normalization renames path\n   variables positionally.** Both halves matter, and getting either wrong under-counts silently:\n\n   - Rewrite each path variable to its **position** — `\u002Fapi\u002Forders\u002F{id}` and `\u002Forders\u002F{orderId}`\n     both become `\u002Fapi\u002Forders\u002F{1}` and `\u002Forders\u002F{1}`. Rewriting to a *fixed name* instead makes\n     genuinely different paths collide and vanish into a dedup.\n   - Key on the method too. `GET \u002Forders` and `POST \u002Forders` are two operations; deduping on path\n     alone counts them once.\n\n   An independent reviewer of that same first run counted ten undeclared operations where the\n   generated assertion reported six — the whole gap was these two mistakes. State the counting rule\n   in the generated test so a reader can check it, and report the count alongside the list.\n6. **Generate ArchUnit rules** when selected — layer direction as `api-layer-spec.md` states it for\n   its `layering_style` (`ddd`: controller -> application service -> domain -> repository; `clean`:\n   controllers depend on `usecase\u002F` boundaries only and never on an `*Interactor`, `usecase\u002F` never\n   depends on `api\u002F` or `infrastructure\u002F`, `api.presenter` and the input\u002Foutput data records import\n   no domain type, exactly one input boundary and one interactor per `operationId`, and each output\n   boundary implemented exactly once, in `api.presenter`), the transaction-opening rule stated **by\n   package** (only `application..` \u002F `usecase..` calls the runner — never by class-name suffix,\n   which the first shared collaborator breaks), no persistence or ScalarDB type in a controller\n   signature, no domain type in a response DTO, and the testability rules of @rules\u002Ftdd-workflow.md\n   §4: no `Instant.now()` \u002F `LocalDate.now()` \u002F `UUID.randomUUID()` call in `domain\u002F` or the\n   application package (`application\u002F`, or `usecase\u002F` under `clean`), no transaction type\n   (resolve its FQN from the code — `application.tx` or `usecase.tx`) held by a domain class, and\n   domain tests importing nothing from `infrastructure\u002F`. When an `ArchitectureTest` already exists,\n   merge into it; two rule classes drift.\n7. **Wire the build** — a test task the quality gate can invoke by name\n   (a separate `contractTest` source set is the right shape when the contract stack's JUnit\n   platform version cannot share the `test` classpath — jqwik pinning JUnit 5 against Spring 7's\n   JUnit 6 is the known case — with `contractTest` depending on the ArchUnit task so one name\n   still covers both)\n   (@rules\u002Fai-code-quality-gate.md stage 3), pinning versions per @rules\u002Fdependency-versions.md.\n8. **Report** — operations covered, operations with no example, assertions skipped and why, and\n   the run's counts and exit code as they were. A red suite is not a failed run of this skill:\n   the skill completes, the failures are listed with their cause (code defect fixed, contract\n   contradiction, spec drift → Open Question), and nothing was weakened to get to green.\n\n`--dry-run` reports the plan and coverage without writing tests.\n\n## Output\n\n| File | Content |\n|------|---------|\n| `generated\u002F{service}\u002Fsrc\u002Ftest\u002Fjava\u002F**\u002Fcontract\u002F` | Per-operation\u002Ffield-coordinate tests plus OpenAPI or GraphQlTester validation harness |\n| `generated\u002F{service}\u002Fsrc\u002Ftest\u002Fjava\u002F**\u002Farchitecture\u002F` | ArchUnit rules (when selected) |\n| `generated\u002F{service}\u002Fsrc\u002Ftest\u002Fresources\u002Fcontract\u002F` | Fixtures derived from the contract's examples |\n| `reports\u002F07_test-specs\u002Fcontract-test-coverage.md` | Which operations are covered, by which assertions, and what is not |\n\nWrite reports in the language configured in `work\u002Fpipeline-progress.json` (`options.output_language`).\nTest code and identifiers stay in English.\n\n## Acceptance Criteria\n\n- Every `operationId` in the contract map has at least one generated test, or is listed as uncovered\n  with the reason\n- Every GraphQL resolver-bound field coordinate has a generated test or an explicit uncovered entry;\n  SDL fields and source resolvers have no silent unmapped entries\n- The generated suite compiles and runs, and the task the gate invokes actually matched tests — a\n  filter matching nothing is a green task and an ungated build (@rules\u002Fai-code-quality-gate.md)\n- The specification the tests load is inside the test tree, not under `reports\u002F`\n- Every expected value in a generated test traces to the specification or the problem type registry —\n  none read from the implementation\n- Every registered problem type has a conformance assertion\n- The `UnknownTransactionStatusException` contract is asserted for every operation that can raise it,\n  including which of the two responses applies. For GraphQL execution, assert HTTP 200 and\n  `errors[].extensions.type`; protected mutations require same-key retry fields, while unprotected\n  mutations require reconcile-only fields. Assert forbidden retry fields, `Retry-After`, and raw\n  transaction identifiers are absent in the opposite branch (@rules\u002Fapi-error-standard.md §3.2)\n- The inventory assertion exists and fails when `api-contract-map.json` reports anything unmapped\n- The build exposes a named task the quality gate can invoke, and it was verified to run\n- No generated test was disabled or weakened to make the suite green\n\n## Related Skills\n\n| Skill | Relationship |\n|-------|-------------|\n| \u002Farchitect:generate-test-specs | Input source — the assertions and the stack selection |\n| \u002Farchitect:generate-api-code | Input source — the code under test and the contract map |\n| \u002Farchitect:design-api | Input source — the contract |\n| \u002Farchitect:verify-implementation | Runs this suite as stage 3 of the quality gate |\n| \u002Farchitect:generate-infra-code | Downstream — the CI workflow that runs this suite outside the session |\n",{"model":49,"description":50,"argument-hint":51,"disable-model-invocation":52},"sonnet","Turn the API contract into executable tests: schema validation, Problem Details, authorization,\nidempotency and ArchUnit layering rules.\n","[--service=\u003Cname>] [--out=\u003Cpath>] [--stack=default|schemathesis|pact|archunit] [--confirm-versions|--no-confirm-versions] [--dry-run] [--auto] [--lang=en|ja]",true,"main","fed4c7ebb79ed82ce5c961f944a1ab0ab21bae26","skills\u002Fgenerate-contract-tests",1,"https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect","https:\u002F\u002Fnexus-architect-docs-070772.gitlab.io\u002F","https:\u002F\u002Fgithub.com\u002Fwfukatsu","https:\u002F\u002Fwww.scalar-labs.com\u002F","Wataru Fukatsu | Co-Founder and CEO, Scalar, Inc.","2026-11-12 08:27:58",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":52},[65,68,71],{"tool":66,"command":67},"npx","npx skills add wfukatsu\u002Fnexus-architect --skill generate-contract-tests",{"tool":69,"command":70},"bunx","bunx skills add wfukatsu\u002Fnexus-architect --skill generate-contract-tests",{"tool":72,"command":73},"pnpm","pnpm dlx skills add wfukatsu\u002Fnexus-architect --skill generate-contract-tests","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fgenerate-contract-tests\u002FSKILL.md",[],[77,107,134,162,188,206],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":91,"publishedAt":44},"01M6HRH10GPAVTZ8W90WD9HJK1","verify-sql-migration","Prove a SQL migration on data: golden checks against an authorized source database and\ndifferential tests against ScalarDB. Never touches production.","https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fverify-sql-migration\u002FSKILL.md",[83,88],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":89,"categoryName":90,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师",[92,93,94,95,96,97,98,99,30,100,31,101,102,26,103,104,49,42,105,106],"sql","verify","migration","verify sql migration","core","database","data","Production","never","properties","fetcher","id","golden","mode","source",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":120,"publishedAt":44},"01M6HRGWK643YKN0QVRQSNSDCR","verify-implementation","Check code against the design (API contract, transactions, security, requirements, the example\nchain) and report every divergence; optionally runs the eight-stage quality gate.","https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fverify-implementation\u002FSKILL.md",[113,116,119],{"categoryNo":114,"categoryName":115,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":117,"categoryName":118,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[93,121,122,123,124,125,35,126,127,30,128,31,33,129,130,131,24,132,133,42],"implementation","verify implementation","design","quality gate","code","repo","check","example","backlog","stage","requirements","chain","scope",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":146,"publishedAt":44},"01M6HRGS929NK1B5WG1ZANSXQ1","update-knowledge","Fetch or update an OKF knowledge bundle: ScalarDB\u002FScalarDL, or the vendored Kubernetes\u002FTerraform\nbundle.","https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fupdate-knowledge\u002FSKILL.md",[140,143],{"categoryNo":141,"categoryName":142,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":144,"categoryName":145,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000021","资料检索与研究",[147,148,149,150,151,152,153,154,155,156,157,158,159,37,160,161],"update","knowledge","update knowledge","kubernetes","status","plugin","terraform","Tools","Bash","okf","haiku","fetch","bundle","root","latest",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":172,"publishedAt":44},"01M6HRGNMYSK70R8Y9BY41E74D","start","Interactive entry point for system architecture work: refactor a legacy application into services,\nor design a new system from requirements; picks the path from the project's state. To move a\ndatabase to ScalarDB, use migrate-database.","https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fstart\u002FSKILL.md",[168,169],{"categoryNo":114,"categoryName":115,"taxonomyType":86,"taxonomyTypeDesc":87},{"categoryNo":170,"categoryName":171,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000032","设计师",[164,123,173,174,97,175,176,177,178,179,180,181,182,183,184,131,185,186,187],"architecture","state","services","refactor","migrate","system","work","interactive","use","Legacy","application","project","move","path","for",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":44},"01M6HRGHZXK0NXF6W62MMNS46H","select-scalardb-edition","Choose the ScalarDB edition (Community, Enterprise Standard or Premium, plus Enterprise Options),\ndeployment mode and cluster topology through a short interview.","https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fselect-scalardb-edition\u002FSKILL.md",[],[195,196,197,198,199,200,201,202,203,204,205,49,105],"select","select scalardb edition","deployment","topology","Enterprise","choose","short","interview","community","options","cluster",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":213,"publishedAt":44},"01M6HRGESF0BH6KCT70BP70B2J","scaffold","Generate a runnable ScalarDB starter project for any of the six interface combinations: build,\nconfig, schema, service class, docker-compose and README.","https:\u002F\u002Fgithub.com\u002Fwfukatsu\u002Fnexus-architect\u002Fblob\u002Fmain\u002Fskills\u002Fscaffold\u002FSKILL.md",[212],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[208,214,215,27,216,29,217,218,219,184,220,221,222,223,49,187],"docker","config","README","compose","build","docker-compose","combinations","service","starter","interface"]