Skip to content

feat(gcp-to-aws): add EKS Auto Mode guidance for GKE migrations - #247

Merged
leon1418 merged 41 commits into
awslabs:mainfrom
hasrazz:hasrazz/eks-auto-mode-recommendation
Sep 24, 2026
Merged

leon1418 merged 41 commits into
awslabs:mainfrom
hasrazz:hasrazz/eks-auto-mode-recommendation

Conversation

@hasrazz

@hasrazz hasrazz commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

Problem

For GCP → AWS migrations, the gcp-to-aws skill defaulted GKE workloads to ECS Fargate whenever the user didn't explicitly express a Kubernetes preference, and it did not offer EKS Auto Mode as a target at all. This is out of step with current AWS guidance, which positions EKS Auto Mode as the recommended low-operational-overhead way to run Kubernetes (the closest equivalent to GKE Autopilot). GKE Autopilot clusters in particular had no matching AWS landing zone, and the Autopilot signal — although captured in live discovery — never reached the Clarify/Design phases.

Solution

  • Discovery: detect GKE Autopilot on both paths (Terraform enable_autopilot, live autopilot.enabled) and normalize a canonical config.autopilot_enabled key into the inventory schema so Clarify/Design can read it.
  • Clarify (Q8): default GKE sources to EKS Auto Mode; standard EKS managed node groups and ECS Fargate become explicit opt-outs; the Autopilot flag is surfaced as context (Autopilot → Auto Mode is the 1:1 match).
  • Multi-cloud (Q5): routes to standard EKS (Auto Mode is excluded — its node management is AWS-specific and defeats portability).
  • Threading: the new eks-auto / eks-standard / ecs-fargate enum flows through the compute rubric (compute.md), fast-path, index, Terraform generation (Auto Mode cluster vs managed node groups), pricing formulas (Auto Mode management fee + control-plane fee), preferences schema, billing path, and workshop sheet.
  • Cross-plugin parity: the same changes are mirrored into the advisor/ copy of gcp-to-aws so the cross-plugin drift check stays green.

Type of Change

  • New plugin/power/tool
  • Bug fix
  • Enhancement to existing content
  • Documentation update
  • Guardrail/CI update

Team Folder

  • advisor/
  • migrate/
  • solution-architecture/
  • Other: ___

Note: the change lives in migrate/plugins/migration-to-aws/skills/gcp-to-aws/ and is mirrored into advisor/plugins/aws-startup-advisor/skills/gcp-to-aws/, which the repo's cross-plugin-drift check requires to stay in sync.

Checklist

  • I have read the CONTRIBUTING.md guidelines
  • My changes do not include hardcoded secrets, credentials, or internal-only content
  • I have run mise run build locally and it passes
  • I have updated documentation if needed
  • My changes are scoped to my team's folder only

Verification: mise run build passes locally (exit 0) — lint, fmt:check, and the security suite (bandit, semgrep, gitleaks, checkov 184/0, grype clean) all pass; cross-plugin-drift, fixtures, frontmatter, and tests are OK; the working tree is not mutated by the build. Changes are documentation/prompt Markdown only. (Pre-existing, unrelated pricing:staleness warnings on the heroku-to-aws caches are warn-only and untouched by this PR.)

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Hasnain Raza added 4 commits August 25, 2026 13:03
- Detect GKE Autopilot in discovery (IaC enable_autopilot + live autopilot.enabled)
  and normalize config.autopilot_enabled into the inventory schema
- Rework Q8: EKS Auto Mode (default) vs standard EKS vs ECS Fargate; standard
  node groups only on explicit opt-in; surface Autopilot flag as context
- Multi-cloud (Q5) routes to standard EKS for portability (Auto Mode excluded)
- Update compute rubric, fast-path, index, Terraform generation, pricing
  formulas, preferences schema, billing path, and workshop sheet
…ugin

Keep the advisor/plugins/aws-startup-advisor copy of the gcp-to-aws skill
byte-identical to migration-to-aws so the cross-plugin drift check passes.
…ugin

Keep the advisor/plugins/aws-startup-advisor copy of the gcp-to-aws skill
byte-identical to migration-to-aws so the cross-plugin drift check passes.
@hasrazz
hasrazz requested review from a team as code owners August 25, 2026 13:52
@hasrazz
hasrazz marked this pull request as draft August 25, 2026 13:54
@hasrazz hasrazz changed the title feat(gcp-to-aws): default GKE migrations to EKS Auto Mode feat(gcp-to-aws): add EKS Auto Mode guidance for GKE migrations Aug 25, 2026
…ance

EKS Auto Mode has no AMI/launch template; arm64 is selected on the
NodePool/aws_eks_node_class rather than a node-group AMI. Mirrored to advisor.

@herosjourney herosjourney left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Summary

Good direction overall — defaulting GKE migrations to EKS Auto Mode is the right call technically (it's the correct GKE Autopilot analog, and it's AWS's own recommended low-ops path), and the change is threaded consistently through Clarify, Design, Estimate, Generate, pricing, and schema. The advisor/ mirror is verified byte-identical to the migrate/ source apart from path prefixes, so the drift-check claim in the PR body holds up.

One real bug should block merge. Two other items are worth addressing but not blocking.


Blocking

graviton.md / generate-artifacts-infra.md — arm64 guidance for EKS Auto Mode is incomplete and would silently fail

Both files say to select arm64 for Auto Mode by setting kubernetes.io/arch: arm64 on "the NodePool / aws_eks_node_class." I checked this against AWS's docs: the built-in general-purpose NodePool — the one that actually schedules application workloads — is amd64-only. Only the built-in system NodePool (tainted CriticalAddonsOnly, for cluster components) supports both architectures. (Enable or Disable Built-in NodePools)

Getting arm64 app workloads on Auto Mode requires a custom NodePool + NodeClass (Karpenter CRDs applied via kubectl/Helm) — it's not a flag you can flip on the default pool, and it's not something the aws_eks_cluster Terraform resource can express. As written, an agent following this instruction will either fail or silently produce an amd64 cluster while reporting Graviton was applied.

Suggested fix: either (a) note that Auto Mode + Graviton requires generating an additional custom NodePool/NodeClass manifest (not just Terraform) and do that, or (b) flag to the user that Graviton isn't cleanly supported for Auto Mode via this skill's generated output yet, rather than asserting it works.


Non-blocking

compute.md — no regional-availability check for Auto Mode

Elsewhere in this codebase (design-ai.md, Bedrock model selection), newer AWS capabilities go through the awsknowledge MCP regional-availability check before being recommended. This PR recommends Auto Mode unconditionally on GKE detection with no equivalent gate. Auto Mode is broadly available today, but it's inconsistent with the caution pattern this repo already established for exactly this kind of rollout. Suggest adding the same MCP check, or explicitly noting why it's not needed here.

clarify-compute.md Q8 — question wording states the recommendation before presenting the choice

The new Q8 opens with "You're on GKE today, so by default we keep you on Kubernetes with EKS Auto Mode... How would you like to proceed?" before listing options A/B/C. That's a change from the old Q8, which explicitly instructed framing the question neutrally ("frame it practically so the user gives an honest answer rather than aspirational"). Leading with the recommended answer nudges "I don't know" responses toward passive confirmation rather than an actual decision.

To be clear, I think the default itself is a good change — Q8 only fires when GKE is already in inventory, meaning the customer already chose Kubernetes deliberately; defaulting undecided users to stay on that abstraction (via the lowest-ops AWS variant) respects an existing investment better than the old Fargate default, which silently dropped it. I'd just ask to restructure the prompt so options are presented before the recommendation is stated, keeping the same default.

Confirmed not an issue: I traced Q8's answer through Design and Generate independently, and all three answers (Auto Mode / standard EKS / Fargate) produce distinct, correct Terraform output — this isn't a case of the preference being captured but not honored downstream. The eliminator logic also correctly overrides preference when a technical blocker exists (node-level customization needs, or the Q5 multi-cloud portability override), which is the right precedence — user preference should win among viable options, not over hard constraints.


What's correctly implemented (verified against AWS docs)

  • IMDSv2 enforcement claim for Auto Mode nodes (hop limit 1, non-configurable) — accurate, no launch template needed.
  • Two distinct IAM roles (cluster role vs. node role, separate managed-policy sets) — matches AWS's documented setup exactly.
  • Terraform block shape (compute_config { enabled, node_pools, node_role_arn }, kubernetes_network_config { elastic_load_balancing { enabled } }, storage_config { block_storage { enabled } }) — matches real working Auto Mode Terraform.
  • Excluding Auto Mode from the Q5 multi-cloud path — correct; Auto Mode's node management genuinely is AWS-specific and would undercut the portability goal.
  • Savings Plan caveat (applies to underlying EC2 instances, not the Auto Mode management fee or control-plane fee) — directionally correct per AWS's cost docs.

Hasnain Raza added 3 commits August 25, 2026 16:26
…neral-purpose is amd64-only)

Auto Mode's built-in general-purpose NodePool is amd64-only and immutable, and
aws_eks_cluster cannot express node architecture — so arm64 cannot be selected
via a flag. Getting arm64 workloads on Auto Mode requires a custom Karpenter
NodePool + EC2NodeClass applied as a Kubernetes manifest (kubectl/Helm), not
Terraform. Update graviton.md, generate-artifacts-infra.md, and the estimate
pricing note to emit that manifest + apply step when arm64 is targeted, and to
fall back to amd64 (flagging Graviton as not applied) rather than silently
reporting arm64. Mirrored to advisor. Addresses blocking PR review comment.
…option

Address non-blocking PR review: present Q8 options A/B/C before stating the
default (recommendation noted last) so unsure users make an actual choice
instead of passively confirming a lead-in. Remove the contradictory
'D) N/A - We don't use Kubernetes' option (Q8 only fires when a GKE cluster
is present) and renumber 'I don't know' to D. Also correct a stale Q8 default
(Fargate -> EKS Auto Mode) in clarify.md's documented-defaults table. Default
is unchanged (eks-auto). Mirrored to advisor.
Address non-blocking PR review: before finalizing eks-auto, validate EKS Auto
Mode in the target region via get_regional_availability (awsknowledge MCP) —
the same source-of-truth check the repo uses for AgentCore/Bedrock. If Auto
Mode is unavailable (e.g. GovCloud/opt-in partitions from a fedramp target),
fall back to eks-standard in the same region with a warning, rather than
silently emitting an undeployable cluster. Mirrored to advisor.
@hasrazz

hasrazz commented Aug 25, 2026

Copy link
Copy Markdown
Contributor Author

Blocking

graviton.md / generate-artifacts-infra.md — arm64 guidance for EKS Auto Mode is incomplete and would silently fail

Both files say to select arm64 for Auto Mode by setting kubernetes.io/arch: arm64 on "the NodePool / aws_eks_node_class." I checked this against AWS's docs: the built-in general-purpose NodePool — the one that actually schedules application workloads — is amd64-only. Only the built-in system NodePool (tainted CriticalAddonsOnly, for cluster components) supports both architectures. (Enable or Disable Built-in NodePools)

Getting arm64 app workloads on Auto Mode requires a custom NodePool + NodeClass (Karpenter CRDs applied via kubectl/Helm) — it's not a flag you can flip on the default pool, and it's not something the aws_eks_cluster Terraform resource can express. As written, an agent following this instruction will either fail or silently produce an amd64 cluster while reporting Graviton was applied.

Suggested fix: either (a) note that Auto Mode + Graviton requires generating an additional custom NodePool/NodeClass manifest (not just Terraform) and do that, or (b) flag to the user that Graviton isn't cleanly supported for Auto Mode via this skill's generated output yet, rather than asserting it works.

Yes - This is correct. We need separate manifests for graviton in EKS Auto mode as of now. I have added detailed guidance in newer commit. dec4d29

Non-blocking

compute.md — no regional-availability check for Auto Mode

Elsewhere in this codebase (design-ai.md, Bedrock model selection), newer AWS capabilities go through the awsknowledge MCP regional-availability check before being recommended. This PR recommends Auto Mode unconditionally on GKE detection with no equivalent gate. Auto Mode is broadly available today, but it's inconsistent with the caution pattern this repo already established for exactly this kind of rollout. Suggest adding the same MCP check, or explicitly noting why it's not needed here.

Nice, did not know about that, added this suggestion as well. 4aac819

clarify-compute.md Q8 — question wording states the recommendation before presenting the choice

The new Q8 opens with "You're on GKE today, so by default we keep you on Kubernetes with EKS Auto Mode... How would you like to proceed?" before listing options A/B/C. That's a change from the old Q8, which explicitly instructed framing the question neutrally ("frame it practically so the user gives an honest answer rather than aspirational"). Leading with the recommended answer nudges "I don't know" responses toward passive confirmation rather than an actual decision.

Restructured that in new commit. 8c4f94d

I will expand on ECS guidance in a different PR

@hasrazz
hasrazz marked this pull request as ready for review August 25, 2026 16:17

@herosjourney herosjourney left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All three findings addressed — approving

Re-verified each fix directly against the diff, not just the commit message.

Blocking - arm64/NodePool bug (dec4d29): fixed correctly. graviton.md and generate-artifacts-infra.md now correctly state Graviton on Auto Mode is not a Terraform flag - the built-in general-purpose NodePool is amd64-only and immutable, and getting arm64 workloads running requires a custom Karpenter NodePool + EC2NodeClass applied as a Kubernetes manifest post-provision. The fix also adds the right safety net: if the run can't emit/apply that manifest, it falls back to amd64 and explicitly flags Graviton as not applied, rather than claiming arm64 succeeded. This closes the exact failure mode I flagged.

Non-blocking - Q8 wording (8c4f94d): fixed, and improved beyond what I asked. Options A/B/C are now presented before the recommendation, with the default noted last as "if you're unsure, we default to A" rather than opening the question. The default itself is correctly unchanged (still eks-auto), which was the right call to preserve. Also caught and removed a dead option ("D) N/A - we don't use Kubernetes") that couldn't fire since Q8 only triggers when GKE is already present - good catch I'd missed.

Non-blocking - regional availability gate (4aac819): fixed correctly. Adds an awsknowledge MCP get_regional_availability check before finalizing eks-auto, reusing the same pattern this repo already applies to Bedrock/AgentCore. Falls back to eks-standard in the same region (not a different region) on unavailability, with both a rationale note and a warnings[] entry, plus a sane degraded path if the MCP call itself fails.

Verified independently:

  • All touched files remain byte-identical between advisor/ and migrate/ mirrors.
  • mise run build exits 0, drift:check reports 259 identical / 25 allowlisted (baseline, no new suppressions).

No remaining concerns. Approving.

@leon1418 leon1418 left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[🤖 AI review 🤖]

Update (September 14, 2026): the CLEAN conclusion below is superseded by my follow-up review at head ed268632, which requests changes. The original App Engine billing nit is fixed. The current review identifies two P1 issues (final target enforcement and the Auto Mode NodeClass API) and one P2 issue (the fallback architecture value). I incorrectly accepted the EC2NodeClass guidance in this earlier review. The original review below is retained as historical context.


[🤖 AI review 🤖]

Reviewed head 17c7e804 — 32 files, +422/−256 (all prose/Markdown, no code).

This PR adds EKS Auto Mode as the default GKE migration target, displacing the previous Fargate default. The change is well-designed: GKE usage signals Kubernetes adoption, so staying on managed Kubernetes (Auto Mode as the GKE Autopilot equivalent) is the right default; users who want node control or want off K8s opt in explicitly via Q8. The three-way enum (eks-auto / eks-standard / ecs-fargate) threads cleanly through Clarify → Design → Estimate → Generate → Workshop, with correct multi-cloud exclusion (Auto Mode is AWS-specific, Q5 routes to standard EKS). herosjourney's blocking finding (arm64/NodePool) and both non-blocking items are all verified fixed at the current head.

1 Nit (non-blocking): design-billing.md table row for google_app_engine_application says "EKS Auto Mode under compute: \"eks\"" while the override paragraph in the same file — and every other location — correctly says "EKS standard node groups" for multi-cloud. An agent parsing the table first would pick the wrong target. Inline comment posted.

What's correctly implemented (verified in the diff):

  • Autopilot detection normalized into config.autopilot_enabled on both IaC and live paths, with canonical schema keys documented in schema-discover-iac.md.
  • Q8 restructured: options presented before recommendation, dead option D removed (Q8 only fires when GKE present), default changed from Fargate to Auto Mode with clear rationale.
  • Auto Mode eliminator (node-level customization) falls back to eks-standard, not Fargate — preserves Kubernetes.
  • Regional availability gate via awsknowledge MCP get_regional_availability before finalizing eks-auto, matching the existing Bedrock/AgentCore pattern.
  • Graviton/arm64 on Auto Mode correctly documented as requiring custom Karpenter NodePool+EC2NodeClass manifest (not a Terraform flag), with amd64 fallback if manifest cannot be emitted.
  • EKS Auto Mode pricing formula correctly separates control plane fee, EC2 instance rate, and Auto Mode management surcharge, with amd64-by-default note.
  • Savings Plan guidance updated to clarify management fee and control plane are not SP-eligible.
  • Q5 multi-cloud consistently routes to eks-standard across all 16 files (compute, clarify-global, fast-path, index, billing, estimate, generate, workshop, schema-preferences).
  • Cross-plugin parity: all 16 advisor/migrate pairs verified byte-identical after path normalization. No new drift allowlist entries.

CI: No checks reported on this branch.
Merge status: MERGEABLE, 1 approval (herosjourney at current head), review requested from startups-advisor + startups-migrate teams.
Verdict: CLEAN. The Nit is a copy/paste remnant that does not block — the authoritative override paragraph in the same file has the correct text, and an agent that reads past the table will get the right answer. But fixing it removes the ambiguity.

leon1418
leon1418 previously approved these changes Sep 1, 2026
Hasnain Raza added 2 commits September 3, 2026 10:25
…ing table

The App Engine row's alternatives cell in design-billing.md said 'EKS Auto Mode
under compute: eks', contradicting the multi-cloud override paragraph below it
and the rest of the PR (compute.md, clarify-global.md, fast-path.md, index.md).
Multi-cloud (Q5) routes to standard EKS node groups, not Auto Mode. Mirrored to
advisor. Addresses PR review comment.
@hasrazz

hasrazz commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

1 Nit (non-blocking): design-billing.md table row for google_app_engine_application says "EKS Auto Mode under compute: \"eks\"" while the override paragraph in the same file — and every other location — correctly says "EKS standard node groups" for multi-cloud. An agent parsing the table first would pick the wrong target. Inline comment posted.

updated this in e27ef1c

@hasrazz

hasrazz commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

@leon1418, @herosjourney; All changes have been pushed and branch is updated with main.

@hasrazz
hasrazz requested a review from leon1418 September 3, 2026 09:47
Hasnain Raza added 3 commits September 9, 2026 21:23
…dard node groups

The Preferred AWS Target Services table (enforcement authority) routed GKE to
EKS Auto Mode unconditionally. Under Q5=multi-cloud, Q8 is skipped and no
kubernetes key is written, so enforcement could re-substitute Auto Mode over
the rubric's standard-node-groups decision. Condition the GKE clause on
compute: eks (multi-cloud) and explicit Q8 opt-in, defaulting to Auto Mode
otherwise — mirroring the PaaS row's inline guard. Mirrored to advisor.
Addresses ayn-builds blocking review comment.
…roups for multi-cloud

compute.md criterion 2 said the compute: eks override 'already selected EKS
Auto Mode', contradicting criterion 1 and criterion 3 which route multi-cloud
to standard node groups. Correct the parenthetical to 'EKS with standard node
groups'. Mirrored to advisor. Addresses ayn-builds review comment.
…ng pipeline

The Auto Mode fee bypassed the file's 4-tier price-lookup ladder (MCP-only, 'do
not hardcode'), so with MCP unavailable it silently dropped and understated the
default GKE estimate. Give it a documented home in pricing-cache.md (### EKS)
describing AWS's actual model — a per-EC2-instance-type surcharge, additive,
per-second, independent of purchase option — with no hardcoded rate, since AWS
publishes no flat number/percentage (verified on aws.amazon.com/eks/pricing).
estimate-infra.md now routes the fee via awspricing MCP with a real tier-4
fallback (services_with_missing_fallback + warn) instead of silently dropping.
Mirrored to advisor. Addresses ayn-builds review comment.
Hasnain Raza and others added 5 commits September 16, 2026 14:32
…recommendations

Consolidate nine phrasings for the non-Auto-Mode EKS target into canonical
forms: "Standard EKS Cluster" for the cluster type (multi-cloud override
and generic references) and "Standard EKS Cluster with managed node groups"
for the explicit eks-standard opt-in path. Matches the single-term
discipline already used on the Auto Mode side.

Left unchanged on purpose: eks-standard/eks-auto enum values, the
aws_eks_node_group Terraform wiring in Generate, and the pricing-cache
line describing node-group EC2 billing. Both mirrors, byte-identical.
The arm64 Graviton manifest for EKS Auto Mode told Generate to emit a
custom EC2NodeClass. That is the self-managed Karpenter API
(karpenter.k8s.aws); Auto Mode does not reconcile it, so the arm64 pool
would never be configured. Auto Mode node classes are
apiVersion eks.amazonaws.com/v1, kind NodeClass, and a NodePool must
reference them via group: eks.amazonaws.com.

A custom class is also unnecessary just to select arm64: the cluster
enables the built-in pools, so the default NodeClass exists and already
carries the node role, subnets, and security groups. Emit an arm64
NodePool (karpenter.sh/v1) whose nodeClassRef points at default; fall
back to an eks.amazonaws.com/v1 NodeClass with an access entry only when
default cannot express the required settings. Also drops the incorrect
claim that default is tied to the built-in pools.

Updated in the EKS branch, the repeated CPU-architecture rule, and
graviton.md. Workload nodeSelector/affinity note and the runbook
kubectl apply step retained. The Standard EKS Cluster path is unaffected
(it sets arm64 via aws_eks_node_group, never this manifest).

Addresses PR awslabs#247 P1 review (generate-artifacts-infra.md:354).
Both mirrors, byte-identical.
…tifact

The Terraform-only Auto Mode fallback set target_architecture: amd64, but
schema-graviton.md defines the field as an enum of arm64 | x86_64, and
Generate's x86 branch keys off x86_64. The fallback therefore wrote a
value outside the artifact schema that matched neither generator branch.

Write x86_64 in the internal artifact. The two other amd64 mentions on
the same line are kept: they describe the Kubernetes architecture label
of the built-in general-purpose NodePool, where amd64 is the correct term.

Addresses PR awslabs#247 P2 review (graviton.md:98). Both mirrors, byte-identical.

@leon1418 leon1418 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[🤖 AI review 🤖]

Reviewed exact head bbbe52eb576753a5d53dfef5d6fe1285d42bb8e9. All three findings from my previous Request changes review are resolved, and I found no remaining substantive concerns in the reviewed change. Approving this revision.

  • Final enforcement and Generate preserve each resource's resolved Kubernetes target, including the explicit Fargate opt-out and the technical fallback from Auto Mode to a Standard EKS Cluster.
  • The arm64 NodePool uses the Auto Mode default NodeClass with the correct API reference, while retaining workload scheduling and runbook instructions.
  • The fallback artifact uses the canonical x86_64 value.

I followed up in the original discussions. Validation on this head: all 18 changed mirror pairs are byte-identical; cross-plugin drift passes (275 identical, 25 allowlisted); all 149 existing tests pass; formatting, Markdown lint, and git diff --check pass. Static contract checks for all three fixes pass in both copies and detect the previous defects at ed268632. I also rechecked the current official AWS NodePool/NodeClass documentation.

These are local checks and a review of the prompt contracts. No end-to-end LLM migration replay or EKS deployment was run. GitHub currently reports no checks/status results for this head, although build is required; the branch is behind main and other review discussions remain unresolved. Those merge gates still need to be satisfied.

@leon1418 leon1418 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[🤖 AI review 🤖]

Re-reviewed exact head ea2d67e952da27dfd84aff22368d5509b30b1dc6 against base b30cb39be02d2eae78cb8c482f4018435d4dc988, including the changes since my actually inspected head bbbe52eb. No remaining substantive findings; approving this revision.

The new commits merge upstream changes. The PR's added/deleted content is unchanged relative to its updated base. I checked the affected integration rather than relying on the previous approval's commit metadata: the resolved Fargate/Standard EKS targets still survive final enforcement and generation, the arm64 pool still uses the Auto Mode NodeClass API, and the fallback artifact remains x86_64. I also checked the merged Terraform policy consumer and the allowlisted advisor-only closing instructions. The EKS pricing section is preserved.

Local validation on this head:

  • All 18 changed mirror pairs are byte-identical; drift passes (281 identical, 27 allowlisted).
  • All 151 Node tests and 57 policy tests in each plugin copy pass.
  • An EKS-shaped static policy probe passes, a wildcard-policy negative case fails, and fixing that policy replaces the canonical failed verdict with a passing one while preserving Terraform and intermediate phase state.
  • The three original source-contract regression checks pass in both copies and detect the previous defects. Formatting, Markdown lint, and git diff --check pass.

These are local/static checks, not an LLM migration replay or EKS deployment. All ten review threads are resolved. GitHub still reports no check/status result for this head, so the required build gate remains outstanding.

@ayn-builds ayn-builds left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Three blocking items. The first one is the substantive one; the other two are stale references left behind by the Q8 rewrite.

All three apply to both copies of the skill (migrate/plugins/migration-to-aws/... and advisor/plugins/aws-startup-advisor/...) at the same line numbers, since the 18 files this PR touches are identical pairs. The inline comments are anchored on the migrate/ copy only; each fix needs to land in the advisor/ mirror too.


3. references/phases/clarify/clarify.md:548 - trigger keys on an answer this PR deleted

(Posting this one here rather than inline because the line is outside the diff hunks.)

The Answer Combination Triggers table still has:

| Kubernetes-averse | Q5 = No + Q8 = Frustrated | ECS Fargate strongly recommended |

Frustrated was removed from Q8 in this PR, so this row can never fire. The equivalent is now Q8 = 3 (kubernetes: "ecs-fargate").

While in this table: line 546 ("Must stay portable ... EKS only, no ECS Fargate; App Engine also routes to EKS") should say Standard EKS Cluster. You updated exactly this wording in clarify-global.md but this copy was missed, and leaving it ambiguous here is what the rest of the PR works hard to disambiguate.

@leon1418 leon1418 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[🤖 AI review 🤖]

Reassessed exact head ea2d67e952da27dfd84aff22368d5509b30b1dc6 after review 5250617626. Request changes for the China-region Auto Mode selection defect. My previous no-findings recommendation missed this restriction.

[P1] Regional selection: the current EKS FAQ explicitly excludes China Regions, whereas compute.md:53 asserts support there and removes the gate. The live availability catalog still reports support, but that conflicting response is insufficient to override the FAQ. A China-region override flows through the GKE default into Auto Mode generation; the billing-only mapping has the same unsupported default. I added evidence and the required fallback scope in the existing regional discussion, without opening a duplicate finding.

Non-blocking consistency corrections: I also verified the stale Q8 letter references at compute.md:48,177,185, the removed Q8 = Frustrated trigger at clarify.md:548, and the ambiguous portable-target wording at line 547. Use the current constraint values (eks-standard / ecs-fargate) or options 2/3, and name Standard EKS Cluster explicitly. The current interpretation/rubric still maps option 3 to Fargate and multi-cloud to standard EKS, so I did not reproduce an additional target-selection failure from these stale labels.

The prior per-resource enforcement, NodeClass API, and x86_64 fixes remain intact. Both plugin copies have the same new issues. Validation for this reassessment was a direct primary-documentation check and source/consumer trace, with 18 matching mirror pairs, a passing drift check, and a passing git diff --check. No implementation changes, deployment, new test infrastructure, or end-to-end model replay were performed.

@herosjourney

Copy link
Copy Markdown
Contributor

Looked back through the full review history here (27 reviews, 12 threads, 31 commits) to understand why this keeps finding new things each round. Sharing what I found in case it's useful for closing this out.

This isn't a resolution loop. 10 of 12 review threads closed cleanly on the first fix — author fixes, reviewer verifies, done. The two open threads from today are genuinely new findings, not regressions of anything already fixed.

The recurring pattern is consistency drift, not contradictory review demands. This PR threads a new enum value (eks-auto) through every layer of the pipeline — discovery, Clarify, Design, pricing, Terraform generation, schema — mirrored across two plugin trees (migrate/ + advisor/). That's 36 files for one conceptual change. Almost every finding across all 12 threads (both resolved and open) is the same shape: a value renamed or introduced in one place that wasn't propagated everywhere it's referenced —

  • the assembled preferences.json example that didn't match the renamed default
  • the multi-cloud exclusion applied in 5 places but missing from a 6th
  • today's stale "Q8 B/C" lettering in 3 spots after Q8 was renumbered elsewhere in this same PR

One real structural issue did cause a fix to ripple (thread on fast-path.md → Generate): the Kubernetes-target decision was computed independently in two places — Design's fast-path table and Generate's own re-derivation — so patching one didn't patch the other. That's now fixed and verified (bbbe52e).

Today's regional-availability finding is a fact-check reversal, not new code breaking something: the China-exclusion claim was live-verified via the awsknowledge MCP in an earlier round and the reviewer vouched for it (c083479); today's finding shows the MCP's isAvailableIn response conflicts with AWS's own published EKS FAQ, which explicitly excludes China. Worth noting for future regional-availability checks in this repo — the MCP catalog and the service FAQ apparently disagree here, so it's not a reliable single source for exclusions.

Suggestion to close this out in one more round instead of another partial one: rather than patching only the exact lines each review flags, do one deliberate sweep across both migrate/ and advisor/ trees for every reference to the renamed/new identifiers before the next push — specifically the remaining Q8 letter references (:48, :177, :185 per the open thread) and the China exclusion (needs to land on both the IaC and billing paths, per the open thread). That would likely catch what the next review round would otherwise find piecemeal.

Hasnain Raza added 2 commits September 22, 2026 14:26
…trigger

The Q8 redesign and numeric-label conversion left a few references to
the old option letters (B/C) and one to the removed "Frustrated"
sentiment option. Update them to the current option numbers and
constraint values (options 2/3, eks-standard / ecs-fargate), and name
the Standard EKS Cluster explicitly in the multi-cloud portability
scenario row where "EKS only" was ambiguous.

Addresses the non-blocking consistency notes in the PR awslabs#247 review.
Both mirrors, byte-identical.

@leon1418 leon1418 left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[🤖 AI review 🤖]

Update (September 23, 2026): the bootstrap-setting item is now a non-blocking suggestion, not a condition for merging this PR. This PR changes generation guidance, and we have not reproduced a failing generated Terraform artifact or deployment for that omission. Explicitly documenting the provider setting remains a useful improvement.

This edit changes only that item's disposition. The September 22 review text below is retained as historical context.


[🤖 AI review 🤖]

Reviewed exact head 25c60e9cf694f02dc4c4e0e82359da04fa67cac6 against base ec681ba5d49b039dbf1ef9d87d3304205b824f3d using OCR delegation, one fresh independent general reviewer, a parent repository review, and candidate verification. Request changes: one remaining P1 and two verified P2 findings.

  • P1 — regional selection remains unresolved: Auto Mode still defaults into China Regions despite the current EKS FAQ exclusion. Follow-up is in the existing regional thread.
  • P2 — Auto Mode creation: the generation instructions omit bootstrap_self_managed_addons = false, exposing the allowed provider's incompatible default.
  • P2 — ARM64 estimate/generation alignment: pricing requires the custom NodePool to be applied before the Generate phase that emits it, while later output retains and claims alignment with the earlier Balanced estimate.

The latest Q8 option references, removed-sentiment trigger, and Standard EKS wording are verified fixed in both copies; I replied in the original discussion. The earlier resolved-target, NodeClass API and x86_64 fixes remain intact. The two new findings are inline and apply to both mirrors.

Validation: all 36 authored Markdown files were covered even though OCR excluded their extension; all 18 mirror pairs match. The parent ran 151 registered Node tests, formatting, Markdown lint, drift and git diff --check successfully. Provider defaults and phase contracts were checked against original source, with the new provider evidence independently refetched after candidate review. The required hybrid evidence gate passed.

These are source/provider-contract and local-check results. No end-to-end model migration or EKS deployment was run. GitHub CI and merge readiness remain separate requirements.

leon1418
leon1418 previously approved these changes Sep 23, 2026
hasrazz and others added 2 commits September 23, 2026 17:38
Adopt the Clarify fragment and assembler structure from main. Preserve the Auto Mode Q8 default in returned rows, assembled preferences, and defaults, and keep the Standard EKS multi-cloud override in both plugin copies.
leon1418
leon1418 previously approved these changes Sep 23, 2026
@leon1418
leon1418 merged commit ca384f1 into awslabs:main Sep 24, 2026
9 checks passed
@hasrazz
hasrazz deleted the hasrazz/eks-auto-mode-recommendation branch September 28, 2026 08:16
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.

5 participants