From bfb3c882626651984a1e54e6e5e42caf622e12f2 Mon Sep 17 00:00:00 2001 From: prayagv <76861333+prayagv@users.noreply.github.com> Date: Sat, 4 Jul 2026 14:00:08 +0530 Subject: [PATCH 1/4] chore(agent): add repo guidance and MCP indexing Audit: AI_AGENT_WORKFLOW_OPTIMIZATION_REPORT P0 repo guidance rollout --- .gitignore | 3 +++ AGENTS.md | 4 ++++ CLAUDE.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 AGENTS.md create mode 100644 CLAUDE.md diff --git a/.gitignore b/.gitignore index 9632be2..7a79efd 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,9 @@ allure-report/ pacts/ .playwright-mcp/ .codegraph/ +.codebase-memory/ +codebase-memory/ +.agent/index-codebase-memory.sh /allure-overview.png # Local sensitive configs (if any) diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..82a4909 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,4 @@ +# AGENTS.md + +Follow `CLAUDE.md` for repository-specific agent instructions. + diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..0829ef5 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,56 @@ +# CLAUDE.md + +## Project + +Java 21 REST Assured/JUnit 5 API automation framework for Conduit-style API +coverage, contract checks, reliability evidence, and portfolio reporting. + +## Session Start + +Refresh the local code graph before structural discovery: + +`bash .agent/index-codebase-memory.sh` + +Current MCP project name: + +`home-vyaspc-Documents-Repo-aria-api-framework` + +## Commands + +- Install/use wrapper: `./gradlew --version` +- Main verification: `./gradlew test` +- Tagged tests: `./gradlew test -DincludeTags=smoke` +- Format: `./gradlew spotlessApply` +- Format check: `./gradlew spotlessCheck` +- Static checks: `./gradlew spotbugsMain spotbugsTest` +- Dependency/security artifacts: `./gradlew cyclonedxBom` + +## Layout + +- `src/main/java` - reusable API framework code, clients, config, reporting helpers. +- `src/test/java` - JUnit 5 API, contract, reliability, and seeded-defect tests. +- `src/test/resources` - test data, schemas, Allure/JUnit resources. +- `docs/` - architecture, execution, reliability, writing-tests, and debugging guides. +- `reliability/quarantine.yml` - quarantine policy and known reliability exceptions. +- `portfolio/manifest.yml` - portfolio metadata. + +## Codebase Memory MCP + +Use graph tools before broad file reads: + +1. `list_projects` +2. `get_architecture(project="home-vyaspc-Documents-Repo-aria-api-framework")` +3. `search_graph` +4. `trace_path` +5. `get_code_snippet` +6. `query_graph` + +Fall back to `rg` for literals, configs, docs, generated files, or insufficient graph results. + +## Agent Rules + +- Cite `file:line` for code claims whenever practical. +- Keep changes scoped to the framework layer under test; avoid unrelated cleanup. +- Prefer targeted Gradle tasks and tagged tests over full-suite reruns. +- Do not commit `.codebase-memory/`, `codebase-memory/`, or `.agent/index-codebase-memory.sh`. + From 5ef6f320755ff4df934105a9aaf54f0e96da6819 Mon Sep 17 00:00:00 2001 From: prayagv <76861333+prayagv@users.noreply.github.com> Date: Sat, 4 Jul 2026 14:08:55 +0530 Subject: [PATCH 2/4] docs(scope): align contract and OpenAPI claims Audit: AR-01, AR-02 --- README.md | 15 ++++++++------- ...t.java => OwnedProviderStateContractTest.java} | 8 ++++---- 2 files changed, 12 insertions(+), 11 deletions(-) rename src/test/java/com/aria/framework/contracts/{OwnedProviderContractVerificationTest.java => OwnedProviderStateContractTest.java} (92%) diff --git a/README.md b/README.md index bd1aaca..aab2212 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,10 @@ ARIA is the Automated REST Interface Assertion Framework: a Java 21 API engineering platform with layered services, deterministic providers, reusable -clients, generated data, schema validation, Pact contracts, security boundaries, -OpenAPI coverage, redacted diagnostics, and CI quality gates. The name refers to -REST API assertions and is not related to WAI-ARIA accessibility standards. +clients, generated data, JSON-schema assertions, Pact consumer contracts, +provider-state checks, OpenAPI endpoint coverage, security boundaries, redacted +diagnostics, and CI quality gates. The name refers to REST API assertions and is +not related to WAI-ARIA accessibility standards. ## Reviewer Proof @@ -29,8 +30,8 @@ REST API assertions and is not related to WAI-ARIA accessibility standards. | Engineering question | Implemented answer | | --- | --- | | How are API tests prevented from becoming endpoint scripts? | Clients own transport, services own business operations, and tests remain intent-focused. | -| How is deterministic evidence produced? | WireMock, Pact, and an owned in-memory provider cover contracts and security boundaries without public-service dependence. | -| How are specifications connected to execution? | JSON schema validation and endpoint-to-test OpenAPI coverage make contract gaps visible. | +| How is deterministic evidence produced? | WireMock, Pact consumer contracts, and owned-provider state checks cover API behavior and security boundaries without public-service dependence. | +| How are specifications connected to execution? | JSON-schema assertions and endpoint-to-test OpenAPI coverage make documented response and coverage gaps visible. | | How are failures shared safely? | Structured logs and Allure attachments redact credentials and sensitive payload fields before publication. | | How is supply-chain risk controlled? | Wrapper validation, dependency review, OSV scanning, SBOM generation, and a required quality gate. | @@ -50,7 +51,7 @@ evidence. See [CHANGELOG.md](CHANGELOG.md). | Area | Tools | | --- | --- | | Core testing | JUnit 5, RestAssured, AssertJ | -| Mocking and contracts | WireMock 3, Pact JVM | +| Mocking and contracts | WireMock 3, Pact JVM consumer contracts, owned-provider state checks | | Data and models | Jackson, JSON Schema Validator, Datafaker, Lombok | | Configuration | Owner, per-environment properties | | Containers | Docker, Docker Compose, Testcontainers | @@ -70,7 +71,7 @@ evidence. See [CHANGELOG.md](CHANGELOG.md). .\gradlew.bat clean test -Denv=dev ``` -The default `test` task is deterministic. It excludes tests tagged `live` and runs mock, contract, config, security-boundary, and OpenAPI coverage checks that do not depend on public APIs. +The default `test` task is deterministic. It excludes tests tagged `live` and runs mock, Pact consumer-contract, owned-provider state, config, security-boundary, JSON-schema, and OpenAPI coverage checks that do not depend on public APIs. Run a tag: diff --git a/src/test/java/com/aria/framework/contracts/OwnedProviderContractVerificationTest.java b/src/test/java/com/aria/framework/contracts/OwnedProviderStateContractTest.java similarity index 92% rename from src/test/java/com/aria/framework/contracts/OwnedProviderContractVerificationTest.java rename to src/test/java/com/aria/framework/contracts/OwnedProviderStateContractTest.java index 3cbfab8..711de9c 100644 --- a/src/test/java/com/aria/framework/contracts/OwnedProviderContractVerificationTest.java +++ b/src/test/java/com/aria/framework/contracts/OwnedProviderStateContractTest.java @@ -20,14 +20,14 @@ * Provider-state style verification for the owned provider fixture used by deterministic contract tests. */ @Epic("Contracts") -@Feature("Owned provider verification") +@Feature("Owned provider state checks") @Tag("contract") @Execution(ExecutionMode.SAME_THREAD) -class OwnedProviderContractVerificationTest { +class OwnedProviderStateContractTest { @Test - @DisplayName("Owned provider satisfies core Restful Booker consumer states") - @Story("Provider state contract verification") + @DisplayName("Owned provider satisfies core Restful Booker provider states") + @Story("Provider state contract checks") void ownedProviderSatisfiesRestfulBookerConsumerStates() { try (OwnedApiProvider provider = OwnedApiProvider.start()) { BookingApiClient client = new BookingApiClient(provider.frameworkConfig()); From 72fbbb647936f989ef4a773b53d0fec0b343399d Mon Sep 17 00:00:00 2001 From: prayagv <76861333+prayagv@users.noreply.github.com> Date: Sat, 4 Jul 2026 14:10:21 +0530 Subject: [PATCH 3/4] test(contract): add Pact provider verification Audit: AR-01 --- README.md | 10 +-- build.gradle.kts | 15 ++++ gradle/libs.versions.toml | 1 + .../contracts/BookingConsumerPactTest.java | 4 +- .../OwnedProviderPactVerificationTest.java | 70 +++++++++++++++++++ 5 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/aria/framework/contracts/OwnedProviderPactVerificationTest.java diff --git a/README.md b/README.md index aab2212..c61e530 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ ARIA is the Automated REST Interface Assertion Framework: a Java 21 API engineering platform with layered services, deterministic providers, reusable -clients, generated data, JSON-schema assertions, Pact consumer contracts, -provider-state checks, OpenAPI endpoint coverage, security boundaries, redacted +clients, generated data, JSON-schema assertions, Pact consumer contracts and +provider verification, OpenAPI endpoint coverage, security boundaries, redacted diagnostics, and CI quality gates. The name refers to REST API assertions and is not related to WAI-ARIA accessibility standards. @@ -30,7 +30,7 @@ not related to WAI-ARIA accessibility standards. | Engineering question | Implemented answer | | --- | --- | | How are API tests prevented from becoming endpoint scripts? | Clients own transport, services own business operations, and tests remain intent-focused. | -| How is deterministic evidence produced? | WireMock, Pact consumer contracts, and owned-provider state checks cover API behavior and security boundaries without public-service dependence. | +| How is deterministic evidence produced? | WireMock, Pact consumer contracts, Pact provider verification, and owned-provider state checks cover API behavior and security boundaries without public-service dependence. | | How are specifications connected to execution? | JSON-schema assertions and endpoint-to-test OpenAPI coverage make documented response and coverage gaps visible. | | How are failures shared safely? | Structured logs and Allure attachments redact credentials and sensitive payload fields before publication. | | How is supply-chain risk controlled? | Wrapper validation, dependency review, OSV scanning, SBOM generation, and a required quality gate. | @@ -51,7 +51,7 @@ evidence. See [CHANGELOG.md](CHANGELOG.md). | Area | Tools | | --- | --- | | Core testing | JUnit 5, RestAssured, AssertJ | -| Mocking and contracts | WireMock 3, Pact JVM consumer contracts, owned-provider state checks | +| Mocking and contracts | WireMock 3, Pact JVM consumer contracts and provider verification, owned-provider state checks | | Data and models | Jackson, JSON Schema Validator, Datafaker, Lombok | | Configuration | Owner, per-environment properties | | Containers | Docker, Docker Compose, Testcontainers | @@ -80,7 +80,7 @@ Run a tag: .\gradlew.bat smokeTest -Denv=dev ``` -Dedicated Gradle tasks are available for common deterministic suites: `smokeTest`, `regressionTest`, `contractTest`, `securityTest`, and `containerTest`. Use `test -DincludeTags=...` only when you intentionally want raw JUnit tag filtering; live tags require explicit credentials and network access. +Dedicated Gradle tasks are available for common deterministic suites: `smokeTest`, `regressionTest`, `contractTest`, `pactProviderVerificationTest`, `securityTest`, and `containerTest`. Use `test -DincludeTags=...` only when you intentionally want raw JUnit tag filtering; live tags require explicit credentials and network access. JUnit tags are available as `smoke`, `regression`, `negative`, `known-demo-api-limitations`, `contract`, `security`, `config`, `container`, and `live`. diff --git a/build.gradle.kts b/build.gradle.kts index 50e8bf5..8775f62 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -60,6 +60,9 @@ dependencies { testImplementation(libs.pact.consumer.junit5) { exclude(group = "org.apache.commons", module = "commons-io") } + testImplementation(libs.pact.provider.junit5) { + exclude(group = "org.apache.commons", module = "commons-io") + } testImplementation(libs.commons.io) // Containerization Support @@ -306,6 +309,17 @@ tasks.register("contractTest") { } } +tasks.register("pactProviderVerificationTest") { + description = "Replays generated Pact consumer contracts against the owned provider." + group = "verification" + configureCommonApiTestTask() + useJUnitPlatform { + includeTags("pact-provider") + } + dependsOn("contractTest") + shouldRunAfter("contractTest") +} + tasks.register("securityTest") { description = "Runs deterministic security-tagged API tests." group = "verification" @@ -419,6 +433,7 @@ tasks.named("check") { "spotbugsMain", "spotbugsTest", openApiCoverageReport, + "pactProviderVerificationTest", "verifyLiveSmokeTagExpression" ) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 31b2e5e..3d59943 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,6 +37,7 @@ junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", vers logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } owner = { module = "org.aeonbits.owner:owner", version.ref = "owner" } pact-consumer-junit5 = { module = "au.com.dius.pact.consumer:junit5", version.ref = "pact" } +pact-provider-junit5 = { module = "au.com.dius.pact.provider:junit5", version.ref = "pact" } rest-assured = { module = "io.rest-assured:rest-assured", version.ref = "restassured" } rest-assured-json-schema-validator = { module = "io.rest-assured:json-schema-validator", version.ref = "restassured" } slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } diff --git a/src/test/java/com/aria/framework/contracts/BookingConsumerPactTest.java b/src/test/java/com/aria/framework/contracts/BookingConsumerPactTest.java index 9840686..17d2dfd 100644 --- a/src/test/java/com/aria/framework/contracts/BookingConsumerPactTest.java +++ b/src/test/java/com/aria/framework/contracts/BookingConsumerPactTest.java @@ -94,7 +94,7 @@ V4Pact createBookingPact(PactBuilder builder) { .header("Content-Type", "application/json") .body(""" { - "bookingid": 1, + "bookingid": 2, "booking": %s } """.replace("%s", BOOKING_BODY), "application/json"))) @@ -186,7 +186,7 @@ void createBookingMatchesConsumerContract(MockServer mockServer) { assertThat(response.statusCode()).isEqualTo(200); assertJsonContentType(response); - assertThat(response.jsonPath().getInt("bookingid")).isEqualTo(1); + assertThat(response.jsonPath().getInt("bookingid")).isEqualTo(2); } @Test diff --git a/src/test/java/com/aria/framework/contracts/OwnedProviderPactVerificationTest.java b/src/test/java/com/aria/framework/contracts/OwnedProviderPactVerificationTest.java new file mode 100644 index 0000000..42e381d --- /dev/null +++ b/src/test/java/com/aria/framework/contracts/OwnedProviderPactVerificationTest.java @@ -0,0 +1,70 @@ +package com.aria.framework.contracts; + +import au.com.dius.pact.provider.junit5.HttpTestTarget; +import au.com.dius.pact.provider.junit5.PactVerificationContext; +import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider; +import au.com.dius.pact.provider.junitsupport.Provider; +import au.com.dius.pact.provider.junitsupport.State; +import au.com.dius.pact.provider.junitsupport.loader.PactFolder; +import com.aria.framework.fixtures.OwnedApiProvider; +import io.qameta.allure.Epic; +import io.qameta.allure.Feature; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.parallel.Execution; +import org.junit.jupiter.api.parallel.ExecutionMode; + +import java.net.URI; + +/** + * Pact provider verification for consumer pacts generated under build/pacts. + */ +@Epic("Contracts") +@Feature("Pact provider verification") +@Provider("restful-booker") +@PactFolder("build/pacts") +@Tag("pact-provider") +@Execution(ExecutionMode.SAME_THREAD) +class OwnedProviderPactVerificationTest { + + private static OwnedApiProvider provider; + + @BeforeAll + static void startProvider() { + provider = OwnedApiProvider.start(); + } + + @AfterAll + static void stopProvider() { + if (provider != null) { + provider.close(); + } + } + + @BeforeEach + void before(PactVerificationContext context) { + provider.resetState(); + int port = URI.create(provider.baseUrl()).getPort(); + context.setTarget(new HttpTestTarget("127.0.0.1", port, "/")); + } + + @TestTemplate + @ExtendWith(PactVerificationInvocationContextProvider.class) + void verifiesGeneratedConsumerPact(PactVerificationContext context) { + context.verifyInteraction(); + } + + @State("booking 1 exists") + void bookingOneExists() { + provider.resetState(); + } + + @State("booking 999 does not exist") + void booking999DoesNotExist() { + provider.resetState(); + } +} From 2683636576005959b2907230fafb10f0711f6753 Mon Sep 17 00:00:00 2001 From: prayagv <76861333+prayagv@users.noreply.github.com> Date: Sat, 11 Jul 2026 11:50:47 +0530 Subject: [PATCH 4/4] docs: normalize doc naming, lead with owned-provider Pact story, bash-first commands Rename docs/Adr and the underscore-cased guide files to kebab-case, matching the convention used elsewhere in the docs tree. Surface the owned-provider Pact verification approach in the opening paragraph instead of leaving it for later sections, and make local run commands bash-first with PowerShell shown as the alternative. --- README.md | 61 ++++++++++++------- ...ADR-001-deterministic-default-execution.md | 0 ...002-layered-service-client-architecture.md | 0 .../ADR-003-sanitized-allure-diagnostics.md | 0 .../ADR-004-contract-openapi-quality-gates.md | 0 .../ADR-005-owned-provider-http-server.md | 0 docs/{Adr => adr}/README.md | 0 ...ration_Guide.md => configuration-guide.md} | 0 ...Failures.md => debugging-test-failures.md} | 0 docs/{Dos_And_Dont.md => dos-and-dont.md} | 0 docs/evidence/latest-verification.md | 2 +- ...{Execution_Guide.md => execution-guide.md} | 0 ...iew_Guide.md => portfolio-review-guide.md} | 2 +- docs/{Writing_Tests.md => writing-tests.md} | 0 14 files changed, 40 insertions(+), 25 deletions(-) rename docs/{Adr => adr}/ADR-001-deterministic-default-execution.md (100%) rename docs/{Adr => adr}/ADR-002-layered-service-client-architecture.md (100%) rename docs/{Adr => adr}/ADR-003-sanitized-allure-diagnostics.md (100%) rename docs/{Adr => adr}/ADR-004-contract-openapi-quality-gates.md (100%) rename docs/{Adr => adr}/ADR-005-owned-provider-http-server.md (100%) rename docs/{Adr => adr}/README.md (100%) rename docs/{Configuration_Guide.md => configuration-guide.md} (100%) rename docs/{Debugging_Test_Failures.md => debugging-test-failures.md} (100%) rename docs/{Dos_And_Dont.md => dos-and-dont.md} (100%) rename docs/{Execution_Guide.md => execution-guide.md} (100%) rename docs/{Portfolio_Review_Guide.md => portfolio-review-guide.md} (97%) rename docs/{Writing_Tests.md => writing-tests.md} (100%) diff --git a/README.md b/README.md index 32fd96d..615733c 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,11 @@ provider verification, OpenAPI endpoint coverage, security boundaries, redacted diagnostics, and CI quality gates. The name refers to REST API assertions and is not related to WAI-ARIA accessibility standards. +The core engineering problem this framework answers: how do you get real Pact +provider verification without depending on someone else's service? See +[ADR-005](docs/adr/ADR-005-owned-provider-http-server.md) for the owned-provider +answer, and the tech stack and project structure below for how it fits together. + ## Reviewer Proof | Evidence | Link | @@ -67,6 +72,10 @@ evidence. See [CHANGELOG.md](CHANGELOG.md). ## Run Locally +```bash +./gradlew clean test -Denv=dev +``` + ```powershell .\gradlew.bat clean test -Denv=dev ``` @@ -75,9 +84,9 @@ The default `test` task is deterministic. It excludes tests tagged `live` and ru Run a tag: -```powershell -.\gradlew.bat test -Denv=dev --tests "*AuthTests" -.\gradlew.bat smokeTest -Denv=dev +```bash +./gradlew test -Denv=dev --tests "*AuthTests" +./gradlew smokeTest -Denv=dev ``` Dedicated Gradle tasks are available for common deterministic suites: `smokeTest`, `regressionTest`, `contractTest`, `pactProviderVerificationTest`, `securityTest`, and `containerTest`. Use `test -DincludeTags=...` only when you intentionally want raw JUnit tag filtering; live tags require explicit credentials and network access. @@ -86,6 +95,12 @@ JUnit tags are available as `smoke`, `regression`, `negative`, `known-demo-api-l Run live public API tests only when credentials and network access are intentionally available: +```bash +export BOOKER_USERNAME="" +export BOOKER_PASSWORD="" +./gradlew liveTest -Denv=dev +``` + ```powershell $env:BOOKER_USERNAME="" $env:BOOKER_PASSWORD="" @@ -96,27 +111,27 @@ Scheduled CI runs `liveSmokeTest` weekly (Sunday 00:00 UTC) against the configur Run the full quality gate used by CI: -```powershell -.\gradlew.bat clean check securityScan allureReport -Denv=dev +```bash +./gradlew clean check securityScan allureReport -Denv=dev ``` Generate OpenAPI endpoint coverage: -```powershell -.\gradlew.bat openApiCoverageReport +```bash +./gradlew openApiCoverageReport ``` Generate Allure: -```powershell -.\gradlew.bat allureReport +```bash +./gradlew allureReport ``` Run with Docker: -```powershell -$env:ENV="dev" -$env:GITHUB_TOKEN="" +```bash +export ENV=dev +export GITHUB_TOKEN="" docker compose up --build ``` @@ -177,14 +192,14 @@ The metrics contract reports zero test-level retries by design. See the [reliabi Generate a local SBOM plus OSV scan instructions: -```powershell -.\gradlew.bat securityScan +```bash +./gradlew securityScan ``` If `osv-scanner` is installed, `securityScan` runs it against `build/reports/cyclonedx/bom.json` and fails on reported vulnerabilities. To fail when the scanner is missing, run: -```powershell -.\gradlew.bat securityScan -PrequireOsvScanner=true +```bash +./gradlew securityScan -PrequireOsvScanner=true ``` ## Project Structure @@ -236,21 +251,21 @@ Do not distribute `.gradle/`, `.idea/`, or `build/` as part of the portfolio sou ## Documentation -- [Portfolio Review Guide](docs/Portfolio_Review_Guide.md) +- [Portfolio Review Guide](docs/portfolio-review-guide.md) - [Current verification record](docs/evidence/latest-verification.md) - [Enterprise adaptation](docs/enterprise-adaptation.md) -- [Configuration Guide](docs/Configuration_Guide.md) -- [Execution Guide](docs/Execution_Guide.md) -- [Writing Tests](docs/Writing_Tests.md) -- [Debugging Test Failures](docs/Debugging_Test_Failures.md) -- [Dos and Don'ts](docs/Dos_And_Dont.md) +- [Configuration Guide](docs/configuration-guide.md) +- [Execution Guide](docs/execution-guide.md) +- [Writing Tests](docs/writing-tests.md) +- [Debugging Test Failures](docs/debugging-test-failures.md) +- [Dos and Don'ts](docs/dos-and-dont.md) - [Security Test Strategy](docs/SECURITY_TEST_STRATEGY.md) - [Threat Model](docs/security/aria-api-framework-threat-model.md) - [Reliability and Quarantine Policy](docs/RELIABILITY_POLICY.md) - [Failure Example and Triage](docs/failure-example.md) - [Seeded Defect Examples](docs/seeded-defects.md) - [Architecture](docs/ARCHITECTURE.md) -- [Architecture Decision Records](docs/Adr/README.md) +- [Architecture Decision Records](docs/adr/README.md) ## Repository Governance diff --git a/docs/Adr/ADR-001-deterministic-default-execution.md b/docs/adr/ADR-001-deterministic-default-execution.md similarity index 100% rename from docs/Adr/ADR-001-deterministic-default-execution.md rename to docs/adr/ADR-001-deterministic-default-execution.md diff --git a/docs/Adr/ADR-002-layered-service-client-architecture.md b/docs/adr/ADR-002-layered-service-client-architecture.md similarity index 100% rename from docs/Adr/ADR-002-layered-service-client-architecture.md rename to docs/adr/ADR-002-layered-service-client-architecture.md diff --git a/docs/Adr/ADR-003-sanitized-allure-diagnostics.md b/docs/adr/ADR-003-sanitized-allure-diagnostics.md similarity index 100% rename from docs/Adr/ADR-003-sanitized-allure-diagnostics.md rename to docs/adr/ADR-003-sanitized-allure-diagnostics.md diff --git a/docs/Adr/ADR-004-contract-openapi-quality-gates.md b/docs/adr/ADR-004-contract-openapi-quality-gates.md similarity index 100% rename from docs/Adr/ADR-004-contract-openapi-quality-gates.md rename to docs/adr/ADR-004-contract-openapi-quality-gates.md diff --git a/docs/Adr/ADR-005-owned-provider-http-server.md b/docs/adr/ADR-005-owned-provider-http-server.md similarity index 100% rename from docs/Adr/ADR-005-owned-provider-http-server.md rename to docs/adr/ADR-005-owned-provider-http-server.md diff --git a/docs/Adr/README.md b/docs/adr/README.md similarity index 100% rename from docs/Adr/README.md rename to docs/adr/README.md diff --git a/docs/Configuration_Guide.md b/docs/configuration-guide.md similarity index 100% rename from docs/Configuration_Guide.md rename to docs/configuration-guide.md diff --git a/docs/Debugging_Test_Failures.md b/docs/debugging-test-failures.md similarity index 100% rename from docs/Debugging_Test_Failures.md rename to docs/debugging-test-failures.md diff --git a/docs/Dos_And_Dont.md b/docs/dos-and-dont.md similarity index 100% rename from docs/Dos_And_Dont.md rename to docs/dos-and-dont.md diff --git a/docs/evidence/latest-verification.md b/docs/evidence/latest-verification.md index 4e9590b..1ddc66c 100644 --- a/docs/evidence/latest-verification.md +++ b/docs/evidence/latest-verification.md @@ -10,7 +10,7 @@ | Evidence class | Controlled and scheduled-live | | Result counts | 66 tests, 66 passed, 0 failed, 0 errors, 0 skipped (13.695s), from JUnit XML | | Report | [Allure report](https://qa-test-automation-frameworks.github.io/aria-api-framework/) | -| Known limitations | [Known issues](../known-issues.md) and [review guide](../Portfolio_Review_Guide.md) | +| Known limitations | [Known issues](../known-issues.md) and [review guide](../portfolio-review-guide.md) | The machine-readable record with the exact SHA, run ID/URL, conclusion, and result counts is published at [`latest-verification.json`](latest-verification.json). This diff --git a/docs/Execution_Guide.md b/docs/execution-guide.md similarity index 100% rename from docs/Execution_Guide.md rename to docs/execution-guide.md diff --git a/docs/Portfolio_Review_Guide.md b/docs/portfolio-review-guide.md similarity index 97% rename from docs/Portfolio_Review_Guide.md rename to docs/portfolio-review-guide.md index 1e3334a..ca3f83d 100644 --- a/docs/Portfolio_Review_Guide.md +++ b/docs/portfolio-review-guide.md @@ -4,7 +4,7 @@ This guide is a short evidence-based path through the repository. Claims below l ## Recommended Review Order -1. Read the [architecture](ARCHITECTURE.md) and [ADR index](Adr/README.md). +1. Read the [architecture](ARCHITECTURE.md) and [ADR index](adr/README.md). 2. Inspect [`BaseApiClient`](../src/main/java/com/aria/framework/clients/BaseApiClient.java), services, and typed request/response models. 3. Review [`RedactionPolicy`](../src/main/java/com/aria/framework/reporting/RedactionPolicy.java) and the [threat model](security/aria-api-framework-threat-model.md). 4. Read the owned fixture and atomic concurrency test under [`src/test`](../src/test/java/com/aria/framework/). diff --git a/docs/Writing_Tests.md b/docs/writing-tests.md similarity index 100% rename from docs/Writing_Tests.md rename to docs/writing-tests.md