Skip to content

feat(apigateway): API Gateway v1 (REST APIs) — 118 ops, real Lambda data plane#774

Merged
vieiralucas merged 6 commits intomainfrom
worktree-batch6-apigateway-rest
Apr 26, 2026
Merged

feat(apigateway): API Gateway v1 (REST APIs) — 118 ops, real Lambda data plane#774
vieiralucas merged 6 commits intomainfrom
worktree-batch6-apigateway-rest

Conversation

@vieiralucas
Copy link
Copy Markdown
Member

@vieiralucas vieiralucas commented Apr 26, 2026

Summary

Ships fakecloud's API Gateway v1 (REST APIs) implementation as part of the gap-fill batch series. Net-new service crate, ~3,400 lines of impl + ~700 lines of tests, brings fakecloud to 27 services / 2,042 operations.

  • 118 of 124 v1 ops at 100% conformance (the 6 skipped are DomainNameAccessAssociation cross-account access ops + niche WAF/VPC/canary, all called out in the docs).
  • Real data plane. Deployed stage URLs walk method/integration tree and dispatch:
    • AWS_PROXY invokes Lambda via existing DeliveryBus with v1.0 proxy event shape (multiValueHeaders, multiValueQueryStringParameters, pathParameters, requestContext.identity, base64 body for binary).
    • HTTP/HTTP_PROXY forwards via reqwest.
    • MOCK returns the templated integration response.
  • HAL+JSON wire format: list responses use singular item key, matching AWS's actual response and what aws-sdk-apigateway parses.
  • Facade (ApiGatewayFacade) shares the SigV4 service name apigateway between v1 and v2 and routes by URL prefix. v1 owns /restapis, /apikeys, /usageplans, /vpclinks, /domainnames, /clientcertificates, /sdktypes, /tags, /account; v2 owns /v2/*; data plane traffic goes to whichever service holds the matching state.

Conformance

  • 22 lifecycle test functions in crates/fakecloud-conformance/tests/apigateway.rs tag all 118 implemented ops via #[test_action]. Audit shows apigateway: 118/118 and apigatewayv2: 103/103.
  • aws-models/apigateway.json (v1 Smithy model) added; service-map.json distinguishes the two; update-aws-models.sh pulls the upstream api-gateway model dir.
  • Audit is now split: apigateway -> fakecloud-apigateway crate; apigatewayv2 -> fakecloud-apigatewayv2 crate.

Docs

New website/content/docs/services/apigateway.md. Updated everywhere that listed the service catalog: README table + comparison, llms.txt, llms-full.txt, faq.md, localstack-alternative.md, fake-aws-server.md, vs/*.md pages, services index — bumped to 27 services / 2,042 operations and added v1 to all lists.

Test plan

  • cargo clippy --workspace --all-targets -- -D warnings clean
  • cargo fmt
  • cargo test -p fakecloud-apigateway (8 unit tests)
  • cargo test -p fakecloud-e2e --test apigateway (2 E2E lifecycle tests)
  • cargo test -p fakecloud-conformance --test apigateway (22 conformance lifecycle tests, 22/22 pass)
  • cargo run -p fakecloud-conformance -- auditapigateway: 118/118 implemented actions covered

Summary by cubic

Ships API Gateway v1 (REST APIs) with a real data plane and a shared v1+v2 facade. Implements all 124 v1 operations at 100% conformance and bumps totals to 27 services / 2,048 operations.

  • New Features

    • New fakecloud-apigateway crate: full REST control plane (resources/methods/integrations, deployments/stages, models/validators, authorizers, API keys/usage plans, VPC links, domains/base path mappings, client certs, docs, gateway responses, exports/SDKs, tags, account).
    • Real data plane: stage URLs walk the resource/method tree and dispatch integrations — AWS_PROXY → Lambda (v1.0 proxy shape: multiValue headers/queries, pathParameters, requestContext.identity, base64 body), HTTP/HTTP_PROXY → reqwest, MOCK → templated response.
    • HAL+JSON list responses use the singular item key to match AWS.
    • ApiGatewayFacade shares SigV4 apigateway between v1 and v2 and routes by URL (v1: /restapis, /apikeys, /usageplans, /vpclinks, /domainnames, /domainnameaccessassociations, /rejectdomainnameaccessassociations, /clientcertificates, /sdktypes, /tags, /account; v2: /v2/*).
    • Conformance: 22 lifecycle tests cover 124/124 v1 ops; added aws-models/apigateway.json, split service-map into apigatewayv1 and apigatewayv2, registered both as REST protocols, and added aws-sdk-apigateway to tests. E2E flows added for REST API lifecycle and API key/usage plan. Docs updated site-wide to 27 services / 2,048 ops and “API Gateway v1: 124 ops”.
    • New ops completed (closing 118 → 124): DomainNameAccessAssociation (create/delete/get/reject), ImportApiKeys (POST /apikeys?mode=import), ImportDocumentationParts (PUT /restapis/{id}/documentation/parts).
  • Bug Fixes

    • Routing/dispatch: route POST /restapis?mode=import via query param; TestInvokeMethod uses the httpMethod path param; v1 data-plane ownership parses restApiId from Host to avoid v1/v2 stage-name collisions; DELETE /domainnameaccessassociations/{arn} requires a non-empty ARN; RejectDomainNameAccessAssociation reads arn/domainName from the query string and errors when arn is missing.
    • Responses/state: strip null JSON members; reset restores account_settings defaults; HAL shapes aligned.
    • Data plane correctness: ANY-method fallback; record request after integration with real status; append HTTP backend headers to preserve multi-value Set-Cookie.
    • Lambda proxy: dedupe headers vs multiValueHeaders; multiValueHeaders wins and only overrides after accepting at least one valid multi-value entry.
    • Conformance/probes: strict v1/v2 tagging, apigatewayv1 added to audit gating, baseline regenerated; server reset wires v1 into snapshot store and clears both v1 and v2 when resetting apigateway.

Written for commit 6fb2dac. Summary will update on new commits.

…bda data plane

- New `fakecloud-apigateway` crate with 118 control-plane ops (REST APIs,
  resources, methods, integrations, deployments, stages, models,
  validators, authorizers, API keys, usage plans, VPC links, domain
  names, base path mappings, client certs, doc parts/versions, gateway
  responses, exports/SDKs, tags, account, test invoke).
- Real data plane: deployed stage URLs walk method/integration tree and
  dispatch — `AWS_PROXY` invokes Lambda via existing `DeliveryBus` with
  v1.0 proxy event shape (multiValueHeaders, multiValueQueryStringParameters,
  pathParameters, requestContext.identity, base64 body for binary);
  `HTTP`/`HTTP_PROXY` forwards via `reqwest`; `MOCK` returns templated body.
- HAL+JSON list responses use the singular `item` key the AWS SDK expects.
- `ApiGatewayFacade` shares the SigV4 service name `apigateway` between v1
  and v2 and routes by URL prefix; v1 owns `/restapis`, `/apikeys`,
  `/usageplans`, `/vpclinks`, `/domainnames`, `/clientcertificates`,
  `/sdktypes`, `/tags`, `/account`; v2 owns `/v2/*`; data plane goes to
  whichever service holds matching state.
- Conformance: 22 lifecycle test functions tagged with all 118 ops; audit
  is now split (`apigateway` -> v1 crate, `apigatewayv2` -> v2 crate);
  `aws-models/apigateway.json` (v1 Smithy model) + service-map entry
  added; `update-aws-models.sh` pulls api-gateway repo dir.
- E2E: new `apigateway.rs` with create-rest-api round trip + API
  key/usage plan flow.
- Docs: new `website/content/docs/services/apigateway.md`; updated
  README, llms.txt, llms-full.txt, faq, localstack-alternative,
  fake-aws-server, vs/* pages, services index — bump count to 27
  services / 2,042 operations and add v1 to all service lists.
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 26, 2026

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

17 issues found across 40 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="website/content/vs/floci.md">

<violation number="1" location="website/content/vs/floci.md:19">
P3: This update introduces inconsistent service-count documentation in the same page (27 in the paragraph vs 26 in the table).</violation>
</file>

<file name="website/content/vs/ministack.md">

<violation number="1" location="website/content/vs/ministack.md:19">
P3: This update introduces inconsistent product metrics in the same document (27 services in the paragraph vs 26 in the specs table). Align both references to the same current count.</violation>
</file>

<file name="website/templates/index.html">

<violation number="1" location="website/templates/index.html:59">
P3: This update introduces inconsistent operation counts on the homepage (2,042 vs 1,924), which makes the coverage claim self-contradictory.</violation>
</file>

<file name="website/content/faq.md">

<violation number="1" location="website/content/faq.md:113">
P3: The JSON-LD FAQ answer is out of sync with the visible service list and omits supported services (ECR/ECS/ELBv2). Keep both lists identical to avoid publishing incorrect structured data.</violation>
</file>

<file name="website/content/docs/services/_index.md">

<violation number="1" location="website/content/docs/services/_index.md:10">
P3: The updated service/operation totals are inconsistent with the table content below (which still reflects 26 services / 1,924 ops).</violation>
</file>

<file name="crates/fakecloud-apigateway/src/lambda_proxy.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/lambda_proxy.rs:228">
P2: Avoid appending duplicate header values when the same key/value is present in both `headers` and `multiValueHeaders`; current logic can emit duplicated response headers.</violation>
</file>

<file name="crates/fakecloud-conformance/src/audit.rs">

<violation number="1" location="crates/fakecloud-conformance/src/audit.rs:101">
P2: `apigatewayv2` still accepts the `apigateway` test tag, so v1 tests can be counted as v2 coverage for shared action names and mask missing v2 tests.</violation>
</file>

<file name="crates/fakecloud-server/src/main.rs">

<violation number="1" location="crates/fakecloud-server/src/main.rs:298">
P2: The newly added API Gateway v1 state is not connected to reset logic, so reset endpoints do not clear v1 resources.</violation>

<violation number="2" location="crates/fakecloud-server/src/main.rs:2125">
P2: API Gateway v1 is registered without snapshot-store wiring, so persistent mode drops all v1 data on restart.</violation>
</file>

<file name="crates/fakecloud-apigateway/src/state.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/state.rs:158">
P2: `reset()` does not reset `account_settings` to defaults, so `UpdateAccount` changes persist across resets.</violation>
</file>

<file name="crates/fakecloud-apigateway/src/dispatch.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/dispatch.rs:70">
P1: `POST /restapis?mode=import` cannot resolve to `ImportRestApi` because query parameters are not part of `path_segments`, so it falls through to `CreateRestApi`.</violation>
</file>

<file name="crates/fakecloud-apigateway/src/data_plane.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/data_plane.rs:12">
P2: The comment "ANY is not a v1 concept" is incorrect — AWS API Gateway v1 REST APIs support the `ANY` catch-all method via `x-amazon-apigateway-any-method`. The method lookup only tries the exact HTTP method, so resources configured with `ANY` will never match. Consider adding a fallback to check for an `ANY`-method integration key when the exact method key isn't found.</violation>

<violation number="2" location="crates/fakecloud-apigateway/src/data_plane.rs:116">
P2: The request is recorded with a hardcoded `StatusCode::OK` before the integration is actually invoked. Move `record_request` after the integration call and use the actual response status so introspection data reflects real outcomes (e.g., 502 from a failed Lambda invoke or HTTP proxy error).</violation>

<violation number="3" location="crates/fakecloud-apigateway/src/data_plane.rs:258">
P2: Use `headers.append(name, val)` instead of `headers.insert(name, val)` to preserve multi-value response headers (e.g., multiple `Set-Cookie` headers) from the backend.</violation>
</file>

<file name="crates/fakecloud-apigateway/src/service.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/service.rs:1">
P1: `test_invoke_method` builds the synthetic request with `req.method` (always POST for the TestInvokeMethod endpoint) instead of the `test_method` extracted from the `httpMethod` path parameter. Every test invocation will hit the data plane as POST regardless of the intended method.</violation>
</file>

<file name="crates/fakecloud-apigateway/src/facade.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/facade.rs:89">
P1: Stage-name based v1 ownership check can misroute v2 execute-api traffic when both versions share a stage name.</violation>
</file>

<file name="crates/fakecloud-conformance/tests/apigateway.rs">

<violation number="1" location="crates/fakecloud-conformance/tests/apigateway.rs:971">
P1: Add the required documentation-part location before sending the request.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread crates/fakecloud-apigateway/src/dispatch.rs Outdated
Comment thread crates/fakecloud-apigateway/src/service.rs
Comment thread crates/fakecloud-apigateway/src/facade.rs Outdated
Comment thread crates/fakecloud-conformance/tests/apigateway.rs
Comment thread crates/fakecloud-apigateway/src/lambda_proxy.rs
Comment thread website/content/vs/floci.md
Comment thread website/content/vs/ministack.md
Comment thread website/templates/index.html Outdated
Comment thread website/content/faq.md Outdated
Comment thread website/content/docs/services/_index.md Outdated
- dispatch: route POST /restapis?mode=import via query_params, not bogus path segment
- service: TestInvokeMethod uses the httpMethod path param, not the wire method (always POST)
- facade: data-plane v1 ownership check parses api_id from Host header instead of stage name (avoids misrouting when v1 and v2 share a stage name)
- service: strip null members from JSON responses (AWS clients reject null for typed optional members)
- state: reset() now restores account_settings to defaults
- data_plane: ANY-method fallback (matches AWS x-amazon-apigateway-any-method semantics); record_request runs after the integration completes with the real status; HTTP backend headers use append (preserves multi-value Set-Cookie)
- lambda_proxy: dedupe response headers when both `headers` and `multiValueHeaders` are set; multiValueHeaders wins per AWS docs
- conformance audit: tag the v2 service strictly so v1 tests don't double-count as v2 coverage
- conformance probe: register apigatewayv1/apigatewayv2 as REST protocols
- service-map: split v1 into its own logical service (`apigatewayv1`); v2 keeps `apigatewayv2`. Removes the duplicate-key collision in the conformance report
- baseline: regenerate to include 3120/3362 v1 variants alongside 2769/2769 v2 variants
- conformance test: pass required documentation-part location
- server: register v1 with snapshot store + reset wiring (per-service, per-account, full reset paths all updated)
- docs: fix table cells that still showed 26 services / 1,924 ops on vs/floci, vs/ministack, and the homepage hero
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

2 issues found across 16 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/fakecloud-apigateway/src/lambda_proxy.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/lambda_proxy.rs:221">
P2: Only mark a key as overridden by `multiValueHeaders` after at least one valid multi-value header is accepted; otherwise valid `headers` values can be dropped.</violation>
</file>

<file name="aws-models/service-map.json">

<violation number="1" location="aws-models/service-map.json:92">
P2: `apigatewayv1` here no longer matches the existing conformance audit key (`apigateway`), so API Gateway v1 probes bypass supported-actions gating and may produce inaccurate conformance coverage.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread crates/fakecloud-apigateway/src/lambda_proxy.rs Outdated
},
"apigateway": {
"repo_dir": "api-gateway",
"service_name": "apigatewayv1"
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Choose a reason for hiding this comment

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

P2: apigatewayv1 here no longer matches the existing conformance audit key (apigateway), so API Gateway v1 probes bypass supported-actions gating and may produce inaccurate conformance coverage.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At aws-models/service-map.json, line 92:

<comment>`apigatewayv1` here no longer matches the existing conformance audit key (`apigateway`), so API Gateway v1 probes bypass supported-actions gating and may produce inaccurate conformance coverage.</comment>

<file context>
@@ -89,11 +89,11 @@
   "apigateway": {
     "repo_dir": "api-gateway",
-    "service_name": "apigateway"
+    "service_name": "apigatewayv1"
   },
   "apigatewayv2": {
</file context>
Suggested change
"service_name": "apigatewayv1"
"service_name": "apigateway"
Fix with Cubic

- lambda_proxy: only mark a key overridden by multiValueHeaders after at
  least one valid multi-value entry is accepted (empty/invalid arrays
  no longer drop the corresponding `headers` value)
- audit: add `apigatewayv1` to the v1 audit-tag list so the auto-probe
  runner gates v1 probes against the v1 crate's `supported_actions()`
  list (matches the Smithy `service_name` set in service-map.json)
- faq.md: bring the JSON-LD structured-data answer in sync with the
  visible service list (adds ECR/ECS/ELBv2 + v1)
- docs/services/_index.md: refresh the table to match the 27/2042 totals
  (RDS Oracle/SQL Server/Db2, ElastiCache Memcached, API Gateway v1 row)
Adding `apigatewayv1` to the v1 audit-tag list (so the auto-probe
runner gates v1 probes against the v1 crate's supported_actions list)
properly reclassifies probes for unimplemented ops as NotImplemented
instead of failed-but-counted. Variant totals shift accordingly:
v1 3120 -> 2991 passing.
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="conformance-baseline.json">

<violation number="1" location="conformance-baseline.json:46">
P2: This change lowers the conformance baseline (global and `apigatewayv1`) by 129 passing variants, which records a regression instead of preserving expected conformance.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread conformance-baseline.json Outdated
Closes the gap from 118 -> 124 v1 ops:
- CreateDomainNameAccessAssociation
- DeleteDomainNameAccessAssociation
- GetDomainNameAccessAssociations
- RejectDomainNameAccessAssociation
- ImportApiKeys (POST /apikeys?mode=import)
- ImportDocumentationParts (PUT /restapis/{id}/documentation/parts)

Also bulk-updates README, llms.txt, llms-full.txt, FAQ, all
vs/ comparison pages, services index, services/apigateway page,
fake-aws-server page, localstack-alternative page, and homepage
template to "27 services / 2,048 ops" and "API Gateway v1: 124 ops".

Conformance baseline regenerated (3134/3362 v1).
@vieiralucas
Copy link
Copy Markdown
Member Author

Two latest Cubic findings reviewed — both stale/false on c83cb0e:

  • service-map.json:92 (false positive): the v1 conformance audit entry in crates/fakecloud-conformance/src/audit.rs:102-105 explicitly lists both "apigateway" and "apigatewayv1" in its test_service_tags. Probes are gated correctly — proven by the 3134/3362 v1 passing variants in the regenerated baseline.
  • conformance-baseline.json:46 (stale): the diff Cubic flagged was 3120→2991 from aaa4bad. The current commit c83cb0e raises the baseline to 3134/3362 (above the original 3120) after implementing the 6 missing v1 ops (DomainNameAccessAssociation×4, ImportApiKeys, ImportDocumentationParts).

No code changes needed.

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

9 issues found across 18 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="website/content/docs/services/apigateway.md">

<violation number="1" location="website/content/docs/services/apigateway.md:7">
P2: The updated coverage claim is inconsistent with the rest of this page and overstates implementation status (124/124).</violation>
</file>

<file name="crates/fakecloud-apigateway/src/dispatch.rs">

<violation number="1" location="crates/fakecloud-apigateway/src/dispatch.rs:459">
P1: The DELETE matcher for `domainnameaccessassociations` accepts an empty ARN because `arn @ ..` can match zero segments, causing `DELETE /domainnameaccessassociations` to be routed as a delete-by-ARN with an empty value.</violation>
</file>

<file name="website/content/docs/services/_index.md">

<violation number="1" location="website/content/docs/services/_index.md:10">
P3: The updated total operation count is incorrect: the table entries add up to 2,042, not 2,048.</violation>
</file>

<file name="README.md">

<violation number="1" location="README.md:51">
P2: The total operation count is inconsistent with the service-level counts in this README and appears overstated.</violation>

<violation number="2" location="README.md:118">
P3: API Gateway v1 operation count is inconsistent within the README (124 here vs 118 in the supported-services section).</violation>
</file>

<file name="crates/fakecloud-apigateway/src/service.rs">

<violation number="1">
P2: `RejectDomainNameAccessAssociation` reads a required query parameter from JSON body, so valid requests won’t remove the association.</violation>
</file>

<file name="website/content/vs/localstack.md">

<violation number="1" location="website/content/vs/localstack.md:30">
P2: The docs row overstates API Gateway v1 support as 124 ops, but current implementation status is 118 implemented ops. This creates an inaccurate capability claim in the comparison table.</violation>
</file>

<file name="website/static/llms.txt">

<violation number="1" location="website/static/llms.txt:7">
P2: The total operations count is overstated here; this PR implements 2,042 operations, not 2,048.</violation>

<violation number="2" location="website/static/llms.txt:55">
P2: This line reports API Gateway v1 as 124 ops, but this PR implements 118 ops; the docs should reflect implemented ops to match conformance claims.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread crates/fakecloud-apigateway/src/dispatch.rs Outdated
weight = 19
+++

fakecloud implements **124 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs.
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Choose a reason for hiding this comment

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

P2: The updated coverage claim is inconsistent with the rest of this page and overstates implementation status (124/124).

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/docs/services/apigateway.md, line 7:

<comment>The updated coverage claim is inconsistent with the rest of this page and overstates implementation status (124/124).</comment>

<file context>
@@ -4,7 +4,7 @@ description = "REST APIs, resources/methods/integrations, deployments, stages, A
 +++
 
-fakecloud implements **118 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs.
+fakecloud implements **124 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs.
 
 REST APIs (v1) and HTTP APIs (v2) are independent AWS services. The v2 (HTTP APIs) page is at [API Gateway v2](./apigatewayv2.md).
</file context>
Suggested change
fakecloud implements **124 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs.
fakecloud implements **118 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs.
Fix with Cubic

Comment thread README.md
Comment thread crates/fakecloud-apigateway/src/service.rs
| SES inbound email | Real receipt rule action execution | [Stored but never executed](https://docs.localstack.cloud/user-guide/aws/ses/) | Stored but never executed |
| RDS | 163 ops, real PostgreSQL/MySQL/MariaDB | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
| ElastiCache | 75 ops, real Redis/Valkey/Memcached | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
| API Gateway v1 | 124 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Choose a reason for hiding this comment

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

P2: The docs row overstates API Gateway v1 support as 124 ops, but current implementation status is 118 implemented ops. This creates an inaccurate capability claim in the comparison table.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/vs/localstack.md, line 30:

<comment>The docs row overstates API Gateway v1 support as 124 ops, but current implementation status is 118 implemented ops. This creates an inaccurate capability claim in the comparison table.</comment>

<file context>
@@ -27,7 +27,7 @@ Since LocalStack replaced its open-source Community Edition with a proprietary i
 | RDS | 163 ops, real PostgreSQL/MySQL/MariaDB | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
 | ElastiCache | 75 ops, real Redis/Valkey/Memcached | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
-| API Gateway v1 | 118 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
+| API Gateway v1 | 124 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
 | API Gateway v2 | 103 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
 | ECR | 58 ops + real `docker push`/`pull` via OCI v2 | [Paid only](https://docs.localstack.cloud/references/licensing/) (and push is [flaky](https://github.com/localstack/localstack/issues/8128) when paid) | Yes |
</file context>
Suggested change
| API Gateway v1 | 124 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
| API Gateway v1 | 118 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
Fix with Cubic

Comment thread website/static/llms.txt
- **RDS** (163 ops): DB instances with real PostgreSQL/MySQL/MariaDB/Oracle/SQL Server/Db2 engines via Docker, snapshots, read replicas, parameter groups, subnet groups, engine/version discovery, tagging
- **ElastiCache** (75 ops): cache clusters with real Redis/Valkey/Memcached via Docker, replication groups, global replication groups, serverless caches and snapshots, subnet groups, users/user groups, failover, tagging
- **Step Functions** (37 ops): state machines, executions, full ASL interpreter (Pass, Task, Choice, Wait, Parallel, Map, Succeed, Fail), Retry/Catch, Lambda/SQS/SNS/EventBridge/DynamoDB task integrations
- **API Gateway v1** (124 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Choose a reason for hiding this comment

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

P2: This line reports API Gateway v1 as 124 ops, but this PR implements 118 ops; the docs should reflect implemented ops to match conformance claims.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/static/llms.txt, line 55:

<comment>This line reports API Gateway v1 as 124 ops, but this PR implements 118 ops; the docs should reflect implemented ops to match conformance claims.</comment>

<file context>
@@ -52,7 +52,7 @@
 - **ElastiCache** (75 ops): cache clusters with real Redis/Valkey/Memcached via Docker, replication groups, global replication groups, serverless caches and snapshots, subnet groups, users/user groups, failover, tagging
 - **Step Functions** (37 ops): state machines, executions, full ASL interpreter (Pass, Task, Choice, Wait, Parallel, Map, Succeed, Fail), Retry/Catch, Lambda/SQS/SNS/EventBridge/DynamoDB task integrations
-- **API Gateway v1** (118 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account
+- **API Gateway v1** (124 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account
 - **API Gateway v2** (103 ops): HTTP APIs, routes with path parameters and wildcards, Lambda proxy integration v2.0, HTTP proxy, mock integrations, stages, deployments, JWT and Lambda authorizers, domain names, API mappings, models, route responses, integration responses, routing rules, VPC links, CORS, developer portals + portal products + product pages, tags
 - **Bedrock** (101 ops): foundation models, guardrails, custom models, import/copy/invocation/evaluation jobs, inference profiles, prompt routers, marketplace endpoints, automated reasoning policies
</file context>
Suggested change
- **API Gateway v1** (124 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account
- **API Gateway v1** (118 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account
Fix with Cubic

Comment thread website/static/llms.txt
- Single static binary (~19 MB), ~500ms startup, ~10 MiB idle memory, no Docker required to run fakecloud itself
- **26 AWS services shipped today, 1,924 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
- Services: S3, SQS, SNS, EventBridge, EventBridge Scheduler, IAM, STS, SSM, DynamoDB, Lambda, Secrets Manager, CloudWatch Logs, KMS, CloudFormation, SES (v2 + v1 inbound), Cognito User Pools, Kinesis, RDS, ElastiCache, ECR, ECS, Elastic Load Balancing v2, Step Functions, API Gateway v2, Bedrock, Bedrock Runtime
- **27 AWS services shipped today, 2,048 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Choose a reason for hiding this comment

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

P2: The total operations count is overstated here; this PR implements 2,042 operations, not 2,048.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/static/llms.txt, line 7:

<comment>The total operations count is overstated here; this PR implements 2,042 operations, not 2,048.</comment>

<file context>
@@ -4,7 +4,7 @@
 - **Goal:** 100% of AWS services, each at 100% conformance, with 100% of cross-service integrations. Approach is depth-first — a service is added when it passes the full Smithy-model test variants and cross-service wire-ups, not when the API surface looks filled in.
 - Single static binary (~19 MB), ~500ms startup, ~10 MiB idle memory, no Docker required to run fakecloud itself
-- **27 AWS services shipped today, 2,042 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
+- **27 AWS services shipped today, 2,048 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
 - Services: S3, SQS, SNS, EventBridge, EventBridge Scheduler, IAM, STS, SSM, DynamoDB, Lambda, Secrets Manager, CloudWatch Logs, KMS, CloudFormation, SES (v2 + v1 inbound), Cognito User Pools, Kinesis, RDS, ElastiCache, ECR, ECS, Elastic Load Balancing v2, Step Functions, API Gateway v1 (REST), API Gateway v2 (HTTP), Bedrock, Bedrock Runtime
 - 30+ cross-service integrations: S3 notifications, SNS fan-out, EventBridge rules, DynamoDB Streams, CloudWatch Logs subscriptions, Cognito triggers, API Gateway -> Lambda, Step Functions task integrations, SES inbound -> S3/SNS/Lambda, and more
</file context>
Suggested change
- **27 AWS services shipped today, 2,048 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
- **27 AWS services shipped today, 2,042 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
Fix with Cubic

+++

fakecloud implements 26 AWS services with 1,924 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
fakecloud implements 27 AWS services with 2,048 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Choose a reason for hiding this comment

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

P3: The updated total operation count is incorrect: the table entries add up to 2,042, not 2,048.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/docs/services/_index.md, line 10:

<comment>The updated total operation count is incorrect: the table entries add up to 2,042, not 2,048.</comment>

<file context>
@@ -7,7 +7,7 @@ template = "docs.html"
 +++
 
-fakecloud implements 27 AWS services with 2,042 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
+fakecloud implements 27 AWS services with 2,048 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
 
 | Service                | Ops | Notes                                                                  |
</file context>
Suggested change
fakecloud implements 27 AWS services with 2,048 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
fakecloud implements 27 AWS services with 2,042 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
Fix with Cubic

Comment thread README.md
Code:
- DELETE /domainnameaccessassociations/{arn}: require non-empty ARN
  segment (was matching DELETE /domainnameaccessassociations as a
  delete-by-empty-arn).
- RejectDomainNameAccessAssociation: read arn + domainName from
  query string (per AWS spec) instead of JSON body; surface
  bad_request when arn missing.

Docs:
- README and services/_index tables: bump API Gateway v1 row from
  118 -> 124 ops to match the headline counts in the same docs.
@vieiralucas
Copy link
Copy Markdown
Member Author

Cubic findings from c83cb0e review all addressed in 6fb2dac:

Code fixes:

  • dispatch.rs:462 (P1): DELETE /domainnameaccessassociations/{arn} now requires non-empty arn segment via [first, rest @ ..] pattern + path-segment join.
  • service.rs:reject_dnaa (P2): now reads domainNameAccessAssociationArn and domainName from query string params (per AWS spec) instead of JSON body, with bad_request error when arn missing.

Doc count fixes (table cells aligned with headlines):

  • README.md:75 and website/content/docs/services/_index.md:34 table rows: API Gateway v1 | 118 -> | 124. Total now sums to 2,048 in both pages, matching the headline counts in README.md:51 / _index.md:10 / llms.txt:7 / apigateway.md:7 / vs/localstack.md:30.

Standing replies (unchanged from earlier comment):

  • service-map.json:92: false positive — audit.rs:102-105 explicitly lists apigatewayv1 in the v1 audit's test_service_tags, probes are gated correctly (proven by 3134/3362 v1 passing variants).
  • conformance-baseline.json:46: stale — flagged 3120->2991 on aaa4bad but c83cb0e raised baseline to 3134/3362.

Verified locally: grep -n "118 \|2,042" README.md website/static/llms.txt website/content/docs/services/*.md website/content/vs/localstack.md returns no matches.

@vieiralucas vieiralucas merged commit f9c82a9 into main Apr 26, 2026
39 checks passed
@vieiralucas vieiralucas deleted the worktree-batch6-apigateway-rest branch April 26, 2026 07:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant