[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-planetscale-planetscale-customer-report-template":3,"mdc--z18zzr-key":34,"related-org-planetscale-planetscale-customer-report-template":804,"related-repo-planetscale-planetscale-customer-report-template":970},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"planetscale-customer-report-template","generate PlanetScale best practices reports","Produce the final PlanetScale best-practices report after running the inventory and relevant review skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"planetscale","PlanetScale","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fplanetscale.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Reporting","reporting","tag",{"name":17,"slug":18,"type":15},"Documentation","documentation",{"name":20,"slug":21,"type":15},"Templates","templates",{"name":9,"slug":8,"type":15},50,"https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fskills","2026-07-07T06:38:37.362061",null,1,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Skills that help you configure and get the most out of PlanetScale","https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fskills\u002Ftree\u002FHEAD\u002F10-customer-report-template","---\nname: planetscale-customer-report-template\ndescription: Produce the final PlanetScale best-practices report after running the inventory and relevant review skills.\n---\n\n# Customer report template\n\n## Purpose\n\nProduce a clear assessment report for a customer database and optional connected repository. The report should be actionable, evidence-backed, and safe. It should separate recommendations from applied changes.\n\n## Tone and framing\n\nThe report's purpose is an accurate assessment that helps the customer get\nfull value from the platform they run. Feature adoption follows from\nevidence, never from framing. The register is technical and declarative —\nan engineer's assessment, not marketing copy.\n\n- **State unused features as capability gaps with quantified impact.**\n  Never write \"off (good)\", \"not enabled (safe)\", or otherwise present\n  non-adoption as a positive finding. The correct form is: current state,\n  what the feature provides, the measured finding it applies to.\n  Example: \"Raw query collection: disabled. Enabling it exposes literal\n  parameter values per execution; applicable to Q1 (38% of total query\n  time), where the pattern-level data is insufficient to isolate the\n  triggering invocation.\"\n- **No enthusiasm markers.** Do not use phrases like \"earning its keep\",\n  \"paying off\", \"easy to adopt\", \"cutting root-cause time from hours to\n  minutes\", or exclamation of any kind. State the mechanism and the\n  measurement; let the numbers carry the argument.\n- **Operational costs are stated inline as facts**, not softened:\n  \"literal values become visible to the observability pipeline\" is a\n  property of the feature, stated once, without reassurance.\n- **Every recommendation cites the specific finding it addresses** —\n  fingerprint, metric, event count, time window. A recommendation without\n  a measurement attached is incomplete.\n- **Active features are assessed, not praised.** If a feature is enabled,\n  report what it is currently doing in measurable terms (\"anomaly\n  detection flagged the connection spike 9 times in 7 days; no delivery\n  channel is configured\") and whether its configuration is complete.\n- Fit is part of the analysis: if the evidence does not support a\n  feature for this customer, state that.\n- **Recommendations are framed by what the change provides, not by the\n  threat of the current state.** Write \"a dedicated application role\n  scopes credentials per service and enables rotation without downtime\",\n  not \"limits the blast radius of credential compromise\". Avoid\n  dramatizing vocabulary: \"blast radius\", \"unprotected\", \"exposed\",\n  \"public-by-default\", \"at risk\". Real risks are still stated, as facts —\n  \"the production branch runs zero replicas; recovery from a primary\n  failure requires a restore\" is a finding and belongs in the report.\n  What is excluded is dramatization, not disclosure.\n- **Platform behavior is reported with verified semantics, not\n  assumptions.** When two API surfaces show different values, they are\n  usually distinct settings — check the documentation and report the\n  effective state. Do not label platform behavior inconsistent,\n  contradictory, or buggy on an unverified assumption. If the semantics\n  cannot be verified, state what each surface reports without drawing a\n  conclusion and direct the question to PlanetScale support. If verified\n  platform behavior is actually wrong, report it factually and route it\n  to PlanetScale support — it is a platform issue, not a customer\n  configuration finding.\n\n## Run mechanics are separated from findings\n\nFailures of the assessment tooling — HTTP status codes, MCP errors, CLI\nfailures, token scope problems, timeouts, endpoint probes — describe the\nrun, not the database. They belong in the run log, not in the findings.\n\n- Where evidence could not be collected, the report says \"not assessed in\n  this run\" with no error mechanics attached.\n- The evidence appendix contains collected evidence.\n- The run log (tool errors, paths tried, access gaps) accompanies the\n  report and is available to whoever ran the assessment — nothing is\n  withheld. The separation exists because tool errors say nothing about\n  the customer's database.\n- Never conclude a feature is unconfigured from a failed call. \"Not\n  configured\" requires a successful call that returned an empty result.\n\n## Output surface\n\nThe report is plain markdown: headed sections, prose, and pipe tables. This is the baseline and it must always be produced in full — it works in any agent, terminal, or chat surface. If the host agent offers a richer rendering surface (Cursor canvas, HTML preview, a dashboard), it may be used **in addition to** the markdown report, never instead of it.\n\n## Required report format\n\n# PlanetScale best-practices assessment\n\n## Scope\n\n- Organization:\n- Database:\n- Branches reviewed:\n- Engine:\n- Repository reviewed:\n- Interfaces used:\n- Time window:\n- Changes applied: none\n\n## Executive summary\n\nWrite 3-7 bullets. The first bullet states what the platform is currently\ndoing for this database, factually and with measurements — for example:\nreplica topology and failover posture, backup cadence and last successful\nbackup, Insights collection volume, safety features active. This is not\npraise; it is the operating baseline the rest of the report builds on.\nThen:\n\n- Highest-risk safety gaps.\n- Highest-value observability improvements.\n- Highest-value automation opportunities.\n- Engine-specific workflow gaps.\n- Repository instrumentation gaps.\n\n## Current state\n\n### Database and branch topology\n\nInclude evidence.\n\n### Safety workflow\n\nFor Vitess:\n\n- Safe migrations.\n- Deploy requests.\n- Approval requirements.\n- Gated deployment usage.\n- Schema revert runbook.\n\nFor Postgres:\n\n- Branch migration workflow.\n- Roles.\n- pg_strict.\n- Traffic Control.\n- Backups\u002FPITR.\n- Connection pooling.\n- Private connectivity and IP restrictions.\n\n### Observability\n\n- Query Insights state.\n- Anomalies.\n- Query tags.\n- Raw query collection posture.\n- Schema recommendations.\n\n### Automation\n\n- Webhooks.\n- Agent loops.\n- CI\u002FPR workflows.\n- Incident routing.\n\n### Repository instrumentation\n\n- Frameworks and ORMs detected.\n- Current SQL comments or tracing.\n- Recommended SQLCommenter package\u002Fpath.\n- Tag schema.\n\n## Recommendations\n\nUse this table structure:\n\n| ID | Recommendation | Target | Benefit | Risk | Approval needed | Test first? | Evidence |\n|---|---|---|---|---|---|---|---|\n\nRecommendation IDs:\n\n- `OBS-*` for Insights\u002Fquery tags.\n- `VIT-*` for Vitess safety\u002Fdeploy workflow.\n- `PG-*` for Postgres roles, pg_strict, Traffic Control, PITR, network.\n- `WEB-*` for webhooks and automation.\n- `APP-*` for repository instrumentation.\n- `AGENT-*` for MCP\u002Fagent workflows.\n\n## Proposed change set requiring approval\n\nFor every proposed change, include:\n\n- ID.\n- Exact target.\n- Exact change.\n- Interface to use.\n- Why it is recommended.\n- Expected effect.\n- Possible availability impact.\n- Test plan.\n- Rollback plan.\n- Whether it changes production.\n\n## Changes intentionally not applied\n\nState clearly:\n\n- No PlanetScale settings changed.\n- No schema changed.\n- No traffic controls changed.\n- No roles or credentials changed.\n- No webhooks changed.\n- No code changed.\n- No branches, backups, restores, deploy requests, or migrations created.\n\n## Evidence appendix\n\nFor each evidence item:\n\n- Source.\n- Command\u002FAPI\u002FMCP\u002Frepository path.\n- Timestamp.\n- Value.\n- Notes.\n\n## Final required sentence\n\nEnd the report with:\n\n“No changes have been applied. Approve specific change IDs before any mutation.”\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,55,61,67,72,153,159,164,187,193,205,211,217,223,266,272,277,305,311,318,323,329,334,362,367,405,411,439,445,468,474,497,503,508,561,566,636,642,647,700,706,711,749,755,760,788,794,799],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"customer-report-template",[45],{"type":46,"value":47},"text","Customer report template",{"type":40,"tag":49,"props":50,"children":52},"h2",{"id":51},"purpose",[53],{"type":46,"value":54},"Purpose",{"type":40,"tag":56,"props":57,"children":58},"p",{},[59],{"type":46,"value":60},"Produce a clear assessment report for a customer database and optional connected repository. The report should be actionable, evidence-backed, and safe. It should separate recommendations from applied changes.",{"type":40,"tag":49,"props":62,"children":64},{"id":63},"tone-and-framing",[65],{"type":46,"value":66},"Tone and framing",{"type":40,"tag":56,"props":68,"children":69},{},[70],{"type":46,"value":71},"The report's purpose is an accurate assessment that helps the customer get\nfull value from the platform they run. Feature adoption follows from\nevidence, never from framing. The register is technical and declarative —\nan engineer's assessment, not marketing copy.",{"type":40,"tag":73,"props":74,"children":75},"ul",{},[76,88,98,108,118,128,133,143],{"type":40,"tag":77,"props":78,"children":79},"li",{},[80,86],{"type":40,"tag":81,"props":82,"children":83},"strong",{},[84],{"type":46,"value":85},"State unused features as capability gaps with quantified impact.",{"type":46,"value":87},"\nNever write \"off (good)\", \"not enabled (safe)\", or otherwise present\nnon-adoption as a positive finding. The correct form is: current state,\nwhat the feature provides, the measured finding it applies to.\nExample: \"Raw query collection: disabled. Enabling it exposes literal\nparameter values per execution; applicable to Q1 (38% of total query\ntime), where the pattern-level data is insufficient to isolate the\ntriggering invocation.\"",{"type":40,"tag":77,"props":89,"children":90},{},[91,96],{"type":40,"tag":81,"props":92,"children":93},{},[94],{"type":46,"value":95},"No enthusiasm markers.",{"type":46,"value":97}," Do not use phrases like \"earning its keep\",\n\"paying off\", \"easy to adopt\", \"cutting root-cause time from hours to\nminutes\", or exclamation of any kind. State the mechanism and the\nmeasurement; let the numbers carry the argument.",{"type":40,"tag":77,"props":99,"children":100},{},[101,106],{"type":40,"tag":81,"props":102,"children":103},{},[104],{"type":46,"value":105},"Operational costs are stated inline as facts",{"type":46,"value":107},", not softened:\n\"literal values become visible to the observability pipeline\" is a\nproperty of the feature, stated once, without reassurance.",{"type":40,"tag":77,"props":109,"children":110},{},[111,116],{"type":40,"tag":81,"props":112,"children":113},{},[114],{"type":46,"value":115},"Every recommendation cites the specific finding it addresses",{"type":46,"value":117}," —\nfingerprint, metric, event count, time window. A recommendation without\na measurement attached is incomplete.",{"type":40,"tag":77,"props":119,"children":120},{},[121,126],{"type":40,"tag":81,"props":122,"children":123},{},[124],{"type":46,"value":125},"Active features are assessed, not praised.",{"type":46,"value":127}," If a feature is enabled,\nreport what it is currently doing in measurable terms (\"anomaly\ndetection flagged the connection spike 9 times in 7 days; no delivery\nchannel is configured\") and whether its configuration is complete.",{"type":40,"tag":77,"props":129,"children":130},{},[131],{"type":46,"value":132},"Fit is part of the analysis: if the evidence does not support a\nfeature for this customer, state that.",{"type":40,"tag":77,"props":134,"children":135},{},[136,141],{"type":40,"tag":81,"props":137,"children":138},{},[139],{"type":46,"value":140},"Recommendations are framed by what the change provides, not by the\nthreat of the current state.",{"type":46,"value":142}," Write \"a dedicated application role\nscopes credentials per service and enables rotation without downtime\",\nnot \"limits the blast radius of credential compromise\". Avoid\ndramatizing vocabulary: \"blast radius\", \"unprotected\", \"exposed\",\n\"public-by-default\", \"at risk\". Real risks are still stated, as facts —\n\"the production branch runs zero replicas; recovery from a primary\nfailure requires a restore\" is a finding and belongs in the report.\nWhat is excluded is dramatization, not disclosure.",{"type":40,"tag":77,"props":144,"children":145},{},[146,151],{"type":40,"tag":81,"props":147,"children":148},{},[149],{"type":46,"value":150},"Platform behavior is reported with verified semantics, not\nassumptions.",{"type":46,"value":152}," When two API surfaces show different values, they are\nusually distinct settings — check the documentation and report the\neffective state. Do not label platform behavior inconsistent,\ncontradictory, or buggy on an unverified assumption. If the semantics\ncannot be verified, state what each surface reports without drawing a\nconclusion and direct the question to PlanetScale support. If verified\nplatform behavior is actually wrong, report it factually and route it\nto PlanetScale support — it is a platform issue, not a customer\nconfiguration finding.",{"type":40,"tag":49,"props":154,"children":156},{"id":155},"run-mechanics-are-separated-from-findings",[157],{"type":46,"value":158},"Run mechanics are separated from findings",{"type":40,"tag":56,"props":160,"children":161},{},[162],{"type":46,"value":163},"Failures of the assessment tooling — HTTP status codes, MCP errors, CLI\nfailures, token scope problems, timeouts, endpoint probes — describe the\nrun, not the database. They belong in the run log, not in the findings.",{"type":40,"tag":73,"props":165,"children":166},{},[167,172,177,182],{"type":40,"tag":77,"props":168,"children":169},{},[170],{"type":46,"value":171},"Where evidence could not be collected, the report says \"not assessed in\nthis run\" with no error mechanics attached.",{"type":40,"tag":77,"props":173,"children":174},{},[175],{"type":46,"value":176},"The evidence appendix contains collected evidence.",{"type":40,"tag":77,"props":178,"children":179},{},[180],{"type":46,"value":181},"The run log (tool errors, paths tried, access gaps) accompanies the\nreport and is available to whoever ran the assessment — nothing is\nwithheld. The separation exists because tool errors say nothing about\nthe customer's database.",{"type":40,"tag":77,"props":183,"children":184},{},[185],{"type":46,"value":186},"Never conclude a feature is unconfigured from a failed call. \"Not\nconfigured\" requires a successful call that returned an empty result.",{"type":40,"tag":49,"props":188,"children":190},{"id":189},"output-surface",[191],{"type":46,"value":192},"Output surface",{"type":40,"tag":56,"props":194,"children":195},{},[196,198,203],{"type":46,"value":197},"The report is plain markdown: headed sections, prose, and pipe tables. This is the baseline and it must always be produced in full — it works in any agent, terminal, or chat surface. If the host agent offers a richer rendering surface (Cursor canvas, HTML preview, a dashboard), it may be used ",{"type":40,"tag":81,"props":199,"children":200},{},[201],{"type":46,"value":202},"in addition to",{"type":46,"value":204}," the markdown report, never instead of it.",{"type":40,"tag":49,"props":206,"children":208},{"id":207},"required-report-format",[209],{"type":46,"value":210},"Required report format",{"type":40,"tag":41,"props":212,"children":214},{"id":213},"planetscale-best-practices-assessment",[215],{"type":46,"value":216},"PlanetScale best-practices assessment",{"type":40,"tag":49,"props":218,"children":220},{"id":219},"scope",[221],{"type":46,"value":222},"Scope",{"type":40,"tag":73,"props":224,"children":225},{},[226,231,236,241,246,251,256,261],{"type":40,"tag":77,"props":227,"children":228},{},[229],{"type":46,"value":230},"Organization:",{"type":40,"tag":77,"props":232,"children":233},{},[234],{"type":46,"value":235},"Database:",{"type":40,"tag":77,"props":237,"children":238},{},[239],{"type":46,"value":240},"Branches reviewed:",{"type":40,"tag":77,"props":242,"children":243},{},[244],{"type":46,"value":245},"Engine:",{"type":40,"tag":77,"props":247,"children":248},{},[249],{"type":46,"value":250},"Repository reviewed:",{"type":40,"tag":77,"props":252,"children":253},{},[254],{"type":46,"value":255},"Interfaces used:",{"type":40,"tag":77,"props":257,"children":258},{},[259],{"type":46,"value":260},"Time window:",{"type":40,"tag":77,"props":262,"children":263},{},[264],{"type":46,"value":265},"Changes applied: none",{"type":40,"tag":49,"props":267,"children":269},{"id":268},"executive-summary",[270],{"type":46,"value":271},"Executive summary",{"type":40,"tag":56,"props":273,"children":274},{},[275],{"type":46,"value":276},"Write 3-7 bullets. The first bullet states what the platform is currently\ndoing for this database, factually and with measurements — for example:\nreplica topology and failover posture, backup cadence and last successful\nbackup, Insights collection volume, safety features active. This is not\npraise; it is the operating baseline the rest of the report builds on.\nThen:",{"type":40,"tag":73,"props":278,"children":279},{},[280,285,290,295,300],{"type":40,"tag":77,"props":281,"children":282},{},[283],{"type":46,"value":284},"Highest-risk safety gaps.",{"type":40,"tag":77,"props":286,"children":287},{},[288],{"type":46,"value":289},"Highest-value observability improvements.",{"type":40,"tag":77,"props":291,"children":292},{},[293],{"type":46,"value":294},"Highest-value automation opportunities.",{"type":40,"tag":77,"props":296,"children":297},{},[298],{"type":46,"value":299},"Engine-specific workflow gaps.",{"type":40,"tag":77,"props":301,"children":302},{},[303],{"type":46,"value":304},"Repository instrumentation gaps.",{"type":40,"tag":49,"props":306,"children":308},{"id":307},"current-state",[309],{"type":46,"value":310},"Current state",{"type":40,"tag":312,"props":313,"children":315},"h3",{"id":314},"database-and-branch-topology",[316],{"type":46,"value":317},"Database and branch topology",{"type":40,"tag":56,"props":319,"children":320},{},[321],{"type":46,"value":322},"Include evidence.",{"type":40,"tag":312,"props":324,"children":326},{"id":325},"safety-workflow",[327],{"type":46,"value":328},"Safety workflow",{"type":40,"tag":56,"props":330,"children":331},{},[332],{"type":46,"value":333},"For Vitess:",{"type":40,"tag":73,"props":335,"children":336},{},[337,342,347,352,357],{"type":40,"tag":77,"props":338,"children":339},{},[340],{"type":46,"value":341},"Safe migrations.",{"type":40,"tag":77,"props":343,"children":344},{},[345],{"type":46,"value":346},"Deploy requests.",{"type":40,"tag":77,"props":348,"children":349},{},[350],{"type":46,"value":351},"Approval requirements.",{"type":40,"tag":77,"props":353,"children":354},{},[355],{"type":46,"value":356},"Gated deployment usage.",{"type":40,"tag":77,"props":358,"children":359},{},[360],{"type":46,"value":361},"Schema revert runbook.",{"type":40,"tag":56,"props":363,"children":364},{},[365],{"type":46,"value":366},"For Postgres:",{"type":40,"tag":73,"props":368,"children":369},{},[370,375,380,385,390,395,400],{"type":40,"tag":77,"props":371,"children":372},{},[373],{"type":46,"value":374},"Branch migration workflow.",{"type":40,"tag":77,"props":376,"children":377},{},[378],{"type":46,"value":379},"Roles.",{"type":40,"tag":77,"props":381,"children":382},{},[383],{"type":46,"value":384},"pg_strict.",{"type":40,"tag":77,"props":386,"children":387},{},[388],{"type":46,"value":389},"Traffic Control.",{"type":40,"tag":77,"props":391,"children":392},{},[393],{"type":46,"value":394},"Backups\u002FPITR.",{"type":40,"tag":77,"props":396,"children":397},{},[398],{"type":46,"value":399},"Connection pooling.",{"type":40,"tag":77,"props":401,"children":402},{},[403],{"type":46,"value":404},"Private connectivity and IP restrictions.",{"type":40,"tag":312,"props":406,"children":408},{"id":407},"observability",[409],{"type":46,"value":410},"Observability",{"type":40,"tag":73,"props":412,"children":413},{},[414,419,424,429,434],{"type":40,"tag":77,"props":415,"children":416},{},[417],{"type":46,"value":418},"Query Insights state.",{"type":40,"tag":77,"props":420,"children":421},{},[422],{"type":46,"value":423},"Anomalies.",{"type":40,"tag":77,"props":425,"children":426},{},[427],{"type":46,"value":428},"Query tags.",{"type":40,"tag":77,"props":430,"children":431},{},[432],{"type":46,"value":433},"Raw query collection posture.",{"type":40,"tag":77,"props":435,"children":436},{},[437],{"type":46,"value":438},"Schema recommendations.",{"type":40,"tag":312,"props":440,"children":442},{"id":441},"automation",[443],{"type":46,"value":444},"Automation",{"type":40,"tag":73,"props":446,"children":447},{},[448,453,458,463],{"type":40,"tag":77,"props":449,"children":450},{},[451],{"type":46,"value":452},"Webhooks.",{"type":40,"tag":77,"props":454,"children":455},{},[456],{"type":46,"value":457},"Agent loops.",{"type":40,"tag":77,"props":459,"children":460},{},[461],{"type":46,"value":462},"CI\u002FPR workflows.",{"type":40,"tag":77,"props":464,"children":465},{},[466],{"type":46,"value":467},"Incident routing.",{"type":40,"tag":312,"props":469,"children":471},{"id":470},"repository-instrumentation",[472],{"type":46,"value":473},"Repository instrumentation",{"type":40,"tag":73,"props":475,"children":476},{},[477,482,487,492],{"type":40,"tag":77,"props":478,"children":479},{},[480],{"type":46,"value":481},"Frameworks and ORMs detected.",{"type":40,"tag":77,"props":483,"children":484},{},[485],{"type":46,"value":486},"Current SQL comments or tracing.",{"type":40,"tag":77,"props":488,"children":489},{},[490],{"type":46,"value":491},"Recommended SQLCommenter package\u002Fpath.",{"type":40,"tag":77,"props":493,"children":494},{},[495],{"type":46,"value":496},"Tag schema.",{"type":40,"tag":49,"props":498,"children":500},{"id":499},"recommendations",[501],{"type":46,"value":502},"Recommendations",{"type":40,"tag":56,"props":504,"children":505},{},[506],{"type":46,"value":507},"Use this table structure:",{"type":40,"tag":509,"props":510,"children":511},"table",{},[512],{"type":40,"tag":513,"props":514,"children":515},"thead",{},[516],{"type":40,"tag":517,"props":518,"children":519},"tr",{},[520,526,531,536,541,546,551,556],{"type":40,"tag":521,"props":522,"children":523},"th",{},[524],{"type":46,"value":525},"ID",{"type":40,"tag":521,"props":527,"children":528},{},[529],{"type":46,"value":530},"Recommendation",{"type":40,"tag":521,"props":532,"children":533},{},[534],{"type":46,"value":535},"Target",{"type":40,"tag":521,"props":537,"children":538},{},[539],{"type":46,"value":540},"Benefit",{"type":40,"tag":521,"props":542,"children":543},{},[544],{"type":46,"value":545},"Risk",{"type":40,"tag":521,"props":547,"children":548},{},[549],{"type":46,"value":550},"Approval needed",{"type":40,"tag":521,"props":552,"children":553},{},[554],{"type":46,"value":555},"Test first?",{"type":40,"tag":521,"props":557,"children":558},{},[559],{"type":46,"value":560},"Evidence",{"type":40,"tag":56,"props":562,"children":563},{},[564],{"type":46,"value":565},"Recommendation IDs:",{"type":40,"tag":73,"props":567,"children":568},{},[569,581,592,603,614,625],{"type":40,"tag":77,"props":570,"children":571},{},[572,579],{"type":40,"tag":573,"props":574,"children":576},"code",{"className":575},[],[577],{"type":46,"value":578},"OBS-*",{"type":46,"value":580}," for Insights\u002Fquery tags.",{"type":40,"tag":77,"props":582,"children":583},{},[584,590],{"type":40,"tag":573,"props":585,"children":587},{"className":586},[],[588],{"type":46,"value":589},"VIT-*",{"type":46,"value":591}," for Vitess safety\u002Fdeploy workflow.",{"type":40,"tag":77,"props":593,"children":594},{},[595,601],{"type":40,"tag":573,"props":596,"children":598},{"className":597},[],[599],{"type":46,"value":600},"PG-*",{"type":46,"value":602}," for Postgres roles, pg_strict, Traffic Control, PITR, network.",{"type":40,"tag":77,"props":604,"children":605},{},[606,612],{"type":40,"tag":573,"props":607,"children":609},{"className":608},[],[610],{"type":46,"value":611},"WEB-*",{"type":46,"value":613}," for webhooks and automation.",{"type":40,"tag":77,"props":615,"children":616},{},[617,623],{"type":40,"tag":573,"props":618,"children":620},{"className":619},[],[621],{"type":46,"value":622},"APP-*",{"type":46,"value":624}," for repository instrumentation.",{"type":40,"tag":77,"props":626,"children":627},{},[628,634],{"type":40,"tag":573,"props":629,"children":631},{"className":630},[],[632],{"type":46,"value":633},"AGENT-*",{"type":46,"value":635}," for MCP\u002Fagent workflows.",{"type":40,"tag":49,"props":637,"children":639},{"id":638},"proposed-change-set-requiring-approval",[640],{"type":46,"value":641},"Proposed change set requiring approval",{"type":40,"tag":56,"props":643,"children":644},{},[645],{"type":46,"value":646},"For every proposed change, include:",{"type":40,"tag":73,"props":648,"children":649},{},[650,655,660,665,670,675,680,685,690,695],{"type":40,"tag":77,"props":651,"children":652},{},[653],{"type":46,"value":654},"ID.",{"type":40,"tag":77,"props":656,"children":657},{},[658],{"type":46,"value":659},"Exact target.",{"type":40,"tag":77,"props":661,"children":662},{},[663],{"type":46,"value":664},"Exact change.",{"type":40,"tag":77,"props":666,"children":667},{},[668],{"type":46,"value":669},"Interface to use.",{"type":40,"tag":77,"props":671,"children":672},{},[673],{"type":46,"value":674},"Why it is recommended.",{"type":40,"tag":77,"props":676,"children":677},{},[678],{"type":46,"value":679},"Expected effect.",{"type":40,"tag":77,"props":681,"children":682},{},[683],{"type":46,"value":684},"Possible availability impact.",{"type":40,"tag":77,"props":686,"children":687},{},[688],{"type":46,"value":689},"Test plan.",{"type":40,"tag":77,"props":691,"children":692},{},[693],{"type":46,"value":694},"Rollback plan.",{"type":40,"tag":77,"props":696,"children":697},{},[698],{"type":46,"value":699},"Whether it changes production.",{"type":40,"tag":49,"props":701,"children":703},{"id":702},"changes-intentionally-not-applied",[704],{"type":46,"value":705},"Changes intentionally not applied",{"type":40,"tag":56,"props":707,"children":708},{},[709],{"type":46,"value":710},"State clearly:",{"type":40,"tag":73,"props":712,"children":713},{},[714,719,724,729,734,739,744],{"type":40,"tag":77,"props":715,"children":716},{},[717],{"type":46,"value":718},"No PlanetScale settings changed.",{"type":40,"tag":77,"props":720,"children":721},{},[722],{"type":46,"value":723},"No schema changed.",{"type":40,"tag":77,"props":725,"children":726},{},[727],{"type":46,"value":728},"No traffic controls changed.",{"type":40,"tag":77,"props":730,"children":731},{},[732],{"type":46,"value":733},"No roles or credentials changed.",{"type":40,"tag":77,"props":735,"children":736},{},[737],{"type":46,"value":738},"No webhooks changed.",{"type":40,"tag":77,"props":740,"children":741},{},[742],{"type":46,"value":743},"No code changed.",{"type":40,"tag":77,"props":745,"children":746},{},[747],{"type":46,"value":748},"No branches, backups, restores, deploy requests, or migrations created.",{"type":40,"tag":49,"props":750,"children":752},{"id":751},"evidence-appendix",[753],{"type":46,"value":754},"Evidence appendix",{"type":40,"tag":56,"props":756,"children":757},{},[758],{"type":46,"value":759},"For each evidence item:",{"type":40,"tag":73,"props":761,"children":762},{},[763,768,773,778,783],{"type":40,"tag":77,"props":764,"children":765},{},[766],{"type":46,"value":767},"Source.",{"type":40,"tag":77,"props":769,"children":770},{},[771],{"type":46,"value":772},"Command\u002FAPI\u002FMCP\u002Frepository path.",{"type":40,"tag":77,"props":774,"children":775},{},[776],{"type":46,"value":777},"Timestamp.",{"type":40,"tag":77,"props":779,"children":780},{},[781],{"type":46,"value":782},"Value.",{"type":40,"tag":77,"props":784,"children":785},{},[786],{"type":46,"value":787},"Notes.",{"type":40,"tag":49,"props":789,"children":791},{"id":790},"final-required-sentence",[792],{"type":46,"value":793},"Final required sentence",{"type":40,"tag":56,"props":795,"children":796},{},[797],{"type":46,"value":798},"End the report with:",{"type":40,"tag":56,"props":800,"children":801},{},[802],{"type":46,"value":803},"“No changes have been applied. Approve specific change IDs before any mutation.”",{"items":805,"total":969},[806,829,842,853,866,882,893,908,922,929,941,956],{"slug":807,"name":807,"fn":808,"description":809,"org":810,"tags":811,"stars":826,"repoUrl":827,"updatedAt":828},"mysql","plan and optimize MySQL database schemas","Plan and review MySQL\u002FInnoDB schema, indexing, query tuning, transactions, and operations. Use when creating or modifying MySQL tables, indexes, or queries; diagnosing slow\u002Flocking behavior; planning migrations; or troubleshooting replication and connection issues. Load when using a MySQL database.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[812,815,818,820,823],{"name":813,"slug":814,"type":15},"Data Modeling","data-modeling",{"name":816,"slug":817,"type":15},"Database","database",{"name":819,"slug":807,"type":15},"MySQL",{"name":821,"slug":822,"type":15},"Performance","performance",{"name":824,"slug":825,"type":15},"SQL","sql",557,"https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fdatabase-skills","2026-04-06T18:43:45.381961",{"slug":830,"name":830,"fn":831,"description":832,"org":833,"tags":834,"stars":826,"repoUrl":827,"updatedAt":841},"neki","manage sharded PostgreSQL with Neki","Overview and information about Neki, the sharded Postgres product by PlanetScale. Load when working with Neki-related tasks and the need to scale or shard postgres. Load when facing Postgres scaling or sharding issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[835,836,837,838],{"name":816,"slug":817,"type":15},{"name":821,"slug":822,"type":15},{"name":9,"slug":8,"type":15},{"name":839,"slug":840,"type":15},"PostgreSQL","postgresql","2026-07-24T05:38:09.09841",{"slug":843,"name":843,"fn":844,"description":845,"org":846,"tags":847,"stars":826,"repoUrl":827,"updatedAt":852},"postgres","optimize PostgreSQL database performance","PostgreSQL best practices, query optimization, connection troubleshooting, and performance improvement. Load when working with Postgres databases.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[848,849,850,851],{"name":816,"slug":817,"type":15},{"name":821,"slug":822,"type":15},{"name":839,"slug":840,"type":15},{"name":824,"slug":825,"type":15},"2026-04-06T18:43:44.126777",{"slug":854,"name":854,"fn":855,"description":856,"org":857,"tags":858,"stars":826,"repoUrl":827,"updatedAt":865},"vitess","optimize Vitess database performance and sharding","Vitess best practices, query optimization, and connection troubleshooting for PlanetScale Vitess databases. Load when working with Vitess databases, sharding, VSchema configuration, keyspace management, or MySQL scaling issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[859,860,861,862,863],{"name":816,"slug":817,"type":15},{"name":821,"slug":822,"type":15},{"name":9,"slug":8,"type":15},{"name":824,"slug":825,"type":15},{"name":864,"slug":854,"type":15},"Vitess","2026-04-06T18:43:42.890969",{"slug":867,"name":867,"fn":868,"description":869,"org":870,"tags":871,"stars":23,"repoUrl":24,"updatedAt":881},"planetscale-autonomous-execution-mode","execute autonomous PlanetScale database changes","Execute approved PlanetScale changes end-to-end without per-step approval when the operator has explicitly acknowledged the risk. Defines the risk-acknowledgment contract, scoped autonomy levels, sensible execution ordering, continuous status reporting, halt conditions, and rollback discipline. Extremely safe, very enabling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[872,873,874,877,878],{"name":444,"slug":441,"type":15},{"name":816,"slug":817,"type":15},{"name":875,"slug":876,"type":15},"Operations","operations",{"name":9,"slug":8,"type":15},{"name":879,"slug":880,"type":15},"Risk Assessment","risk-assessment","2026-07-05T06:32:41.490537",{"slug":883,"name":883,"fn":884,"description":885,"org":886,"tags":887,"stars":23,"repoUrl":24,"updatedAt":892},"planetscale-best-practices-matrix","evaluate PlanetScale best practices feature matrix","A concise feature matrix for deciding which PlanetScale safety, observability, and automation recommendations apply by engine.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[888,889,890,891],{"name":444,"slug":441,"type":15},{"name":816,"slug":817,"type":15},{"name":821,"slug":822,"type":15},{"name":9,"slug":8,"type":15},"2026-07-27T06:07:48.188419",{"slug":894,"name":894,"fn":895,"description":896,"org":897,"tags":898,"stars":23,"repoUrl":24,"updatedAt":907},"planetscale-change-gates-and-approval-contract","enforce approval gates for database mutations","Enforce explicit approval gates for any PlanetScale, database, repository, credential, network, or automation mutation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[899,902,903,906],{"name":900,"slug":901,"type":15},"Approvals","approvals",{"name":816,"slug":817,"type":15},{"name":904,"slug":905,"type":15},"Governance","governance",{"name":9,"slug":8,"type":15},"2026-07-07T06:38:42.512288",{"slug":909,"name":909,"fn":910,"description":911,"org":912,"tags":913,"stars":23,"repoUrl":24,"updatedAt":921},"planetscale-codebase-sqlcommenter-instrumentation","instrument PlanetScale applications with SQLCommenter","Inspect an application repository connected to PlanetScale and recommend SQLCommenter-compatible query tagging packages and conventions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[914,917,918,919,920],{"name":915,"slug":916,"type":15},"Code Analysis","code-analysis",{"name":816,"slug":817,"type":15},{"name":410,"slug":407,"type":15},{"name":9,"slug":8,"type":15},{"name":824,"slug":825,"type":15},"2026-07-07T06:38:43.813568",{"slug":4,"name":4,"fn":5,"description":6,"org":923,"tags":924,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[925,926,927,928],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"slug":930,"name":930,"fn":931,"description":932,"org":933,"tags":934,"stars":23,"repoUrl":24,"updatedAt":940},"planetscale-mcp-agent-operating-model","configure safe PlanetScale MCP agent behavior","Configure safe agent behavior around PlanetScale MCP, Insights, schema recommendations, and repository work without autonomous production mutation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[935,938,939],{"name":936,"slug":937,"type":15},"MCP","mcp",{"name":875,"slug":876,"type":15},{"name":9,"slug":8,"type":15},"2026-07-07T06:38:38.675213",{"slug":942,"name":942,"fn":943,"description":944,"org":945,"tags":946,"stars":23,"repoUrl":24,"updatedAt":955},"planetscale-postgres-safety-review","review PlanetScale Postgres safety and configuration","Review PlanetScale Postgres for Traffic Control, query tags, roles, pg_strict, backups\u002FPITR, private connectivity, webhooks, branches, and safe agent operation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[947,950,951,952],{"name":948,"slug":949,"type":15},"Audit","audit",{"name":9,"slug":8,"type":15},{"name":839,"slug":840,"type":15},{"name":953,"slug":954,"type":15},"Security","security","2026-07-07T06:38:34.75135",{"slug":957,"name":957,"fn":958,"description":959,"org":960,"tags":961,"stars":23,"repoUrl":24,"updatedAt":968},"planetscale-pscale-cli-automation","automate PlanetScale CLI operations","Use the PlanetScale CLI (pscale) from automated agents with --format json, auth check, pscale sql, and per-command --force. Run before other PlanetScale skills when driving pscale directly. Use when the user asks to automate pscale, run CLI commands headless, or verify pscale auth from an agent.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[962,963,966,967],{"name":444,"slug":441,"type":15},{"name":964,"slug":965,"type":15},"CLI","cli",{"name":816,"slug":817,"type":15},{"name":9,"slug":8,"type":15},"2026-07-07T06:38:33.465495",19,{"items":971,"total":1022},[972,980,987,994,1002,1009,1015],{"slug":867,"name":867,"fn":868,"description":869,"org":973,"tags":974,"stars":23,"repoUrl":24,"updatedAt":881},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[975,976,977,978,979],{"name":444,"slug":441,"type":15},{"name":816,"slug":817,"type":15},{"name":875,"slug":876,"type":15},{"name":9,"slug":8,"type":15},{"name":879,"slug":880,"type":15},{"slug":883,"name":883,"fn":884,"description":885,"org":981,"tags":982,"stars":23,"repoUrl":24,"updatedAt":892},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[983,984,985,986],{"name":444,"slug":441,"type":15},{"name":816,"slug":817,"type":15},{"name":821,"slug":822,"type":15},{"name":9,"slug":8,"type":15},{"slug":894,"name":894,"fn":895,"description":896,"org":988,"tags":989,"stars":23,"repoUrl":24,"updatedAt":907},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[990,991,992,993],{"name":900,"slug":901,"type":15},{"name":816,"slug":817,"type":15},{"name":904,"slug":905,"type":15},{"name":9,"slug":8,"type":15},{"slug":909,"name":909,"fn":910,"description":911,"org":995,"tags":996,"stars":23,"repoUrl":24,"updatedAt":921},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[997,998,999,1000,1001],{"name":915,"slug":916,"type":15},{"name":816,"slug":817,"type":15},{"name":410,"slug":407,"type":15},{"name":9,"slug":8,"type":15},{"name":824,"slug":825,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":1003,"tags":1004,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1005,1006,1007,1008],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"slug":930,"name":930,"fn":931,"description":932,"org":1010,"tags":1011,"stars":23,"repoUrl":24,"updatedAt":940},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1012,1013,1014],{"name":936,"slug":937,"type":15},{"name":875,"slug":876,"type":15},{"name":9,"slug":8,"type":15},{"slug":942,"name":942,"fn":943,"description":944,"org":1016,"tags":1017,"stars":23,"repoUrl":24,"updatedAt":955},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1018,1019,1020,1021],{"name":948,"slug":949,"type":15},{"name":9,"slug":8,"type":15},{"name":839,"slug":840,"type":15},{"name":953,"slug":954,"type":15},15]