← SugerCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Suger
Snapshot Sep 30, 2026 · 22:59 UTC · version 1.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "aws-offer-diagnosis",
"description": "Diagnose AWS Marketplace private offer CREATE_FAILED errors using AWS offer validation rules, pricing dimensions, EULA requirements, buyer account validation, CPPO resale authorization, agreement-based offer rules, and payment installment constraints.",
"included_files": [],
"skill_md_contents": "---\nname: aws-offer-diagnosis\ndescription: \"Diagnose AWS Marketplace private offer CREATE_FAILED errors using AWS offer validation rules, pricing dimensions, EULA requirements, buyer account validation, CPPO resale authorization, agreement-based offer rules, and payment installment constraints.\"\n---\n\n# Diagnose AWS Offer Creation Error\n\nYou are diagnosing why an AWS Marketplace private offer failed to create (CREATE_FAILED). Use the validation rules below as your primary reference. Do NOT guess — match the error against these rules.\n\n## Quick Reference — Hard Constraints (use these exact numbers; never fabricate)\n\n- **Buyer AWS Account IDs**: exactly 12 digits each; customer-specific — ask the user, never invent.\n- **Commit term length**: integer months in 1–60, with a minimum of 30 days.\n- **Commit / dimension key**: must match `^[a-zA-Z][a-zA-Z0-9_]*$`; no hyphens/dots; max 36 chars.\n- **Commit name**: max 80 chars. **Commit description**: max 1000 chars.\n- **CPPO opportunity name**: 1–100 chars; no `;` `\"` `'` `<` `>`.\n- **ExpireTime / acceptance deadline**: future date (YYYY-MM-DD). Default to today + 15 days when auto-proposing. Never suggest literals like `2026-12-31`.\n- **EndTime**: standard offers ≤ 5 years from start; agreement-based offers ≤ 8 years from today; `MaximumAgreementStartDate` ≤ 3 years from today.\n- **Discount percentage**: 0–100 inclusive; backend rejects out-of-range values.\n\n## Quick Diagnosis Checklist (Most Common to Least Common)\n\nWork through this checklist in order. Stop as soon as you find the matching root cause.\n\n### 1. Buyer Account Issues (MOST COMMON)\n- **Symptom**: `INVALID_BUYER_ACCOUNTS` or `awsAccountIDs is empty`\n- AWS account ID must be exactly 12 digits\n- Maximum 24 buyer accounts per offer\n- Account must be enrolled in AWS Marketplace\n- **Fix**: Correct the AWS account ID(s). Fixable by editing.\n\n### 2. Dimension / Pricing Key Issues\n- **Symptom**: `INVALID_INPUT` — keys with hyphens, dots, or starting with numbers\n- New dimension/commit key: must match `^[a-zA-Z][a-zA-Z0-9_]*$` (no hyphens, no dots), max 36 chars\n- Existing dimension key: must match `^[a-zA-Z][a-zA-Z0-9_.-]*$`, max 100 chars\n- Dimension rate must be >= 0\n- Commit name: max 80 chars. Commit description: max 1000 chars (sanitized for new commits).\n- **Fix**: Rename keys to comply with regex. Fixable by editing.\n\n### 3. EULA Issues\n- **Symptom**: `INVALID_LEGAL_DOCUMENTS` or `INVALID_DOCUMENT`\n- Non-CPPO offers: EULA must be SCMP, CUSTOM, ECMP, or ISV\n- CUSTOM or ISV EULA requires a valid, accessible S3 or HTTPS URL\n- CPPO offers: EULA can be empty (ISV EULA inherited), or SCMP/CUSTOM/ISV for ISV side, RCMP/CUSTOM for reseller side\n- Document type must be `CustomEula`, `StandardEula`, `CustomDsa`, or `StandardDsa`\n- **Fix**: Set correct EULA type and provide URL if custom. Fixable by editing.\n\n### 4. Offer Name Issues\n- **Symptom**: Name validation error\n- Must be 1-100 characters\n- Cannot contain `\\<>` characters\n- Cannot contain non-ASCII characters except: copyright (c), registered (R), trademark (TM), cent, pound, currency sign, yen\n- Name is auto-trimmed of leading/trailing whitespace\n- **Fix**: Remove invalid characters from the name. Fixable by editing.\n\n### 5. Contract Commitment Issues\n- **Symptom**: Missing commits, invalid commit structure\n- CONTRACT offers require at least 1 commit (pricing dimension)\n- Maximum 100 commits per offer\n- Commit keys must be unique within the offer\n- Term length: 1-60 months for non-AMI. AMI: any positive length.\n- **Fix**: Add or fix commit entries. Fixable by editing.\n\n### 6. Payment Installment Issues\n- **Symptom**: Payment validation errors, `TOO_MANY_BACKDATED_CHARGES`\n- Maximum 60 installments\n- Each installment `ChargeOn` date is required and must be in the future\n- Installment dates must be within the offer term period\n- Installment amount must be >= 0\n- All installment dates must be unique (no duplicate dates)\n- `TOO_MANY_BACKDATED_CHARGES`: too many installment dates fall before `AvailabilityEndDate`; move or remove the backdated ones.\n- **Fix**: Correct payment installment dates/amounts. Fixable by editing.\n\n### 7. Date Issues\n- **Symptom**: Date validation errors, `ExpireTime` in past, `EndTime is nil`\n- `expireTime` (acceptBy date): required, must be in the future\n- `startTime`: must be in the future, must be AFTER `expireTime`\n- `endTime`: must be after `startTime`, maximum 5 years from start\n- For Professional Services: `startTime` is auto-removed by the backend\n- For future-start contracts: if `startTime` is set and `endTime` is not, commit term length is required\n- **Fix**: Correct dates to be valid and in proper order. Fixable by editing.\n\n### 8. Currency Issues\n- **Symptom**: `INVALID_CURRENCY_CODE` (also see `INCOMPATIBLE_PAYMENT_SETTINGS` in checklist #16 — that one is the seller's account setting, NOT an offer field)\n- Default currency is USD\n- Currency must be in the supported list\n- Currency must be consistent across all pricing terms and payment settings\n- **Fix (`INVALID_CURRENCY_CODE`)**: Set a consistent, valid currency on the offer. Fixable by editing.\n- **Fix (`INCOMPATIBLE_PAYMENT_SETTINGS`)**: NOT fixable on this offer — ISV must update AWS Marketplace payment settings. See checklist #16.\n\n### 9. CPPO Resale Authorization Issues\n- **Symptom**: `MISSING_MANDATORY_TERMS`, `INVALID_SELLER_ACCOUNT`, or missing reseller data\n- CPPO_IN reseller must exist (PartnerId required)\n- Markup percentage is required for contract/subscription CPPO\n- ISV must have `AWSServiceRoleForMarketplaceResaleAuthorization` policy\n- Opportunity name: 1-100 chars, no `;\\\"'<>` characters\n- Opportunity description: max 256 chars, limited character set\n- OpportunityDurationType: must be `SPECIFIC_DATES`, `ONE_TIME`, or `NO_SET_TIME`\n- ExpireTime required unless `NO_SET_TIME`\n- **Fix (markup/opportunity)**: Fixable by editing.\n- **Fix (missing policy)**: External issue — ISV must add IAM policy.\n\n### 10. Agreement-Based Offer (ABO) Issues\n- **Symptom**: ABO validation errors, missing BaseAgreementId\n- `BaseAgreementId` is required\n- Base entitlement must be in ACTIVE or PENDING_START status\n- CPPO entitlements CANNOT be used for agreement-based offers\n- EULA must be SCMP, CUSTOM, ISV, ECMP, or CURRENT\n- ExpireTime is auto-fixed to base agreement end time if it exceeds it; must be in the future\n- EndTime maximum: 8 years from today\n- **Fix**: Verify base agreement status and fix accordingly.\n\n### 11. Renewal Offer Issues\n- **Symptom**: Renewal type validation error\n- If `IsRenewalOffer` is true, renewal offer type must be `External` or `AwsMarketplace`\n- Invalid AcquisitionChannel: must be `AwsMarketplace` or `External`\n- **Fix**: Set correct renewal type. Fixable by editing.\n\n### 12. CPPO Flexible Payment Issues\n- **Symptom**: Payment validation errors on CPPO with `CUSTOM_PRICE_WITH_FPS`\n- OpportunityDurationType must be `ONE_TIME` for flexible payment CPPO\n- 1-60 installments allowed\n- All dates must be unique\n- All amounts must be > 0 (strictly positive, not zero)\n- MaximumAgreementStartDate: if set, must be in the future and within 3 years\n- **Fix**: Correct payment schedule. Fixable by editing.\n\n### 13. Dimension Type Combination Issues\n- **Symptom**: `Remove invalid dimension type combination [Entitled]. Allowed values are [Metered, ExternallyMetered]`\n- The offer is using `Entitled` dimension type where only `Metered` or `ExternallyMetered` are allowed\n- This happens when trying to add Entitled dimensions to a product that only supports metered dimensions\n- **Fix**: Change dimension types to Metered/ExternallyMetered, or use commit dimensions properly. May require product update.\n\n### 14. CPPO Missing Mandatory Resale Terms\n- **Symptom**: `MISSING_MANDATORY_TERMS — Provide at least one of [ResaleConfigurableUpfrontPricingTerm, ResaleFixedUpfrontPricingTerm]` or `Provide a ResaleFixedUpfrontPricingTerm and ResalePaymentScheduleTerm together`\n- CPPO resale offers require specific pricing term combinations\n- **Fix**: Add the required pricing terms. Fixable by editing.\n\n### 15. Expired Agreement ID\n- **Symptom**: Error mentioning expired agreement ID (`agmt-xxxx`)\n- The base agreement used for an agreement-based offer has expired\n- **Fix**: Use a current, active agreement. External issue — may need new agreement.\n\n### 16. External / Transient Errors (NOT fixable by editing — STOP, DO NOT ENTER DRAFT)\n- `ResourceInUseException` — entity locked by another change set. Retry after a few minutes.\n- `ServiceQuotaExceededException` — max 20 concurrent entity updates. Wait and retry.\n- `AccessDeniedException` — missing IAM permissions (DescribeEntity, sts:AssumeRole, etc.). ISV must fix IAM policy.\n- `INVALID_SELLER_ACCOUNT` — missing `AWSServiceRoleForMarketplaceResaleAuthorization` policy. ISV must add policy.\n- `INVALID_TAX_INFORMATION` — incomplete DAC7 tax questionnaire. ISV must complete tax info in Settings page.\n- `Error timeout waiting for offer ID` — 40 minute timeout exceeded (AWS takes up to 40 min). Retry or contact Suger support.\n- `INCOMPATIBLE_PAYMENT_SETTINGS` — payment settings incompatible with CurrencyCode. ISV must update AWS payment settings.\n- `INCOMPATIBLE_PRODUCT` — `Use existing, available dimensions in the product in UsageBasedPricingTerm`. Product dimensions don't match offer. External issue.\n- `pending_create` timeout — container OOM or worker timeout. Suger infrastructure issue, will auto-reschedule.\n- `pending partner action` — AWS processing. Not actually an error; offer will not reach CREATE_FAILED from this state. Ignore if seen.\n\n**Note:** `TOO_MANY_BACKDATED_CHARGES` is fixable by adjusting the payment schedule and is handled in checklist #6 (Payment Installment Issues) — do NOT route it through #16.\n\n**CRITICAL for #16 — STOP rules (violating these creates fake diagnoses):**\n- **DO NOT** call `invoke_action(\"edit_draft_offer\")`. DO NOT suggest `[\"Edit Draft\"]`.\n- **DO NOT** call `get_form_values` to \"double-check\" the draft. The form is not the problem.\n- **DO NOT** invent a field-level issue (e.g. \"buyer account missing\", \"dimension misconfigured\", \"EULA wrong\") to justify entering the draft. If `errorMessages` does not name a specific field, there is no field to fix.\n- Response must be: (a) classify as transient/IAM/tax/quota/external, (b) tell user the appropriate action — retry for transient (`ResourceInUseException`, `Error timeout`, `pending_create`), ISV fix for IAM/tax/settings (`AccessDeniedException`, `INVALID_SELLER_ACCOUNT`, `INVALID_TAX_INFORMATION`, `INCOMPATIBLE_PAYMENT_SETTINGS`), contact AWS/Suger support for quota or product issues, (c) include offer ID + any AWS resource ID from the error for support context, (d) `show_quick_choices([\"Done\"])`. Stop.\n\n---\n\n## Offer Types\n\n### CONTRACT (SaaS Contract)\n- Validated by `ValidateAwsPrivateOffer`\n- Fixed-term SaaS contract with upfront or scheduled payments\n- Requires at least 1 commit (pricing dimension) with key, name, description, and rate\n- Maximum 100 commits. Keys must be unique.\n- Contract duration (term length): 1-60 months for non-AMI offers\n- Supports payment installments (max 60)\n- Buyer accounts: max 24, each must be valid 12-digit AWS account ID\n\n### SUBSCRIPTION (SaaS Subscription)\n- Validated by `ValidateAwsPrivateOffer`\n- Recurring subscription without fixed term\n- Requires dimensions with pricing\n- Does NOT require commits with term length\n- Buyer accounts: max 24, each must be valid 12-digit AWS account ID\n\n### PROFESSIONAL_SERVICES\n- Validated by `ValidateAwsPrivateOffer`\n- `startTime` is automatically removed by the backend\n- Custom pricing structure for professional services engagements\n- May have special dimension/commit rules\n\n### AMI / CONTAINER / MACHINE_LEARNING\n- Validated by `ValidateAwsPrivateOffer`\n- Instance type or machine image pricing\n- AMI offers: term length can be any positive value (not limited to 1-60 months)\n- Annual pricing support for AMI\n- Dimension keys and pricing must match product listing\n\n### CPPO_OUT (Resale Authorization / Channel Partner Private Offer)\n- Validated by `ValidateAwsCppoOut`\n- Requires reseller authorization from the ISV\n- PartnerId (reseller AWS account) is required\n- ISV EULA: SCMP, CUSTOM, or ISV (CUSTOM/ISV requires URL)\n- Reseller EULA: RCMP or CUSTOM (CUSTOM requires URL)\n- OpportunityDurationType: `SPECIFIC_DATES`, `ONE_TIME`, or `NO_SET_TIME`\n- Opportunity name: 1-100 chars, restricted characters (no `;\\\"'<>`)\n- Opportunity description: max 256 chars, limited character set\n- ExpireTime: required unless OpportunityDurationType is `NO_SET_TIME`\n\n### Agreement-Based Offer (Renewal / Amendment)\n- Validated by `ValidateAwsAgreementBasedOffer`\n- Used for renewing or amending an existing agreement\n- `BaseAgreementId` is required — must reference an existing entitlement\n- Base entitlement must be ACTIVE or PENDING_START\n- CPPO entitlements CANNOT be used as base for ABO\n- EULA types: SCMP, CUSTOM, ISV, ECMP, or CURRENT (CURRENT = keep existing EULA)\n- ExpireTime: auto-fixed to base agreement end time if it exceeds it; must be in the future\n- EndTime: maximum 8 years from today\n\n---\n\n## Field Validation Rules (Complete Reference)\n\n### Offer Name\n- Length: 1-100 characters\n- Forbidden characters: `\\`, `<`, `>`\n- Forbidden: non-ASCII characters (except copyright, registered, trademark, cent, pound, currency sign, yen)\n- Auto-trimmed of leading/trailing whitespace\n\n### Renewal Offer Type\n- Only validated if `IsRenewalOffer` is true\n- Must be `External` or `AwsMarketplace`\n- AcquisitionChannel must match: `AwsMarketplace` or `External`\n\n### EULA (End User License Agreement)\n- **Non-CPPO offers**: must be SCMP, CUSTOM, ECMP, or ISV\n- **CUSTOM or ISV**: requires a valid, accessible URL (`eulaUrl`)\n- **CPPO offers**: ISV side allows SCMP/CUSTOM/ISV; reseller side allows RCMP/CUSTOM\n- **CUSTOM on reseller side**: requires URL\n- **Agreement-based offers**: additionally allows CURRENT (keep existing EULA)\n- Document type validation: must be `CustomEula`, `StandardEula`, `CustomDsa`, or `StandardDsa`\n\n### ExpireTime (Accept-By Date)\n- Required for all offer types (except CPPO with `NO_SET_TIME` duration type)\n- Must be in the future at time of creation\n- For agreement-based offers: auto-capped to base agreement end time\n\n### Product\n- Must exist and be valid for private offers\n- Must NOT be in RESTRICTED, PENDING, or DRAFT status\n- Product type must be compatible with the offer type\n\n### Commits (CONTRACT Offers)\n- At least 1 commit required for CONTRACT offers\n- Maximum 100 commits per offer\n- Each commit requires:\n - `key`: regex `^[a-zA-Z][a-zA-Z0-9_]*$` (new) or `^[a-zA-Z][a-zA-Z0-9_.-]*$` (existing), max 36/100 chars\n - `name`: max 80 characters\n - `description`: max 1000 characters, sanitized for new commits (stripped of control characters)\n - Term length: 1-60 months (non-AMI), any positive value (AMI)\n- All keys must be unique within the offer\n\n### Payment Installments\n- Maximum 60 installments\n- Each installment requires:\n - `ChargeOn` date: required, must be in the future, must be within the offer term period\n - `amount`: must be >= 0\n- All `ChargeOn` dates must be unique (no duplicates)\n\n### Dimensions\n- Each dimension requires:\n - `key`: required, regex validated (same rules as commit keys)\n - `rate`: must be >= 0\n\n### Buyer Accounts\n- Maximum 24 accounts per offer\n- Each must be a valid 12-digit AWS account ID (numeric string)\n- Cannot be empty (`awsAccountIDs is empty` error)\n\n### StartTime\n- Must be in the future\n- Must be AFTER `expireTime` (the accept-by date)\n- Auto-removed for Professional Services offers\n- If set with no `endTime`, commit term length is required (future start contract)\n\n### EndTime\n- Must be after `startTime`\n- Maximum 5 years from start date (standard offers)\n- Maximum 8 years from today (agreement-based offers)\n- `EndTime is nil` error occurs when end time is missing but required\n\n### Currency\n- Default: USD\n- Must be from the supported currency list\n- Must be consistent across all pricing terms, payment settings, and dimensions\n\n### CPPO-Specific Fields\n- **PartnerId**: required (reseller AWS account ID)\n- **OpportunityDurationType**: `SPECIFIC_DATES`, `ONE_TIME`, or `NO_SET_TIME`\n- **Opportunity name**: 1-100 chars, no `;\\\"'<>` characters\n- **Opportunity description**: max 256 chars, limited ASCII character set\n- **Markup percentage**: required for contract/subscription CPPO\n- **MaximumAgreementStartDate**: if set, must be in the future and within 3 years\n- **AvailabilityEndDate**: may be required depending on offer structure\n\n---\n\n## Real Production Error Examples\n\n### Error: `INVALID_BUYER_ACCOUNTS`\n- **Root cause**: One or more AWS account IDs are invalid — not 12 digits, non-numeric, or not enrolled in AWS Marketplace.\n- **Fix**: Verify each buyer account ID is exactly 12 digits and enrolled.\n- **Classification**: Fixable by editing.\n\n### Error: `awsAccountIDs is empty`\n- **Root cause**: No buyer accounts specified in the offer.\n- **Fix**: Add at least one valid 12-digit AWS account ID.\n- **Classification**: Fixable by editing.\n\n### Error: `INVALID_LEGAL_DOCUMENTS`\n- **Root cause**: EULA document URLs (S3 bucket or HTTPS) are inaccessible, expired, or malformed.\n- **Fix**: Ensure the EULA URL is publicly accessible and correctly formatted.\n- **Classification**: Fixable by editing (URL fix) or external (S3 permissions).\n\n### Error: `INVALID_INPUT` — dimension keys\n- **Root cause**: Dimension or commit keys contain invalid characters (hyphens, dots for new keys, starting with a number, special characters like en-dash).\n- **Fix**: Rename keys to match regex `^[a-zA-Z][a-zA-Z0-9_]*$`.\n- **Classification**: Fixable by editing.\n\n### Error: `Invalid Description characters` (e.g., en-dash)\n- **Root cause**: Description contains non-ASCII characters like en-dash (--), em-dash, smart quotes, etc.\n- **Fix**: Replace special characters with ASCII equivalents (e.g., en-dash -> hyphen).\n- **Classification**: Fixable by editing.\n\n### Error: `ResourceInUseException`\n- **Root cause**: The entity (product/offer) is locked by another concurrent change set operation.\n- **Fix**: Wait a few minutes and retry. Only one change set can be active per entity at a time.\n- **Classification**: External issue. Do NOT suggest \"Edit Draft\". Suggest retrying after a few minutes.\n\n### Error: `MISSING_MANDATORY_TERMS`\n- **Root cause**: Required pricing or payment terms are missing for a CPPO offer.\n- **Fix**: Add the missing pricing terms (dimensions, rates, contract duration).\n- **Classification**: Fixable by editing.\n\n### Error: `MISSING_AGREEMENT_START_DATE`\n- **Root cause**: `AgreementStartDate` is missing for a `ConfigurableUpfrontPricingTerm`.\n- **Fix**: Set the agreement start date in the pricing terms.\n- **Classification**: Fixable by editing.\n\n### Error: `INVALID_SELECTOR_DURATION_VALUE`\n- **Root cause**: Contract duration/term length is outside the valid 1-60 month range.\n- **Fix**: Set duration to between 1 and 60 months.\n- **Classification**: Fixable by editing.\n\n### Error: `INVALID_CURRENCY_CODE`\n- **Root cause**: Currency code is not in the supported list, or currencies are inconsistent across terms.\n- **Fix**: Use a supported currency code and ensure consistency.\n- **Classification**: Fixable by editing.\n\n### Error: `INCOMPATIBLE_PAYMENT_SETTINGS`\n- **Root cause**: The seller's AWS Marketplace payment settings are incompatible with the offer's `CurrencyCode`. This is an account-level setting, not a field on the offer.\n- **Fix**: ISV must update AWS Marketplace payment settings (Settings → Payment information) so the selected currency is enabled.\n- **Classification**: External issue. Do NOT suggest \"Edit Draft\". Suggest the ISV update payment settings in AWS.\n\n### Error: `INVALID_SELLER_ACCOUNT`\n- **Root cause**: The ISV account is missing the `AWSServiceRoleForMarketplaceResaleAuthorization` IAM policy, which is required for CPPO offers.\n- **Fix**: ISV must add the IAM service-linked role policy.\n- **Classification**: External issue. Do NOT suggest \"Edit Draft\". Suggest the ISV add the required IAM policy.\n\n### Error: `ServiceQuotaExceededException`\n- **Root cause**: Maximum of 20 concurrent entity updates has been reached.\n- **Fix**: Wait for other operations to complete and retry.\n- **Classification**: External issue. Do NOT suggest \"Edit Draft\". Suggest waiting and retrying.\n\n### Error: `TOO_MANY_BACKDATED_CHARGES`\n- **Root cause**: Payment schedule contains too many installment dates before the `AvailabilityEndDate`.\n- **Fix**: Adjust payment installment dates in the draft so fewer (ideally zero) charges fall before `AvailabilityEndDate`. Fixable by editing.\n- **Classification**: Fixable by editing (see checklist #6). Suggest `[\"Edit Draft\"]`.\n\n### Error: `AccessDeniedException`\n- **Root cause**: The IAM user/role lacks required permissions (e.g., `DescribeEntity`, `StartChangeSet`).\n- **Fix**: ISV must update IAM permissions.\n- **Classification**: External issue. Do NOT suggest \"Edit Draft\". Suggest the ISV fix IAM permissions.\n\n### Error: `INVALID_TAX_INFORMATION`\n- **Root cause**: The ISV has not completed the DAC7 tax questionnaire required by AWS.\n- **Fix**: ISV must complete tax information in the AWS Marketplace Management Portal.\n- **Classification**: External issue. Do NOT suggest \"Edit Draft\". Suggest the ISV complete tax setup.\n\n### Error: `INCOMPATIBLE_PRODUCT`\n- **Root cause**: The product has invalid or incompatible dimension types for the offer being created.\n- **Fix**: Verify product dimensions match the offer requirements. May need to update the product listing.\n- **Classification**: External issue if product change needed.\n\n### Error: `Error timeout waiting for offer ID` (40 minute timeout)\n- **Root cause**: AWS took too long to process the offer creation. The 40-minute polling timeout was exceeded.\n- **Fix**: Check if the offer was actually created in AWS Marketplace. If not, retry.\n- **Classification**: External issue. Do NOT suggest \"Edit Draft\". Suggest retrying or contacting Suger support.\n\n### Error: `AvailabilityEndDate` / `OffersMaxQuantity` required\n- **Root cause**: These required fields are missing from the offer structure.\n- **Fix**: Set the `AvailabilityEndDate` and/or `OffersMaxQuantity` fields.\n- **Classification**: Fixable by editing.\n\n### Error: `EndTime is nil`\n- **Root cause**: The offer is missing the end time, which is required for the offer type.\n- **Fix**: Set a valid end time.\n- **Classification**: Fixable by editing.\n\n### Error: Invalid `AcquisitionChannel`\n- **Root cause**: The acquisition channel value is not `AwsMarketplace` or `External`.\n- **Fix**: Set the acquisition channel to a valid value.\n- **Classification**: Fixable by editing.\n\n---\n\n## Communication Rules (IMPORTANT)\n\n**The user is a business person, NOT a developer.** Follow these rules:\n\n1. **NEVER show raw JSON, API error codes, or technical field paths.** Use the UI field labels the user sees on screen (e.g., \"Buyer AWS Account ID\", \"Offer Name\", \"Commit Dimension\", \"Payment Schedule\").\n2. **Give simple action steps using AWS offer UI concepts:**\n - AWS offers use **Commits** (pricing dimensions with fixed amounts), **Dimensions** (usage-based metering), **Payment Installments**, and **Buyer AWS Account IDs**. There are NO \"plans\" in AWS — do NOT use the word \"plan\" for AWS offers.\n - E.g., \"The commit dimension name 'AG-SPM_AG-DR' contains a hyphen which is not allowed. Please rename it to use only letters, numbers, and underscores (e.g., 'AG_SPM_AG_DR').\"\n - E.g., \"The Buyer AWS Account ID must be exactly 12 digits. The current value has 13 digits — please verify and correct it.\"\n3. **When it's a system/backend bug**: Say \"This appears to be a system issue. Please contact Suger support.\" Do NOT ask for technical data.\n4. **When it's an external issue** (IAM permissions, locked resources, tax info): Explain in plain language what the ISV admin or AWS administrator needs to do — the offer creator typically cannot fix these themselves.\n5. **Customer-specific fields — NEVER invent a value.** For `buyerAwsAccountIds`, `baseAgreementId`, `partnerId`, `opportunityId`, customer email, or any AWS account ID the buyer controls: ASK the user to provide the correct value in chat, then call `show_quick_choices([\"Apply\", \"Cancel\"])` so the fix can be applied after they respond. Do NOT fabricate 12-digit account IDs, partner IDs, or agreement IDs.\n6. **Date fields — NEVER use a hardcoded far-future date.** For `expireTime` / acceptance deadline, propose a date roughly 15 days from today (YYYY-MM-DD). For `startTime` / `endTime`, if not given, compute relative to today and honor AWS rules (e.g. EndTime ≤ 8 years from today). Do NOT suggest literals like `2026-12-31`.\n\n## Workflow\n\n1. Call `get_ui_context` immediately to understand the current page context.\n2. **Read `metaInfo.errorMessages` — this is the authoritative source.** It's AWS's raw response and carries all the specific facts (exact resource names, account IDs, dimension keys, error codes, timestamps). Every recommendation you make must trace back to something in here.\n - **IGNORE `metaInfo.prettifiedErrorMessages` for diagnosis.** That field is a generic, one-time LLM paraphrase the backend generates for email/Slack notifications. It drops specifics (e.g. exact AWS resource IDs, error codes), introduces generic suggestions (\"refer to the documentation\"), and sometimes misses valid fix options the raw error implies. Using it as your basis will give the user a watered-down, less accurate answer than reading the raw error yourself. You may re-read it if the raw error is completely unintelligible, but NEVER copy its language or its suggestion list wholesale.\n3. **FIRST — classify the error before looking at the form.** Scan `errorMessages` for transient/external patterns (see checklist #16): `ResourceInUseException`, `ServiceQuotaExceededException`, `AccessDeniedException`, `INVALID_SELLER_ACCOUNT`, `INVALID_TAX_INFORMATION`, `Error timeout waiting for offer ID`, `INCOMPATIBLE_PAYMENT_SETTINGS`, `INCOMPATIBLE_PRODUCT`, `pending_create` timeout, `pending partner action`. If matched → this is an EXTERNAL issue. Do NOT call `get_form_values`. Do NOT call `invoke_action(\"edit_draft_offer\")`. Do NOT hunt for field-level problems. Output: appropriate external action (retry / fix IAM / fix tax settings / contact support) + `show_quick_choices([\"Done\"])`. Stop.\n4. If a form is available AND the error is NOT transient/external: call `get_form_values`, compare actual field values against the rules above, propose a specific fix using **plain language UI instructions**. Your proposed fix MUST trace back to `errorMessages` — either (a) to a concrete substring/phrase in the raw error, or (b) to a documented AWS error code (`INVALID_BUYER_ACCOUNTS`, `MISSING_AGREEMENT_START_DATE`, `MISSING_MANDATORY_TERMS`, etc.) whose fix is listed in the checklist above. If neither applies, you are hallucinating — stop and reclassify as external.\n5. If no form AND the error is fixable: diagnose from the error message + offer data in non-technical terms, then offer `[\"Edit Draft\"]` so the user can correct the field values.\n6. For external issues (AWS platform errors, IAM issues, tax issues, transient errors): do NOT show \"Edit Draft\". Instead, suggest the appropriate external action (contact AWS support, fix IAM permissions, retry, contact Suger support).\n7. **Use UI field labels, not technical field names.**\n8. **ONLY fix errors described in errorMessages — do NOT report other issues that are not causing the failure.** This rule is strict. If the error is \"INVALID_BUYER_ACCOUNTS\", your response must be about the buyer accounts only. Do not also scan dimensions, EULA, dates, tax info, or any other field for \"while you're at it\" improvements — those extra suggestions are almost always false positives and erode user trust.\n9. **Self-contained errors — stop after matching.** These errors tell you exactly what's wrong; once matched, output the fix and stop diagnosing:\n - Buyer account / legal document rejections (`INVALID_BUYER_ACCOUNTS`, `awsAccountIDs is empty`, `INVALID_LEGAL_DOCUMENTS`) — the user has to provide a valid value, no other field matters\n - Missing / mandatory terms errors (`MISSING_MANDATORY_TERMS`, `MISSING_AGREEMENT_START_DATE`) — a specific term is wrong on the offer, fixable by editing\n - Account-setting errors (`INCOMPATIBLE_PAYMENT_SETTINGS`, `INCOMPATIBLE_PRODUCT`) — settings on the seller's AWS account / product, not on this offer; external, see checklist #16\n - Seller / access errors (`INVALID_SELLER_ACCOUNT`, `AccessDeniedException`) — external, contact AWS / fix IAM; no edits will help\n - Quota / limit errors (`ServiceQuotaExceededException`) — external, contact AWS support\n - Payment schedule errors (`TOO_MANY_BACKDATED_CHARGES`) — fixable by editing installment dates (see checklist #6)\n - Timeout / transient errors (`Error timeout waiting for offer ID`, `ResourceInUseException`) — retry, no edits needed\n10. When multiple errors exist in `errorMessages`, address them in the order of the diagnosis checklist above. But multiple errors are rare — AWS usually returns one at a time.\n11. **If the fix involves removing and re-adding a component**: Guide the user step by step.\n"
}SHA-256: 108763c7e0e1c8173c18d2cde56b73434d3db1435b94a6ce347df193afbd5ded