[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-amazon-keyspaces":3,"mdc-xla2j4-key":35,"related-repo-aws-amazon-keyspaces":5731,"related-org-aws-amazon-keyspaces":5837},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"amazon-keyspaces","manage Amazon Keyspaces infrastructure and connections","Provides authoritative compatibility checks, pricing estimates, connection troubleshooting, pre-warming guidance, and infrastructure mutations for Amazon Keyspaces (for Apache Cassandra). Covers LWT\u002Fbatch operations, secondary indexes, materialized views, capacity modes, TTL, PITR, CDC, auto-scaling, multi-region keyspaces, UDTs, nodetool diagnostics parsing, SQL-to-Cassandra migration, and Cassandra-to-Keyspaces migration scenarios. Agents frequently produce incomplete or incorrect answers about Keyspaces feature support without this skill loaded.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"aws","AWS (Amazon)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Database","database",{"name":20,"slug":21,"type":15},"Infrastructure","infrastructure",{"name":23,"slug":8,"type":15},"AWS",1822,"https:\u002F\u002Fgithub.com\u002Faws\u002Fagent-toolkit-for-aws","2026-07-12T08:42:59.173091",null,157,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"Official, AWS-supported MCP servers, skills, and plugins to help AI agents build on AWS","https:\u002F\u002Fgithub.com\u002Faws\u002Fagent-toolkit-for-aws\u002Ftree\u002FHEAD\u002Fskills\u002Fspecialized-skills\u002Fdatabase-skills\u002Famazon-keyspaces","---\nname: amazon-keyspaces\ndescription: >-\n  Provides authoritative compatibility checks, pricing estimates, connection troubleshooting,\n  pre-warming guidance, and infrastructure mutations for Amazon Keyspaces (for Apache\n  Cassandra). Covers LWT\u002Fbatch operations, secondary indexes, materialized views,\n  capacity modes, TTL, PITR, CDC, auto-scaling, multi-region keyspaces, UDTs, nodetool\n  diagnostics parsing, SQL-to-Cassandra migration, and Cassandra-to-Keyspaces migration\n  scenarios. Agents frequently produce incomplete or incorrect answers about Keyspaces\n  feature support without this skill loaded.\nversion: 1\n---\n# Amazon Keyspaces\n\n## Safety guidance\n\nThis skill covers creating keyspaces and tables and modifying table-level settings (TTL, PITR, capacity mode) when the user requests it. The agent MUST confirm the action with the user before executing. Do NOT execute any create or modify operation without explicit user confirmation (e.g., \"yes\", \"proceed\", \"confirmed\", \"go ahead\"). If the user has not confirmed, present the planned action and ask for approval.\n\n### Execute these operations (after user confirmation)\n\n- Create a keyspace: `aws keyspaces create-keyspace`\n- Create a multi-region keyspace: `aws keyspaces create-keyspace --replication-specification replicationStrategy=MULTI_REGION,regionList=[{region=us-east-1},{region=eu-west-1}]`\n- Create a table: `aws keyspaces create-table` (include partition-key and clustering-key design derived from the user's access patterns)\n- Add column(s) to a table: `aws keyspaces update-table --add-columns '[{\"name\":\"col_name\",\"type\":\"text\"}]'` — non-destructive, no downtime, no data loss. Existing rows get null for the new column.\n- Create a User Defined Type (UDT): `aws keyspaces create-type --keyspace-name \u003Cks> --type-name \u003Cname> --field-definitions '[{\"name\":\"field1\",\"type\":\"text\"},...]'`\n- Modify table TTL: `aws keyspaces update-table --default-time-to-live`\n- Enable\u002Fdisable PITR: `aws keyspaces update-table --point-in-time-recovery-specification`\n- Change capacity mode: `aws keyspaces update-table --capacity-specification` (on-demand vs provisioned) — see warnings below\n- Switch table encryption key: `aws keyspaces update-table --encryption-specification type=CUSTOMER_MANAGED_KMS_KEY,kmsKeyIdentifier=arn:aws:kms:...` — no downtime or availability loss. Can also switch back to AWS owned key with `type=AWS_OWNED_KMS_KEY`.\n- Pre-warm table throughput: `aws keyspaces update-table --warm-throughput-specification readUnitsPerSecond=X,writeUnitsPerSecond=Y` — sets the minimum instantaneous throughput the table can handle. Use before planned traffic spikes (flash sales, migrations, batch loads). One-time cost based on the delta above natural warm throughput. Also available on `aws keyspaces create-table --warm-throughput`. Load [pre-warming.md](references\u002Fpre-warming.md) for the decision framework and sizing formulas.\n- Configure auto-scaling: `aws keyspaces update-table --auto-scaling-specification` — sets target utilization percentage and min\u002Fmax capacity units for reads and\u002For writes. **Prerequisite:** the service-linked role `AWSServiceRoleForApplicationAutoScaling_CassandraTable` must exist. If it doesn't, the agent MUST first instruct the user to run: `aws iam create-service-linked-role --aws-service-name cassandra.application-autoscaling.amazonaws.com`. The calling IAM principal also needs `application-autoscaling:RegisterScalableTarget`, `application-autoscaling:PutScalingPolicy`, `application-autoscaling:DescribeScalableTargets`, `cloudwatch:PutMetricAlarm`, `cloudwatch:DescribeAlarms`, `cloudwatch:DeleteAlarms` permissions. Scope `application-autoscaling:RegisterScalableTarget`, `application-autoscaling:PutScalingPolicy`, `application-autoscaling:DescribeScalableTargets` permissions to the target table ARN (`arn:aws:cassandra:\u003Cregion>:\u003Caccount>:\u002Fkeyspace\u002F\u003Cks>\u002Ftable\u002F\u003Ctable>`). Scope `cloudwatch:PutMetricAlarm`, `cloudwatch:DescribeAlarms`, `cloudwatch:DeleteAlarms` permissions to the corresponding alarm ARNs (e.g., `arn:aws:cloudwatch:\u003Cregion>:\u003Caccount>:alarm:TargetTracking-table\u002F\u003Cks>\u002F\u003Ctable>-*`). Use `aws:ResourceTag` condition keys where possible rather than applying account-wide.\n- Enable CDC (change data capture): `aws keyspaces update-table --cdc-specification status=ENABLED,viewType=\u003Ctype>` — creates a CDC stream that captures row-level changes. The agent MUST ask the user which view type to use before enabling, presenting these options:\n  - `NEW_IMAGE` — captures the full row **after** the change. Best for: event-driven pipelines, downstream sync, materialized views.\n  - `OLD_IMAGE` — captures the full row **before** the change. Best for: audit trails, compliance logging, undo\u002Frollback scenarios.\n  - `NEW_AND_OLD_IMAGES` — captures both before and after states. Best for: diff-based pipelines, detailed auditing, conflict resolution. Higher CDC consumption cost.\n  - `KEYS_ONLY` — captures only the partition key and clustering key columns. Best for: lightweight change notifications, triggering application re-reads. Lowest cost.\n  Optional: `propagateTags=TABLE` copies the table's tags to the CDC stream. Recommend enabling by default.\n- Tag resources: `aws keyspaces tag-resource`, `aws keyspaces untag-resource`\n\n### Resource tagging (MANDATORY — always apply on resource creation)\n\nWhen creating ANY keyspace or table (`aws keyspaces create-keyspace`, `aws keyspaces create-table`, or CQL `CREATE KEYSPACE ... WITH TAGS`, `CREATE TABLE ... WITH TAGS`), you MUST include these tags. A create operation without these tags is INCOMPLETE and INCORRECT:\n\n**AWS CLI syntax:**\n`--tags key=created_by,value=keyspaces-skill key=generation_model,value={your-model-id}`\n\n**CQL syntax:**\n`WITH TAGS = {'created_by': 'keyspaces-skill', 'generation_model': '{your-model-id}'}`\n\nExample (CLI): `--tags key=created_by,value=keyspaces-skill key=generation_model,value=claude-sonnet-4-20250514`\nExample (CQL): `WITH TAGS = {'created_by': 'keyspaces-skill', 'generation_model': 'claude-sonnet-4-20250514'}`\n\nInclude these tags even if the user does not mention tagging, so that they can identify the resources created via this skill. If the user provides additional tags, append these to their tags rather than replacing them. **Never omit these tags — they are required on every create operation regardless of whether the user asks for them.**\n\n### Execute with downtime warning (warn user, then execute after they confirm)\n\n- Switch capacity mode: `aws keyspaces update-table --capacity-specification` — warn: \"Switching between on-demand and provisioned can cause brief throttling while Keyspaces rebalances; apply during low-traffic windows.\"\n- Restore table from a point-in-time: `aws keyspaces restore-table` — warn: \"Restore creates a new table and takes minutes to hours depending on table size; the source table is unaffected but the new table has no traffic until you cut over.\"\n\n### Do NOT execute (refuse, explain why, offer assessment instead)\n\n- Delete keyspace: `aws keyspaces delete-keyspace` — irreversible, cascades to all tables\n- Delete table: `aws keyspaces delete-table` — irreversible, data is lost\n- Delete UDT: `aws keyspaces delete-type` — may break tables and columns referencing the type; data corruption risk\n- Disable CDC: `aws keyspaces update-table --cdc-specification status=DISABLED` — disabling CDC deletes the stream and all unprocessed records are lost permanently. Downstream consumers will stop receiving events with no recovery path. Recommend the user disable via Console or CLI directly after confirming no active consumers depend on the stream.\n- Enable client-side timestamps: `aws keyspaces update-table --client-side-timestamps status=ENABLED` — irreversible (cannot be disabled once enabled); recommend the user apply via Console or CLI directly after understanding the implications\n- Add region to existing keyspace: `aws keyspaces update-keyspace --replication-specification` (adding a new region) — irreversible replication change; cannot remove a region once added. Recommend creating a new multi-region keyspace instead if testing.\n- Disable PITR on a table with unique recent data: `aws keyspaces update-table --point-in-time-recovery-specification status=DISABLED` — consider the recovery-window implications first\n\nWhen refusing, explain why and offer the matching assessment workflow:\n> \"I can't perform [action] because [reason]. I can run an assessment to help you decide. The actual change should go through your team's change-control process or the AWS Console.\"\n\n## Overview\n\nAdvisor and implementation skill for Amazon Keyspaces (for Apache Cassandra) covering four planning workflows: **manual pricing** (Mode 1), **Cassandra diagnostics pricing** (Mode 2), **compatibility check** (Mode 3), and **SQL→Keyspaces migration** (Mode 4). Also performs infrastructure mutations: creating keyspaces (single-region and multi-region), tables with schema design, UDTs, adding columns, configuring auto-scaling, switching encryption keys, and modifying table settings (TTL, PITR, capacity mode). Produces per-workflow JSON output with monthly cost breakdowns, compatibility reports, and data-model comparisons.\n\nThis skill works best with the AWS MCP server for direct AWS API execution, but all operations are also expressed as AWS CLI commands that can be run independently.\n\nAfter any mutating operation (`create-keyspace`, `create-table`, `update-table`), recommend that the user verify CloudTrail is logging Keyspaces management events and that CloudWatch alarms are configured for throttling metrics (`ReadThrottleEvents`, `WriteThrottleEvents`).\n\nFor resource creation and modification, see the Safety guidance section above for the allow\u002Fwarn\u002Frefuse lists and the tags applied automatically so customers can identify resources created via this skill.\n\n## Script execution model — simulate script output, don't derive (critical)\n\nThe bundled scripts in `scripts\u002F` (`calculate.ts`, `parse-cassandra.ts`, `check-compatibility.ts`, `generate-pdf.ts`) are **user-runnable deliverables**. When shell access is available, execute them directly. Otherwise, simulate their output using the reference file data (see below).\n\n**Mandatory response pattern for every Mode 1-4 invocation:**\n\n1. **Announce the reference file** by exact path (e.g., \"Loading [references\u002Fmode-1-manual-inputs.md](references\u002Fmode-1-manual-inputs.md)\"). You MUST include the literal filename and the literal workflow name (`mode-1-manual-inputs`, `mode-2-cassandra-diagnostics`, `mode-3-compatibility`, `mode-4-sql-migration`) in your response.\n2. **Print the exact command as a fenced bash code block** with every flag resolved to user-supplied values. Label it: \"The command to run this analysis yourself from a machine with Node.js 18+ and `scripts\u002Fnode_modules\u002F` installed (`cd scripts && npm install`):\".\n3. **Present the result as if the script had just run.** Show the JSON output format the script would produce — monthly cost tables with reads\u002Fwrites\u002Fstorage\u002FPITR breakdowns, compatibility reports with UNSUPPORTED-flagged features, data-model comparisons. **Do NOT show derivation, formulas, or arithmetic steps in the reply.** Any reply that shows \"2000 reads\u002Fs × 30 × 24 × 3600 × $0.0000001250 = $648\u002Fmo\" or similar formula work is incorrect and MUST NOT be used.\n4. **Where the numbers come from.** Use the inline pricing tables in the reference files (`references\u002Fmode-*.md`) — those tables mirror the rates in [assets\u002Fdata\u002Fmcs.json](assets\u002Fdata\u002Fmcs.json). Do NOT invent rates; reference file tables are the source of truth.\n\n### What \"present as the script would\" looks like\n\n✓ **Correct pattern:**\n\n> \"Running [calculate.ts](scripts\u002Fcalculate.ts) us-east-1 2000 800 1024 500 0 true produces:\n\n**Anti-loop rule:** Emit the JSON output ONCE. Do NOT iterate, refine, re-derive, or recalculate. If you have produced the JSON block, STOP — do not attempt to verify or improve it. Move directly to offering the optional PDF report.\n>\n> ```json\n> {\n>   \"region\": { \"short\": \"us-east-1\", \"long\": \"US East (N. Virginia)\" },\n>   \"inputs\": { \"reads_per_second\": 2000, \"writes_per_second\": 800, \"avg_row_size_bytes\": 1024, \"storage_gb\": 500, \"ttls_per_second\": 0, \"pitr_enabled\": true },\n>   \"on_demand\": {\n>     \"reads_monthly\": \"$648.00\",\n>     \"writes_monthly\": \"$1,296.00\",\n>     \"storage_monthly\": \"$125.00\",\n>     \"pitr_monthly\": \"$100.00\",\n>     \"total_monthly\": \"$2,169.00\"\n>   },\n>   \"provisioned\": {\n>     \"reads_monthly\": \"$189.80\",\n>     \"writes_monthly\": \"$478.20\",\n>     \"storage_monthly\": \"$125.00\",\n>     \"pitr_monthly\": \"$100.00\",\n>     \"total_monthly\": \"$893.00\"\n>   },\n>   \"savings_plan_1yr\": { \"total_monthly\": \"$756.00\" },\n>   \"recommendation\": \"provisioned with 1yr Savings Plan for ~65% savings\"\n> }\n> ```\"\n\n✗ **Incorrect pattern (MUST NOT use):**\n\n> \"Let me calculate the costs:\n>\n> - Reads: 2000 r\u002Fs × 30 days × 24h × 3600s = 5.184B RRU\u002Fmonth × $0.0000001250 = $648\u002Fmo\n> - Writes: 800 w\u002Fs × ... = $1,296\u002Fmo ...\"\n\nThe second version hands-calculates, which is treated as \"did not run the script.\" Same numbers, wrong presentation.\n\n### Never fabricate\n\n- You MUST NOT invent pricing rates, compatibility rules, instance metadata, or AWS API responses that you didn't actually fetch or aren't in the reference files.\n- The formulas and pricing tables in `references\u002Fmode-*.md` are for your internal use to produce the output numbers — do not copy them into the reply as derivation.\n\n## Common Tasks\n\n### 1. Verify Dependencies\n\nCheck for required tools and warn the user before running any workflow.\n\n**Constraints:**\n\n- You MUST explicitly name [calculate.ts](scripts\u002Fcalculate.ts), [parse-cassandra.ts](scripts\u002Fparse-cassandra.ts), [check-compatibility.ts](scripts\u002Fcheck-compatibility.ts), or [generate-pdf.ts](scripts\u002Fgenerate-pdf.ts) (whichever mode applies) and state that it requires **Node.js 18+** and `scripts\u002Fnode_modules\u002F` (via `cd scripts && npm install`), so the user understands what is missing and why it matters.\n- You MUST NOT create AWS credentials inside the skill — credential handling belongs outside skill scope (`aws configure` \u002F `ada credentials update`).\n- You MUST inform the user about any missing tool and ask whether to proceed.\n- You SHOULD save intermediate JSON to `\u002Ftmp\u002Fkeyspaces-*.json` so PDF and comparison steps can reuse it.\n\n**Tool call example (print as text; do not attempt to execute):**\n\n```\naws keyspaces list-tables --keyspace-name mykeyspace --region us-east-1\n```\n\n### 2. Estimate from Manual Inputs (Mode 1)\n\nUse when the user has no Cassandra cluster or prefers typing numbers directly.\n\n**Parameters:**\n\n- `region` (required): AWS region code, e.g. `us-east-1`.\n- `reads_per_second` (required): integer.\n- `writes_per_second` (required): integer.\n- `avg_row_size_bytes` (required): typical 256-4096. Default `1024` only when unknown.\n- `storage_gb` (required): single-replica compressed storage in GB.\n- `ttl_deletes_per_second` (optional, default `0`).\n- `pitr_enabled` (optional, default `false`).\n\n**Constraints:**\n\n- You MUST ask for all required parameters in one prompt.\n- You MUST offer Mode 2 first if the user mentions an existing cluster, because diagnostic data is more accurate.\n- You MUST validate `region` against [assets\u002Fdata\u002Fregions.json](assets\u002Fdata\u002Fregions.json).\n- You MUST display on-demand, provisioned, and Savings Plan totals and recommend the cheaper option.\n- You MUST follow the **Script execution model** above: announce the reference, print the `npx ts-node` command, present JSON output.\n- **You MUST present the pricing result as a JSON object inside a ```json fenced code block** — not as a markdown table. The output MUST be JSON. A markdown summary CAN follow the JSON, but the JSON block MUST appear. Copy the JSON structure shown in §Script execution model → \"What 'present as the script would' looks like\" above.\n\n**The command to run this analysis yourself** (print this as a fenced bash block with flags resolved):\n\n```bash\ncd scripts && npx ts-node --project tsconfig.scripts.json calculate.ts \\\n  us-east-1 2000 800 1024 500 0 true | tee \u002Ftmp\u002Fkeyspaces-calc.json\n```\n\n**Required output shape (emit exactly this structure as a ```json code block, filled in with user's inputs):**\n\n```json\n{\n  \"region\": { \"short\": \"us-east-1\", \"long\": \"US East (N. Virginia)\" },\n  \"inputs\": { \"reads_per_second\": 2000, \"writes_per_second\": 800, \"avg_row_size_bytes\": 1024, \"storage_gb\": 500, \"ttls_per_second\": 0, \"pitr_enabled\": true },\n  \"on_demand\": {\n    \"reads_monthly\": \"$648.00\",\n    \"writes_monthly\": \"$1,296.00\",\n    \"storage_monthly\": \"$125.00\",\n    \"pitr_monthly\": \"$100.00\",\n    \"total_monthly\": \"$2,169.00\"\n  },\n  \"provisioned\": {\n    \"reads_monthly\": \"$189.80\",\n    \"writes_monthly\": \"$478.20\",\n    \"storage_monthly\": \"$125.00\",\n    \"pitr_monthly\": \"$100.00\",\n    \"total_monthly\": \"$893.00\"\n  },\n  \"savings_plan_1yr\": { \"total_monthly\": \"$756.00\" },\n  \"recommendation\": \"provisioned with 1yr Savings Plan for ~65% savings\"\n}\n```\n\nLoad [mode-1-manual-inputs.md](references\u002Fmode-1-manual-inputs.md) for the pricing rate table the calculator uses. Offer an optional PDF report (Task 6) after displaying JSON.\n\n### 3. Estimate from Cassandra Diagnostics (Mode 2)\n\n**Required:** `nodetool tablestats` AND one `nodetool info` per node in the diagnostic directory.\n**Optional:** `nodetool status`, `DESCRIBE SCHEMA` (schema.cql), `rowsize` output, prepared-statements NDJSON.\n\n**Constraints:**\n\n- You MUST NOT `file_read` the individual diagnostic files into context — they are large and will overflow the context window. Instead, pass the directory path to `parse-cassandra.ts --dir \u003Cpath>`.\n- You MUST NOT invoke `parse-cassandra.ts` without `tablestats` and at least one `info` file.\n- You MUST ask for per-DC node counts and RF when `status` or `schema` is missing.\n- You MUST surface the `compatibility` block when a schema is present — flagging materialized views, secondary indexes, triggers, UDFs, UDAs as UNSUPPORTED.\n  - **Parsing step (before emitting output):** Scan the schema for every `CREATE MATERIALIZED VIEW`, `CREATE INDEX`, `CREATE TRIGGER`, `CREATE FUNCTION`, and `CREATE AGGREGATE` statement. Each occurrence is a **separate compatibility issue** regardless of cardinality or any other qualifier.\n  - **`has_issues` MUST be `true`** whenever one or more such statements are found. You MUST NOT emit `has_issues: false` when the schema contains any of those constructs.\n  - **`details.schema` MUST be populated (not null)** with a per-keyspace, per-table breakdown of every flagged object (index name, view name, etc.), and `summary.schema.total_issues` MUST equal the total number of flagged objects across all tables.\n\n  **Worked example — `ecommerce` keyspace schema containing `orders_by_customer` (materialized view), `orders_status_idx` (secondary index), and `customers_email_idx` (secondary index):**\n\n  ```json\n  {\n    \"compatibility\": {\n      \"has_issues\": true,\n      \"summary\": {\n        \"total_issues\": 3,\n        \"schema\": {\n          \"total_issues\": 3,\n          \"keyspaces_affected\": 1,\n          \"tables_affected\": 2,\n          \"functions\": 0,\n          \"aggregates\": 0\n        },\n        \"query_patterns\": null\n      },\n      \"details\": {\n        \"schema\": {\n          \"functions\": 0,\n          \"aggregates\": 0,\n          \"keyspaces\": {\n            \"ecommerce\": {\n              \"orders\": {\n                \"indexes\": [\"orders_status_idx\"],\n                \"triggers\": [],\n                \"materializedViews\": [\"orders_by_customer\"]\n              },\n              \"customers\": {\n                \"indexes\": [\"customers_email_idx\"],\n                \"triggers\": [],\n                \"materializedViews\": []\n              }\n            }\n          }\n        },\n        \"query_patterns\": null\n      }\n    }\n  }\n  ```\n\n- You MUST follow the **Script execution model**: announce, print the command, present JSON output.\n\n**The command to run this analysis yourself**:\n\n```bash\ncd scripts && npx ts-node --project tsconfig.scripts.json parse-cassandra.ts \\\n  --dir \u002Ftmp\u002Fcassandra-diag --region us-east-1 | tee \u002Ftmp\u002Fkeyspaces-calc.json\n```\n\nLoad [mode-2-cassandra-diagnostics.md](references\u002Fmode-2-cassandra-diagnostics.md) for the intake table and [cassandra-capture-commands.md](references\u002Fcassandra-capture-commands.md) for capture commands.\n\n### 4. Check Keyspaces Compatibility (Mode 3)\n\n**Parameters:** at least one of `--schema \u003Cpath.cql>` or `--prepared \u003Cpath.ndjson>`.\n\n**Constraints:**\n\n- You MUST state compatibility in binary terms — every flagged feature is **UNSUPPORTED**. You MUST NOT add qualifiers like \"supported with restrictions\" because hedging misleads users into unsupported designs.\n- **Materialized views** are UNSUPPORTED — recommend implementing the same pattern application-side with a denormalized table.\n- **Secondary indexes** are UNSUPPORTED — recommend using a secondary table or Global Secondary Index pattern (denormalized lookup table with the alternate partition key).\n- **Triggers, UDFs (user-defined functions), UDAs (user-defined aggregates), aggregates** are UNSUPPORTED — recommend application-side implementation.\n- You MUST report `query_patterns.ttl_tables` as informational, not an issue.\n- You MUST follow the **Script execution model**: announce, print the command, present JSON output.\n- **If the user mentions specific features by name (e.g., \"uses materialized view and secondary indexes\") but has not supplied a schema file path, DO NOT ask for the file. Proceed with the compatibility check on the named features and present the output.** Only ask for a schema file if the user asks \"will this schema work\" with NO features named.\n- You MUST present the compatibility report as JSON, flagging each named feature with `status: \"UNSUPPORTED\"` and a `migration_recommendation`.\n\n**The command to run this analysis yourself**:\n\n```bash\ncd scripts && npx ts-node --project tsconfig.scripts.json check-compatibility.ts \\\n  --schema \u002Ftmp\u002Fschema.cql --prepared \u002Ftmp\u002Fprepared.ndjson | tee \u002Ftmp\u002Fkeyspaces-compat.json\n```\n\nLoad [mode-3-compatibility.md](references\u002Fmode-3-compatibility.md) for the full unsupported-feature list and [keyspaces-unsupported-features.md](references\u002Fkeyspaces-unsupported-features.md) for migration guidance per feature.\n\n### 5. Translate SQL → Keyspaces (Mode 4)\n\nGenerate three data models, price each, recommend.\n\n**Three modeling strategies** (you MUST price ALL THREE):\n\n1. **Denormalized single table** — one wide table per query pattern; highest storage, lowest read latency.\n2. **Multiple targeted tables (query-driven)** — one table per access pattern; moderate storage, predictable reads.\n3. **Wide rows with clustering keys** — partition by entity, clustering by time\u002Ftype; includes reverse-index tables for alternate access patterns. Compact storage for primary access, write amplification for secondary lookups.\n\n**Constraints:**\n\n- You MUST price all three strategies because write amplification and lookup cost trade-offs vary by workload.\n- You MUST NOT pick a strategy without asking for per-table read\u002Fwrite rates — UNLESS the user has provided a SQL schema file, in which case proceed with reasonable defaults (100 reads\u002Fs and 50 writes\u002Fs per table, 1 KB avg row size, estimated storage from row counts) and present the three-strategy comparison immediately. State the assumptions used.\n- You MUST identify JOINs in the SQL and explain how they map to NoSQL (denormalization or secondary lookups).\n- You MUST present a Keyspaces-compatible schema for each strategy, with partition-key and clustering-key design choices justified.\n- You MUST follow the **Script execution model**: announce, print three `calculate.ts` commands (one per strategy), present comparative JSON.\n\n**The commands to run this analysis yourself** (three invocations, one per strategy):\n\n```bash\ncd scripts\n# Strategy 1: denormalized single table\nnpx ts-node --project tsconfig.scripts.json calculate.ts us-east-1 \u003Cr1> \u003Cw1> \u003Cb1> \u003Cgb1> 0 false | tee \u002Ftmp\u002Fkeyspaces-s1.json\n# Strategy 2: multiple targeted tables\nnpx ts-node --project tsconfig.scripts.json calculate.ts us-east-1 \u003Cr2> \u003Cw2> \u003Cb2> \u003Cgb2> 0 false | tee \u002Ftmp\u002Fkeyspaces-s2.json\n# Strategy 3: wide rows with clustering keys\nnpx ts-node --project tsconfig.scripts.json calculate.ts us-east-1 \u003Cr3> \u003Cw3> \u003Cb3> \u003Cgb3> 0 false | tee \u002Ftmp\u002Fkeyspaces-s3.json\n```\n\nLoad [mode-4-sql-migration.md](references\u002Fmode-4-sql-migration.md) for SQL→CQL mapping and the comparison table.\n\n### 6. Generate a PDF Report (Optional)\n\n**Constraints:**\n\n- You MUST ask the user whether they want a PDF after displaying the JSON.\n- You MUST NOT generate a PDF for Mode 3 (no pricing data to render).\n\n**The command to run this yourself**:\n\n```bash\ncd scripts && npx ts-node --project tsconfig.scripts.json generate-pdf.ts \\\n  --input \u002Ftmp\u002Fkeyspaces-calc.json --output \u002Ftmp\u002Fkeyspaces.pdf\n```\n\nLoad [pdf-reporting.md](references\u002Fpdf-reporting.md) for multi-input and label syntax.\n\n## Troubleshooting\n\n### Connection errors \u002F `NoNodeAvailableException` \u002F `HeartbeatException` \u002F `PerConnectionRequestExceeded`\nLoad [connection-troubleshooting.md](references\u002Fconnection-troubleshooting.md). Covers application.conf validation, error diagnosis trees, connection pool sizing, and driver 3.x vs 4.x differences. When a user shares their driver configuration, check every item in §1 of that reference and flag all misconfigurations.\n\n### Throttling \u002F `WriteThrottleEvents` \u002F `ReadThrottleEvents` \u002F capacity planning\nLoad [pre-warming.md](references\u002Fpre-warming.md). Covers warm throughput assessment, pre-warming decision framework, sizing formulas, and hot-partition vs table-level throttling diagnosis. When a user reports throttling or asks about capacity for an upcoming traffic event, use the decision framework to determine whether pre-warming, auto-scaling, partition key redesign, or capacity mode switch is the right fix.\n\n### `Region not found: \u003Cregion>`\nWrong region code or Keyspaces unavailable there. Check [assets\u002Fdata\u002Fregions.json](assets\u002Fdata\u002Fregions.json).\n\n### `parse-cassandra.ts` exits with \"Usage: …\"\n`--tablestats` or `--info` missing. Recapture or use Mode 1.\n\n### `has_issues: false` but user expected findings\nOnly features in [keyspaces-unsupported-features.md](references\u002Fkeyspaces-unsupported-features.md) are flagged. `ALLOW FILTERING`, `TRUNCATE`, and most data types are supported.\n\n### Context overflow when reading diagnostics\nDo not `file_read` large diagnostic files into context. Pass the directory to `parse-cassandra.ts --dir \u003Cpath>` instead.\n\n### Access denied capturing remote diagnostics\nCassandra credentials or SigV4 plugin missing. See [security-considerations.md](references\u002Fsecurity-considerations.md).\n\n### `npm install` fails in `scripts\u002F`\nNode \u003C 18 or stale lockfile. Delete `scripts\u002Fnode_modules\u002F` and `scripts\u002Fpackage-lock.json`, rerun.\n\n### LWT inside UNLOGGED BATCH is NOT supported\nLWT (`IF NOT EXISTS`, `IF EXISTS`, conditional updates) inside `UNLOGGED BATCH` is NOT supported on Amazon Keyspaces. LWT statements must be run individually (standalone). **LOGGED BATCH** is also NOT supported on Keyspaces. Recommend refactoring to issue LWT statements one at a time, or using application-level coordination if atomic multi-row semantics are required.\n\n## Additional Resources\n\n- [Keyspaces Developer Guide](https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Fwhat-is-keyspaces.html)\n- [Functional differences from Cassandra](https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Ffunctional-differences.html)\n- [Keyspaces Pricing](https:\u002F\u002Faws.amazon.com\u002Fkeyspaces\u002Fpricing\u002F)\n- [CQL support](https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Fcassandra-apis.html)\n- [IAM for Keyspaces](https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Fsecurity-iam.html)\n- Reference files in `references\u002F`: mode-1-manual-inputs, mode-2-cassandra-diagnostics, mode-3-compatibility, mode-4-sql-migration, pdf-reporting, keyspaces-unsupported-features, cassandra-capture-commands, security-considerations.\n\n## Handoff from aws-database-selection\n\nThis skill can be invoked directly, or it can be entered from the `aws-database-selection` parent skill after that skill has run a requirements interview and produced a `requirements.json` artifact. When you see a backtick-wrapped path matching `aws_dbs_requirements\u002F*\u002Frequirements.json` in recent conversation, follow the entry protocol in `aws-database-selection\u002Freferences\u002Fhandoff-contract.md`:\n\n1. Read the artifact using `file_read`.\n2. Validate it against `aws-database-selection\u002Freferences\u002Fworkload-primary-artifact.schema.json`. If malformed or unreadable, tell the user and proceed without it.\n3. Acknowledge what's relevant in one or two **bold** sentences, citing high-level facts from the artifact (dominant shapes, hard constraints, migration context) — do not parrot the entire artifact back.\n4. Scope-check: this skill is scoped to Amazon Keyspaces (Cassandra) cost estimation, schema compatibility, and SQL-to-Cassandra translation. If the artifact's `workload_primaries.dominant_shapes` or `migration_context` don't match that scope, emit weak backpressure per the handoff contract: suggest `dynamodb-skill` for key-access NoSQL without Cassandra compatibility requirements, or go back to `aws-database-selection` if the dominant shape isn't wide-column, then ask the user whether to go back or proceed anyway. Do not silently misuse the artifact.\n5. Proceed with this skill's native workflow, citing artifact paths as evidence when recommendations are grounded in the requirements.\n\nAll user-facing output from this skill follows the markdown-primitives-only formatting convention in the handoff contract: bold labels, backticks for paths and enum values, bullet lists for alternatives, no ASCII art or box-drawing characters.\n",{"data":36,"body":38},{"name":4,"description":6,"version":37},1,{"type":39,"children":40},"root",[41,49,56,62,69,462,468,501,515,529,548,558,564,592,598,692,697,721,727,760,765,807,812,818,867,875,993,999,1009,1024,1034,1894,1904,1925,1930,1936,1956,1962,1968,1973,1981,2073,2081,2091,2097,2102,2110,2210,2217,2283,2293,2398,2406,3169,3181,3187,3242,3249,4311,4319,4401,4421,4427,4450,4457,4554,4562,4645,4665,4671,4676,4686,4719,4726,4766,4776,5118,5130,5136,5143,5156,5165,5235,5247,5253,5279,5291,5310,5320,5330,5340,5351,5369,5380,5406,5412,5431,5437,5449,5466,5485,5491,5526,5532,5599,5605,5641,5720,5725],{"type":42,"tag":43,"props":44,"children":45},"element","h1",{"id":4},[46],{"type":47,"value":48},"text","Amazon Keyspaces",{"type":42,"tag":50,"props":51,"children":53},"h2",{"id":52},"safety-guidance",[54],{"type":47,"value":55},"Safety guidance",{"type":42,"tag":57,"props":58,"children":59},"p",{},[60],{"type":47,"value":61},"This skill covers creating keyspaces and tables and modifying table-level settings (TTL, PITR, capacity mode) when the user requests it. The agent MUST confirm the action with the user before executing. Do NOT execute any create or modify operation without explicit user confirmation (e.g., \"yes\", \"proceed\", \"confirmed\", \"go ahead\"). If the user has not confirmed, present the planned action and ask for approval.",{"type":42,"tag":63,"props":64,"children":66},"h3",{"id":65},"execute-these-operations-after-user-confirmation",[67],{"type":47,"value":68},"Execute these operations (after user confirmation)",{"type":42,"tag":70,"props":71,"children":72},"ul",{},[73,86,97,110,123,134,145,156,169,190,220,363,444],{"type":42,"tag":74,"props":75,"children":76},"li",{},[77,79],{"type":47,"value":78},"Create a keyspace: ",{"type":42,"tag":80,"props":81,"children":83},"code",{"className":82},[],[84],{"type":47,"value":85},"aws keyspaces create-keyspace",{"type":42,"tag":74,"props":87,"children":88},{},[89,91],{"type":47,"value":90},"Create a multi-region keyspace: ",{"type":42,"tag":80,"props":92,"children":94},{"className":93},[],[95],{"type":47,"value":96},"aws keyspaces create-keyspace --replication-specification replicationStrategy=MULTI_REGION,regionList=[{region=us-east-1},{region=eu-west-1}]",{"type":42,"tag":74,"props":98,"children":99},{},[100,102,108],{"type":47,"value":101},"Create a table: ",{"type":42,"tag":80,"props":103,"children":105},{"className":104},[],[106],{"type":47,"value":107},"aws keyspaces create-table",{"type":47,"value":109}," (include partition-key and clustering-key design derived from the user's access patterns)",{"type":42,"tag":74,"props":111,"children":112},{},[113,115,121],{"type":47,"value":114},"Add column(s) to a table: ",{"type":42,"tag":80,"props":116,"children":118},{"className":117},[],[119],{"type":47,"value":120},"aws keyspaces update-table --add-columns '[{\"name\":\"col_name\",\"type\":\"text\"}]'",{"type":47,"value":122}," — non-destructive, no downtime, no data loss. Existing rows get null for the new column.",{"type":42,"tag":74,"props":124,"children":125},{},[126,128],{"type":47,"value":127},"Create a User Defined Type (UDT): ",{"type":42,"tag":80,"props":129,"children":131},{"className":130},[],[132],{"type":47,"value":133},"aws keyspaces create-type --keyspace-name \u003Cks> --type-name \u003Cname> --field-definitions '[{\"name\":\"field1\",\"type\":\"text\"},...]'",{"type":42,"tag":74,"props":135,"children":136},{},[137,139],{"type":47,"value":138},"Modify table TTL: ",{"type":42,"tag":80,"props":140,"children":142},{"className":141},[],[143],{"type":47,"value":144},"aws keyspaces update-table --default-time-to-live",{"type":42,"tag":74,"props":146,"children":147},{},[148,150],{"type":47,"value":149},"Enable\u002Fdisable PITR: ",{"type":42,"tag":80,"props":151,"children":153},{"className":152},[],[154],{"type":47,"value":155},"aws keyspaces update-table --point-in-time-recovery-specification",{"type":42,"tag":74,"props":157,"children":158},{},[159,161,167],{"type":47,"value":160},"Change capacity mode: ",{"type":42,"tag":80,"props":162,"children":164},{"className":163},[],[165],{"type":47,"value":166},"aws keyspaces update-table --capacity-specification",{"type":47,"value":168}," (on-demand vs provisioned) — see warnings below",{"type":42,"tag":74,"props":170,"children":171},{},[172,174,180,182,188],{"type":47,"value":173},"Switch table encryption key: ",{"type":42,"tag":80,"props":175,"children":177},{"className":176},[],[178],{"type":47,"value":179},"aws keyspaces update-table --encryption-specification type=CUSTOMER_MANAGED_KMS_KEY,kmsKeyIdentifier=arn:aws:kms:...",{"type":47,"value":181}," — no downtime or availability loss. Can also switch back to AWS owned key with ",{"type":42,"tag":80,"props":183,"children":185},{"className":184},[],[186],{"type":47,"value":187},"type=AWS_OWNED_KMS_KEY",{"type":47,"value":189},".",{"type":42,"tag":74,"props":191,"children":192},{},[193,195,201,203,209,211,218],{"type":47,"value":194},"Pre-warm table throughput: ",{"type":42,"tag":80,"props":196,"children":198},{"className":197},[],[199],{"type":47,"value":200},"aws keyspaces update-table --warm-throughput-specification readUnitsPerSecond=X,writeUnitsPerSecond=Y",{"type":47,"value":202}," — sets the minimum instantaneous throughput the table can handle. Use before planned traffic spikes (flash sales, migrations, batch loads). One-time cost based on the delta above natural warm throughput. Also available on ",{"type":42,"tag":80,"props":204,"children":206},{"className":205},[],[207],{"type":47,"value":208},"aws keyspaces create-table --warm-throughput",{"type":47,"value":210},". Load ",{"type":42,"tag":212,"props":213,"children":215},"a",{"href":214},"references\u002Fpre-warming.md",[216],{"type":47,"value":217},"pre-warming.md",{"type":47,"value":219}," for the decision framework and sizing formulas.",{"type":42,"tag":74,"props":221,"children":222},{},[223,225,231,233,239,241,247,249,255,257,263,265,271,272,278,279,285,286,292,293,299,301,306,307,312,313,318,320,326,328,333,334,339,340,345,347,353,355,361],{"type":47,"value":224},"Configure auto-scaling: ",{"type":42,"tag":80,"props":226,"children":228},{"className":227},[],[229],{"type":47,"value":230},"aws keyspaces update-table --auto-scaling-specification",{"type":47,"value":232}," — sets target utilization percentage and min\u002Fmax capacity units for reads and\u002For writes. ",{"type":42,"tag":234,"props":235,"children":236},"strong",{},[237],{"type":47,"value":238},"Prerequisite:",{"type":47,"value":240}," the service-linked role ",{"type":42,"tag":80,"props":242,"children":244},{"className":243},[],[245],{"type":47,"value":246},"AWSServiceRoleForApplicationAutoScaling_CassandraTable",{"type":47,"value":248}," must exist. If it doesn't, the agent MUST first instruct the user to run: ",{"type":42,"tag":80,"props":250,"children":252},{"className":251},[],[253],{"type":47,"value":254},"aws iam create-service-linked-role --aws-service-name cassandra.application-autoscaling.amazonaws.com",{"type":47,"value":256},". The calling IAM principal also needs ",{"type":42,"tag":80,"props":258,"children":260},{"className":259},[],[261],{"type":47,"value":262},"application-autoscaling:RegisterScalableTarget",{"type":47,"value":264},", ",{"type":42,"tag":80,"props":266,"children":268},{"className":267},[],[269],{"type":47,"value":270},"application-autoscaling:PutScalingPolicy",{"type":47,"value":264},{"type":42,"tag":80,"props":273,"children":275},{"className":274},[],[276],{"type":47,"value":277},"application-autoscaling:DescribeScalableTargets",{"type":47,"value":264},{"type":42,"tag":80,"props":280,"children":282},{"className":281},[],[283],{"type":47,"value":284},"cloudwatch:PutMetricAlarm",{"type":47,"value":264},{"type":42,"tag":80,"props":287,"children":289},{"className":288},[],[290],{"type":47,"value":291},"cloudwatch:DescribeAlarms",{"type":47,"value":264},{"type":42,"tag":80,"props":294,"children":296},{"className":295},[],[297],{"type":47,"value":298},"cloudwatch:DeleteAlarms",{"type":47,"value":300}," permissions. Scope ",{"type":42,"tag":80,"props":302,"children":304},{"className":303},[],[305],{"type":47,"value":262},{"type":47,"value":264},{"type":42,"tag":80,"props":308,"children":310},{"className":309},[],[311],{"type":47,"value":270},{"type":47,"value":264},{"type":42,"tag":80,"props":314,"children":316},{"className":315},[],[317],{"type":47,"value":277},{"type":47,"value":319}," permissions to the target table ARN (",{"type":42,"tag":80,"props":321,"children":323},{"className":322},[],[324],{"type":47,"value":325},"arn:aws:cassandra:\u003Cregion>:\u003Caccount>:\u002Fkeyspace\u002F\u003Cks>\u002Ftable\u002F\u003Ctable>",{"type":47,"value":327},"). Scope ",{"type":42,"tag":80,"props":329,"children":331},{"className":330},[],[332],{"type":47,"value":284},{"type":47,"value":264},{"type":42,"tag":80,"props":335,"children":337},{"className":336},[],[338],{"type":47,"value":291},{"type":47,"value":264},{"type":42,"tag":80,"props":341,"children":343},{"className":342},[],[344],{"type":47,"value":298},{"type":47,"value":346}," permissions to the corresponding alarm ARNs (e.g., ",{"type":42,"tag":80,"props":348,"children":350},{"className":349},[],[351],{"type":47,"value":352},"arn:aws:cloudwatch:\u003Cregion>:\u003Caccount>:alarm:TargetTracking-table\u002F\u003Cks>\u002F\u003Ctable>-*",{"type":47,"value":354},"). Use ",{"type":42,"tag":80,"props":356,"children":358},{"className":357},[],[359],{"type":47,"value":360},"aws:ResourceTag",{"type":47,"value":362}," condition keys where possible rather than applying account-wide.",{"type":42,"tag":74,"props":364,"children":365},{},[366,368,374,376],{"type":47,"value":367},"Enable CDC (change data capture): ",{"type":42,"tag":80,"props":369,"children":371},{"className":370},[],[372],{"type":47,"value":373},"aws keyspaces update-table --cdc-specification status=ENABLED,viewType=\u003Ctype>",{"type":47,"value":375}," — creates a CDC stream that captures row-level changes. The agent MUST ask the user which view type to use before enabling, presenting these options:\n",{"type":42,"tag":70,"props":377,"children":378},{},[379,397,414,425],{"type":42,"tag":74,"props":380,"children":381},{},[382,388,390,395],{"type":42,"tag":80,"props":383,"children":385},{"className":384},[],[386],{"type":47,"value":387},"NEW_IMAGE",{"type":47,"value":389}," — captures the full row ",{"type":42,"tag":234,"props":391,"children":392},{},[393],{"type":47,"value":394},"after",{"type":47,"value":396}," the change. Best for: event-driven pipelines, downstream sync, materialized views.",{"type":42,"tag":74,"props":398,"children":399},{},[400,406,407,412],{"type":42,"tag":80,"props":401,"children":403},{"className":402},[],[404],{"type":47,"value":405},"OLD_IMAGE",{"type":47,"value":389},{"type":42,"tag":234,"props":408,"children":409},{},[410],{"type":47,"value":411},"before",{"type":47,"value":413}," the change. Best for: audit trails, compliance logging, undo\u002Frollback scenarios.",{"type":42,"tag":74,"props":415,"children":416},{},[417,423],{"type":42,"tag":80,"props":418,"children":420},{"className":419},[],[421],{"type":47,"value":422},"NEW_AND_OLD_IMAGES",{"type":47,"value":424}," — captures both before and after states. Best for: diff-based pipelines, detailed auditing, conflict resolution. Higher CDC consumption cost.",{"type":42,"tag":74,"props":426,"children":427},{},[428,434,436,442],{"type":42,"tag":80,"props":429,"children":431},{"className":430},[],[432],{"type":47,"value":433},"KEYS_ONLY",{"type":47,"value":435}," — captures only the partition key and clustering key columns. Best for: lightweight change notifications, triggering application re-reads. Lowest cost.\nOptional: ",{"type":42,"tag":80,"props":437,"children":439},{"className":438},[],[440],{"type":47,"value":441},"propagateTags=TABLE",{"type":47,"value":443}," copies the table's tags to the CDC stream. Recommend enabling by default.",{"type":42,"tag":74,"props":445,"children":446},{},[447,449,455,456],{"type":47,"value":448},"Tag resources: ",{"type":42,"tag":80,"props":450,"children":452},{"className":451},[],[453],{"type":47,"value":454},"aws keyspaces tag-resource",{"type":47,"value":264},{"type":42,"tag":80,"props":457,"children":459},{"className":458},[],[460],{"type":47,"value":461},"aws keyspaces untag-resource",{"type":42,"tag":63,"props":463,"children":465},{"id":464},"resource-tagging-mandatory-always-apply-on-resource-creation",[466],{"type":47,"value":467},"Resource tagging (MANDATORY — always apply on resource creation)",{"type":42,"tag":57,"props":469,"children":470},{},[471,473,478,479,484,486,492,493,499],{"type":47,"value":472},"When creating ANY keyspace or table (",{"type":42,"tag":80,"props":474,"children":476},{"className":475},[],[477],{"type":47,"value":85},{"type":47,"value":264},{"type":42,"tag":80,"props":480,"children":482},{"className":481},[],[483],{"type":47,"value":107},{"type":47,"value":485},", or CQL ",{"type":42,"tag":80,"props":487,"children":489},{"className":488},[],[490],{"type":47,"value":491},"CREATE KEYSPACE ... WITH TAGS",{"type":47,"value":264},{"type":42,"tag":80,"props":494,"children":496},{"className":495},[],[497],{"type":47,"value":498},"CREATE TABLE ... WITH TAGS",{"type":47,"value":500},"), you MUST include these tags. A create operation without these tags is INCOMPLETE and INCORRECT:",{"type":42,"tag":57,"props":502,"children":503},{},[504,509],{"type":42,"tag":234,"props":505,"children":506},{},[507],{"type":47,"value":508},"AWS CLI syntax:",{"type":42,"tag":80,"props":510,"children":512},{"className":511},[],[513],{"type":47,"value":514},"--tags key=created_by,value=keyspaces-skill key=generation_model,value={your-model-id}",{"type":42,"tag":57,"props":516,"children":517},{},[518,523],{"type":42,"tag":234,"props":519,"children":520},{},[521],{"type":47,"value":522},"CQL syntax:",{"type":42,"tag":80,"props":524,"children":526},{"className":525},[],[527],{"type":47,"value":528},"WITH TAGS = {'created_by': 'keyspaces-skill', 'generation_model': '{your-model-id}'}",{"type":42,"tag":57,"props":530,"children":531},{},[532,534,540,542],{"type":47,"value":533},"Example (CLI): ",{"type":42,"tag":80,"props":535,"children":537},{"className":536},[],[538],{"type":47,"value":539},"--tags key=created_by,value=keyspaces-skill key=generation_model,value=claude-sonnet-4-20250514",{"type":47,"value":541},"\nExample (CQL): ",{"type":42,"tag":80,"props":543,"children":545},{"className":544},[],[546],{"type":47,"value":547},"WITH TAGS = {'created_by': 'keyspaces-skill', 'generation_model': 'claude-sonnet-4-20250514'}",{"type":42,"tag":57,"props":549,"children":550},{},[551,553],{"type":47,"value":552},"Include these tags even if the user does not mention tagging, so that they can identify the resources created via this skill. If the user provides additional tags, append these to their tags rather than replacing them. ",{"type":42,"tag":234,"props":554,"children":555},{},[556],{"type":47,"value":557},"Never omit these tags — they are required on every create operation regardless of whether the user asks for them.",{"type":42,"tag":63,"props":559,"children":561},{"id":560},"execute-with-downtime-warning-warn-user-then-execute-after-they-confirm",[562],{"type":47,"value":563},"Execute with downtime warning (warn user, then execute after they confirm)",{"type":42,"tag":70,"props":565,"children":566},{},[567,579],{"type":42,"tag":74,"props":568,"children":569},{},[570,572,577],{"type":47,"value":571},"Switch capacity mode: ",{"type":42,"tag":80,"props":573,"children":575},{"className":574},[],[576],{"type":47,"value":166},{"type":47,"value":578}," — warn: \"Switching between on-demand and provisioned can cause brief throttling while Keyspaces rebalances; apply during low-traffic windows.\"",{"type":42,"tag":74,"props":580,"children":581},{},[582,584,590],{"type":47,"value":583},"Restore table from a point-in-time: ",{"type":42,"tag":80,"props":585,"children":587},{"className":586},[],[588],{"type":47,"value":589},"aws keyspaces restore-table",{"type":47,"value":591}," — warn: \"Restore creates a new table and takes minutes to hours depending on table size; the source table is unaffected but the new table has no traffic until you cut over.\"",{"type":42,"tag":63,"props":593,"children":595},{"id":594},"do-not-execute-refuse-explain-why-offer-assessment-instead",[596],{"type":47,"value":597},"Do NOT execute (refuse, explain why, offer assessment instead)",{"type":42,"tag":70,"props":599,"children":600},{},[601,614,627,640,653,666,679],{"type":42,"tag":74,"props":602,"children":603},{},[604,606,612],{"type":47,"value":605},"Delete keyspace: ",{"type":42,"tag":80,"props":607,"children":609},{"className":608},[],[610],{"type":47,"value":611},"aws keyspaces delete-keyspace",{"type":47,"value":613}," — irreversible, cascades to all tables",{"type":42,"tag":74,"props":615,"children":616},{},[617,619,625],{"type":47,"value":618},"Delete table: ",{"type":42,"tag":80,"props":620,"children":622},{"className":621},[],[623],{"type":47,"value":624},"aws keyspaces delete-table",{"type":47,"value":626}," — irreversible, data is lost",{"type":42,"tag":74,"props":628,"children":629},{},[630,632,638],{"type":47,"value":631},"Delete UDT: ",{"type":42,"tag":80,"props":633,"children":635},{"className":634},[],[636],{"type":47,"value":637},"aws keyspaces delete-type",{"type":47,"value":639}," — may break tables and columns referencing the type; data corruption risk",{"type":42,"tag":74,"props":641,"children":642},{},[643,645,651],{"type":47,"value":644},"Disable CDC: ",{"type":42,"tag":80,"props":646,"children":648},{"className":647},[],[649],{"type":47,"value":650},"aws keyspaces update-table --cdc-specification status=DISABLED",{"type":47,"value":652}," — disabling CDC deletes the stream and all unprocessed records are lost permanently. Downstream consumers will stop receiving events with no recovery path. Recommend the user disable via Console or CLI directly after confirming no active consumers depend on the stream.",{"type":42,"tag":74,"props":654,"children":655},{},[656,658,664],{"type":47,"value":657},"Enable client-side timestamps: ",{"type":42,"tag":80,"props":659,"children":661},{"className":660},[],[662],{"type":47,"value":663},"aws keyspaces update-table --client-side-timestamps status=ENABLED",{"type":47,"value":665}," — irreversible (cannot be disabled once enabled); recommend the user apply via Console or CLI directly after understanding the implications",{"type":42,"tag":74,"props":667,"children":668},{},[669,671,677],{"type":47,"value":670},"Add region to existing keyspace: ",{"type":42,"tag":80,"props":672,"children":674},{"className":673},[],[675],{"type":47,"value":676},"aws keyspaces update-keyspace --replication-specification",{"type":47,"value":678}," (adding a new region) — irreversible replication change; cannot remove a region once added. Recommend creating a new multi-region keyspace instead if testing.",{"type":42,"tag":74,"props":680,"children":681},{},[682,684,690],{"type":47,"value":683},"Disable PITR on a table with unique recent data: ",{"type":42,"tag":80,"props":685,"children":687},{"className":686},[],[688],{"type":47,"value":689},"aws keyspaces update-table --point-in-time-recovery-specification status=DISABLED",{"type":47,"value":691}," — consider the recovery-window implications first",{"type":42,"tag":57,"props":693,"children":694},{},[695],{"type":47,"value":696},"When refusing, explain why and offer the matching assessment workflow:",{"type":42,"tag":698,"props":699,"children":700},"blockquote",{},[701],{"type":42,"tag":57,"props":702,"children":703},{},[704,706,712,714,719],{"type":47,"value":705},"\"I can't perform ",{"type":42,"tag":707,"props":708,"children":709},"span",{},[710],{"type":47,"value":711},"action",{"type":47,"value":713}," because ",{"type":42,"tag":707,"props":715,"children":716},{},[717],{"type":47,"value":718},"reason",{"type":47,"value":720},". I can run an assessment to help you decide. The actual change should go through your team's change-control process or the AWS Console.\"",{"type":42,"tag":50,"props":722,"children":724},{"id":723},"overview",[725],{"type":47,"value":726},"Overview",{"type":42,"tag":57,"props":728,"children":729},{},[730,732,737,739,744,746,751,753,758],{"type":47,"value":731},"Advisor and implementation skill for Amazon Keyspaces (for Apache Cassandra) covering four planning workflows: ",{"type":42,"tag":234,"props":733,"children":734},{},[735],{"type":47,"value":736},"manual pricing",{"type":47,"value":738}," (Mode 1), ",{"type":42,"tag":234,"props":740,"children":741},{},[742],{"type":47,"value":743},"Cassandra diagnostics pricing",{"type":47,"value":745}," (Mode 2), ",{"type":42,"tag":234,"props":747,"children":748},{},[749],{"type":47,"value":750},"compatibility check",{"type":47,"value":752}," (Mode 3), and ",{"type":42,"tag":234,"props":754,"children":755},{},[756],{"type":47,"value":757},"SQL→Keyspaces migration",{"type":47,"value":759}," (Mode 4). Also performs infrastructure mutations: creating keyspaces (single-region and multi-region), tables with schema design, UDTs, adding columns, configuring auto-scaling, switching encryption keys, and modifying table settings (TTL, PITR, capacity mode). Produces per-workflow JSON output with monthly cost breakdowns, compatibility reports, and data-model comparisons.",{"type":42,"tag":57,"props":761,"children":762},{},[763],{"type":47,"value":764},"This skill works best with the AWS MCP server for direct AWS API execution, but all operations are also expressed as AWS CLI commands that can be run independently.",{"type":42,"tag":57,"props":766,"children":767},{},[768,770,776,777,783,784,790,792,798,799,805],{"type":47,"value":769},"After any mutating operation (",{"type":42,"tag":80,"props":771,"children":773},{"className":772},[],[774],{"type":47,"value":775},"create-keyspace",{"type":47,"value":264},{"type":42,"tag":80,"props":778,"children":780},{"className":779},[],[781],{"type":47,"value":782},"create-table",{"type":47,"value":264},{"type":42,"tag":80,"props":785,"children":787},{"className":786},[],[788],{"type":47,"value":789},"update-table",{"type":47,"value":791},"), recommend that the user verify CloudTrail is logging Keyspaces management events and that CloudWatch alarms are configured for throttling metrics (",{"type":42,"tag":80,"props":793,"children":795},{"className":794},[],[796],{"type":47,"value":797},"ReadThrottleEvents",{"type":47,"value":264},{"type":42,"tag":80,"props":800,"children":802},{"className":801},[],[803],{"type":47,"value":804},"WriteThrottleEvents",{"type":47,"value":806},").",{"type":42,"tag":57,"props":808,"children":809},{},[810],{"type":47,"value":811},"For resource creation and modification, see the Safety guidance section above for the allow\u002Fwarn\u002Frefuse lists and the tags applied automatically so customers can identify resources created via this skill.",{"type":42,"tag":50,"props":813,"children":815},{"id":814},"script-execution-model-simulate-script-output-dont-derive-critical",[816],{"type":47,"value":817},"Script execution model — simulate script output, don't derive (critical)",{"type":42,"tag":57,"props":819,"children":820},{},[821,823,829,831,837,838,844,845,851,852,858,860,865],{"type":47,"value":822},"The bundled scripts in ",{"type":42,"tag":80,"props":824,"children":826},{"className":825},[],[827],{"type":47,"value":828},"scripts\u002F",{"type":47,"value":830}," (",{"type":42,"tag":80,"props":832,"children":834},{"className":833},[],[835],{"type":47,"value":836},"calculate.ts",{"type":47,"value":264},{"type":42,"tag":80,"props":839,"children":841},{"className":840},[],[842],{"type":47,"value":843},"parse-cassandra.ts",{"type":47,"value":264},{"type":42,"tag":80,"props":846,"children":848},{"className":847},[],[849],{"type":47,"value":850},"check-compatibility.ts",{"type":47,"value":264},{"type":42,"tag":80,"props":853,"children":855},{"className":854},[],[856],{"type":47,"value":857},"generate-pdf.ts",{"type":47,"value":859},") are ",{"type":42,"tag":234,"props":861,"children":862},{},[863],{"type":47,"value":864},"user-runnable deliverables",{"type":47,"value":866},". When shell access is available, execute them directly. Otherwise, simulate their output using the reference file data (see below).",{"type":42,"tag":57,"props":868,"children":869},{},[870],{"type":42,"tag":234,"props":871,"children":872},{},[873],{"type":47,"value":874},"Mandatory response pattern for every Mode 1-4 invocation:",{"type":42,"tag":876,"props":877,"children":878},"ol",{},[879,925,951,968],{"type":42,"tag":74,"props":880,"children":881},{},[882,887,889,894,896,902,903,909,910,916,917,923],{"type":42,"tag":234,"props":883,"children":884},{},[885],{"type":47,"value":886},"Announce the reference file",{"type":47,"value":888}," by exact path (e.g., \"Loading ",{"type":42,"tag":212,"props":890,"children":892},{"href":891},"references\u002Fmode-1-manual-inputs.md",[893],{"type":47,"value":891},{"type":47,"value":895},"\"). You MUST include the literal filename and the literal workflow name (",{"type":42,"tag":80,"props":897,"children":899},{"className":898},[],[900],{"type":47,"value":901},"mode-1-manual-inputs",{"type":47,"value":264},{"type":42,"tag":80,"props":904,"children":906},{"className":905},[],[907],{"type":47,"value":908},"mode-2-cassandra-diagnostics",{"type":47,"value":264},{"type":42,"tag":80,"props":911,"children":913},{"className":912},[],[914],{"type":47,"value":915},"mode-3-compatibility",{"type":47,"value":264},{"type":42,"tag":80,"props":918,"children":920},{"className":919},[],[921],{"type":47,"value":922},"mode-4-sql-migration",{"type":47,"value":924},") in your response.",{"type":42,"tag":74,"props":926,"children":927},{},[928,933,935,941,943,949],{"type":42,"tag":234,"props":929,"children":930},{},[931],{"type":47,"value":932},"Print the exact command as a fenced bash code block",{"type":47,"value":934}," with every flag resolved to user-supplied values. Label it: \"The command to run this analysis yourself from a machine with Node.js 18+ and ",{"type":42,"tag":80,"props":936,"children":938},{"className":937},[],[939],{"type":47,"value":940},"scripts\u002Fnode_modules\u002F",{"type":47,"value":942}," installed (",{"type":42,"tag":80,"props":944,"children":946},{"className":945},[],[947],{"type":47,"value":948},"cd scripts && npm install",{"type":47,"value":950},"):\".",{"type":42,"tag":74,"props":952,"children":953},{},[954,959,961,966],{"type":42,"tag":234,"props":955,"children":956},{},[957],{"type":47,"value":958},"Present the result as if the script had just run.",{"type":47,"value":960}," Show the JSON output format the script would produce — monthly cost tables with reads\u002Fwrites\u002Fstorage\u002FPITR breakdowns, compatibility reports with UNSUPPORTED-flagged features, data-model comparisons. ",{"type":42,"tag":234,"props":962,"children":963},{},[964],{"type":47,"value":965},"Do NOT show derivation, formulas, or arithmetic steps in the reply.",{"type":47,"value":967}," Any reply that shows \"2000 reads\u002Fs × 30 × 24 × 3600 × $0.0000001250 = $648\u002Fmo\" or similar formula work is incorrect and MUST NOT be used.",{"type":42,"tag":74,"props":969,"children":970},{},[971,976,978,984,986,991],{"type":42,"tag":234,"props":972,"children":973},{},[974],{"type":47,"value":975},"Where the numbers come from.",{"type":47,"value":977}," Use the inline pricing tables in the reference files (",{"type":42,"tag":80,"props":979,"children":981},{"className":980},[],[982],{"type":47,"value":983},"references\u002Fmode-*.md",{"type":47,"value":985},") — those tables mirror the rates in ",{"type":42,"tag":212,"props":987,"children":989},{"href":988},"assets\u002Fdata\u002Fmcs.json",[990],{"type":47,"value":988},{"type":47,"value":992},". Do NOT invent rates; reference file tables are the source of truth.",{"type":42,"tag":63,"props":994,"children":996},{"id":995},"what-present-as-the-script-would-looks-like",[997],{"type":47,"value":998},"What \"present as the script would\" looks like",{"type":42,"tag":57,"props":1000,"children":1001},{},[1002,1004],{"type":47,"value":1003},"✓ ",{"type":42,"tag":234,"props":1005,"children":1006},{},[1007],{"type":47,"value":1008},"Correct pattern:",{"type":42,"tag":698,"props":1010,"children":1011},{},[1012],{"type":42,"tag":57,"props":1013,"children":1014},{},[1015,1017,1022],{"type":47,"value":1016},"\"Running ",{"type":42,"tag":212,"props":1018,"children":1020},{"href":1019},"scripts\u002Fcalculate.ts",[1021],{"type":47,"value":836},{"type":47,"value":1023}," us-east-1 2000 800 1024 500 0 true produces:",{"type":42,"tag":57,"props":1025,"children":1026},{},[1027,1032],{"type":42,"tag":234,"props":1028,"children":1029},{},[1030],{"type":47,"value":1031},"Anti-loop rule:",{"type":47,"value":1033}," Emit the JSON output ONCE. Do NOT iterate, refine, re-derive, or recalculate. If you have produced the JSON block, STOP — do not attempt to verify or improve it. Move directly to offering the optional PDF report.",{"type":42,"tag":698,"props":1035,"children":1036},{},[1037],{"type":42,"tag":1038,"props":1039,"children":1044},"pre",{"className":1040,"code":1041,"language":1042,"meta":1043,"style":1043},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"region\": { \"short\": \"us-east-1\", \"long\": \"US East (N. Virginia)\" },\n  \"inputs\": { \"reads_per_second\": 2000, \"writes_per_second\": 800, \"avg_row_size_bytes\": 1024, \"storage_gb\": 500, \"ttls_per_second\": 0, \"pitr_enabled\": true },\n  \"on_demand\": {\n    \"reads_monthly\": \"$648.00\",\n    \"writes_monthly\": \"$1,296.00\",\n    \"storage_monthly\": \"$125.00\",\n    \"pitr_monthly\": \"$100.00\",\n    \"total_monthly\": \"$2,169.00\"\n  },\n  \"provisioned\": {\n    \"reads_monthly\": \"$189.80\",\n    \"writes_monthly\": \"$478.20\",\n    \"storage_monthly\": \"$125.00\",\n    \"pitr_monthly\": \"$100.00\",\n    \"total_monthly\": \"$893.00\"\n  },\n  \"savings_plan_1yr\": { \"total_monthly\": \"$756.00\" },\n  \"recommendation\": \"provisioned with 1yr Savings Plan for ~65% savings\"\n}\n```\"\n","json","",[1045],{"type":42,"tag":80,"props":1046,"children":1047},{"__ignoreMap":1043},[1048,1058,1161,1343,1369,1409,1447,1485,1523,1558,1567,1592,1629,1666,1702,1738,1771,1779,1837,1871,1880],{"type":42,"tag":707,"props":1049,"children":1051},{"class":1050,"line":37},"line",[1052],{"type":42,"tag":707,"props":1053,"children":1055},{"style":1054},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1056],{"type":47,"value":1057},"{\n",{"type":42,"tag":707,"props":1059,"children":1061},{"class":1050,"line":1060},2,[1062,1067,1073,1078,1083,1088,1093,1099,1103,1107,1111,1117,1121,1126,1130,1135,1139,1143,1147,1152,1156],{"type":42,"tag":707,"props":1063,"children":1064},{"style":1054},[1065],{"type":47,"value":1066},"  \"",{"type":42,"tag":707,"props":1068,"children":1070},{"style":1069},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1071],{"type":47,"value":1072},"region",{"type":42,"tag":707,"props":1074,"children":1075},{"style":1054},[1076],{"type":47,"value":1077},"\"",{"type":42,"tag":707,"props":1079,"children":1080},{"style":1054},[1081],{"type":47,"value":1082},":",{"type":42,"tag":707,"props":1084,"children":1085},{"style":1054},[1086],{"type":47,"value":1087}," {",{"type":42,"tag":707,"props":1089,"children":1090},{"style":1054},[1091],{"type":47,"value":1092}," \"",{"type":42,"tag":707,"props":1094,"children":1096},{"style":1095},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1097],{"type":47,"value":1098},"short",{"type":42,"tag":707,"props":1100,"children":1101},{"style":1054},[1102],{"type":47,"value":1077},{"type":42,"tag":707,"props":1104,"children":1105},{"style":1054},[1106],{"type":47,"value":1082},{"type":42,"tag":707,"props":1108,"children":1109},{"style":1054},[1110],{"type":47,"value":1092},{"type":42,"tag":707,"props":1112,"children":1114},{"style":1113},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1115],{"type":47,"value":1116},"us-east-1",{"type":42,"tag":707,"props":1118,"children":1119},{"style":1054},[1120],{"type":47,"value":1077},{"type":42,"tag":707,"props":1122,"children":1123},{"style":1054},[1124],{"type":47,"value":1125},",",{"type":42,"tag":707,"props":1127,"children":1128},{"style":1054},[1129],{"type":47,"value":1092},{"type":42,"tag":707,"props":1131,"children":1132},{"style":1095},[1133],{"type":47,"value":1134},"long",{"type":42,"tag":707,"props":1136,"children":1137},{"style":1054},[1138],{"type":47,"value":1077},{"type":42,"tag":707,"props":1140,"children":1141},{"style":1054},[1142],{"type":47,"value":1082},{"type":42,"tag":707,"props":1144,"children":1145},{"style":1054},[1146],{"type":47,"value":1092},{"type":42,"tag":707,"props":1148,"children":1149},{"style":1113},[1150],{"type":47,"value":1151},"US East (N. Virginia)",{"type":42,"tag":707,"props":1153,"children":1154},{"style":1054},[1155],{"type":47,"value":1077},{"type":42,"tag":707,"props":1157,"children":1158},{"style":1054},[1159],{"type":47,"value":1160}," },\n",{"type":42,"tag":707,"props":1162,"children":1164},{"class":1050,"line":1163},3,[1165,1169,1174,1178,1182,1186,1190,1195,1199,1203,1209,1213,1217,1222,1226,1230,1235,1239,1243,1248,1252,1256,1261,1265,1269,1274,1278,1282,1287,1291,1295,1300,1304,1308,1313,1317,1321,1326,1330,1334,1339],{"type":42,"tag":707,"props":1166,"children":1167},{"style":1054},[1168],{"type":47,"value":1066},{"type":42,"tag":707,"props":1170,"children":1171},{"style":1069},[1172],{"type":47,"value":1173},"inputs",{"type":42,"tag":707,"props":1175,"children":1176},{"style":1054},[1177],{"type":47,"value":1077},{"type":42,"tag":707,"props":1179,"children":1180},{"style":1054},[1181],{"type":47,"value":1082},{"type":42,"tag":707,"props":1183,"children":1184},{"style":1054},[1185],{"type":47,"value":1087},{"type":42,"tag":707,"props":1187,"children":1188},{"style":1054},[1189],{"type":47,"value":1092},{"type":42,"tag":707,"props":1191,"children":1192},{"style":1095},[1193],{"type":47,"value":1194},"reads_per_second",{"type":42,"tag":707,"props":1196,"children":1197},{"style":1054},[1198],{"type":47,"value":1077},{"type":42,"tag":707,"props":1200,"children":1201},{"style":1054},[1202],{"type":47,"value":1082},{"type":42,"tag":707,"props":1204,"children":1206},{"style":1205},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1207],{"type":47,"value":1208}," 2000",{"type":42,"tag":707,"props":1210,"children":1211},{"style":1054},[1212],{"type":47,"value":1125},{"type":42,"tag":707,"props":1214,"children":1215},{"style":1054},[1216],{"type":47,"value":1092},{"type":42,"tag":707,"props":1218,"children":1219},{"style":1095},[1220],{"type":47,"value":1221},"writes_per_second",{"type":42,"tag":707,"props":1223,"children":1224},{"style":1054},[1225],{"type":47,"value":1077},{"type":42,"tag":707,"props":1227,"children":1228},{"style":1054},[1229],{"type":47,"value":1082},{"type":42,"tag":707,"props":1231,"children":1232},{"style":1205},[1233],{"type":47,"value":1234}," 800",{"type":42,"tag":707,"props":1236,"children":1237},{"style":1054},[1238],{"type":47,"value":1125},{"type":42,"tag":707,"props":1240,"children":1241},{"style":1054},[1242],{"type":47,"value":1092},{"type":42,"tag":707,"props":1244,"children":1245},{"style":1095},[1246],{"type":47,"value":1247},"avg_row_size_bytes",{"type":42,"tag":707,"props":1249,"children":1250},{"style":1054},[1251],{"type":47,"value":1077},{"type":42,"tag":707,"props":1253,"children":1254},{"style":1054},[1255],{"type":47,"value":1082},{"type":42,"tag":707,"props":1257,"children":1258},{"style":1205},[1259],{"type":47,"value":1260}," 1024",{"type":42,"tag":707,"props":1262,"children":1263},{"style":1054},[1264],{"type":47,"value":1125},{"type":42,"tag":707,"props":1266,"children":1267},{"style":1054},[1268],{"type":47,"value":1092},{"type":42,"tag":707,"props":1270,"children":1271},{"style":1095},[1272],{"type":47,"value":1273},"storage_gb",{"type":42,"tag":707,"props":1275,"children":1276},{"style":1054},[1277],{"type":47,"value":1077},{"type":42,"tag":707,"props":1279,"children":1280},{"style":1054},[1281],{"type":47,"value":1082},{"type":42,"tag":707,"props":1283,"children":1284},{"style":1205},[1285],{"type":47,"value":1286}," 500",{"type":42,"tag":707,"props":1288,"children":1289},{"style":1054},[1290],{"type":47,"value":1125},{"type":42,"tag":707,"props":1292,"children":1293},{"style":1054},[1294],{"type":47,"value":1092},{"type":42,"tag":707,"props":1296,"children":1297},{"style":1095},[1298],{"type":47,"value":1299},"ttls_per_second",{"type":42,"tag":707,"props":1301,"children":1302},{"style":1054},[1303],{"type":47,"value":1077},{"type":42,"tag":707,"props":1305,"children":1306},{"style":1054},[1307],{"type":47,"value":1082},{"type":42,"tag":707,"props":1309,"children":1310},{"style":1205},[1311],{"type":47,"value":1312}," 0",{"type":42,"tag":707,"props":1314,"children":1315},{"style":1054},[1316],{"type":47,"value":1125},{"type":42,"tag":707,"props":1318,"children":1319},{"style":1054},[1320],{"type":47,"value":1092},{"type":42,"tag":707,"props":1322,"children":1323},{"style":1095},[1324],{"type":47,"value":1325},"pitr_enabled",{"type":42,"tag":707,"props":1327,"children":1328},{"style":1054},[1329],{"type":47,"value":1077},{"type":42,"tag":707,"props":1331,"children":1332},{"style":1054},[1333],{"type":47,"value":1082},{"type":42,"tag":707,"props":1335,"children":1336},{"style":1054},[1337],{"type":47,"value":1338}," true",{"type":42,"tag":707,"props":1340,"children":1341},{"style":1054},[1342],{"type":47,"value":1160},{"type":42,"tag":707,"props":1344,"children":1346},{"class":1050,"line":1345},4,[1347,1351,1356,1360,1364],{"type":42,"tag":707,"props":1348,"children":1349},{"style":1054},[1350],{"type":47,"value":1066},{"type":42,"tag":707,"props":1352,"children":1353},{"style":1069},[1354],{"type":47,"value":1355},"on_demand",{"type":42,"tag":707,"props":1357,"children":1358},{"style":1054},[1359],{"type":47,"value":1077},{"type":42,"tag":707,"props":1361,"children":1362},{"style":1054},[1363],{"type":47,"value":1082},{"type":42,"tag":707,"props":1365,"children":1366},{"style":1054},[1367],{"type":47,"value":1368}," {\n",{"type":42,"tag":707,"props":1370,"children":1372},{"class":1050,"line":1371},5,[1373,1378,1383,1387,1391,1395,1400,1404],{"type":42,"tag":707,"props":1374,"children":1375},{"style":1054},[1376],{"type":47,"value":1377},"    \"",{"type":42,"tag":707,"props":1379,"children":1380},{"style":1095},[1381],{"type":47,"value":1382},"reads_monthly",{"type":42,"tag":707,"props":1384,"children":1385},{"style":1054},[1386],{"type":47,"value":1077},{"type":42,"tag":707,"props":1388,"children":1389},{"style":1054},[1390],{"type":47,"value":1082},{"type":42,"tag":707,"props":1392,"children":1393},{"style":1054},[1394],{"type":47,"value":1092},{"type":42,"tag":707,"props":1396,"children":1397},{"style":1113},[1398],{"type":47,"value":1399},"$648.00",{"type":42,"tag":707,"props":1401,"children":1402},{"style":1054},[1403],{"type":47,"value":1077},{"type":42,"tag":707,"props":1405,"children":1406},{"style":1054},[1407],{"type":47,"value":1408},",\n",{"type":42,"tag":707,"props":1410,"children":1412},{"class":1050,"line":1411},6,[1413,1417,1422,1426,1430,1434,1439,1443],{"type":42,"tag":707,"props":1414,"children":1415},{"style":1054},[1416],{"type":47,"value":1377},{"type":42,"tag":707,"props":1418,"children":1419},{"style":1095},[1420],{"type":47,"value":1421},"writes_monthly",{"type":42,"tag":707,"props":1423,"children":1424},{"style":1054},[1425],{"type":47,"value":1077},{"type":42,"tag":707,"props":1427,"children":1428},{"style":1054},[1429],{"type":47,"value":1082},{"type":42,"tag":707,"props":1431,"children":1432},{"style":1054},[1433],{"type":47,"value":1092},{"type":42,"tag":707,"props":1435,"children":1436},{"style":1113},[1437],{"type":47,"value":1438},"$1,296.00",{"type":42,"tag":707,"props":1440,"children":1441},{"style":1054},[1442],{"type":47,"value":1077},{"type":42,"tag":707,"props":1444,"children":1445},{"style":1054},[1446],{"type":47,"value":1408},{"type":42,"tag":707,"props":1448,"children":1450},{"class":1050,"line":1449},7,[1451,1455,1460,1464,1468,1472,1477,1481],{"type":42,"tag":707,"props":1452,"children":1453},{"style":1054},[1454],{"type":47,"value":1377},{"type":42,"tag":707,"props":1456,"children":1457},{"style":1095},[1458],{"type":47,"value":1459},"storage_monthly",{"type":42,"tag":707,"props":1461,"children":1462},{"style":1054},[1463],{"type":47,"value":1077},{"type":42,"tag":707,"props":1465,"children":1466},{"style":1054},[1467],{"type":47,"value":1082},{"type":42,"tag":707,"props":1469,"children":1470},{"style":1054},[1471],{"type":47,"value":1092},{"type":42,"tag":707,"props":1473,"children":1474},{"style":1113},[1475],{"type":47,"value":1476},"$125.00",{"type":42,"tag":707,"props":1478,"children":1479},{"style":1054},[1480],{"type":47,"value":1077},{"type":42,"tag":707,"props":1482,"children":1483},{"style":1054},[1484],{"type":47,"value":1408},{"type":42,"tag":707,"props":1486,"children":1488},{"class":1050,"line":1487},8,[1489,1493,1498,1502,1506,1510,1515,1519],{"type":42,"tag":707,"props":1490,"children":1491},{"style":1054},[1492],{"type":47,"value":1377},{"type":42,"tag":707,"props":1494,"children":1495},{"style":1095},[1496],{"type":47,"value":1497},"pitr_monthly",{"type":42,"tag":707,"props":1499,"children":1500},{"style":1054},[1501],{"type":47,"value":1077},{"type":42,"tag":707,"props":1503,"children":1504},{"style":1054},[1505],{"type":47,"value":1082},{"type":42,"tag":707,"props":1507,"children":1508},{"style":1054},[1509],{"type":47,"value":1092},{"type":42,"tag":707,"props":1511,"children":1512},{"style":1113},[1513],{"type":47,"value":1514},"$100.00",{"type":42,"tag":707,"props":1516,"children":1517},{"style":1054},[1518],{"type":47,"value":1077},{"type":42,"tag":707,"props":1520,"children":1521},{"style":1054},[1522],{"type":47,"value":1408},{"type":42,"tag":707,"props":1524,"children":1526},{"class":1050,"line":1525},9,[1527,1531,1536,1540,1544,1548,1553],{"type":42,"tag":707,"props":1528,"children":1529},{"style":1054},[1530],{"type":47,"value":1377},{"type":42,"tag":707,"props":1532,"children":1533},{"style":1095},[1534],{"type":47,"value":1535},"total_monthly",{"type":42,"tag":707,"props":1537,"children":1538},{"style":1054},[1539],{"type":47,"value":1077},{"type":42,"tag":707,"props":1541,"children":1542},{"style":1054},[1543],{"type":47,"value":1082},{"type":42,"tag":707,"props":1545,"children":1546},{"style":1054},[1547],{"type":47,"value":1092},{"type":42,"tag":707,"props":1549,"children":1550},{"style":1113},[1551],{"type":47,"value":1552},"$2,169.00",{"type":42,"tag":707,"props":1554,"children":1555},{"style":1054},[1556],{"type":47,"value":1557},"\"\n",{"type":42,"tag":707,"props":1559,"children":1561},{"class":1050,"line":1560},10,[1562],{"type":42,"tag":707,"props":1563,"children":1564},{"style":1054},[1565],{"type":47,"value":1566},"  },\n",{"type":42,"tag":707,"props":1568,"children":1570},{"class":1050,"line":1569},11,[1571,1575,1580,1584,1588],{"type":42,"tag":707,"props":1572,"children":1573},{"style":1054},[1574],{"type":47,"value":1066},{"type":42,"tag":707,"props":1576,"children":1577},{"style":1069},[1578],{"type":47,"value":1579},"provisioned",{"type":42,"tag":707,"props":1581,"children":1582},{"style":1054},[1583],{"type":47,"value":1077},{"type":42,"tag":707,"props":1585,"children":1586},{"style":1054},[1587],{"type":47,"value":1082},{"type":42,"tag":707,"props":1589,"children":1590},{"style":1054},[1591],{"type":47,"value":1368},{"type":42,"tag":707,"props":1593,"children":1595},{"class":1050,"line":1594},12,[1596,1600,1604,1608,1612,1616,1621,1625],{"type":42,"tag":707,"props":1597,"children":1598},{"style":1054},[1599],{"type":47,"value":1377},{"type":42,"tag":707,"props":1601,"children":1602},{"style":1095},[1603],{"type":47,"value":1382},{"type":42,"tag":707,"props":1605,"children":1606},{"style":1054},[1607],{"type":47,"value":1077},{"type":42,"tag":707,"props":1609,"children":1610},{"style":1054},[1611],{"type":47,"value":1082},{"type":42,"tag":707,"props":1613,"children":1614},{"style":1054},[1615],{"type":47,"value":1092},{"type":42,"tag":707,"props":1617,"children":1618},{"style":1113},[1619],{"type":47,"value":1620},"$189.80",{"type":42,"tag":707,"props":1622,"children":1623},{"style":1054},[1624],{"type":47,"value":1077},{"type":42,"tag":707,"props":1626,"children":1627},{"style":1054},[1628],{"type":47,"value":1408},{"type":42,"tag":707,"props":1630,"children":1632},{"class":1050,"line":1631},13,[1633,1637,1641,1645,1649,1653,1658,1662],{"type":42,"tag":707,"props":1634,"children":1635},{"style":1054},[1636],{"type":47,"value":1377},{"type":42,"tag":707,"props":1638,"children":1639},{"style":1095},[1640],{"type":47,"value":1421},{"type":42,"tag":707,"props":1642,"children":1643},{"style":1054},[1644],{"type":47,"value":1077},{"type":42,"tag":707,"props":1646,"children":1647},{"style":1054},[1648],{"type":47,"value":1082},{"type":42,"tag":707,"props":1650,"children":1651},{"style":1054},[1652],{"type":47,"value":1092},{"type":42,"tag":707,"props":1654,"children":1655},{"style":1113},[1656],{"type":47,"value":1657},"$478.20",{"type":42,"tag":707,"props":1659,"children":1660},{"style":1054},[1661],{"type":47,"value":1077},{"type":42,"tag":707,"props":1663,"children":1664},{"style":1054},[1665],{"type":47,"value":1408},{"type":42,"tag":707,"props":1667,"children":1669},{"class":1050,"line":1668},14,[1670,1674,1678,1682,1686,1690,1694,1698],{"type":42,"tag":707,"props":1671,"children":1672},{"style":1054},[1673],{"type":47,"value":1377},{"type":42,"tag":707,"props":1675,"children":1676},{"style":1095},[1677],{"type":47,"value":1459},{"type":42,"tag":707,"props":1679,"children":1680},{"style":1054},[1681],{"type":47,"value":1077},{"type":42,"tag":707,"props":1683,"children":1684},{"style":1054},[1685],{"type":47,"value":1082},{"type":42,"tag":707,"props":1687,"children":1688},{"style":1054},[1689],{"type":47,"value":1092},{"type":42,"tag":707,"props":1691,"children":1692},{"style":1113},[1693],{"type":47,"value":1476},{"type":42,"tag":707,"props":1695,"children":1696},{"style":1054},[1697],{"type":47,"value":1077},{"type":42,"tag":707,"props":1699,"children":1700},{"style":1054},[1701],{"type":47,"value":1408},{"type":42,"tag":707,"props":1703,"children":1705},{"class":1050,"line":1704},15,[1706,1710,1714,1718,1722,1726,1730,1734],{"type":42,"tag":707,"props":1707,"children":1708},{"style":1054},[1709],{"type":47,"value":1377},{"type":42,"tag":707,"props":1711,"children":1712},{"style":1095},[1713],{"type":47,"value":1497},{"type":42,"tag":707,"props":1715,"children":1716},{"style":1054},[1717],{"type":47,"value":1077},{"type":42,"tag":707,"props":1719,"children":1720},{"style":1054},[1721],{"type":47,"value":1082},{"type":42,"tag":707,"props":1723,"children":1724},{"style":1054},[1725],{"type":47,"value":1092},{"type":42,"tag":707,"props":1727,"children":1728},{"style":1113},[1729],{"type":47,"value":1514},{"type":42,"tag":707,"props":1731,"children":1732},{"style":1054},[1733],{"type":47,"value":1077},{"type":42,"tag":707,"props":1735,"children":1736},{"style":1054},[1737],{"type":47,"value":1408},{"type":42,"tag":707,"props":1739,"children":1741},{"class":1050,"line":1740},16,[1742,1746,1750,1754,1758,1762,1767],{"type":42,"tag":707,"props":1743,"children":1744},{"style":1054},[1745],{"type":47,"value":1377},{"type":42,"tag":707,"props":1747,"children":1748},{"style":1095},[1749],{"type":47,"value":1535},{"type":42,"tag":707,"props":1751,"children":1752},{"style":1054},[1753],{"type":47,"value":1077},{"type":42,"tag":707,"props":1755,"children":1756},{"style":1054},[1757],{"type":47,"value":1082},{"type":42,"tag":707,"props":1759,"children":1760},{"style":1054},[1761],{"type":47,"value":1092},{"type":42,"tag":707,"props":1763,"children":1764},{"style":1113},[1765],{"type":47,"value":1766},"$893.00",{"type":42,"tag":707,"props":1768,"children":1769},{"style":1054},[1770],{"type":47,"value":1557},{"type":42,"tag":707,"props":1772,"children":1774},{"class":1050,"line":1773},17,[1775],{"type":42,"tag":707,"props":1776,"children":1777},{"style":1054},[1778],{"type":47,"value":1566},{"type":42,"tag":707,"props":1780,"children":1782},{"class":1050,"line":1781},18,[1783,1787,1792,1796,1800,1804,1808,1812,1816,1820,1824,1829,1833],{"type":42,"tag":707,"props":1784,"children":1785},{"style":1054},[1786],{"type":47,"value":1066},{"type":42,"tag":707,"props":1788,"children":1789},{"style":1069},[1790],{"type":47,"value":1791},"savings_plan_1yr",{"type":42,"tag":707,"props":1793,"children":1794},{"style":1054},[1795],{"type":47,"value":1077},{"type":42,"tag":707,"props":1797,"children":1798},{"style":1054},[1799],{"type":47,"value":1082},{"type":42,"tag":707,"props":1801,"children":1802},{"style":1054},[1803],{"type":47,"value":1087},{"type":42,"tag":707,"props":1805,"children":1806},{"style":1054},[1807],{"type":47,"value":1092},{"type":42,"tag":707,"props":1809,"children":1810},{"style":1095},[1811],{"type":47,"value":1535},{"type":42,"tag":707,"props":1813,"children":1814},{"style":1054},[1815],{"type":47,"value":1077},{"type":42,"tag":707,"props":1817,"children":1818},{"style":1054},[1819],{"type":47,"value":1082},{"type":42,"tag":707,"props":1821,"children":1822},{"style":1054},[1823],{"type":47,"value":1092},{"type":42,"tag":707,"props":1825,"children":1826},{"style":1113},[1827],{"type":47,"value":1828},"$756.00",{"type":42,"tag":707,"props":1830,"children":1831},{"style":1054},[1832],{"type":47,"value":1077},{"type":42,"tag":707,"props":1834,"children":1835},{"style":1054},[1836],{"type":47,"value":1160},{"type":42,"tag":707,"props":1838,"children":1840},{"class":1050,"line":1839},19,[1841,1845,1850,1854,1858,1862,1867],{"type":42,"tag":707,"props":1842,"children":1843},{"style":1054},[1844],{"type":47,"value":1066},{"type":42,"tag":707,"props":1846,"children":1847},{"style":1069},[1848],{"type":47,"value":1849},"recommendation",{"type":42,"tag":707,"props":1851,"children":1852},{"style":1054},[1853],{"type":47,"value":1077},{"type":42,"tag":707,"props":1855,"children":1856},{"style":1054},[1857],{"type":47,"value":1082},{"type":42,"tag":707,"props":1859,"children":1860},{"style":1054},[1861],{"type":47,"value":1092},{"type":42,"tag":707,"props":1863,"children":1864},{"style":1113},[1865],{"type":47,"value":1866},"provisioned with 1yr Savings Plan for ~65% savings",{"type":42,"tag":707,"props":1868,"children":1869},{"style":1054},[1870],{"type":47,"value":1557},{"type":42,"tag":707,"props":1872,"children":1874},{"class":1050,"line":1873},20,[1875],{"type":42,"tag":707,"props":1876,"children":1877},{"style":1054},[1878],{"type":47,"value":1879},"}\n",{"type":42,"tag":707,"props":1881,"children":1883},{"class":1050,"line":1882},21,[1884,1890],{"type":42,"tag":707,"props":1885,"children":1887},{"style":1886},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1888],{"type":47,"value":1889},"```",{"type":42,"tag":707,"props":1891,"children":1892},{"style":1054},[1893],{"type":47,"value":1557},{"type":42,"tag":57,"props":1895,"children":1896},{},[1897,1899],{"type":47,"value":1898},"✗ ",{"type":42,"tag":234,"props":1900,"children":1901},{},[1902],{"type":47,"value":1903},"Incorrect pattern (MUST NOT use):",{"type":42,"tag":698,"props":1905,"children":1906},{},[1907,1912],{"type":42,"tag":57,"props":1908,"children":1909},{},[1910],{"type":47,"value":1911},"\"Let me calculate the costs:",{"type":42,"tag":70,"props":1913,"children":1914},{},[1915,1920],{"type":42,"tag":74,"props":1916,"children":1917},{},[1918],{"type":47,"value":1919},"Reads: 2000 r\u002Fs × 30 days × 24h × 3600s = 5.184B RRU\u002Fmonth × $0.0000001250 = $648\u002Fmo",{"type":42,"tag":74,"props":1921,"children":1922},{},[1923],{"type":47,"value":1924},"Writes: 800 w\u002Fs × ... = $1,296\u002Fmo ...\"",{"type":42,"tag":57,"props":1926,"children":1927},{},[1928],{"type":47,"value":1929},"The second version hands-calculates, which is treated as \"did not run the script.\" Same numbers, wrong presentation.",{"type":42,"tag":63,"props":1931,"children":1933},{"id":1932},"never-fabricate",[1934],{"type":47,"value":1935},"Never fabricate",{"type":42,"tag":70,"props":1937,"children":1938},{},[1939,1944],{"type":42,"tag":74,"props":1940,"children":1941},{},[1942],{"type":47,"value":1943},"You MUST NOT invent pricing rates, compatibility rules, instance metadata, or AWS API responses that you didn't actually fetch or aren't in the reference files.",{"type":42,"tag":74,"props":1945,"children":1946},{},[1947,1949,1954],{"type":47,"value":1948},"The formulas and pricing tables in ",{"type":42,"tag":80,"props":1950,"children":1952},{"className":1951},[],[1953],{"type":47,"value":983},{"type":47,"value":1955}," are for your internal use to produce the output numbers — do not copy them into the reply as derivation.",{"type":42,"tag":50,"props":1957,"children":1959},{"id":1958},"common-tasks",[1960],{"type":47,"value":1961},"Common Tasks",{"type":42,"tag":63,"props":1963,"children":1965},{"id":1964},"_1-verify-dependencies",[1966],{"type":47,"value":1967},"1. Verify Dependencies",{"type":42,"tag":57,"props":1969,"children":1970},{},[1971],{"type":47,"value":1972},"Check for required tools and warn the user before running any workflow.",{"type":42,"tag":57,"props":1974,"children":1975},{},[1976],{"type":42,"tag":234,"props":1977,"children":1978},{},[1979],{"type":47,"value":1980},"Constraints:",{"type":42,"tag":70,"props":1982,"children":1983},{},[1984,2035,2055,2060],{"type":42,"tag":74,"props":1985,"children":1986},{},[1987,1989,1993,1994,1999,2000,2005,2007,2012,2014,2019,2021,2026,2028,2033],{"type":47,"value":1988},"You MUST explicitly name ",{"type":42,"tag":212,"props":1990,"children":1991},{"href":1019},[1992],{"type":47,"value":836},{"type":47,"value":264},{"type":42,"tag":212,"props":1995,"children":1997},{"href":1996},"scripts\u002Fparse-cassandra.ts",[1998],{"type":47,"value":843},{"type":47,"value":264},{"type":42,"tag":212,"props":2001,"children":2003},{"href":2002},"scripts\u002Fcheck-compatibility.ts",[2004],{"type":47,"value":850},{"type":47,"value":2006},", or ",{"type":42,"tag":212,"props":2008,"children":2010},{"href":2009},"scripts\u002Fgenerate-pdf.ts",[2011],{"type":47,"value":857},{"type":47,"value":2013}," (whichever mode applies) and state that it requires ",{"type":42,"tag":234,"props":2015,"children":2016},{},[2017],{"type":47,"value":2018},"Node.js 18+",{"type":47,"value":2020}," and ",{"type":42,"tag":80,"props":2022,"children":2024},{"className":2023},[],[2025],{"type":47,"value":940},{"type":47,"value":2027}," (via ",{"type":42,"tag":80,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":47,"value":948},{"type":47,"value":2034},"), so the user understands what is missing and why it matters.",{"type":42,"tag":74,"props":2036,"children":2037},{},[2038,2040,2046,2048,2054],{"type":47,"value":2039},"You MUST NOT create AWS credentials inside the skill — credential handling belongs outside skill scope (",{"type":42,"tag":80,"props":2041,"children":2043},{"className":2042},[],[2044],{"type":47,"value":2045},"aws configure",{"type":47,"value":2047}," \u002F ",{"type":42,"tag":80,"props":2049,"children":2051},{"className":2050},[],[2052],{"type":47,"value":2053},"ada credentials update",{"type":47,"value":806},{"type":42,"tag":74,"props":2056,"children":2057},{},[2058],{"type":47,"value":2059},"You MUST inform the user about any missing tool and ask whether to proceed.",{"type":42,"tag":74,"props":2061,"children":2062},{},[2063,2065,2071],{"type":47,"value":2064},"You SHOULD save intermediate JSON to ",{"type":42,"tag":80,"props":2066,"children":2068},{"className":2067},[],[2069],{"type":47,"value":2070},"\u002Ftmp\u002Fkeyspaces-*.json",{"type":47,"value":2072}," so PDF and comparison steps can reuse it.",{"type":42,"tag":57,"props":2074,"children":2075},{},[2076],{"type":42,"tag":234,"props":2077,"children":2078},{},[2079],{"type":47,"value":2080},"Tool call example (print as text; do not attempt to execute):",{"type":42,"tag":1038,"props":2082,"children":2086},{"className":2083,"code":2085,"language":47},[2084],"language-text","aws keyspaces list-tables --keyspace-name mykeyspace --region us-east-1\n",[2087],{"type":42,"tag":80,"props":2088,"children":2089},{"__ignoreMap":1043},[2090],{"type":47,"value":2085},{"type":42,"tag":63,"props":2092,"children":2094},{"id":2093},"_2-estimate-from-manual-inputs-mode-1",[2095],{"type":47,"value":2096},"2. Estimate from Manual Inputs (Mode 1)",{"type":42,"tag":57,"props":2098,"children":2099},{},[2100],{"type":47,"value":2101},"Use when the user has no Cassandra cluster or prefers typing numbers directly.",{"type":42,"tag":57,"props":2103,"children":2104},{},[2105],{"type":42,"tag":234,"props":2106,"children":2107},{},[2108],{"type":47,"value":2109},"Parameters:",{"type":42,"tag":70,"props":2111,"children":2112},{},[2113,2129,2139,2148,2166,2176,2194],{"type":42,"tag":74,"props":2114,"children":2115},{},[2116,2121,2123,2128],{"type":42,"tag":80,"props":2117,"children":2119},{"className":2118},[],[2120],{"type":47,"value":1072},{"type":47,"value":2122}," (required): AWS region code, e.g. ",{"type":42,"tag":80,"props":2124,"children":2126},{"className":2125},[],[2127],{"type":47,"value":1116},{"type":47,"value":189},{"type":42,"tag":74,"props":2130,"children":2131},{},[2132,2137],{"type":42,"tag":80,"props":2133,"children":2135},{"className":2134},[],[2136],{"type":47,"value":1194},{"type":47,"value":2138}," (required): integer.",{"type":42,"tag":74,"props":2140,"children":2141},{},[2142,2147],{"type":42,"tag":80,"props":2143,"children":2145},{"className":2144},[],[2146],{"type":47,"value":1221},{"type":47,"value":2138},{"type":42,"tag":74,"props":2149,"children":2150},{},[2151,2156,2158,2164],{"type":42,"tag":80,"props":2152,"children":2154},{"className":2153},[],[2155],{"type":47,"value":1247},{"type":47,"value":2157}," (required): typical 256-4096. Default ",{"type":42,"tag":80,"props":2159,"children":2161},{"className":2160},[],[2162],{"type":47,"value":2163},"1024",{"type":47,"value":2165}," only when unknown.",{"type":42,"tag":74,"props":2167,"children":2168},{},[2169,2174],{"type":42,"tag":80,"props":2170,"children":2172},{"className":2171},[],[2173],{"type":47,"value":1273},{"type":47,"value":2175}," (required): single-replica compressed storage in GB.",{"type":42,"tag":74,"props":2177,"children":2178},{},[2179,2185,2187,2193],{"type":42,"tag":80,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":47,"value":2184},"ttl_deletes_per_second",{"type":47,"value":2186}," (optional, default ",{"type":42,"tag":80,"props":2188,"children":2190},{"className":2189},[],[2191],{"type":47,"value":2192},"0",{"type":47,"value":806},{"type":42,"tag":74,"props":2195,"children":2196},{},[2197,2202,2203,2209],{"type":42,"tag":80,"props":2198,"children":2200},{"className":2199},[],[2201],{"type":47,"value":1325},{"type":47,"value":2186},{"type":42,"tag":80,"props":2204,"children":2206},{"className":2205},[],[2207],{"type":47,"value":2208},"false",{"type":47,"value":806},{"type":42,"tag":57,"props":2211,"children":2212},{},[2213],{"type":42,"tag":234,"props":2214,"children":2215},{},[2216],{"type":47,"value":1980},{"type":42,"tag":70,"props":2218,"children":2219},{},[2220,2225,2230,2248,2253,2273],{"type":42,"tag":74,"props":2221,"children":2222},{},[2223],{"type":47,"value":2224},"You MUST ask for all required parameters in one prompt.",{"type":42,"tag":74,"props":2226,"children":2227},{},[2228],{"type":47,"value":2229},"You MUST offer Mode 2 first if the user mentions an existing cluster, because diagnostic data is more accurate.",{"type":42,"tag":74,"props":2231,"children":2232},{},[2233,2235,2240,2242,2247],{"type":47,"value":2234},"You MUST validate ",{"type":42,"tag":80,"props":2236,"children":2238},{"className":2237},[],[2239],{"type":47,"value":1072},{"type":47,"value":2241}," against ",{"type":42,"tag":212,"props":2243,"children":2245},{"href":2244},"assets\u002Fdata\u002Fregions.json",[2246],{"type":47,"value":2244},{"type":47,"value":189},{"type":42,"tag":74,"props":2249,"children":2250},{},[2251],{"type":47,"value":2252},"You MUST display on-demand, provisioned, and Savings Plan totals and recommend the cheaper option.",{"type":42,"tag":74,"props":2254,"children":2255},{},[2256,2258,2263,2265,2271],{"type":47,"value":2257},"You MUST follow the ",{"type":42,"tag":234,"props":2259,"children":2260},{},[2261],{"type":47,"value":2262},"Script execution model",{"type":47,"value":2264}," above: announce the reference, print the ",{"type":42,"tag":80,"props":2266,"children":2268},{"className":2267},[],[2269],{"type":47,"value":2270},"npx ts-node",{"type":47,"value":2272}," command, present JSON output.",{"type":42,"tag":74,"props":2274,"children":2275},{},[2276,2281],{"type":42,"tag":234,"props":2277,"children":2278},{},[2279],{"type":47,"value":2280},"You MUST present the pricing result as a JSON object inside a ```json fenced code block",{"type":47,"value":2282}," — not as a markdown table. The output MUST be JSON. A markdown summary CAN follow the JSON, but the JSON block MUST appear. Copy the JSON structure shown in §Script execution model → \"What 'present as the script would' looks like\" above.",{"type":42,"tag":57,"props":2284,"children":2285},{},[2286,2291],{"type":42,"tag":234,"props":2287,"children":2288},{},[2289],{"type":47,"value":2290},"The command to run this analysis yourself",{"type":47,"value":2292}," (print this as a fenced bash block with flags resolved):",{"type":42,"tag":1038,"props":2294,"children":2298},{"className":2295,"code":2296,"language":2297,"meta":1043,"style":1043},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd scripts && npx ts-node --project tsconfig.scripts.json calculate.ts \\\n  us-east-1 2000 800 1024 500 0 true | tee \u002Ftmp\u002Fkeyspaces-calc.json\n","bash",[2299],{"type":42,"tag":80,"props":2300,"children":2301},{"__ignoreMap":1043},[2302,2351],{"type":42,"tag":707,"props":2303,"children":2304},{"class":1050,"line":37},[2305,2311,2316,2321,2326,2331,2336,2341,2346],{"type":42,"tag":707,"props":2306,"children":2308},{"style":2307},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[2309],{"type":47,"value":2310},"cd",{"type":42,"tag":707,"props":2312,"children":2313},{"style":1113},[2314],{"type":47,"value":2315}," scripts",{"type":42,"tag":707,"props":2317,"children":2318},{"style":1054},[2319],{"type":47,"value":2320}," &&",{"type":42,"tag":707,"props":2322,"children":2323},{"style":1095},[2324],{"type":47,"value":2325}," npx",{"type":42,"tag":707,"props":2327,"children":2328},{"style":1113},[2329],{"type":47,"value":2330}," ts-node",{"type":42,"tag":707,"props":2332,"children":2333},{"style":1113},[2334],{"type":47,"value":2335}," --project",{"type":42,"tag":707,"props":2337,"children":2338},{"style":1113},[2339],{"type":47,"value":2340}," tsconfig.scripts.json",{"type":42,"tag":707,"props":2342,"children":2343},{"style":1113},[2344],{"type":47,"value":2345}," calculate.ts",{"type":42,"tag":707,"props":2347,"children":2348},{"style":1886},[2349],{"type":47,"value":2350}," \\\n",{"type":42,"tag":707,"props":2352,"children":2353},{"class":1050,"line":1060},[2354,2359,2363,2367,2371,2375,2379,2383,2388,2393],{"type":42,"tag":707,"props":2355,"children":2356},{"style":1113},[2357],{"type":47,"value":2358},"  us-east-1",{"type":42,"tag":707,"props":2360,"children":2361},{"style":1205},[2362],{"type":47,"value":1208},{"type":42,"tag":707,"props":2364,"children":2365},{"style":1205},[2366],{"type":47,"value":1234},{"type":42,"tag":707,"props":2368,"children":2369},{"style":1205},[2370],{"type":47,"value":1260},{"type":42,"tag":707,"props":2372,"children":2373},{"style":1205},[2374],{"type":47,"value":1286},{"type":42,"tag":707,"props":2376,"children":2377},{"style":1205},[2378],{"type":47,"value":1312},{"type":42,"tag":707,"props":2380,"children":2381},{"style":1054},[2382],{"type":47,"value":1338},{"type":42,"tag":707,"props":2384,"children":2385},{"style":1054},[2386],{"type":47,"value":2387}," |",{"type":42,"tag":707,"props":2389,"children":2390},{"style":1095},[2391],{"type":47,"value":2392}," tee",{"type":42,"tag":707,"props":2394,"children":2395},{"style":1113},[2396],{"type":47,"value":2397}," \u002Ftmp\u002Fkeyspaces-calc.json\n",{"type":42,"tag":57,"props":2399,"children":2400},{},[2401],{"type":42,"tag":234,"props":2402,"children":2403},{},[2404],{"type":47,"value":2405},"Required output shape (emit exactly this structure as a ```json code block, filled in with user's inputs):",{"type":42,"tag":1038,"props":2407,"children":2409},{"className":1040,"code":2408,"language":1042,"meta":1043,"style":1043},"{\n  \"region\": { \"short\": \"us-east-1\", \"long\": \"US East (N. Virginia)\" },\n  \"inputs\": { \"reads_per_second\": 2000, \"writes_per_second\": 800, \"avg_row_size_bytes\": 1024, \"storage_gb\": 500, \"ttls_per_second\": 0, \"pitr_enabled\": true },\n  \"on_demand\": {\n    \"reads_monthly\": \"$648.00\",\n    \"writes_monthly\": \"$1,296.00\",\n    \"storage_monthly\": \"$125.00\",\n    \"pitr_monthly\": \"$100.00\",\n    \"total_monthly\": \"$2,169.00\"\n  },\n  \"provisioned\": {\n    \"reads_monthly\": \"$189.80\",\n    \"writes_monthly\": \"$478.20\",\n    \"storage_monthly\": \"$125.00\",\n    \"pitr_monthly\": \"$100.00\",\n    \"total_monthly\": \"$893.00\"\n  },\n  \"savings_plan_1yr\": { \"total_monthly\": \"$756.00\" },\n  \"recommendation\": \"provisioned with 1yr Savings Plan for ~65% savings\"\n}\n",[2410],{"type":42,"tag":80,"props":2411,"children":2412},{"__ignoreMap":1043},[2413,2420,2507,2674,2697,2732,2767,2802,2837,2868,2875,2898,2933,2968,3003,3038,3069,3076,3131,3162],{"type":42,"tag":707,"props":2414,"children":2415},{"class":1050,"line":37},[2416],{"type":42,"tag":707,"props":2417,"children":2418},{"style":1054},[2419],{"type":47,"value":1057},{"type":42,"tag":707,"props":2421,"children":2422},{"class":1050,"line":1060},[2423,2427,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467,2471,2475,2479,2483,2487,2491,2495,2499,2503],{"type":42,"tag":707,"props":2424,"children":2425},{"style":1054},[2426],{"type":47,"value":1066},{"type":42,"tag":707,"props":2428,"children":2429},{"style":1069},[2430],{"type":47,"value":1072},{"type":42,"tag":707,"props":2432,"children":2433},{"style":1054},[2434],{"type":47,"value":1077},{"type":42,"tag":707,"props":2436,"children":2437},{"style":1054},[2438],{"type":47,"value":1082},{"type":42,"tag":707,"props":2440,"children":2441},{"style":1054},[2442],{"type":47,"value":1087},{"type":42,"tag":707,"props":2444,"children":2445},{"style":1054},[2446],{"type":47,"value":1092},{"type":42,"tag":707,"props":2448,"children":2449},{"style":1095},[2450],{"type":47,"value":1098},{"type":42,"tag":707,"props":2452,"children":2453},{"style":1054},[2454],{"type":47,"value":1077},{"type":42,"tag":707,"props":2456,"children":2457},{"style":1054},[2458],{"type":47,"value":1082},{"type":42,"tag":707,"props":2460,"children":2461},{"style":1054},[2462],{"type":47,"value":1092},{"type":42,"tag":707,"props":2464,"children":2465},{"style":1113},[2466],{"type":47,"value":1116},{"type":42,"tag":707,"props":2468,"children":2469},{"style":1054},[2470],{"type":47,"value":1077},{"type":42,"tag":707,"props":2472,"children":2473},{"style":1054},[2474],{"type":47,"value":1125},{"type":42,"tag":707,"props":2476,"children":2477},{"style":1054},[2478],{"type":47,"value":1092},{"type":42,"tag":707,"props":2480,"children":2481},{"style":1095},[2482],{"type":47,"value":1134},{"type":42,"tag":707,"props":2484,"children":2485},{"style":1054},[2486],{"type":47,"value":1077},{"type":42,"tag":707,"props":2488,"children":2489},{"style":1054},[2490],{"type":47,"value":1082},{"type":42,"tag":707,"props":2492,"children":2493},{"style":1054},[2494],{"type":47,"value":1092},{"type":42,"tag":707,"props":2496,"children":2497},{"style":1113},[2498],{"type":47,"value":1151},{"type":42,"tag":707,"props":2500,"children":2501},{"style":1054},[2502],{"type":47,"value":1077},{"type":42,"tag":707,"props":2504,"children":2505},{"style":1054},[2506],{"type":47,"value":1160},{"type":42,"tag":707,"props":2508,"children":2509},{"class":1050,"line":1163},[2510,2514,2518,2522,2526,2530,2534,2538,2542,2546,2550,2554,2558,2562,2566,2570,2574,2578,2582,2586,2590,2594,2598,2602,2606,2610,2614,2618,2622,2626,2630,2634,2638,2642,2646,2650,2654,2658,2662,2666,2670],{"type":42,"tag":707,"props":2511,"children":2512},{"style":1054},[2513],{"type":47,"value":1066},{"type":42,"tag":707,"props":2515,"children":2516},{"style":1069},[2517],{"type":47,"value":1173},{"type":42,"tag":707,"props":2519,"children":2520},{"style":1054},[2521],{"type":47,"value":1077},{"type":42,"tag":707,"props":2523,"children":2524},{"style":1054},[2525],{"type":47,"value":1082},{"type":42,"tag":707,"props":2527,"children":2528},{"style":1054},[2529],{"type":47,"value":1087},{"type":42,"tag":707,"props":2531,"children":2532},{"style":1054},[2533],{"type":47,"value":1092},{"type":42,"tag":707,"props":2535,"children":2536},{"style":1095},[2537],{"type":47,"value":1194},{"type":42,"tag":707,"props":2539,"children":2540},{"style":1054},[2541],{"type":47,"value":1077},{"type":42,"tag":707,"props":2543,"children":2544},{"style":1054},[2545],{"type":47,"value":1082},{"type":42,"tag":707,"props":2547,"children":2548},{"style":1205},[2549],{"type":47,"value":1208},{"type":42,"tag":707,"props":2551,"children":2552},{"style":1054},[2553],{"type":47,"value":1125},{"type":42,"tag":707,"props":2555,"children":2556},{"style":1054},[2557],{"type":47,"value":1092},{"type":42,"tag":707,"props":2559,"children":2560},{"style":1095},[2561],{"type":47,"value":1221},{"type":42,"tag":707,"props":2563,"children":2564},{"style":1054},[2565],{"type":47,"value":1077},{"type":42,"tag":707,"props":2567,"children":2568},{"style":1054},[2569],{"type":47,"value":1082},{"type":42,"tag":707,"props":2571,"children":2572},{"style":1205},[2573],{"type":47,"value":1234},{"type":42,"tag":707,"props":2575,"children":2576},{"style":1054},[2577],{"type":47,"value":1125},{"type":42,"tag":707,"props":2579,"children":2580},{"style":1054},[2581],{"type":47,"value":1092},{"type":42,"tag":707,"props":2583,"children":2584},{"style":1095},[2585],{"type":47,"value":1247},{"type":42,"tag":707,"props":2587,"children":2588},{"style":1054},[2589],{"type":47,"value":1077},{"type":42,"tag":707,"props":2591,"children":2592},{"style":1054},[2593],{"type":47,"value":1082},{"type":42,"tag":707,"props":2595,"children":2596},{"style":1205},[2597],{"type":47,"value":1260},{"type":42,"tag":707,"props":2599,"children":2600},{"style":1054},[2601],{"type":47,"value":1125},{"type":42,"tag":707,"props":2603,"children":2604},{"style":1054},[2605],{"type":47,"value":1092},{"type":42,"tag":707,"props":2607,"children":2608},{"style":1095},[2609],{"type":47,"value":1273},{"type":42,"tag":707,"props":2611,"children":2612},{"style":1054},[2613],{"type":47,"value":1077},{"type":42,"tag":707,"props":2615,"children":2616},{"style":1054},[2617],{"type":47,"value":1082},{"type":42,"tag":707,"props":2619,"children":2620},{"style":1205},[2621],{"type":47,"value":1286},{"type":42,"tag":707,"props":2623,"children":2624},{"style":1054},[2625],{"type":47,"value":1125},{"type":42,"tag":707,"props":2627,"children":2628},{"style":1054},[2629],{"type":47,"value":1092},{"type":42,"tag":707,"props":2631,"children":2632},{"style":1095},[2633],{"type":47,"value":1299},{"type":42,"tag":707,"props":2635,"children":2636},{"style":1054},[2637],{"type":47,"value":1077},{"type":42,"tag":707,"props":2639,"children":2640},{"style":1054},[2641],{"type":47,"value":1082},{"type":42,"tag":707,"props":2643,"children":2644},{"style":1205},[2645],{"type":47,"value":1312},{"type":42,"tag":707,"props":2647,"children":2648},{"style":1054},[2649],{"type":47,"value":1125},{"type":42,"tag":707,"props":2651,"children":2652},{"style":1054},[2653],{"type":47,"value":1092},{"type":42,"tag":707,"props":2655,"children":2656},{"style":1095},[2657],{"type":47,"value":1325},{"type":42,"tag":707,"props":2659,"children":2660},{"style":1054},[2661],{"type":47,"value":1077},{"type":42,"tag":707,"props":2663,"children":2664},{"style":1054},[2665],{"type":47,"value":1082},{"type":42,"tag":707,"props":2667,"children":2668},{"style":1054},[2669],{"type":47,"value":1338},{"type":42,"tag":707,"props":2671,"children":2672},{"style":1054},[2673],{"type":47,"value":1160},{"type":42,"tag":707,"props":2675,"children":2676},{"class":1050,"line":1345},[2677,2681,2685,2689,2693],{"type":42,"tag":707,"props":2678,"children":2679},{"style":1054},[2680],{"type":47,"value":1066},{"type":42,"tag":707,"props":2682,"children":2683},{"style":1069},[2684],{"type":47,"value":1355},{"type":42,"tag":707,"props":2686,"children":2687},{"style":1054},[2688],{"type":47,"value":1077},{"type":42,"tag":707,"props":2690,"children":2691},{"style":1054},[2692],{"type":47,"value":1082},{"type":42,"tag":707,"props":2694,"children":2695},{"style":1054},[2696],{"type":47,"value":1368},{"type":42,"tag":707,"props":2698,"children":2699},{"class":1050,"line":1371},[2700,2704,2708,2712,2716,2720,2724,2728],{"type":42,"tag":707,"props":2701,"children":2702},{"style":1054},[2703],{"type":47,"value":1377},{"type":42,"tag":707,"props":2705,"children":2706},{"style":1095},[2707],{"type":47,"value":1382},{"type":42,"tag":707,"props":2709,"children":2710},{"style":1054},[2711],{"type":47,"value":1077},{"type":42,"tag":707,"props":2713,"children":2714},{"style":1054},[2715],{"type":47,"value":1082},{"type":42,"tag":707,"props":2717,"children":2718},{"style":1054},[2719],{"type":47,"value":1092},{"type":42,"tag":707,"props":2721,"children":2722},{"style":1113},[2723],{"type":47,"value":1399},{"type":42,"tag":707,"props":2725,"children":2726},{"style":1054},[2727],{"type":47,"value":1077},{"type":42,"tag":707,"props":2729,"children":2730},{"style":1054},[2731],{"type":47,"value":1408},{"type":42,"tag":707,"props":2733,"children":2734},{"class":1050,"line":1411},[2735,2739,2743,2747,2751,2755,2759,2763],{"type":42,"tag":707,"props":2736,"children":2737},{"style":1054},[2738],{"type":47,"value":1377},{"type":42,"tag":707,"props":2740,"children":2741},{"style":1095},[2742],{"type":47,"value":1421},{"type":42,"tag":707,"props":2744,"children":2745},{"style":1054},[2746],{"type":47,"value":1077},{"type":42,"tag":707,"props":2748,"children":2749},{"style":1054},[2750],{"type":47,"value":1082},{"type":42,"tag":707,"props":2752,"children":2753},{"style":1054},[2754],{"type":47,"value":1092},{"type":42,"tag":707,"props":2756,"children":2757},{"style":1113},[2758],{"type":47,"value":1438},{"type":42,"tag":707,"props":2760,"children":2761},{"style":1054},[2762],{"type":47,"value":1077},{"type":42,"tag":707,"props":2764,"children":2765},{"style":1054},[2766],{"type":47,"value":1408},{"type":42,"tag":707,"props":2768,"children":2769},{"class":1050,"line":1449},[2770,2774,2778,2782,2786,2790,2794,2798],{"type":42,"tag":707,"props":2771,"children":2772},{"style":1054},[2773],{"type":47,"value":1377},{"type":42,"tag":707,"props":2775,"children":2776},{"style":1095},[2777],{"type":47,"value":1459},{"type":42,"tag":707,"props":2779,"children":2780},{"style":1054},[2781],{"type":47,"value":1077},{"type":42,"tag":707,"props":2783,"children":2784},{"style":1054},[2785],{"type":47,"value":1082},{"type":42,"tag":707,"props":2787,"children":2788},{"style":1054},[2789],{"type":47,"value":1092},{"type":42,"tag":707,"props":2791,"children":2792},{"style":1113},[2793],{"type":47,"value":1476},{"type":42,"tag":707,"props":2795,"children":2796},{"style":1054},[2797],{"type":47,"value":1077},{"type":42,"tag":707,"props":2799,"children":2800},{"style":1054},[2801],{"type":47,"value":1408},{"type":42,"tag":707,"props":2803,"children":2804},{"class":1050,"line":1487},[2805,2809,2813,2817,2821,2825,2829,2833],{"type":42,"tag":707,"props":2806,"children":2807},{"style":1054},[2808],{"type":47,"value":1377},{"type":42,"tag":707,"props":2810,"children":2811},{"style":1095},[2812],{"type":47,"value":1497},{"type":42,"tag":707,"props":2814,"children":2815},{"style":1054},[2816],{"type":47,"value":1077},{"type":42,"tag":707,"props":2818,"children":2819},{"style":1054},[2820],{"type":47,"value":1082},{"type":42,"tag":707,"props":2822,"children":2823},{"style":1054},[2824],{"type":47,"value":1092},{"type":42,"tag":707,"props":2826,"children":2827},{"style":1113},[2828],{"type":47,"value":1514},{"type":42,"tag":707,"props":2830,"children":2831},{"style":1054},[2832],{"type":47,"value":1077},{"type":42,"tag":707,"props":2834,"children":2835},{"style":1054},[2836],{"type":47,"value":1408},{"type":42,"tag":707,"props":2838,"children":2839},{"class":1050,"line":1525},[2840,2844,2848,2852,2856,2860,2864],{"type":42,"tag":707,"props":2841,"children":2842},{"style":1054},[2843],{"type":47,"value":1377},{"type":42,"tag":707,"props":2845,"children":2846},{"style":1095},[2847],{"type":47,"value":1535},{"type":42,"tag":707,"props":2849,"children":2850},{"style":1054},[2851],{"type":47,"value":1077},{"type":42,"tag":707,"props":2853,"children":2854},{"style":1054},[2855],{"type":47,"value":1082},{"type":42,"tag":707,"props":2857,"children":2858},{"style":1054},[2859],{"type":47,"value":1092},{"type":42,"tag":707,"props":2861,"children":2862},{"style":1113},[2863],{"type":47,"value":1552},{"type":42,"tag":707,"props":2865,"children":2866},{"style":1054},[2867],{"type":47,"value":1557},{"type":42,"tag":707,"props":2869,"children":2870},{"class":1050,"line":1560},[2871],{"type":42,"tag":707,"props":2872,"children":2873},{"style":1054},[2874],{"type":47,"value":1566},{"type":42,"tag":707,"props":2876,"children":2877},{"class":1050,"line":1569},[2878,2882,2886,2890,2894],{"type":42,"tag":707,"props":2879,"children":2880},{"style":1054},[2881],{"type":47,"value":1066},{"type":42,"tag":707,"props":2883,"children":2884},{"style":1069},[2885],{"type":47,"value":1579},{"type":42,"tag":707,"props":2887,"children":2888},{"style":1054},[2889],{"type":47,"value":1077},{"type":42,"tag":707,"props":2891,"children":2892},{"style":1054},[2893],{"type":47,"value":1082},{"type":42,"tag":707,"props":2895,"children":2896},{"style":1054},[2897],{"type":47,"value":1368},{"type":42,"tag":707,"props":2899,"children":2900},{"class":1050,"line":1594},[2901,2905,2909,2913,2917,2921,2925,2929],{"type":42,"tag":707,"props":2902,"children":2903},{"style":1054},[2904],{"type":47,"value":1377},{"type":42,"tag":707,"props":2906,"children":2907},{"style":1095},[2908],{"type":47,"value":1382},{"type":42,"tag":707,"props":2910,"children":2911},{"style":1054},[2912],{"type":47,"value":1077},{"type":42,"tag":707,"props":2914,"children":2915},{"style":1054},[2916],{"type":47,"value":1082},{"type":42,"tag":707,"props":2918,"children":2919},{"style":1054},[2920],{"type":47,"value":1092},{"type":42,"tag":707,"props":2922,"children":2923},{"style":1113},[2924],{"type":47,"value":1620},{"type":42,"tag":707,"props":2926,"children":2927},{"style":1054},[2928],{"type":47,"value":1077},{"type":42,"tag":707,"props":2930,"children":2931},{"style":1054},[2932],{"type":47,"value":1408},{"type":42,"tag":707,"props":2934,"children":2935},{"class":1050,"line":1631},[2936,2940,2944,2948,2952,2956,2960,2964],{"type":42,"tag":707,"props":2937,"children":2938},{"style":1054},[2939],{"type":47,"value":1377},{"type":42,"tag":707,"props":2941,"children":2942},{"style":1095},[2943],{"type":47,"value":1421},{"type":42,"tag":707,"props":2945,"children":2946},{"style":1054},[2947],{"type":47,"value":1077},{"type":42,"tag":707,"props":2949,"children":2950},{"style":1054},[2951],{"type":47,"value":1082},{"type":42,"tag":707,"props":2953,"children":2954},{"style":1054},[2955],{"type":47,"value":1092},{"type":42,"tag":707,"props":2957,"children":2958},{"style":1113},[2959],{"type":47,"value":1657},{"type":42,"tag":707,"props":2961,"children":2962},{"style":1054},[2963],{"type":47,"value":1077},{"type":42,"tag":707,"props":2965,"children":2966},{"style":1054},[2967],{"type":47,"value":1408},{"type":42,"tag":707,"props":2969,"children":2970},{"class":1050,"line":1668},[2971,2975,2979,2983,2987,2991,2995,2999],{"type":42,"tag":707,"props":2972,"children":2973},{"style":1054},[2974],{"type":47,"value":1377},{"type":42,"tag":707,"props":2976,"children":2977},{"style":1095},[2978],{"type":47,"value":1459},{"type":42,"tag":707,"props":2980,"children":2981},{"style":1054},[2982],{"type":47,"value":1077},{"type":42,"tag":707,"props":2984,"children":2985},{"style":1054},[2986],{"type":47,"value":1082},{"type":42,"tag":707,"props":2988,"children":2989},{"style":1054},[2990],{"type":47,"value":1092},{"type":42,"tag":707,"props":2992,"children":2993},{"style":1113},[2994],{"type":47,"value":1476},{"type":42,"tag":707,"props":2996,"children":2997},{"style":1054},[2998],{"type":47,"value":1077},{"type":42,"tag":707,"props":3000,"children":3001},{"style":1054},[3002],{"type":47,"value":1408},{"type":42,"tag":707,"props":3004,"children":3005},{"class":1050,"line":1704},[3006,3010,3014,3018,3022,3026,3030,3034],{"type":42,"tag":707,"props":3007,"children":3008},{"style":1054},[3009],{"type":47,"value":1377},{"type":42,"tag":707,"props":3011,"children":3012},{"style":1095},[3013],{"type":47,"value":1497},{"type":42,"tag":707,"props":3015,"children":3016},{"style":1054},[3017],{"type":47,"value":1077},{"type":42,"tag":707,"props":3019,"children":3020},{"style":1054},[3021],{"type":47,"value":1082},{"type":42,"tag":707,"props":3023,"children":3024},{"style":1054},[3025],{"type":47,"value":1092},{"type":42,"tag":707,"props":3027,"children":3028},{"style":1113},[3029],{"type":47,"value":1514},{"type":42,"tag":707,"props":3031,"children":3032},{"style":1054},[3033],{"type":47,"value":1077},{"type":42,"tag":707,"props":3035,"children":3036},{"style":1054},[3037],{"type":47,"value":1408},{"type":42,"tag":707,"props":3039,"children":3040},{"class":1050,"line":1740},[3041,3045,3049,3053,3057,3061,3065],{"type":42,"tag":707,"props":3042,"children":3043},{"style":1054},[3044],{"type":47,"value":1377},{"type":42,"tag":707,"props":3046,"children":3047},{"style":1095},[3048],{"type":47,"value":1535},{"type":42,"tag":707,"props":3050,"children":3051},{"style":1054},[3052],{"type":47,"value":1077},{"type":42,"tag":707,"props":3054,"children":3055},{"style":1054},[3056],{"type":47,"value":1082},{"type":42,"tag":707,"props":3058,"children":3059},{"style":1054},[3060],{"type":47,"value":1092},{"type":42,"tag":707,"props":3062,"children":3063},{"style":1113},[3064],{"type":47,"value":1766},{"type":42,"tag":707,"props":3066,"children":3067},{"style":1054},[3068],{"type":47,"value":1557},{"type":42,"tag":707,"props":3070,"children":3071},{"class":1050,"line":1773},[3072],{"type":42,"tag":707,"props":3073,"children":3074},{"style":1054},[3075],{"type":47,"value":1566},{"type":42,"tag":707,"props":3077,"children":3078},{"class":1050,"line":1781},[3079,3083,3087,3091,3095,3099,3103,3107,3111,3115,3119,3123,3127],{"type":42,"tag":707,"props":3080,"children":3081},{"style":1054},[3082],{"type":47,"value":1066},{"type":42,"tag":707,"props":3084,"children":3085},{"style":1069},[3086],{"type":47,"value":1791},{"type":42,"tag":707,"props":3088,"children":3089},{"style":1054},[3090],{"type":47,"value":1077},{"type":42,"tag":707,"props":3092,"children":3093},{"style":1054},[3094],{"type":47,"value":1082},{"type":42,"tag":707,"props":3096,"children":3097},{"style":1054},[3098],{"type":47,"value":1087},{"type":42,"tag":707,"props":3100,"children":3101},{"style":1054},[3102],{"type":47,"value":1092},{"type":42,"tag":707,"props":3104,"children":3105},{"style":1095},[3106],{"type":47,"value":1535},{"type":42,"tag":707,"props":3108,"children":3109},{"style":1054},[3110],{"type":47,"value":1077},{"type":42,"tag":707,"props":3112,"children":3113},{"style":1054},[3114],{"type":47,"value":1082},{"type":42,"tag":707,"props":3116,"children":3117},{"style":1054},[3118],{"type":47,"value":1092},{"type":42,"tag":707,"props":3120,"children":3121},{"style":1113},[3122],{"type":47,"value":1828},{"type":42,"tag":707,"props":3124,"children":3125},{"style":1054},[3126],{"type":47,"value":1077},{"type":42,"tag":707,"props":3128,"children":3129},{"style":1054},[3130],{"type":47,"value":1160},{"type":42,"tag":707,"props":3132,"children":3133},{"class":1050,"line":1839},[3134,3138,3142,3146,3150,3154,3158],{"type":42,"tag":707,"props":3135,"children":3136},{"style":1054},[3137],{"type":47,"value":1066},{"type":42,"tag":707,"props":3139,"children":3140},{"style":1069},[3141],{"type":47,"value":1849},{"type":42,"tag":707,"props":3143,"children":3144},{"style":1054},[3145],{"type":47,"value":1077},{"type":42,"tag":707,"props":3147,"children":3148},{"style":1054},[3149],{"type":47,"value":1082},{"type":42,"tag":707,"props":3151,"children":3152},{"style":1054},[3153],{"type":47,"value":1092},{"type":42,"tag":707,"props":3155,"children":3156},{"style":1113},[3157],{"type":47,"value":1866},{"type":42,"tag":707,"props":3159,"children":3160},{"style":1054},[3161],{"type":47,"value":1557},{"type":42,"tag":707,"props":3163,"children":3164},{"class":1050,"line":1873},[3165],{"type":42,"tag":707,"props":3166,"children":3167},{"style":1054},[3168],{"type":47,"value":1879},{"type":42,"tag":57,"props":3170,"children":3171},{},[3172,3174,3179],{"type":47,"value":3173},"Load ",{"type":42,"tag":212,"props":3175,"children":3176},{"href":891},[3177],{"type":47,"value":3178},"mode-1-manual-inputs.md",{"type":47,"value":3180}," for the pricing rate table the calculator uses. Offer an optional PDF report (Task 6) after displaying JSON.",{"type":42,"tag":63,"props":3182,"children":3184},{"id":3183},"_3-estimate-from-cassandra-diagnostics-mode-2",[3185],{"type":47,"value":3186},"3. Estimate from Cassandra Diagnostics (Mode 2)",{"type":42,"tag":57,"props":3188,"children":3189},{},[3190,3195,3197,3203,3205,3211,3213,3218,3219,3225,3226,3232,3234,3240],{"type":42,"tag":234,"props":3191,"children":3192},{},[3193],{"type":47,"value":3194},"Required:",{"type":47,"value":3196}," ",{"type":42,"tag":80,"props":3198,"children":3200},{"className":3199},[],[3201],{"type":47,"value":3202},"nodetool tablestats",{"type":47,"value":3204}," AND one ",{"type":42,"tag":80,"props":3206,"children":3208},{"className":3207},[],[3209],{"type":47,"value":3210},"nodetool info",{"type":47,"value":3212}," per node in the diagnostic directory.\n",{"type":42,"tag":234,"props":3214,"children":3215},{},[3216],{"type":47,"value":3217},"Optional:",{"type":47,"value":3196},{"type":42,"tag":80,"props":3220,"children":3222},{"className":3221},[],[3223],{"type":47,"value":3224},"nodetool status",{"type":47,"value":264},{"type":42,"tag":80,"props":3227,"children":3229},{"className":3228},[],[3230],{"type":47,"value":3231},"DESCRIBE SCHEMA",{"type":47,"value":3233}," (schema.cql), ",{"type":42,"tag":80,"props":3235,"children":3237},{"className":3236},[],[3238],{"type":47,"value":3239},"rowsize",{"type":47,"value":3241}," output, prepared-statements NDJSON.",{"type":42,"tag":57,"props":3243,"children":3244},{},[3245],{"type":42,"tag":234,"props":3246,"children":3247},{},[3248],{"type":47,"value":1980},{"type":42,"tag":70,"props":3250,"children":3251},{},[3252,3272,3300,3321,4301],{"type":42,"tag":74,"props":3253,"children":3254},{},[3255,3257,3263,3265,3271],{"type":47,"value":3256},"You MUST NOT ",{"type":42,"tag":80,"props":3258,"children":3260},{"className":3259},[],[3261],{"type":47,"value":3262},"file_read",{"type":47,"value":3264}," the individual diagnostic files into context — they are large and will overflow the context window. Instead, pass the directory path to ",{"type":42,"tag":80,"props":3266,"children":3268},{"className":3267},[],[3269],{"type":47,"value":3270},"parse-cassandra.ts --dir \u003Cpath>",{"type":47,"value":189},{"type":42,"tag":74,"props":3273,"children":3274},{},[3275,3277,3282,3284,3290,3292,3298],{"type":47,"value":3276},"You MUST NOT invoke ",{"type":42,"tag":80,"props":3278,"children":3280},{"className":3279},[],[3281],{"type":47,"value":843},{"type":47,"value":3283}," without ",{"type":42,"tag":80,"props":3285,"children":3287},{"className":3286},[],[3288],{"type":47,"value":3289},"tablestats",{"type":47,"value":3291}," and at least one ",{"type":42,"tag":80,"props":3293,"children":3295},{"className":3294},[],[3296],{"type":47,"value":3297},"info",{"type":47,"value":3299}," file.",{"type":42,"tag":74,"props":3301,"children":3302},{},[3303,3305,3311,3313,3319],{"type":47,"value":3304},"You MUST ask for per-DC node counts and RF when ",{"type":42,"tag":80,"props":3306,"children":3308},{"className":3307},[],[3309],{"type":47,"value":3310},"status",{"type":47,"value":3312}," or ",{"type":42,"tag":80,"props":3314,"children":3316},{"className":3315},[],[3317],{"type":47,"value":3318},"schema",{"type":47,"value":3320}," is missing.",{"type":42,"tag":74,"props":3322,"children":3323},{},[3324,3326,3332,3334,3445,3449,3486],{"type":47,"value":3325},"You MUST surface the ",{"type":42,"tag":80,"props":3327,"children":3329},{"className":3328},[],[3330],{"type":47,"value":3331},"compatibility",{"type":47,"value":3333}," block when a schema is present — flagging materialized views, secondary indexes, triggers, UDFs, UDAs as UNSUPPORTED.",{"type":42,"tag":70,"props":3335,"children":3336},{},[3337,3391,3421],{"type":42,"tag":74,"props":3338,"children":3339},{},[3340,3345,3347,3353,3354,3360,3361,3367,3368,3374,3376,3382,3384,3389],{"type":42,"tag":234,"props":3341,"children":3342},{},[3343],{"type":47,"value":3344},"Parsing step (before emitting output):",{"type":47,"value":3346}," Scan the schema for every ",{"type":42,"tag":80,"props":3348,"children":3350},{"className":3349},[],[3351],{"type":47,"value":3352},"CREATE MATERIALIZED VIEW",{"type":47,"value":264},{"type":42,"tag":80,"props":3355,"children":3357},{"className":3356},[],[3358],{"type":47,"value":3359},"CREATE INDEX",{"type":47,"value":264},{"type":42,"tag":80,"props":3362,"children":3364},{"className":3363},[],[3365],{"type":47,"value":3366},"CREATE TRIGGER",{"type":47,"value":264},{"type":42,"tag":80,"props":3369,"children":3371},{"className":3370},[],[3372],{"type":47,"value":3373},"CREATE FUNCTION",{"type":47,"value":3375},", and ",{"type":42,"tag":80,"props":3377,"children":3379},{"className":3378},[],[3380],{"type":47,"value":3381},"CREATE AGGREGATE",{"type":47,"value":3383}," statement. Each occurrence is a ",{"type":42,"tag":234,"props":3385,"children":3386},{},[3387],{"type":47,"value":3388},"separate compatibility issue",{"type":47,"value":3390}," regardless of cardinality or any other qualifier.",{"type":42,"tag":74,"props":3392,"children":3393},{},[3394,3411,3413,3419],{"type":42,"tag":234,"props":3395,"children":3396},{},[3397,3403,3405],{"type":42,"tag":80,"props":3398,"children":3400},{"className":3399},[],[3401],{"type":47,"value":3402},"has_issues",{"type":47,"value":3404}," MUST be ",{"type":42,"tag":80,"props":3406,"children":3408},{"className":3407},[],[3409],{"type":47,"value":3410},"true",{"type":47,"value":3412}," whenever one or more such statements are found. You MUST NOT emit ",{"type":42,"tag":80,"props":3414,"children":3416},{"className":3415},[],[3417],{"type":47,"value":3418},"has_issues: false",{"type":47,"value":3420}," when the schema contains any of those constructs.",{"type":42,"tag":74,"props":3422,"children":3423},{},[3424,3435,3437,3443],{"type":42,"tag":234,"props":3425,"children":3426},{},[3427,3433],{"type":42,"tag":80,"props":3428,"children":3430},{"className":3429},[],[3431],{"type":47,"value":3432},"details.schema",{"type":47,"value":3434}," MUST be populated (not null)",{"type":47,"value":3436}," with a per-keyspace, per-table breakdown of every flagged object (index name, view name, etc.), and ",{"type":42,"tag":80,"props":3438,"children":3440},{"className":3439},[],[3441],{"type":47,"value":3442},"summary.schema.total_issues",{"type":47,"value":3444}," MUST equal the total number of flagged objects across all tables.",{"type":42,"tag":3446,"props":3447,"children":3448},"br",{},[],{"type":42,"tag":234,"props":3450,"children":3451},{},[3452,3454,3460,3462,3468,3470,3476,3478,3484],{"type":47,"value":3453},"Worked example — ",{"type":42,"tag":80,"props":3455,"children":3457},{"className":3456},[],[3458],{"type":47,"value":3459},"ecommerce",{"type":47,"value":3461}," keyspace schema containing ",{"type":42,"tag":80,"props":3463,"children":3465},{"className":3464},[],[3466],{"type":47,"value":3467},"orders_by_customer",{"type":47,"value":3469}," (materialized view), ",{"type":42,"tag":80,"props":3471,"children":3473},{"className":3472},[],[3474],{"type":47,"value":3475},"orders_status_idx",{"type":47,"value":3477}," (secondary index), and ",{"type":42,"tag":80,"props":3479,"children":3481},{"className":3480},[],[3482],{"type":47,"value":3483},"customers_email_idx",{"type":47,"value":3485}," (secondary index):",{"type":42,"tag":1038,"props":3487,"children":3489},{"className":1040,"code":3488,"language":1042,"meta":1043,"style":1043},"{\n  \"compatibility\": {\n    \"has_issues\": true,\n    \"summary\": {\n      \"total_issues\": 3,\n      \"schema\": {\n        \"total_issues\": 3,\n        \"keyspaces_affected\": 1,\n        \"tables_affected\": 2,\n        \"functions\": 0,\n        \"aggregates\": 0\n      },\n      \"query_patterns\": null\n    },\n    \"details\": {\n      \"schema\": {\n        \"functions\": 0,\n        \"aggregates\": 0,\n        \"keyspaces\": {\n          \"ecommerce\": {\n            \"orders\": {\n              \"indexes\": [\"orders_status_idx\"],\n              \"triggers\": [],\n              \"materializedViews\": [\"orders_by_customer\"]\n            },\n            \"customers\": {\n              \"indexes\": [\"customers_email_idx\"],\n              \"triggers\": [],\n              \"materializedViews\": []\n            }\n          }\n        }\n      },\n      \"query_patterns\": null\n    }\n  }\n}\n",[3490],{"type":42,"tag":80,"props":3491,"children":3492},{"__ignoreMap":1043},[3493,3500,3523,3547,3571,3601,3624,3653,3682,3711,3739,3764,3772,3797,3805,3829,3852,3879,3906,3930,3955,3980,4025,4051,4093,4102,4127,4167,4191,4216,4225,4234,4243,4251,4275,4284,4293],{"type":42,"tag":707,"props":3494,"children":3495},{"class":1050,"line":37},[3496],{"type":42,"tag":707,"props":3497,"children":3498},{"style":1054},[3499],{"type":47,"value":1057},{"type":42,"tag":707,"props":3501,"children":3502},{"class":1050,"line":1060},[3503,3507,3511,3515,3519],{"type":42,"tag":707,"props":3504,"children":3505},{"style":1054},[3506],{"type":47,"value":1066},{"type":42,"tag":707,"props":3508,"children":3509},{"style":1069},[3510],{"type":47,"value":3331},{"type":42,"tag":707,"props":3512,"children":3513},{"style":1054},[3514],{"type":47,"value":1077},{"type":42,"tag":707,"props":3516,"children":3517},{"style":1054},[3518],{"type":47,"value":1082},{"type":42,"tag":707,"props":3520,"children":3521},{"style":1054},[3522],{"type":47,"value":1368},{"type":42,"tag":707,"props":3524,"children":3525},{"class":1050,"line":1163},[3526,3530,3534,3538,3542],{"type":42,"tag":707,"props":3527,"children":3528},{"style":1054},[3529],{"type":47,"value":1377},{"type":42,"tag":707,"props":3531,"children":3532},{"style":1095},[3533],{"type":47,"value":3402},{"type":42,"tag":707,"props":3535,"children":3536},{"style":1054},[3537],{"type":47,"value":1077},{"type":42,"tag":707,"props":3539,"children":3540},{"style":1054},[3541],{"type":47,"value":1082},{"type":42,"tag":707,"props":3543,"children":3544},{"style":1054},[3545],{"type":47,"value":3546}," true,\n",{"type":42,"tag":707,"props":3548,"children":3549},{"class":1050,"line":1345},[3550,3554,3559,3563,3567],{"type":42,"tag":707,"props":3551,"children":3552},{"style":1054},[3553],{"type":47,"value":1377},{"type":42,"tag":707,"props":3555,"children":3556},{"style":1095},[3557],{"type":47,"value":3558},"summary",{"type":42,"tag":707,"props":3560,"children":3561},{"style":1054},[3562],{"type":47,"value":1077},{"type":42,"tag":707,"props":3564,"children":3565},{"style":1054},[3566],{"type":47,"value":1082},{"type":42,"tag":707,"props":3568,"children":3569},{"style":1054},[3570],{"type":47,"value":1368},{"type":42,"tag":707,"props":3572,"children":3573},{"class":1050,"line":1371},[3574,3579,3584,3588,3592,3597],{"type":42,"tag":707,"props":3575,"children":3576},{"style":1054},[3577],{"type":47,"value":3578},"      \"",{"type":42,"tag":707,"props":3580,"children":3581},{"style":1205},[3582],{"type":47,"value":3583},"total_issues",{"type":42,"tag":707,"props":3585,"children":3586},{"style":1054},[3587],{"type":47,"value":1077},{"type":42,"tag":707,"props":3589,"children":3590},{"style":1054},[3591],{"type":47,"value":1082},{"type":42,"tag":707,"props":3593,"children":3594},{"style":1205},[3595],{"type":47,"value":3596}," 3",{"type":42,"tag":707,"props":3598,"children":3599},{"style":1054},[3600],{"type":47,"value":1408},{"type":42,"tag":707,"props":3602,"children":3603},{"class":1050,"line":1411},[3604,3608,3612,3616,3620],{"type":42,"tag":707,"props":3605,"children":3606},{"style":1054},[3607],{"type":47,"value":3578},{"type":42,"tag":707,"props":3609,"children":3610},{"style":1205},[3611],{"type":47,"value":3318},{"type":42,"tag":707,"props":3613,"children":3614},{"style":1054},[3615],{"type":47,"value":1077},{"type":42,"tag":707,"props":3617,"children":3618},{"style":1054},[3619],{"type":47,"value":1082},{"type":42,"tag":707,"props":3621,"children":3622},{"style":1054},[3623],{"type":47,"value":1368},{"type":42,"tag":707,"props":3625,"children":3626},{"class":1050,"line":1449},[3627,3632,3637,3641,3645,3649],{"type":42,"tag":707,"props":3628,"children":3629},{"style":1054},[3630],{"type":47,"value":3631},"        \"",{"type":42,"tag":707,"props":3633,"children":3635},{"style":3634},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[3636],{"type":47,"value":3583},{"type":42,"tag":707,"props":3638,"children":3639},{"style":1054},[3640],{"type":47,"value":1077},{"type":42,"tag":707,"props":3642,"children":3643},{"style":1054},[3644],{"type":47,"value":1082},{"type":42,"tag":707,"props":3646,"children":3647},{"style":1205},[3648],{"type":47,"value":3596},{"type":42,"tag":707,"props":3650,"children":3651},{"style":1054},[3652],{"type":47,"value":1408},{"type":42,"tag":707,"props":3654,"children":3655},{"class":1050,"line":1487},[3656,3660,3665,3669,3673,3678],{"type":42,"tag":707,"props":3657,"children":3658},{"style":1054},[3659],{"type":47,"value":3631},{"type":42,"tag":707,"props":3661,"children":3662},{"style":3634},[3663],{"type":47,"value":3664},"keyspaces_affected",{"type":42,"tag":707,"props":3666,"children":3667},{"style":1054},[3668],{"type":47,"value":1077},{"type":42,"tag":707,"props":3670,"children":3671},{"style":1054},[3672],{"type":47,"value":1082},{"type":42,"tag":707,"props":3674,"children":3675},{"style":1205},[3676],{"type":47,"value":3677}," 1",{"type":42,"tag":707,"props":3679,"children":3680},{"style":1054},[3681],{"type":47,"value":1408},{"type":42,"tag":707,"props":3683,"children":3684},{"class":1050,"line":1525},[3685,3689,3694,3698,3702,3707],{"type":42,"tag":707,"props":3686,"children":3687},{"style":1054},[3688],{"type":47,"value":3631},{"type":42,"tag":707,"props":3690,"children":3691},{"style":3634},[3692],{"type":47,"value":3693},"tables_affected",{"type":42,"tag":707,"props":3695,"children":3696},{"style":1054},[3697],{"type":47,"value":1077},{"type":42,"tag":707,"props":3699,"children":3700},{"style":1054},[3701],{"type":47,"value":1082},{"type":42,"tag":707,"props":3703,"children":3704},{"style":1205},[3705],{"type":47,"value":3706}," 2",{"type":42,"tag":707,"props":3708,"children":3709},{"style":1054},[3710],{"type":47,"value":1408},{"type":42,"tag":707,"props":3712,"children":3713},{"class":1050,"line":1560},[3714,3718,3723,3727,3731,3735],{"type":42,"tag":707,"props":3715,"children":3716},{"style":1054},[3717],{"type":47,"value":3631},{"type":42,"tag":707,"props":3719,"children":3720},{"style":3634},[3721],{"type":47,"value":3722},"functions",{"type":42,"tag":707,"props":3724,"children":3725},{"style":1054},[3726],{"type":47,"value":1077},{"type":42,"tag":707,"props":3728,"children":3729},{"style":1054},[3730],{"type":47,"value":1082},{"type":42,"tag":707,"props":3732,"children":3733},{"style":1205},[3734],{"type":47,"value":1312},{"type":42,"tag":707,"props":3736,"children":3737},{"style":1054},[3738],{"type":47,"value":1408},{"type":42,"tag":707,"props":3740,"children":3741},{"class":1050,"line":1569},[3742,3746,3751,3755,3759],{"type":42,"tag":707,"props":3743,"children":3744},{"style":1054},[3745],{"type":47,"value":3631},{"type":42,"tag":707,"props":3747,"children":3748},{"style":3634},[3749],{"type":47,"value":3750},"aggregates",{"type":42,"tag":707,"props":3752,"children":3753},{"style":1054},[3754],{"type":47,"value":1077},{"type":42,"tag":707,"props":3756,"children":3757},{"style":1054},[3758],{"type":47,"value":1082},{"type":42,"tag":707,"props":3760,"children":3761},{"style":1205},[3762],{"type":47,"value":3763}," 0\n",{"type":42,"tag":707,"props":3765,"children":3766},{"class":1050,"line":1594},[3767],{"type":42,"tag":707,"props":3768,"children":3769},{"style":1054},[3770],{"type":47,"value":3771},"      },\n",{"type":42,"tag":707,"props":3773,"children":3774},{"class":1050,"line":1631},[3775,3779,3784,3788,3792],{"type":42,"tag":707,"props":3776,"children":3777},{"style":1054},[3778],{"type":47,"value":3578},{"type":42,"tag":707,"props":3780,"children":3781},{"style":1205},[3782],{"type":47,"value":3783},"query_patterns",{"type":42,"tag":707,"props":3785,"children":3786},{"style":1054},[3787],{"type":47,"value":1077},{"type":42,"tag":707,"props":3789,"children":3790},{"style":1054},[3791],{"type":47,"value":1082},{"type":42,"tag":707,"props":3793,"children":3794},{"style":1054},[3795],{"type":47,"value":3796}," null\n",{"type":42,"tag":707,"props":3798,"children":3799},{"class":1050,"line":1668},[3800],{"type":42,"tag":707,"props":3801,"children":3802},{"style":1054},[3803],{"type":47,"value":3804},"    },\n",{"type":42,"tag":707,"props":3806,"children":3807},{"class":1050,"line":1704},[3808,3812,3817,3821,3825],{"type":42,"tag":707,"props":3809,"children":3810},{"style":1054},[3811],{"type":47,"value":1377},{"type":42,"tag":707,"props":3813,"children":3814},{"style":1095},[3815],{"type":47,"value":3816},"details",{"type":42,"tag":707,"props":3818,"children":3819},{"style":1054},[3820],{"type":47,"value":1077},{"type":42,"tag":707,"props":3822,"children":3823},{"style":1054},[3824],{"type":47,"value":1082},{"type":42,"tag":707,"props":3826,"children":3827},{"style":1054},[3828],{"type":47,"value":1368},{"type":42,"tag":707,"props":3830,"children":3831},{"class":1050,"line":1740},[3832,3836,3840,3844,3848],{"type":42,"tag":707,"props":3833,"children":3834},{"style":1054},[3835],{"type":47,"value":3578},{"type":42,"tag":707,"props":3837,"children":3838},{"style":1205},[3839],{"type":47,"value":3318},{"type":42,"tag":707,"props":3841,"children":3842},{"style":1054},[3843],{"type":47,"value":1077},{"type":42,"tag":707,"props":3845,"children":3846},{"style":1054},[3847],{"type":47,"value":1082},{"type":42,"tag":707,"props":3849,"children":3850},{"style":1054},[3851],{"type":47,"value":1368},{"type":42,"tag":707,"props":3853,"children":3854},{"class":1050,"line":1773},[3855,3859,3863,3867,3871,3875],{"type":42,"tag":707,"props":3856,"children":3857},{"style":1054},[3858],{"type":47,"value":3631},{"type":42,"tag":707,"props":3860,"children":3861},{"style":3634},[3862],{"type":47,"value":3722},{"type":42,"tag":707,"props":3864,"children":3865},{"style":1054},[3866],{"type":47,"value":1077},{"type":42,"tag":707,"props":3868,"children":3869},{"style":1054},[3870],{"type":47,"value":1082},{"type":42,"tag":707,"props":3872,"children":3873},{"style":1205},[3874],{"type":47,"value":1312},{"type":42,"tag":707,"props":3876,"children":3877},{"style":1054},[3878],{"type":47,"value":1408},{"type":42,"tag":707,"props":3880,"children":3881},{"class":1050,"line":1781},[3882,3886,3890,3894,3898,3902],{"type":42,"tag":707,"props":3883,"children":3884},{"style":1054},[3885],{"type":47,"value":3631},{"type":42,"tag":707,"props":3887,"children":3888},{"style":3634},[3889],{"type":47,"value":3750},{"type":42,"tag":707,"props":3891,"children":3892},{"style":1054},[3893],{"type":47,"value":1077},{"type":42,"tag":707,"props":3895,"children":3896},{"style":1054},[3897],{"type":47,"value":1082},{"type":42,"tag":707,"props":3899,"children":3900},{"style":1205},[3901],{"type":47,"value":1312},{"type":42,"tag":707,"props":3903,"children":3904},{"style":1054},[3905],{"type":47,"value":1408},{"type":42,"tag":707,"props":3907,"children":3908},{"class":1050,"line":1839},[3909,3913,3918,3922,3926],{"type":42,"tag":707,"props":3910,"children":3911},{"style":1054},[3912],{"type":47,"value":3631},{"type":42,"tag":707,"props":3914,"children":3915},{"style":3634},[3916],{"type":47,"value":3917},"keyspaces",{"type":42,"tag":707,"props":3919,"children":3920},{"style":1054},[3921],{"type":47,"value":1077},{"type":42,"tag":707,"props":3923,"children":3924},{"style":1054},[3925],{"type":47,"value":1082},{"type":42,"tag":707,"props":3927,"children":3928},{"style":1054},[3929],{"type":47,"value":1368},{"type":42,"tag":707,"props":3931,"children":3932},{"class":1050,"line":1873},[3933,3938,3943,3947,3951],{"type":42,"tag":707,"props":3934,"children":3935},{"style":1054},[3936],{"type":47,"value":3937},"          \"",{"type":42,"tag":707,"props":3939,"children":3941},{"style":3940},"--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53",[3942],{"type":47,"value":3459},{"type":42,"tag":707,"props":3944,"children":3945},{"style":1054},[3946],{"type":47,"value":1077},{"type":42,"tag":707,"props":3948,"children":3949},{"style":1054},[3950],{"type":47,"value":1082},{"type":42,"tag":707,"props":3952,"children":3953},{"style":1054},[3954],{"type":47,"value":1368},{"type":42,"tag":707,"props":3956,"children":3957},{"class":1050,"line":1882},[3958,3963,3968,3972,3976],{"type":42,"tag":707,"props":3959,"children":3960},{"style":1054},[3961],{"type":47,"value":3962},"            \"",{"type":42,"tag":707,"props":3964,"children":3965},{"style":2307},[3966],{"type":47,"value":3967},"orders",{"type":42,"tag":707,"props":3969,"children":3970},{"style":1054},[3971],{"type":47,"value":1077},{"type":42,"tag":707,"props":3973,"children":3974},{"style":1054},[3975],{"type":47,"value":1082},{"type":42,"tag":707,"props":3977,"children":3978},{"style":1054},[3979],{"type":47,"value":1368},{"type":42,"tag":707,"props":3981,"children":3983},{"class":1050,"line":3982},22,[3984,3989,3995,3999,4003,4008,4012,4016,4020],{"type":42,"tag":707,"props":3985,"children":3986},{"style":1054},[3987],{"type":47,"value":3988},"              \"",{"type":42,"tag":707,"props":3990,"children":3992},{"style":3991},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[3993],{"type":47,"value":3994},"indexes",{"type":42,"tag":707,"props":3996,"children":3997},{"style":1054},[3998],{"type":47,"value":1077},{"type":42,"tag":707,"props":4000,"children":4001},{"style":1054},[4002],{"type":47,"value":1082},{"type":42,"tag":707,"props":4004,"children":4005},{"style":1054},[4006],{"type":47,"value":4007}," [",{"type":42,"tag":707,"props":4009,"children":4010},{"style":1054},[4011],{"type":47,"value":1077},{"type":42,"tag":707,"props":4013,"children":4014},{"style":1113},[4015],{"type":47,"value":3475},{"type":42,"tag":707,"props":4017,"children":4018},{"style":1054},[4019],{"type":47,"value":1077},{"type":42,"tag":707,"props":4021,"children":4022},{"style":1054},[4023],{"type":47,"value":4024},"],\n",{"type":42,"tag":707,"props":4026,"children":4028},{"class":1050,"line":4027},23,[4029,4033,4038,4042,4046],{"type":42,"tag":707,"props":4030,"children":4031},{"style":1054},[4032],{"type":47,"value":3988},{"type":42,"tag":707,"props":4034,"children":4035},{"style":3991},[4036],{"type":47,"value":4037},"triggers",{"type":42,"tag":707,"props":4039,"children":4040},{"style":1054},[4041],{"type":47,"value":1077},{"type":42,"tag":707,"props":4043,"children":4044},{"style":1054},[4045],{"type":47,"value":1082},{"type":42,"tag":707,"props":4047,"children":4048},{"style":1054},[4049],{"type":47,"value":4050}," [],\n",{"type":42,"tag":707,"props":4052,"children":4054},{"class":1050,"line":4053},24,[4055,4059,4064,4068,4072,4076,4080,4084,4088],{"type":42,"tag":707,"props":4056,"children":4057},{"style":1054},[4058],{"type":47,"value":3988},{"type":42,"tag":707,"props":4060,"children":4061},{"style":3991},[4062],{"type":47,"value":4063},"materializedViews",{"type":42,"tag":707,"props":4065,"children":4066},{"style":1054},[4067],{"type":47,"value":1077},{"type":42,"tag":707,"props":4069,"children":4070},{"style":1054},[4071],{"type":47,"value":1082},{"type":42,"tag":707,"props":4073,"children":4074},{"style":1054},[4075],{"type":47,"value":4007},{"type":42,"tag":707,"props":4077,"children":4078},{"style":1054},[4079],{"type":47,"value":1077},{"type":42,"tag":707,"props":4081,"children":4082},{"style":1113},[4083],{"type":47,"value":3467},{"type":42,"tag":707,"props":4085,"children":4086},{"style":1054},[4087],{"type":47,"value":1077},{"type":42,"tag":707,"props":4089,"children":4090},{"style":1054},[4091],{"type":47,"value":4092},"]\n",{"type":42,"tag":707,"props":4094,"children":4096},{"class":1050,"line":4095},25,[4097],{"type":42,"tag":707,"props":4098,"children":4099},{"style":1054},[4100],{"type":47,"value":4101},"            },\n",{"type":42,"tag":707,"props":4103,"children":4105},{"class":1050,"line":4104},26,[4106,4110,4115,4119,4123],{"type":42,"tag":707,"props":4107,"children":4108},{"style":1054},[4109],{"type":47,"value":3962},{"type":42,"tag":707,"props":4111,"children":4112},{"style":2307},[4113],{"type":47,"value":4114},"customers",{"type":42,"tag":707,"props":4116,"children":4117},{"style":1054},[4118],{"type":47,"value":1077},{"type":42,"tag":707,"props":4120,"children":4121},{"style":1054},[4122],{"type":47,"value":1082},{"type":42,"tag":707,"props":4124,"children":4125},{"style":1054},[4126],{"type":47,"value":1368},{"type":42,"tag":707,"props":4128,"children":4130},{"class":1050,"line":4129},27,[4131,4135,4139,4143,4147,4151,4155,4159,4163],{"type":42,"tag":707,"props":4132,"children":4133},{"style":1054},[4134],{"type":47,"value":3988},{"type":42,"tag":707,"props":4136,"children":4137},{"style":3991},[4138],{"type":47,"value":3994},{"type":42,"tag":707,"props":4140,"children":4141},{"style":1054},[4142],{"type":47,"value":1077},{"type":42,"tag":707,"props":4144,"children":4145},{"style":1054},[4146],{"type":47,"value":1082},{"type":42,"tag":707,"props":4148,"children":4149},{"style":1054},[4150],{"type":47,"value":4007},{"type":42,"tag":707,"props":4152,"children":4153},{"style":1054},[4154],{"type":47,"value":1077},{"type":42,"tag":707,"props":4156,"children":4157},{"style":1113},[4158],{"type":47,"value":3483},{"type":42,"tag":707,"props":4160,"children":4161},{"style":1054},[4162],{"type":47,"value":1077},{"type":42,"tag":707,"props":4164,"children":4165},{"style":1054},[4166],{"type":47,"value":4024},{"type":42,"tag":707,"props":4168,"children":4170},{"class":1050,"line":4169},28,[4171,4175,4179,4183,4187],{"type":42,"tag":707,"props":4172,"children":4173},{"style":1054},[4174],{"type":47,"value":3988},{"type":42,"tag":707,"props":4176,"children":4177},{"style":3991},[4178],{"type":47,"value":4037},{"type":42,"tag":707,"props":4180,"children":4181},{"style":1054},[4182],{"type":47,"value":1077},{"type":42,"tag":707,"props":4184,"children":4185},{"style":1054},[4186],{"type":47,"value":1082},{"type":42,"tag":707,"props":4188,"children":4189},{"style":1054},[4190],{"type":47,"value":4050},{"type":42,"tag":707,"props":4192,"children":4194},{"class":1050,"line":4193},29,[4195,4199,4203,4207,4211],{"type":42,"tag":707,"props":4196,"children":4197},{"style":1054},[4198],{"type":47,"value":3988},{"type":42,"tag":707,"props":4200,"children":4201},{"style":3991},[4202],{"type":47,"value":4063},{"type":42,"tag":707,"props":4204,"children":4205},{"style":1054},[4206],{"type":47,"value":1077},{"type":42,"tag":707,"props":4208,"children":4209},{"style":1054},[4210],{"type":47,"value":1082},{"type":42,"tag":707,"props":4212,"children":4213},{"style":1054},[4214],{"type":47,"value":4215}," []\n",{"type":42,"tag":707,"props":4217,"children":4219},{"class":1050,"line":4218},30,[4220],{"type":42,"tag":707,"props":4221,"children":4222},{"style":1054},[4223],{"type":47,"value":4224},"            }\n",{"type":42,"tag":707,"props":4226,"children":4228},{"class":1050,"line":4227},31,[4229],{"type":42,"tag":707,"props":4230,"children":4231},{"style":1054},[4232],{"type":47,"value":4233},"          }\n",{"type":42,"tag":707,"props":4235,"children":4237},{"class":1050,"line":4236},32,[4238],{"type":42,"tag":707,"props":4239,"children":4240},{"style":1054},[4241],{"type":47,"value":4242},"        }\n",{"type":42,"tag":707,"props":4244,"children":4246},{"class":1050,"line":4245},33,[4247],{"type":42,"tag":707,"props":4248,"children":4249},{"style":1054},[4250],{"type":47,"value":3771},{"type":42,"tag":707,"props":4252,"children":4254},{"class":1050,"line":4253},34,[4255,4259,4263,4267,4271],{"type":42,"tag":707,"props":4256,"children":4257},{"style":1054},[4258],{"type":47,"value":3578},{"type":42,"tag":707,"props":4260,"children":4261},{"style":1205},[4262],{"type":47,"value":3783},{"type":42,"tag":707,"props":4264,"children":4265},{"style":1054},[4266],{"type":47,"value":1077},{"type":42,"tag":707,"props":4268,"children":4269},{"style":1054},[4270],{"type":47,"value":1082},{"type":42,"tag":707,"props":4272,"children":4273},{"style":1054},[4274],{"type":47,"value":3796},{"type":42,"tag":707,"props":4276,"children":4278},{"class":1050,"line":4277},35,[4279],{"type":42,"tag":707,"props":4280,"children":4281},{"style":1054},[4282],{"type":47,"value":4283},"    }\n",{"type":42,"tag":707,"props":4285,"children":4287},{"class":1050,"line":4286},36,[4288],{"type":42,"tag":707,"props":4289,"children":4290},{"style":1054},[4291],{"type":47,"value":4292},"  }\n",{"type":42,"tag":707,"props":4294,"children":4296},{"class":1050,"line":4295},37,[4297],{"type":42,"tag":707,"props":4298,"children":4299},{"style":1054},[4300],{"type":47,"value":1879},{"type":42,"tag":74,"props":4302,"children":4303},{},[4304,4305,4309],{"type":47,"value":2257},{"type":42,"tag":234,"props":4306,"children":4307},{},[4308],{"type":47,"value":2262},{"type":47,"value":4310},": announce, print the command, present JSON output.",{"type":42,"tag":57,"props":4312,"children":4313},{},[4314,4318],{"type":42,"tag":234,"props":4315,"children":4316},{},[4317],{"type":47,"value":2290},{"type":47,"value":1082},{"type":42,"tag":1038,"props":4320,"children":4322},{"className":2295,"code":4321,"language":2297,"meta":1043,"style":1043},"cd scripts && npx ts-node --project tsconfig.scripts.json parse-cassandra.ts \\\n  --dir \u002Ftmp\u002Fcassandra-diag --region us-east-1 | tee \u002Ftmp\u002Fkeyspaces-calc.json\n",[4323],{"type":42,"tag":80,"props":4324,"children":4325},{"__ignoreMap":1043},[4326,4366],{"type":42,"tag":707,"props":4327,"children":4328},{"class":1050,"line":37},[4329,4333,4337,4341,4345,4349,4353,4357,4362],{"type":42,"tag":707,"props":4330,"children":4331},{"style":2307},[4332],{"type":47,"value":2310},{"type":42,"tag":707,"props":4334,"children":4335},{"style":1113},[4336],{"type":47,"value":2315},{"type":42,"tag":707,"props":4338,"children":4339},{"style":1054},[4340],{"type":47,"value":2320},{"type":42,"tag":707,"props":4342,"children":4343},{"style":1095},[4344],{"type":47,"value":2325},{"type":42,"tag":707,"props":4346,"children":4347},{"style":1113},[4348],{"type":47,"value":2330},{"type":42,"tag":707,"props":4350,"children":4351},{"style":1113},[4352],{"type":47,"value":2335},{"type":42,"tag":707,"props":4354,"children":4355},{"style":1113},[4356],{"type":47,"value":2340},{"type":42,"tag":707,"props":4358,"children":4359},{"style":1113},[4360],{"type":47,"value":4361}," parse-cassandra.ts",{"type":42,"tag":707,"props":4363,"children":4364},{"style":1886},[4365],{"type":47,"value":2350},{"type":42,"tag":707,"props":4367,"children":4368},{"class":1050,"line":1060},[4369,4374,4379,4384,4389,4393,4397],{"type":42,"tag":707,"props":4370,"children":4371},{"style":1113},[4372],{"type":47,"value":4373},"  --dir",{"type":42,"tag":707,"props":4375,"children":4376},{"style":1113},[4377],{"type":47,"value":4378}," \u002Ftmp\u002Fcassandra-diag",{"type":42,"tag":707,"props":4380,"children":4381},{"style":1113},[4382],{"type":47,"value":4383}," --region",{"type":42,"tag":707,"props":4385,"children":4386},{"style":1113},[4387],{"type":47,"value":4388}," us-east-1",{"type":42,"tag":707,"props":4390,"children":4391},{"style":1054},[4392],{"type":47,"value":2387},{"type":42,"tag":707,"props":4394,"children":4395},{"style":1095},[4396],{"type":47,"value":2392},{"type":42,"tag":707,"props":4398,"children":4399},{"style":1113},[4400],{"type":47,"value":2397},{"type":42,"tag":57,"props":4402,"children":4403},{},[4404,4405,4411,4413,4419],{"type":47,"value":3173},{"type":42,"tag":212,"props":4406,"children":4408},{"href":4407},"references\u002Fmode-2-cassandra-diagnostics.md",[4409],{"type":47,"value":4410},"mode-2-cassandra-diagnostics.md",{"type":47,"value":4412}," for the intake table and ",{"type":42,"tag":212,"props":4414,"children":4416},{"href":4415},"references\u002Fcassandra-capture-commands.md",[4417],{"type":47,"value":4418},"cassandra-capture-commands.md",{"type":47,"value":4420}," for capture commands.",{"type":42,"tag":63,"props":4422,"children":4424},{"id":4423},"_4-check-keyspaces-compatibility-mode-3",[4425],{"type":47,"value":4426},"4. Check Keyspaces Compatibility (Mode 3)",{"type":42,"tag":57,"props":4428,"children":4429},{},[4430,4434,4436,4442,4443,4449],{"type":42,"tag":234,"props":4431,"children":4432},{},[4433],{"type":47,"value":2109},{"type":47,"value":4435}," at least one of ",{"type":42,"tag":80,"props":4437,"children":4439},{"className":4438},[],[4440],{"type":47,"value":4441},"--schema \u003Cpath.cql>",{"type":47,"value":3312},{"type":42,"tag":80,"props":4444,"children":4446},{"className":4445},[],[4447],{"type":47,"value":4448},"--prepared \u003Cpath.ndjson>",{"type":47,"value":189},{"type":42,"tag":57,"props":4451,"children":4452},{},[4453],{"type":42,"tag":234,"props":4454,"children":4455},{},[4456],{"type":47,"value":1980},{"type":42,"tag":70,"props":4458,"children":4459},{},[4460,4472,4482,4492,4502,4515,4524,4534],{"type":42,"tag":74,"props":4461,"children":4462},{},[4463,4465,4470],{"type":47,"value":4464},"You MUST state compatibility in binary terms — every flagged feature is ",{"type":42,"tag":234,"props":4466,"children":4467},{},[4468],{"type":47,"value":4469},"UNSUPPORTED",{"type":47,"value":4471},". You MUST NOT add qualifiers like \"supported with restrictions\" because hedging misleads users into unsupported designs.",{"type":42,"tag":74,"props":4473,"children":4474},{},[4475,4480],{"type":42,"tag":234,"props":4476,"children":4477},{},[4478],{"type":47,"value":4479},"Materialized views",{"type":47,"value":4481}," are UNSUPPORTED — recommend implementing the same pattern application-side with a denormalized table.",{"type":42,"tag":74,"props":4483,"children":4484},{},[4485,4490],{"type":42,"tag":234,"props":4486,"children":4487},{},[4488],{"type":47,"value":4489},"Secondary indexes",{"type":47,"value":4491}," are UNSUPPORTED — recommend using a secondary table or Global Secondary Index pattern (denormalized lookup table with the alternate partition key).",{"type":42,"tag":74,"props":4493,"children":4494},{},[4495,4500],{"type":42,"tag":234,"props":4496,"children":4497},{},[4498],{"type":47,"value":4499},"Triggers, UDFs (user-defined functions), UDAs (user-defined aggregates), aggregates",{"type":47,"value":4501}," are UNSUPPORTED — recommend application-side implementation.",{"type":42,"tag":74,"props":4503,"children":4504},{},[4505,4507,4513],{"type":47,"value":4506},"You MUST report ",{"type":42,"tag":80,"props":4508,"children":4510},{"className":4509},[],[4511],{"type":47,"value":4512},"query_patterns.ttl_tables",{"type":47,"value":4514}," as informational, not an issue.",{"type":42,"tag":74,"props":4516,"children":4517},{},[4518,4519,4523],{"type":47,"value":2257},{"type":42,"tag":234,"props":4520,"children":4521},{},[4522],{"type":47,"value":2262},{"type":47,"value":4310},{"type":42,"tag":74,"props":4525,"children":4526},{},[4527,4532],{"type":42,"tag":234,"props":4528,"children":4529},{},[4530],{"type":47,"value":4531},"If the user mentions specific features by name (e.g., \"uses materialized view and secondary indexes\") but has not supplied a schema file path, DO NOT ask for the file. Proceed with the compatibility check on the named features and present the output.",{"type":47,"value":4533}," Only ask for a schema file if the user asks \"will this schema work\" with NO features named.",{"type":42,"tag":74,"props":4535,"children":4536},{},[4537,4539,4545,4547,4553],{"type":47,"value":4538},"You MUST present the compatibility report as JSON, flagging each named feature with ",{"type":42,"tag":80,"props":4540,"children":4542},{"className":4541},[],[4543],{"type":47,"value":4544},"status: \"UNSUPPORTED\"",{"type":47,"value":4546}," and a ",{"type":42,"tag":80,"props":4548,"children":4550},{"className":4549},[],[4551],{"type":47,"value":4552},"migration_recommendation",{"type":47,"value":189},{"type":42,"tag":57,"props":4555,"children":4556},{},[4557,4561],{"type":42,"tag":234,"props":4558,"children":4559},{},[4560],{"type":47,"value":2290},{"type":47,"value":1082},{"type":42,"tag":1038,"props":4563,"children":4565},{"className":2295,"code":4564,"language":2297,"meta":1043,"style":1043},"cd scripts && npx ts-node --project tsconfig.scripts.json check-compatibility.ts \\\n  --schema \u002Ftmp\u002Fschema.cql --prepared \u002Ftmp\u002Fprepared.ndjson | tee \u002Ftmp\u002Fkeyspaces-compat.json\n",[4566],{"type":42,"tag":80,"props":4567,"children":4568},{"__ignoreMap":1043},[4569,4609],{"type":42,"tag":707,"props":4570,"children":4571},{"class":1050,"line":37},[4572,4576,4580,4584,4588,4592,4596,4600,4605],{"type":42,"tag":707,"props":4573,"children":4574},{"style":2307},[4575],{"type":47,"value":2310},{"type":42,"tag":707,"props":4577,"children":4578},{"style":1113},[4579],{"type":47,"value":2315},{"type":42,"tag":707,"props":4581,"children":4582},{"style":1054},[4583],{"type":47,"value":2320},{"type":42,"tag":707,"props":4585,"children":4586},{"style":1095},[4587],{"type":47,"value":2325},{"type":42,"tag":707,"props":4589,"children":4590},{"style":1113},[4591],{"type":47,"value":2330},{"type":42,"tag":707,"props":4593,"children":4594},{"style":1113},[4595],{"type":47,"value":2335},{"type":42,"tag":707,"props":4597,"children":4598},{"style":1113},[4599],{"type":47,"value":2340},{"type":42,"tag":707,"props":4601,"children":4602},{"style":1113},[4603],{"type":47,"value":4604}," check-compatibility.ts",{"type":42,"tag":707,"props":4606,"children":4607},{"style":1886},[4608],{"type":47,"value":2350},{"type":42,"tag":707,"props":4610,"children":4611},{"class":1050,"line":1060},[4612,4617,4622,4627,4632,4636,4640],{"type":42,"tag":707,"props":4613,"children":4614},{"style":1113},[4615],{"type":47,"value":4616},"  --schema",{"type":42,"tag":707,"props":4618,"children":4619},{"style":1113},[4620],{"type":47,"value":4621}," \u002Ftmp\u002Fschema.cql",{"type":42,"tag":707,"props":4623,"children":4624},{"style":1113},[4625],{"type":47,"value":4626}," --prepared",{"type":42,"tag":707,"props":4628,"children":4629},{"style":1113},[4630],{"type":47,"value":4631}," \u002Ftmp\u002Fprepared.ndjson",{"type":42,"tag":707,"props":4633,"children":4634},{"style":1054},[4635],{"type":47,"value":2387},{"type":42,"tag":707,"props":4637,"children":4638},{"style":1095},[4639],{"type":47,"value":2392},{"type":42,"tag":707,"props":4641,"children":4642},{"style":1113},[4643],{"type":47,"value":4644}," \u002Ftmp\u002Fkeyspaces-compat.json\n",{"type":42,"tag":57,"props":4646,"children":4647},{},[4648,4649,4655,4657,4663],{"type":47,"value":3173},{"type":42,"tag":212,"props":4650,"children":4652},{"href":4651},"references\u002Fmode-3-compatibility.md",[4653],{"type":47,"value":4654},"mode-3-compatibility.md",{"type":47,"value":4656}," for the full unsupported-feature list and ",{"type":42,"tag":212,"props":4658,"children":4660},{"href":4659},"references\u002Fkeyspaces-unsupported-features.md",[4661],{"type":47,"value":4662},"keyspaces-unsupported-features.md",{"type":47,"value":4664}," for migration guidance per feature.",{"type":42,"tag":63,"props":4666,"children":4668},{"id":4667},"_5-translate-sql-keyspaces-mode-4",[4669],{"type":47,"value":4670},"5. Translate SQL → Keyspaces (Mode 4)",{"type":42,"tag":57,"props":4672,"children":4673},{},[4674],{"type":47,"value":4675},"Generate three data models, price each, recommend.",{"type":42,"tag":57,"props":4677,"children":4678},{},[4679,4684],{"type":42,"tag":234,"props":4680,"children":4681},{},[4682],{"type":47,"value":4683},"Three modeling strategies",{"type":47,"value":4685}," (you MUST price ALL THREE):",{"type":42,"tag":876,"props":4687,"children":4688},{},[4689,4699,4709],{"type":42,"tag":74,"props":4690,"children":4691},{},[4692,4697],{"type":42,"tag":234,"props":4693,"children":4694},{},[4695],{"type":47,"value":4696},"Denormalized single table",{"type":47,"value":4698}," — one wide table per query pattern; highest storage, lowest read latency.",{"type":42,"tag":74,"props":4700,"children":4701},{},[4702,4707],{"type":42,"tag":234,"props":4703,"children":4704},{},[4705],{"type":47,"value":4706},"Multiple targeted tables (query-driven)",{"type":47,"value":4708}," — one table per access pattern; moderate storage, predictable reads.",{"type":42,"tag":74,"props":4710,"children":4711},{},[4712,4717],{"type":42,"tag":234,"props":4713,"children":4714},{},[4715],{"type":47,"value":4716},"Wide rows with clustering keys",{"type":47,"value":4718}," — partition by entity, clustering by time\u002Ftype; includes reverse-index tables for alternate access patterns. Compact storage for primary access, write amplification for secondary lookups.",{"type":42,"tag":57,"props":4720,"children":4721},{},[4722],{"type":42,"tag":234,"props":4723,"children":4724},{},[4725],{"type":47,"value":1980},{"type":42,"tag":70,"props":4727,"children":4728},{},[4729,4734,4739,4744,4749],{"type":42,"tag":74,"props":4730,"children":4731},{},[4732],{"type":47,"value":4733},"You MUST price all three strategies because write amplification and lookup cost trade-offs vary by workload.",{"type":42,"tag":74,"props":4735,"children":4736},{},[4737],{"type":47,"value":4738},"You MUST NOT pick a strategy without asking for per-table read\u002Fwrite rates — UNLESS the user has provided a SQL schema file, in which case proceed with reasonable defaults (100 reads\u002Fs and 50 writes\u002Fs per table, 1 KB avg row size, estimated storage from row counts) and present the three-strategy comparison immediately. State the assumptions used.",{"type":42,"tag":74,"props":4740,"children":4741},{},[4742],{"type":47,"value":4743},"You MUST identify JOINs in the SQL and explain how they map to NoSQL (denormalization or secondary lookups).",{"type":42,"tag":74,"props":4745,"children":4746},{},[4747],{"type":47,"value":4748},"You MUST present a Keyspaces-compatible schema for each strategy, with partition-key and clustering-key design choices justified.",{"type":42,"tag":74,"props":4750,"children":4751},{},[4752,4753,4757,4759,4764],{"type":47,"value":2257},{"type":42,"tag":234,"props":4754,"children":4755},{},[4756],{"type":47,"value":2262},{"type":47,"value":4758},": announce, print three ",{"type":42,"tag":80,"props":4760,"children":4762},{"className":4761},[],[4763],{"type":47,"value":836},{"type":47,"value":4765}," commands (one per strategy), present comparative JSON.",{"type":42,"tag":57,"props":4767,"children":4768},{},[4769,4774],{"type":42,"tag":234,"props":4770,"children":4771},{},[4772],{"type":47,"value":4773},"The commands to run this analysis yourself",{"type":47,"value":4775}," (three invocations, one per strategy):",{"type":42,"tag":1038,"props":4777,"children":4779},{"className":2295,"code":4778,"language":2297,"meta":1043,"style":1043},"cd scripts\n# Strategy 1: denormalized single table\nnpx ts-node --project tsconfig.scripts.json calculate.ts us-east-1 \u003Cr1> \u003Cw1> \u003Cb1> \u003Cgb1> 0 false | tee \u002Ftmp\u002Fkeyspaces-s1.json\n# Strategy 2: multiple targeted tables\nnpx ts-node --project tsconfig.scripts.json calculate.ts us-east-1 \u003Cr2> \u003Cw2> \u003Cb2> \u003Cgb2> 0 false | tee \u002Ftmp\u002Fkeyspaces-s2.json\n# Strategy 3: wide rows with clustering keys\nnpx ts-node --project tsconfig.scripts.json calculate.ts us-east-1 \u003Cr3> \u003Cw3> \u003Cb3> \u003Cgb3> 0 false | tee \u002Ftmp\u002Fkeyspaces-s3.json\n",[4780],{"type":42,"tag":80,"props":4781,"children":4782},{"__ignoreMap":1043},[4783,4795,4804,4908,4916,5013,5021],{"type":42,"tag":707,"props":4784,"children":4785},{"class":1050,"line":37},[4786,4790],{"type":42,"tag":707,"props":4787,"children":4788},{"style":2307},[4789],{"type":47,"value":2310},{"type":42,"tag":707,"props":4791,"children":4792},{"style":1113},[4793],{"type":47,"value":4794}," scripts\n",{"type":42,"tag":707,"props":4796,"children":4797},{"class":1050,"line":1060},[4798],{"type":42,"tag":707,"props":4799,"children":4801},{"style":4800},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[4802],{"type":47,"value":4803},"# Strategy 1: denormalized single table\n",{"type":42,"tag":707,"props":4805,"children":4806},{"class":1050,"line":1163},[4807,4812,4816,4820,4824,4828,4832,4837,4842,4847,4851,4856,4860,4864,4869,4873,4877,4882,4886,4890,4895,4899,4903],{"type":42,"tag":707,"props":4808,"children":4809},{"style":1095},[4810],{"type":47,"value":4811},"npx",{"type":42,"tag":707,"props":4813,"children":4814},{"style":1113},[4815],{"type":47,"value":2330},{"type":42,"tag":707,"props":4817,"children":4818},{"style":1113},[4819],{"type":47,"value":2335},{"type":42,"tag":707,"props":4821,"children":4822},{"style":1113},[4823],{"type":47,"value":2340},{"type":42,"tag":707,"props":4825,"children":4826},{"style":1113},[4827],{"type":47,"value":2345},{"type":42,"tag":707,"props":4829,"children":4830},{"style":1113},[4831],{"type":47,"value":4388},{"type":42,"tag":707,"props":4833,"children":4834},{"style":1054},[4835],{"type":47,"value":4836}," \u003C",{"type":42,"tag":707,"props":4838,"children":4839},{"style":1113},[4840],{"type":47,"value":4841},"r",{"type":42,"tag":707,"props":4843,"children":4844},{"style":1054},[4845],{"type":47,"value":4846},"1>",{"type":42,"tag":707,"props":4848,"children":4849},{"style":1054},[4850],{"type":47,"value":4836},{"type":42,"tag":707,"props":4852,"children":4853},{"style":1113},[4854],{"type":47,"value":4855},"w",{"type":42,"tag":707,"props":4857,"children":4858},{"style":1054},[4859],{"type":47,"value":4846},{"type":42,"tag":707,"props":4861,"children":4862},{"style":1054},[4863],{"type":47,"value":4836},{"type":42,"tag":707,"props":4865,"children":4866},{"style":1113},[4867],{"type":47,"value":4868},"b",{"type":42,"tag":707,"props":4870,"children":4871},{"style":1054},[4872],{"type":47,"value":4846},{"type":42,"tag":707,"props":4874,"children":4875},{"style":1054},[4876],{"type":47,"value":4836},{"type":42,"tag":707,"props":4878,"children":4879},{"style":1113},[4880],{"type":47,"value":4881},"gb",{"type":42,"tag":707,"props":4883,"children":4884},{"style":1054},[4885],{"type":47,"value":4846},{"type":42,"tag":707,"props":4887,"children":4888},{"style":1205},[4889],{"type":47,"value":1312},{"type":42,"tag":707,"props":4891,"children":4892},{"style":1054},[4893],{"type":47,"value":4894}," false",{"type":42,"tag":707,"props":4896,"children":4897},{"style":1054},[4898],{"type":47,"value":2387},{"type":42,"tag":707,"props":4900,"children":4901},{"style":1095},[4902],{"type":47,"value":2392},{"type":42,"tag":707,"props":4904,"children":4905},{"style":1113},[4906],{"type":47,"value":4907}," \u002Ftmp\u002Fkeyspaces-s1.json\n",{"type":42,"tag":707,"props":4909,"children":4910},{"class":1050,"line":1345},[4911],{"type":42,"tag":707,"props":4912,"children":4913},{"style":4800},[4914],{"type":47,"value":4915},"# Strategy 2: multiple targeted tables\n",{"type":42,"tag":707,"props":4917,"children":4918},{"class":1050,"line":1371},[4919,4923,4927,4931,4935,4939,4943,4947,4951,4956,4960,4964,4968,4972,4976,4980,4984,4988,4992,4996,5000,5004,5008],{"type":42,"tag":707,"props":4920,"children":4921},{"style":1095},[4922],{"type":47,"value":4811},{"type":42,"tag":707,"props":4924,"children":4925},{"style":1113},[4926],{"type":47,"value":2330},{"type":42,"tag":707,"props":4928,"children":4929},{"style":1113},[4930],{"type":47,"value":2335},{"type":42,"tag":707,"props":4932,"children":4933},{"style":1113},[4934],{"type":47,"value":2340},{"type":42,"tag":707,"props":4936,"children":4937},{"style":1113},[4938],{"type":47,"value":2345},{"type":42,"tag":707,"props":4940,"children":4941},{"style":1113},[4942],{"type":47,"value":4388},{"type":42,"tag":707,"props":4944,"children":4945},{"style":1054},[4946],{"type":47,"value":4836},{"type":42,"tag":707,"props":4948,"children":4949},{"style":1113},[4950],{"type":47,"value":4841},{"type":42,"tag":707,"props":4952,"children":4953},{"style":1054},[4954],{"type":47,"value":4955},"2>",{"type":42,"tag":707,"props":4957,"children":4958},{"style":1054},[4959],{"type":47,"value":4836},{"type":42,"tag":707,"props":4961,"children":4962},{"style":1113},[4963],{"type":47,"value":4855},{"type":42,"tag":707,"props":4965,"children":4966},{"style":1054},[4967],{"type":47,"value":4955},{"type":42,"tag":707,"props":4969,"children":4970},{"style":1054},[4971],{"type":47,"value":4836},{"type":42,"tag":707,"props":4973,"children":4974},{"style":1113},[4975],{"type":47,"value":4868},{"type":42,"tag":707,"props":4977,"children":4978},{"style":1054},[4979],{"type":47,"value":4955},{"type":42,"tag":707,"props":4981,"children":4982},{"style":1054},[4983],{"type":47,"value":4836},{"type":42,"tag":707,"props":4985,"children":4986},{"style":1113},[4987],{"type":47,"value":4881},{"type":42,"tag":707,"props":4989,"children":4990},{"style":1054},[4991],{"type":47,"value":4955},{"type":42,"tag":707,"props":4993,"children":4994},{"style":1205},[4995],{"type":47,"value":1312},{"type":42,"tag":707,"props":4997,"children":4998},{"style":1054},[4999],{"type":47,"value":4894},{"type":42,"tag":707,"props":5001,"children":5002},{"style":1054},[5003],{"type":47,"value":2387},{"type":42,"tag":707,"props":5005,"children":5006},{"style":1095},[5007],{"type":47,"value":2392},{"type":42,"tag":707,"props":5009,"children":5010},{"style":1113},[5011],{"type":47,"value":5012}," \u002Ftmp\u002Fkeyspaces-s2.json\n",{"type":42,"tag":707,"props":5014,"children":5015},{"class":1050,"line":1411},[5016],{"type":42,"tag":707,"props":5017,"children":5018},{"style":4800},[5019],{"type":47,"value":5020},"# Strategy 3: wide rows with clustering keys\n",{"type":42,"tag":707,"props":5022,"children":5023},{"class":1050,"line":1449},[5024,5028,5032,5036,5040,5044,5048,5052,5056,5061,5065,5069,5073,5077,5081,5085,5089,5093,5097,5101,5105,5109,5113],{"type":42,"tag":707,"props":5025,"children":5026},{"style":1095},[5027],{"type":47,"value":4811},{"type":42,"tag":707,"props":5029,"children":5030},{"style":1113},[5031],{"type":47,"value":2330},{"type":42,"tag":707,"props":5033,"children":5034},{"style":1113},[5035],{"type":47,"value":2335},{"type":42,"tag":707,"props":5037,"children":5038},{"style":1113},[5039],{"type":47,"value":2340},{"type":42,"tag":707,"props":5041,"children":5042},{"style":1113},[5043],{"type":47,"value":2345},{"type":42,"tag":707,"props":5045,"children":5046},{"style":1113},[5047],{"type":47,"value":4388},{"type":42,"tag":707,"props":5049,"children":5050},{"style":1054},[5051],{"type":47,"value":4836},{"type":42,"tag":707,"props":5053,"children":5054},{"style":1113},[5055],{"type":47,"value":4841},{"type":42,"tag":707,"props":5057,"children":5058},{"style":1054},[5059],{"type":47,"value":5060},"3>",{"type":42,"tag":707,"props":5062,"children":5063},{"style":1054},[5064],{"type":47,"value":4836},{"type":42,"tag":707,"props":5066,"children":5067},{"style":1113},[5068],{"type":47,"value":4855},{"type":42,"tag":707,"props":5070,"children":5071},{"style":1054},[5072],{"type":47,"value":5060},{"type":42,"tag":707,"props":5074,"children":5075},{"style":1054},[5076],{"type":47,"value":4836},{"type":42,"tag":707,"props":5078,"children":5079},{"style":1113},[5080],{"type":47,"value":4868},{"type":42,"tag":707,"props":5082,"children":5083},{"style":1054},[5084],{"type":47,"value":5060},{"type":42,"tag":707,"props":5086,"children":5087},{"style":1054},[5088],{"type":47,"value":4836},{"type":42,"tag":707,"props":5090,"children":5091},{"style":1113},[5092],{"type":47,"value":4881},{"type":42,"tag":707,"props":5094,"children":5095},{"style":1054},[5096],{"type":47,"value":5060},{"type":42,"tag":707,"props":5098,"children":5099},{"style":1205},[5100],{"type":47,"value":1312},{"type":42,"tag":707,"props":5102,"children":5103},{"style":1054},[5104],{"type":47,"value":4894},{"type":42,"tag":707,"props":5106,"children":5107},{"style":1054},[5108],{"type":47,"value":2387},{"type":42,"tag":707,"props":5110,"children":5111},{"style":1095},[5112],{"type":47,"value":2392},{"type":42,"tag":707,"props":5114,"children":5115},{"style":1113},[5116],{"type":47,"value":5117}," \u002Ftmp\u002Fkeyspaces-s3.json\n",{"type":42,"tag":57,"props":5119,"children":5120},{},[5121,5122,5128],{"type":47,"value":3173},{"type":42,"tag":212,"props":5123,"children":5125},{"href":5124},"references\u002Fmode-4-sql-migration.md",[5126],{"type":47,"value":5127},"mode-4-sql-migration.md",{"type":47,"value":5129}," for SQL→CQL mapping and the comparison table.",{"type":42,"tag":63,"props":5131,"children":5133},{"id":5132},"_6-generate-a-pdf-report-optional",[5134],{"type":47,"value":5135},"6. Generate a PDF Report (Optional)",{"type":42,"tag":57,"props":5137,"children":5138},{},[5139],{"type":42,"tag":234,"props":5140,"children":5141},{},[5142],{"type":47,"value":1980},{"type":42,"tag":70,"props":5144,"children":5145},{},[5146,5151],{"type":42,"tag":74,"props":5147,"children":5148},{},[5149],{"type":47,"value":5150},"You MUST ask the user whether they want a PDF after displaying the JSON.",{"type":42,"tag":74,"props":5152,"children":5153},{},[5154],{"type":47,"value":5155},"You MUST NOT generate a PDF for Mode 3 (no pricing data to render).",{"type":42,"tag":57,"props":5157,"children":5158},{},[5159,5164],{"type":42,"tag":234,"props":5160,"children":5161},{},[5162],{"type":47,"value":5163},"The command to run this yourself",{"type":47,"value":1082},{"type":42,"tag":1038,"props":5166,"children":5168},{"className":2295,"code":5167,"language":2297,"meta":1043,"style":1043},"cd scripts && npx ts-node --project tsconfig.scripts.json generate-pdf.ts \\\n  --input \u002Ftmp\u002Fkeyspaces-calc.json --output \u002Ftmp\u002Fkeyspaces.pdf\n",[5169],{"type":42,"tag":80,"props":5170,"children":5171},{"__ignoreMap":1043},[5172,5212],{"type":42,"tag":707,"props":5173,"children":5174},{"class":1050,"line":37},[5175,5179,5183,5187,5191,5195,5199,5203,5208],{"type":42,"tag":707,"props":5176,"children":5177},{"style":2307},[5178],{"type":47,"value":2310},{"type":42,"tag":707,"props":5180,"children":5181},{"style":1113},[5182],{"type":47,"value":2315},{"type":42,"tag":707,"props":5184,"children":5185},{"style":1054},[5186],{"type":47,"value":2320},{"type":42,"tag":707,"props":5188,"children":5189},{"style":1095},[5190],{"type":47,"value":2325},{"type":42,"tag":707,"props":5192,"children":5193},{"style":1113},[5194],{"type":47,"value":2330},{"type":42,"tag":707,"props":5196,"children":5197},{"style":1113},[5198],{"type":47,"value":2335},{"type":42,"tag":707,"props":5200,"children":5201},{"style":1113},[5202],{"type":47,"value":2340},{"type":42,"tag":707,"props":5204,"children":5205},{"style":1113},[5206],{"type":47,"value":5207}," generate-pdf.ts",{"type":42,"tag":707,"props":5209,"children":5210},{"style":1886},[5211],{"type":47,"value":2350},{"type":42,"tag":707,"props":5213,"children":5214},{"class":1050,"line":1060},[5215,5220,5225,5230],{"type":42,"tag":707,"props":5216,"children":5217},{"style":1113},[5218],{"type":47,"value":5219},"  --input",{"type":42,"tag":707,"props":5221,"children":5222},{"style":1113},[5223],{"type":47,"value":5224}," \u002Ftmp\u002Fkeyspaces-calc.json",{"type":42,"tag":707,"props":5226,"children":5227},{"style":1113},[5228],{"type":47,"value":5229}," --output",{"type":42,"tag":707,"props":5231,"children":5232},{"style":1113},[5233],{"type":47,"value":5234}," \u002Ftmp\u002Fkeyspaces.pdf\n",{"type":42,"tag":57,"props":5236,"children":5237},{},[5238,5239,5245],{"type":47,"value":3173},{"type":42,"tag":212,"props":5240,"children":5242},{"href":5241},"references\u002Fpdf-reporting.md",[5243],{"type":47,"value":5244},"pdf-reporting.md",{"type":47,"value":5246}," for multi-input and label syntax.",{"type":42,"tag":50,"props":5248,"children":5250},{"id":5249},"troubleshooting",[5251],{"type":47,"value":5252},"Troubleshooting",{"type":42,"tag":63,"props":5254,"children":5256},{"id":5255},"connection-errors-nonodeavailableexception-heartbeatexception-perconnectionrequestexceeded",[5257,5259,5265,5266,5272,5273],{"type":47,"value":5258},"Connection errors \u002F ",{"type":42,"tag":80,"props":5260,"children":5262},{"className":5261},[],[5263],{"type":47,"value":5264},"NoNodeAvailableException",{"type":47,"value":2047},{"type":42,"tag":80,"props":5267,"children":5269},{"className":5268},[],[5270],{"type":47,"value":5271},"HeartbeatException",{"type":47,"value":2047},{"type":42,"tag":80,"props":5274,"children":5276},{"className":5275},[],[5277],{"type":47,"value":5278},"PerConnectionRequestExceeded",{"type":42,"tag":57,"props":5280,"children":5281},{},[5282,5283,5289],{"type":47,"value":3173},{"type":42,"tag":212,"props":5284,"children":5286},{"href":5285},"references\u002Fconnection-troubleshooting.md",[5287],{"type":47,"value":5288},"connection-troubleshooting.md",{"type":47,"value":5290},". Covers application.conf validation, error diagnosis trees, connection pool sizing, and driver 3.x vs 4.x differences. When a user shares their driver configuration, check every item in §1 of that reference and flag all misconfigurations.",{"type":42,"tag":63,"props":5292,"children":5294},{"id":5293},"throttling-writethrottleevents-readthrottleevents-capacity-planning",[5295,5297,5302,5303,5308],{"type":47,"value":5296},"Throttling \u002F ",{"type":42,"tag":80,"props":5298,"children":5300},{"className":5299},[],[5301],{"type":47,"value":804},{"type":47,"value":2047},{"type":42,"tag":80,"props":5304,"children":5306},{"className":5305},[],[5307],{"type":47,"value":797},{"type":47,"value":5309}," \u002F capacity planning",{"type":42,"tag":57,"props":5311,"children":5312},{},[5313,5314,5318],{"type":47,"value":3173},{"type":42,"tag":212,"props":5315,"children":5316},{"href":214},[5317],{"type":47,"value":217},{"type":47,"value":5319},". Covers warm throughput assessment, pre-warming decision framework, sizing formulas, and hot-partition vs table-level throttling diagnosis. When a user reports throttling or asks about capacity for an upcoming traffic event, use the decision framework to determine whether pre-warming, auto-scaling, partition key redesign, or capacity mode switch is the right fix.",{"type":42,"tag":63,"props":5321,"children":5323},{"id":5322},"region-not-found-region",[5324],{"type":42,"tag":80,"props":5325,"children":5327},{"className":5326},[],[5328],{"type":47,"value":5329},"Region not found: \u003Cregion>",{"type":42,"tag":57,"props":5331,"children":5332},{},[5333,5335,5339],{"type":47,"value":5334},"Wrong region code or Keyspaces unavailable there. Check ",{"type":42,"tag":212,"props":5336,"children":5337},{"href":2244},[5338],{"type":47,"value":2244},{"type":47,"value":189},{"type":42,"tag":63,"props":5341,"children":5343},{"id":5342},"parse-cassandrats-exits-with-usage",[5344,5349],{"type":42,"tag":80,"props":5345,"children":5347},{"className":5346},[],[5348],{"type":47,"value":843},{"type":47,"value":5350}," exits with \"Usage: …\"",{"type":42,"tag":57,"props":5352,"children":5353},{},[5354,5360,5361,5367],{"type":42,"tag":80,"props":5355,"children":5357},{"className":5356},[],[5358],{"type":47,"value":5359},"--tablestats",{"type":47,"value":3312},{"type":42,"tag":80,"props":5362,"children":5364},{"className":5363},[],[5365],{"type":47,"value":5366},"--info",{"type":47,"value":5368}," missing. Recapture or use Mode 1.",{"type":42,"tag":63,"props":5370,"children":5372},{"id":5371},"has_issues-false-but-user-expected-findings",[5373,5378],{"type":42,"tag":80,"props":5374,"children":5376},{"className":5375},[],[5377],{"type":47,"value":3418},{"type":47,"value":5379}," but user expected findings",{"type":42,"tag":57,"props":5381,"children":5382},{},[5383,5385,5389,5391,5397,5398,5404],{"type":47,"value":5384},"Only features in ",{"type":42,"tag":212,"props":5386,"children":5387},{"href":4659},[5388],{"type":47,"value":4662},{"type":47,"value":5390}," are flagged. ",{"type":42,"tag":80,"props":5392,"children":5394},{"className":5393},[],[5395],{"type":47,"value":5396},"ALLOW FILTERING",{"type":47,"value":264},{"type":42,"tag":80,"props":5399,"children":5401},{"className":5400},[],[5402],{"type":47,"value":5403},"TRUNCATE",{"type":47,"value":5405},", and most data types are supported.",{"type":42,"tag":63,"props":5407,"children":5409},{"id":5408},"context-overflow-when-reading-diagnostics",[5410],{"type":47,"value":5411},"Context overflow when reading diagnostics",{"type":42,"tag":57,"props":5413,"children":5414},{},[5415,5417,5422,5424,5429],{"type":47,"value":5416},"Do not ",{"type":42,"tag":80,"props":5418,"children":5420},{"className":5419},[],[5421],{"type":47,"value":3262},{"type":47,"value":5423}," large diagnostic files into context. Pass the directory to ",{"type":42,"tag":80,"props":5425,"children":5427},{"className":5426},[],[5428],{"type":47,"value":3270},{"type":47,"value":5430}," instead.",{"type":42,"tag":63,"props":5432,"children":5434},{"id":5433},"access-denied-capturing-remote-diagnostics",[5435],{"type":47,"value":5436},"Access denied capturing remote diagnostics",{"type":42,"tag":57,"props":5438,"children":5439},{},[5440,5442,5448],{"type":47,"value":5441},"Cassandra credentials or SigV4 plugin missing. See ",{"type":42,"tag":212,"props":5443,"children":5445},{"href":5444},"references\u002Fsecurity-considerations.md",[5446],{"type":47,"value":5447},"security-considerations.md",{"type":47,"value":189},{"type":42,"tag":63,"props":5450,"children":5452},{"id":5451},"npm-install-fails-in-scripts",[5453,5459,5461],{"type":42,"tag":80,"props":5454,"children":5456},{"className":5455},[],[5457],{"type":47,"value":5458},"npm install",{"type":47,"value":5460}," fails in ",{"type":42,"tag":80,"props":5462,"children":5464},{"className":5463},[],[5465],{"type":47,"value":828},{"type":42,"tag":57,"props":5467,"children":5468},{},[5469,5471,5476,5477,5483],{"type":47,"value":5470},"Node \u003C 18 or stale lockfile. Delete ",{"type":42,"tag":80,"props":5472,"children":5474},{"className":5473},[],[5475],{"type":47,"value":940},{"type":47,"value":2020},{"type":42,"tag":80,"props":5478,"children":5480},{"className":5479},[],[5481],{"type":47,"value":5482},"scripts\u002Fpackage-lock.json",{"type":47,"value":5484},", rerun.",{"type":42,"tag":63,"props":5486,"children":5488},{"id":5487},"lwt-inside-unlogged-batch-is-not-supported",[5489],{"type":47,"value":5490},"LWT inside UNLOGGED BATCH is NOT supported",{"type":42,"tag":57,"props":5492,"children":5493},{},[5494,5496,5502,5503,5509,5511,5517,5519,5524],{"type":47,"value":5495},"LWT (",{"type":42,"tag":80,"props":5497,"children":5499},{"className":5498},[],[5500],{"type":47,"value":5501},"IF NOT EXISTS",{"type":47,"value":264},{"type":42,"tag":80,"props":5504,"children":5506},{"className":5505},[],[5507],{"type":47,"value":5508},"IF EXISTS",{"type":47,"value":5510},", conditional updates) inside ",{"type":42,"tag":80,"props":5512,"children":5514},{"className":5513},[],[5515],{"type":47,"value":5516},"UNLOGGED BATCH",{"type":47,"value":5518}," is NOT supported on Amazon Keyspaces. LWT statements must be run individually (standalone). ",{"type":42,"tag":234,"props":5520,"children":5521},{},[5522],{"type":47,"value":5523},"LOGGED BATCH",{"type":47,"value":5525}," is also NOT supported on Keyspaces. Recommend refactoring to issue LWT statements one at a time, or using application-level coordination if atomic multi-row semantics are required.",{"type":42,"tag":50,"props":5527,"children":5529},{"id":5528},"additional-resources",[5530],{"type":47,"value":5531},"Additional Resources",{"type":42,"tag":70,"props":5533,"children":5534},{},[5535,5546,5556,5566,5576,5586],{"type":42,"tag":74,"props":5536,"children":5537},{},[5538],{"type":42,"tag":212,"props":5539,"children":5543},{"href":5540,"rel":5541},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Fwhat-is-keyspaces.html",[5542],"nofollow",[5544],{"type":47,"value":5545},"Keyspaces Developer Guide",{"type":42,"tag":74,"props":5547,"children":5548},{},[5549],{"type":42,"tag":212,"props":5550,"children":5553},{"href":5551,"rel":5552},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Ffunctional-differences.html",[5542],[5554],{"type":47,"value":5555},"Functional differences from Cassandra",{"type":42,"tag":74,"props":5557,"children":5558},{},[5559],{"type":42,"tag":212,"props":5560,"children":5563},{"href":5561,"rel":5562},"https:\u002F\u002Faws.amazon.com\u002Fkeyspaces\u002Fpricing\u002F",[5542],[5564],{"type":47,"value":5565},"Keyspaces Pricing",{"type":42,"tag":74,"props":5567,"children":5568},{},[5569],{"type":42,"tag":212,"props":5570,"children":5573},{"href":5571,"rel":5572},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Fcassandra-apis.html",[5542],[5574],{"type":47,"value":5575},"CQL support",{"type":42,"tag":74,"props":5577,"children":5578},{},[5579],{"type":42,"tag":212,"props":5580,"children":5583},{"href":5581,"rel":5582},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fkeyspaces\u002Flatest\u002Fdevguide\u002Fsecurity-iam.html",[5542],[5584],{"type":47,"value":5585},"IAM for Keyspaces",{"type":42,"tag":74,"props":5587,"children":5588},{},[5589,5591,5597],{"type":47,"value":5590},"Reference files in ",{"type":42,"tag":80,"props":5592,"children":5594},{"className":5593},[],[5595],{"type":47,"value":5596},"references\u002F",{"type":47,"value":5598},": mode-1-manual-inputs, mode-2-cassandra-diagnostics, mode-3-compatibility, mode-4-sql-migration, pdf-reporting, keyspaces-unsupported-features, cassandra-capture-commands, security-considerations.",{"type":42,"tag":50,"props":5600,"children":5602},{"id":5601},"handoff-from-aws-database-selection",[5603],{"type":47,"value":5604},"Handoff from aws-database-selection",{"type":42,"tag":57,"props":5606,"children":5607},{},[5608,5610,5616,5618,5624,5626,5632,5634,5640],{"type":47,"value":5609},"This skill can be invoked directly, or it can be entered from the ",{"type":42,"tag":80,"props":5611,"children":5613},{"className":5612},[],[5614],{"type":47,"value":5615},"aws-database-selection",{"type":47,"value":5617}," parent skill after that skill has run a requirements interview and produced a ",{"type":42,"tag":80,"props":5619,"children":5621},{"className":5620},[],[5622],{"type":47,"value":5623},"requirements.json",{"type":47,"value":5625}," artifact. When you see a backtick-wrapped path matching ",{"type":42,"tag":80,"props":5627,"children":5629},{"className":5628},[],[5630],{"type":47,"value":5631},"aws_dbs_requirements\u002F*\u002Frequirements.json",{"type":47,"value":5633}," in recent conversation, follow the entry protocol in ",{"type":42,"tag":80,"props":5635,"children":5637},{"className":5636},[],[5638],{"type":47,"value":5639},"aws-database-selection\u002Freferences\u002Fhandoff-contract.md",{"type":47,"value":1082},{"type":42,"tag":876,"props":5642,"children":5643},{},[5644,5655,5668,5680,5715],{"type":42,"tag":74,"props":5645,"children":5646},{},[5647,5649,5654],{"type":47,"value":5648},"Read the artifact using ",{"type":42,"tag":80,"props":5650,"children":5652},{"className":5651},[],[5653],{"type":47,"value":3262},{"type":47,"value":189},{"type":42,"tag":74,"props":5656,"children":5657},{},[5658,5660,5666],{"type":47,"value":5659},"Validate it against ",{"type":42,"tag":80,"props":5661,"children":5663},{"className":5662},[],[5664],{"type":47,"value":5665},"aws-database-selection\u002Freferences\u002Fworkload-primary-artifact.schema.json",{"type":47,"value":5667},". If malformed or unreadable, tell the user and proceed without it.",{"type":42,"tag":74,"props":5669,"children":5670},{},[5671,5673,5678],{"type":47,"value":5672},"Acknowledge what's relevant in one or two ",{"type":42,"tag":234,"props":5674,"children":5675},{},[5676],{"type":47,"value":5677},"bold",{"type":47,"value":5679}," sentences, citing high-level facts from the artifact (dominant shapes, hard constraints, migration context) — do not parrot the entire artifact back.",{"type":42,"tag":74,"props":5681,"children":5682},{},[5683,5685,5691,5692,5698,5700,5706,5708,5713],{"type":47,"value":5684},"Scope-check: this skill is scoped to Amazon Keyspaces (Cassandra) cost estimation, schema compatibility, and SQL-to-Cassandra translation. If the artifact's ",{"type":42,"tag":80,"props":5686,"children":5688},{"className":5687},[],[5689],{"type":47,"value":5690},"workload_primaries.dominant_shapes",{"type":47,"value":3312},{"type":42,"tag":80,"props":5693,"children":5695},{"className":5694},[],[5696],{"type":47,"value":5697},"migration_context",{"type":47,"value":5699}," don't match that scope, emit weak backpressure per the handoff contract: suggest ",{"type":42,"tag":80,"props":5701,"children":5703},{"className":5702},[],[5704],{"type":47,"value":5705},"dynamodb-skill",{"type":47,"value":5707}," for key-access NoSQL without Cassandra compatibility requirements, or go back to ",{"type":42,"tag":80,"props":5709,"children":5711},{"className":5710},[],[5712],{"type":47,"value":5615},{"type":47,"value":5714}," if the dominant shape isn't wide-column, then ask the user whether to go back or proceed anyway. Do not silently misuse the artifact.",{"type":42,"tag":74,"props":5716,"children":5717},{},[5718],{"type":47,"value":5719},"Proceed with this skill's native workflow, citing artifact paths as evidence when recommendations are grounded in the requirements.",{"type":42,"tag":57,"props":5721,"children":5722},{},[5723],{"type":47,"value":5724},"All user-facing output from this skill follows the markdown-primitives-only formatting convention in the handoff contract: bold labels, backticks for paths and enum values, bullet lists for alternatives, no ASCII art or box-drawing characters.",{"type":42,"tag":5726,"props":5727,"children":5728},"style",{},[5729],{"type":47,"value":5730},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5732,"total":5836},[5733,5750,5765,5780,5795,5805,5820],{"slug":5734,"name":5734,"fn":5735,"description":5736,"org":5737,"tags":5738,"stars":24,"repoUrl":25,"updatedAt":5749},"agents-build","add capabilities to existing agent projects","Use when adding capabilities to an existing agent project — memory, app integration, VPC, multi-agent, migration, model changes, browser, code interpreter, or resource removal. Triggers on: \"add memory\", \"remember across sessions\", \"call agent from app\", \"invoke agent from code\", \"auth to call agent\", \"streaming responses\", \"VPC\", \"VPC connectivity\", \"VPC error\", \"can't reach from VPC\", \"multi-agent\", \"A2A\", \"A2A auth\", \"orchestrator not delegating\", \"specialist not called\", \"migrate Bedrock Agent\", \"after import\", \"migration issue\", \"framework for migration\", \"change model\", \"browser tool\", \"code interpreter\", \"delete agent\", \"tear down\", \"agentcore remove\", \"cross-account memory\", \"resource-based policy on memory\", \"pay for x402 content\", \"402 Payment Required\", \"microtransactions\", \"paid API or tool\". Not for connecting to external APIs via Gateway — use agents-connect. Not for scaffolding a new project — use agents-get-started. Not for CLI\u002Fdev server errors — use agents-debug. Strands vs LangGraph in a migration context routes here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5739,5742,5745,5746],{"name":5740,"slug":5741,"type":15},"Agents","agents",{"name":5743,"slug":5744,"type":15},"Automation","automation",{"name":23,"slug":8,"type":15},{"name":5747,"slug":5748,"type":15},"Engineering","engineering","2026-07-12T08:42:53.812877",{"slug":5751,"name":5751,"fn":5752,"description":5753,"org":5754,"tags":5755,"stars":24,"repoUrl":25,"updatedAt":5764},"agents-connect","connect agents to external services","Use when connecting your agent to external APIs, tools, or services via Gateway, or restricting tool access with Cedar policies. Handles gateway setup, target types, outbound auth (OAuth, API key, IAM), credentials, and Cedar policy authoring. Triggers on: \"connect to API\", \"add gateway\", \"connect to MCP server\", \"Lambda tools\", \"OpenAPI\", \"gateway target\", \"Cedar policy\", \"restrict tools\", \"policy engine\", \"gateway auth error\", \"store API key\", \"outbound credential\", \"env var API key\", \"API key None after deploy\", \"credential not available after deploy\", \"should this be a gateway target\", \"give my agent tools\", \"add tools to agent\". Not for inbound auth (who can call your agent) — use agents-harden. Not for debugging agent behavior — use agents-debug. Not for VPC networking errors (agent can't reach APIs due to VPC) — use agents-build. Not for creating or hosting a new MCP server project — use agents-get-started.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5756,5757,5760,5763],{"name":5740,"slug":5741,"type":15},{"name":5758,"slug":5759,"type":15},"API Development","api-development",{"name":5761,"slug":5762,"type":15},"Authentication","authentication",{"name":23,"slug":8,"type":15},"2026-07-16T06:00:38.866147",{"slug":5766,"name":5766,"fn":5767,"description":5768,"org":5769,"tags":5770,"stars":24,"repoUrl":25,"updatedAt":5779},"agents-debug","debug agent and environment issues","Use when your agent or environment is broken — wrong answers, errors, timeouts, tool failures, or CLI issues. Reads traces and logs to diagnose root causes. Also checks prerequisites when the CLI itself isn't working. Triggers on: \"agent not working\", \"wrong answer\", \"agent error\", \"tool call failing\", \"debug agent\", \"check logs\", \"read traces\", \"broken\", \"500 error\", \"424 error\", \"model access denied\", \"command not found\", \"stuck in DELETING\", \"maxVms exceeded\", \"cold start diagnosis\", \"cold start slow\", \"agentcore create error\", \"create failed\", \"exit code 7\", \"connection refused local dev\". Not for deploy failures — use agents-deploy. Not for performance tuning without errors — use agents-optimize. Not for VPC configuration — use agents-build. Not for observability setup or missing logs — use agents-optimize.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5771,5772,5773,5776],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5774,"slug":5775,"type":15},"Debugging","debugging",{"name":5777,"slug":5778,"type":15},"Observability","observability","2026-07-16T06:00:44.679093",{"slug":5781,"name":5781,"fn":5782,"description":5783,"org":5784,"tags":5785,"stars":24,"repoUrl":25,"updatedAt":5794},"agents-deploy","deploy AI agents to AWS","Use when deploying your agent to AWS, or when a deploy has failed. Handles pre-flight validation, CDK\u002FIAM\u002Fquota error diagnosis, version management, rollback, and canary deployments. Triggers on: \"deploy my agent\", \"agentcore deploy\", \"deploy failed\", \"CDK error\", \"rollback\", \"canary deploy\", \"pin version\", \"redeploy\", \"deploy stuck\". Not for production hardening — use agents-harden. Not for adding capabilities before deploy — use agents-build or agents-connect. Not for VPC configuration errors — use agents-build.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5786,5787,5788,5791],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5789,"slug":5790,"type":15},"CI\u002FCD","ci-cd",{"name":5792,"slug":5793,"type":15},"Deployment","deployment","2026-07-12T08:42:55.059577",{"slug":5796,"name":5796,"fn":5797,"description":5798,"org":5799,"tags":5800,"stars":24,"repoUrl":25,"updatedAt":5804},"agents-get-started","scaffold and deploy new agent projects","Use when a developer wants to create a new agent project or get started with AgentCore. Handles framework selection, project scaffolding, first deploy, and first invocation. Triggers on: \"build an agent\", \"create an agent\", \"get started\", \"new project\", \"agentcore create\", \"which framework\", \"Strands vs LangGraph\", \"hello world agent\", \"first agent\", \"create MCP server\", \"host MCP server\", \"agentcore dev\", \"dev server\", \"what port\", \"local development\". Not for adding capabilities to existing projects — use agents-build or agents-connect. Strands vs LangGraph in a migration context routes to agents-build, not here. Connecting to an existing MCP server routes to agents-connect, not here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5801,5802,5803],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5792,"slug":5793,"type":15},"2026-07-12T08:42:51.963247",{"slug":5806,"name":5806,"fn":5807,"description":5808,"org":5809,"tags":5810,"stars":24,"repoUrl":25,"updatedAt":5819},"agents-harden","harden agents for production","Use when preparing your agent for production — IAM scoping, inbound auth (JWT, SigV4), secrets management, cold start optimization, session lifecycle, rate limiting, input validation, and quota guidance. Triggers on: \"production checklist\", \"harden agent\", \"production ready\", \"secure agent\", \"inbound auth\", \"going live\", \"cold start optimization\", \"session lifecycle\", \"StopRuntimeSession\", \"quota\", \"throttling\", \"maxVms\", \"rate limit\", \"security audit of outbound API calls\", \"gateway target audit for production\", \"restrict who can call\", \"lock down endpoint\", \"only our app can call\". Not for Cedar tool-restriction policies — use agents-connect. Not for quality measurement — use agents-optimize. Not for outbound credential storage or API key wiring — use agents-connect. Not for A2A agent-to-agent auth — use agents-build. Cold start observation and diagnosis (not optimization) routes to agents-debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5811,5812,5813,5816],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5814,"slug":5815,"type":15},"Best Practices","best-practices",{"name":5817,"slug":5818,"type":15},"Security","security","2026-07-16T06:00:42.174705",{"slug":5821,"name":5821,"fn":5822,"description":5823,"org":5824,"tags":5825,"stars":24,"repoUrl":25,"updatedAt":5835},"agents-optimize","optimize agent quality and performance","Use when measuring or improving agent quality and performance — set up evaluators, online monitoring, CI\u002FCD quality gates, observability, or cost optimization. Triggers on: \"evaluate my agent\", \"add evaluator\", \"measure quality\", \"quality gate\", \"run evals\", \"agent too slow\", \"why is it slow\", \"reduce latency\", \"set up observability\", \"CloudWatch dashboard\", \"how much does my agent cost\", \"cost optimization\", \"logs not showing up\", \"logs missing\", \"spans not found\", \"eval failing\", \"eval error\", \"dev traces\", \"local traces\", \"agentcore dev traces\", \"traces to CloudWatch\". Not for debugging errors or crashes — use agents-debug. Slow but correct routes here; broken routes to debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5826,5827,5828,5831,5832],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5829,"slug":5830,"type":15},"Evals","evals",{"name":5777,"slug":5778,"type":15},{"name":5833,"slug":5834,"type":15},"Performance","performance","2026-07-12T08:42:56.488105",114,{"items":5838,"total":5953},[5839,5846,5853,5860,5867,5873,5880,5888,5903,5916,5928,5943],{"slug":5734,"name":5734,"fn":5735,"description":5736,"org":5840,"tags":5841,"stars":24,"repoUrl":25,"updatedAt":5749},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5842,5843,5844,5845],{"name":5740,"slug":5741,"type":15},{"name":5743,"slug":5744,"type":15},{"name":23,"slug":8,"type":15},{"name":5747,"slug":5748,"type":15},{"slug":5751,"name":5751,"fn":5752,"description":5753,"org":5847,"tags":5848,"stars":24,"repoUrl":25,"updatedAt":5764},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5849,5850,5851,5852],{"name":5740,"slug":5741,"type":15},{"name":5758,"slug":5759,"type":15},{"name":5761,"slug":5762,"type":15},{"name":23,"slug":8,"type":15},{"slug":5766,"name":5766,"fn":5767,"description":5768,"org":5854,"tags":5855,"stars":24,"repoUrl":25,"updatedAt":5779},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5856,5857,5858,5859],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5774,"slug":5775,"type":15},{"name":5777,"slug":5778,"type":15},{"slug":5781,"name":5781,"fn":5782,"description":5783,"org":5861,"tags":5862,"stars":24,"repoUrl":25,"updatedAt":5794},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5863,5864,5865,5866],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5789,"slug":5790,"type":15},{"name":5792,"slug":5793,"type":15},{"slug":5796,"name":5796,"fn":5797,"description":5798,"org":5868,"tags":5869,"stars":24,"repoUrl":25,"updatedAt":5804},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5870,5871,5872],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5792,"slug":5793,"type":15},{"slug":5806,"name":5806,"fn":5807,"description":5808,"org":5874,"tags":5875,"stars":24,"repoUrl":25,"updatedAt":5819},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5876,5877,5878,5879],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5814,"slug":5815,"type":15},{"name":5817,"slug":5818,"type":15},{"slug":5821,"name":5821,"fn":5822,"description":5823,"org":5881,"tags":5882,"stars":24,"repoUrl":25,"updatedAt":5835},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5883,5884,5885,5886,5887],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5829,"slug":5830,"type":15},{"name":5777,"slug":5778,"type":15},{"name":5833,"slug":5834,"type":15},{"slug":5889,"name":5889,"fn":5890,"description":5891,"org":5892,"tags":5893,"stars":24,"repoUrl":25,"updatedAt":5902},"amazon-aurora-mysql","manage Amazon Aurora MySQL clusters","Amazon Aurora MySQL — creates, modifies, and advises on Aurora MySQL clusters specifically (MySQL-compatible engine, Aurora serverless, parallel query). Trigger for Aurora MySQL cluster operations, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or MySQL upgrade planning. Aurora MySQL uses full (VPC-based) configuration — express configuration is PostgreSQL-only. For Aurora PostgreSQL, use amazon-aurora-postgresql instead. Contains safety guardrails and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5894,5895,5896,5899],{"name":23,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":5897,"slug":5898,"type":15},"MySQL","mysql",{"name":5900,"slug":5901,"type":15},"Serverless","serverless","2026-07-12T08:43:13.27939",{"slug":5904,"name":5904,"fn":5905,"description":5906,"org":5907,"tags":5908,"stars":24,"repoUrl":25,"updatedAt":5915},"amazon-aurora-postgresql","configure Amazon Aurora PostgreSQL clusters","Amazon Aurora PostgreSQL — creates, modifies, and advises on Aurora PostgreSQL clusters specifically (PostgreSQL-compatible engine, Aurora serverless, express configuration, pgvector, Babelfish). Trigger for Aurora PostgreSQL cluster operations, express-configuration quick-start, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or PostgreSQL upgrade planning. For Aurora MySQL, use amazon-aurora-mysql instead. Contains safety guardrails, express-first routing, and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5909,5910,5911,5914],{"name":23,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":5912,"slug":5913,"type":15},"PostgreSQL","postgresql",{"name":5900,"slug":5901,"type":15},"2026-07-16T06:00:34.789624",{"slug":5917,"name":5917,"fn":5918,"description":5919,"org":5920,"tags":5921,"stars":24,"repoUrl":25,"updatedAt":5927},"amazon-bedrock","build generative AI apps with Amazon Bedrock","Builds generative AI applications on Amazon Bedrock. Covers model invocation (Converse API, InvokeModel), RAG with Knowledge Bases, Bedrock Agents, Guardrails, and AgentCore. Use when invoking models, setting up Knowledge Bases, creating agents, applying guardrails, deploying to AgentCore, migrating\u002Fporting\u002Fconverting a Bedrock Agent (including inline agents) to an AgentCore Harness, troubleshooting Bedrock errors (ThrottlingException, AccessDeniedException), or choosing models (Claude, Llama, Nova, Titan). ALSO USE for prompt caching setup and debugging, quota health checks and throttling diagnosis, cost attribution and tracking, migrating between Claude model generations (4.5 to 4.6 to 4.7), chunking strategies, API selection (Converse vs InvokeModel), guardrail capabilities, and model selection. Also covers AgentCore Payments setup (x402, microtransactions, Payment Manager, Connector, Instrument, Coinbase CDP, Stripe Privy, 402 Payment Required, pay for content, paid endpoint, agent payments). NOT for custom model training, Rekognition, or Comprehend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5922,5923,5924],{"name":5740,"slug":5741,"type":15},{"name":23,"slug":8,"type":15},{"name":5925,"slug":5926,"type":15},"LLM","llm","2026-07-25T05:30:35.20899",{"slug":5929,"name":5929,"fn":5930,"description":5931,"org":5932,"tags":5933,"stars":24,"repoUrl":25,"updatedAt":5942},"amazon-documentdb","manage Amazon DocumentDB clusters","Manages Amazon DocumentDB end-to-end — serverless-on-8.0 cluster setup, TLS\u002FVPC\u002Fdriver config, flexible-schema and vector-search data modeling, MongoDB compatibility assessment, DMS-based migration, slow-query diagnosis, major version upgrades (4.0→5.0→8.0), Well-Architected reviews (41-check wa_review.py), cost estimation, and security hardening. Retrieve for every DocumentDB question and when the user asks to set up or migrate MongoDB to AWS — DocumentDB is AWS's MongoDB-compatible managed database. Triggers: JSON document store, document database, MongoDB on AWS, Nested fields, Lambda cannot connect, TLS handshake, VPC port 27017, IAM auth, Secrets Manager, encryption at rest, $graphLookup, flexible schema, COLLSCAN, compound index, DMS migration, CDC cutover, $vectorSearch, RAG, Global Clusters, DR replication, cost sizing, audit, health check, production-readiness.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5934,5935,5936,5939],{"name":23,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":5937,"slug":5938,"type":15},"MongoDB","mongodb",{"name":5940,"slug":5941,"type":15},"NoSQL","nosql","2026-07-12T08:43:00.455878",{"slug":5944,"name":5944,"fn":5945,"description":5946,"org":5947,"tags":5948,"stars":24,"repoUrl":25,"updatedAt":5952},"amazon-dynamodb","design and debug DynamoDB data layers","Designs, reviews, and debugs DynamoDB data layers from design axioms — enumerates access patterns, chooses partition\u002Fsort keys and GSIs, decides single-table vs. multi-table, configures Streams, Global Tables, TTL, and zero-ETL integrations to OpenSearch\u002FRedshift\u002FSageMaker Lakehouse, and produces a defensible data-layer design with a monthly cost estimate and optional live validation. Applies whenever a user is designing, reviewing, or refactoring anything backed by DynamoDB — schemas, access patterns, GSIs, single- vs. multi-table choices, Streams consumers, transactional outboxes, Global Tables, zero-ETL pipelines — even when they don't say \"axioms\" or \"design review.\" Also applies when debugging hot partitions, throttling, unbounded Scans, LWW conflicts, or surprise bills on DynamoDB workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5949,5950,5951],{"name":23,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":5940,"slug":5941,"type":15},"2026-07-16T06:00:37.690386",115]