Customer report template
Purpose
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.
Tone and framing
The report's purpose is an accurate assessment that helps the customer get
full value from the platform they run. Feature adoption follows from
evidence, never from framing. The register is technical and declarative —
an engineer's assessment, not marketing copy.
- State unused features as capability gaps with quantified impact.
Never write "off (good)", "not enabled (safe)", or otherwise present
non-adoption as a positive finding. The correct form is: current state,
what the feature provides, the measured finding it applies to.
Example: "Raw query collection: disabled. Enabling it exposes literal
parameter values per execution; applicable to Q1 (38% of total query
time), where the pattern-level data is insufficient to isolate the
triggering invocation."
- No enthusiasm markers. Do not use phrases like "earning its keep",
"paying off", "easy to adopt", "cutting root-cause time from hours to
minutes", or exclamation of any kind. State the mechanism and the
measurement; let the numbers carry the argument.
- Operational costs are stated inline as facts, not softened:
"literal values become visible to the observability pipeline" is a
property of the feature, stated once, without reassurance.
- Every recommendation cites the specific finding it addresses —
fingerprint, metric, event count, time window. A recommendation without
a measurement attached is incomplete.
- Active features are assessed, not praised. If a feature is enabled,
report what it is currently doing in measurable terms ("anomaly
detection flagged the connection spike 9 times in 7 days; no delivery
channel is configured") and whether its configuration is complete.
- Fit is part of the analysis: if the evidence does not support a
feature for this customer, state that.
- Recommendations are framed by what the change provides, not by the
threat of the current state. Write "a dedicated application role
scopes credentials per service and enables rotation without downtime",
not "limits the blast radius of credential compromise". Avoid
dramatizing vocabulary: "blast radius", "unprotected", "exposed",
"public-by-default", "at risk". Real risks are still stated, as facts —
"the production branch runs zero replicas; recovery from a primary
failure requires a restore" is a finding and belongs in the report.
What is excluded is dramatization, not disclosure.
- Platform behavior is reported with verified semantics, not
assumptions. When two API surfaces show different values, they are
usually distinct settings — check the documentation and report the
effective state. Do not label platform behavior inconsistent,
contradictory, or buggy on an unverified assumption. If the semantics
cannot be verified, state what each surface reports without drawing a
conclusion and direct the question to PlanetScale support. If verified
platform behavior is actually wrong, report it factually and route it
to PlanetScale support — it is a platform issue, not a customer
configuration finding.
Run mechanics are separated from findings
Failures of the assessment tooling — HTTP status codes, MCP errors, CLI
failures, token scope problems, timeouts, endpoint probes — describe the
run, not the database. They belong in the run log, not in the findings.
- Where evidence could not be collected, the report says "not assessed in
this run" with no error mechanics attached.
- The evidence appendix contains collected evidence.
- The run log (tool errors, paths tried, access gaps) accompanies the
report and is available to whoever ran the assessment — nothing is
withheld. The separation exists because tool errors say nothing about
the customer's database.
- Never conclude a feature is unconfigured from a failed call. "Not
configured" requires a successful call that returned an empty result.
Output surface
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 in addition to the markdown report, never instead of it.
Required report format
PlanetScale best-practices assessment
Scope
- Organization:
- Database:
- Branches reviewed:
- Engine:
- Repository reviewed:
- Interfaces used:
- Time window:
- Changes applied: none
Executive summary
Write 3-7 bullets. The first bullet states what the platform is currently
doing for this database, factually and with measurements — for example:
replica topology and failover posture, backup cadence and last successful
backup, Insights collection volume, safety features active. This is not
praise; it is the operating baseline the rest of the report builds on.
Then:
- Highest-risk safety gaps.
- Highest-value observability improvements.
- Highest-value automation opportunities.
- Engine-specific workflow gaps.
- Repository instrumentation gaps.
Current state
Database and branch topology
Include evidence.
Safety workflow
For Vitess:
- Safe migrations.
- Deploy requests.
- Approval requirements.
- Gated deployment usage.
- Schema revert runbook.
For Postgres:
- Branch migration workflow.
- Roles.
- pg_strict.
- Traffic Control.
- Backups/PITR.
- Connection pooling.
- Private connectivity and IP restrictions.
Observability
- Query Insights state.
- Anomalies.
- Query tags.
- Raw query collection posture.
- Schema recommendations.
Automation
- Webhooks.
- Agent loops.
- CI/PR workflows.
- Incident routing.
Repository instrumentation
- Frameworks and ORMs detected.
- Current SQL comments or tracing.
- Recommended SQLCommenter package/path.
- Tag schema.
Recommendations
Use this table structure:
| ID |
Recommendation |
Target |
Benefit |
Risk |
Approval needed |
Test first? |
Evidence |
Recommendation IDs:
OBS-* for Insights/query tags.
VIT-* for Vitess safety/deploy workflow.
PG-* for Postgres roles, pg_strict, Traffic Control, PITR, network.
WEB-* for webhooks and automation.
APP-* for repository instrumentation.
AGENT-* for MCP/agent workflows.
Proposed change set requiring approval
For every proposed change, include:
- ID.
- Exact target.
- Exact change.
- Interface to use.
- Why it is recommended.
- Expected effect.
- Possible availability impact.
- Test plan.
- Rollback plan.
- Whether it changes production.
Changes intentionally not applied
State clearly:
- No PlanetScale settings changed.
- No schema changed.
- No traffic controls changed.
- No roles or credentials changed.
- No webhooks changed.
- No code changed.
- No branches, backups, restores, deploy requests, or migrations created.
Evidence appendix
For each evidence item:
- Source.
- Command/API/MCP/repository path.
- Timestamp.
- Value.
- Notes.
Final required sentence
End the report with:
“No changes have been applied. Approve specific change IDs before any mutation.”
1---2name: planetscale-customer-report-template3description: Produce the final PlanetScale best-practices report after running the inventory and relevant review skills.4---5
6# Customer report template
7
8## Purpose
9
10Produce 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.
11
12## Tone and framing
13
14The report's purpose is an accurate assessment that helps the customer get
15full value from the platform they run. Feature adoption follows from
16evidence, never from framing. The register is technical and declarative —
17an engineer's assessment, not marketing copy.
18
19- **State unused features as capability gaps with quantified impact.**
20 Never write "off (good)", "not enabled (safe)", or otherwise present
21 non-adoption as a positive finding. The correct form is: current state,
22 what the feature provides, the measured finding it applies to.
23 Example: "Raw query collection: disabled. Enabling it exposes literal
24 parameter values per execution; applicable to Q1 (38% of total query
25 time), where the pattern-level data is insufficient to isolate the
26 triggering invocation."
27- **No enthusiasm markers.** Do not use phrases like "earning its keep",
28 "paying off", "easy to adopt", "cutting root-cause time from hours to
29 minutes", or exclamation of any kind. State the mechanism and the
30 measurement; let the numbers carry the argument.
31- **Operational costs are stated inline as facts**, not softened:
32 "literal values become visible to the observability pipeline" is a
33 property of the feature, stated once, without reassurance.
34- **Every recommendation cites the specific finding it addresses** —
35 fingerprint, metric, event count, time window. A recommendation without
36 a measurement attached is incomplete.
37- **Active features are assessed, not praised.** If a feature is enabled,
38 report what it is currently doing in measurable terms ("anomaly
39 detection flagged the connection spike 9 times in 7 days; no delivery
40 channel is configured") and whether its configuration is complete.
41- Fit is part of the analysis: if the evidence does not support a
42 feature for this customer, state that.
43- **Recommendations are framed by what the change provides, not by the
44 threat of the current state.** Write "a dedicated application role
45 scopes credentials per service and enables rotation without downtime",
46 not "limits the blast radius of credential compromise". Avoid
47 dramatizing vocabulary: "blast radius", "unprotected", "exposed",
48 "public-by-default", "at risk". Real risks are still stated, as facts —
49 "the production branch runs zero replicas; recovery from a primary
50 failure requires a restore" is a finding and belongs in the report.
51 What is excluded is dramatization, not disclosure.
52- **Platform behavior is reported with verified semantics, not
53 assumptions.** When two API surfaces show different values, they are
54 usually distinct settings — check the documentation and report the
55 effective state. Do not label platform behavior inconsistent,
56 contradictory, or buggy on an unverified assumption. If the semantics
57 cannot be verified, state what each surface reports without drawing a
58 conclusion and direct the question to PlanetScale support. If verified
59 platform behavior is actually wrong, report it factually and route it
60 to PlanetScale support — it is a platform issue, not a customer
61 configuration finding.
62
63## Run mechanics are separated from findings
64
65Failures of the assessment tooling — HTTP status codes, MCP errors, CLI
66failures, token scope problems, timeouts, endpoint probes — describe the
67run, not the database. They belong in the run log, not in the findings.
68
69- Where evidence could not be collected, the report says "not assessed in
70 this run" with no error mechanics attached.
71- The evidence appendix contains collected evidence.
72- The run log (tool errors, paths tried, access gaps) accompanies the
73 report and is available to whoever ran the assessment — nothing is
74 withheld. The separation exists because tool errors say nothing about
75 the customer's database.
76- Never conclude a feature is unconfigured from a failed call. "Not
77 configured" requires a successful call that returned an empty result.
78
79## Output surface
80
81The 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.
82
83## Required report format
84
85# PlanetScale best-practices assessment
86
87## Scope
88
89- Organization:
90- Database:
91- Branches reviewed:
92- Engine:
93- Repository reviewed:
94- Interfaces used:
95- Time window:
96- Changes applied: none
97
98## Executive summary
99
100Write 3-7 bullets. The first bullet states what the platform is currently
101doing for this database, factually and with measurements — for example:
102replica topology and failover posture, backup cadence and last successful
103backup, Insights collection volume, safety features active. This is not
104praise; it is the operating baseline the rest of the report builds on.
105Then:
106
107- Highest-risk safety gaps.
108- Highest-value observability improvements.
109- Highest-value automation opportunities.
110- Engine-specific workflow gaps.
111- Repository instrumentation gaps.
112
113## Current state
114
115### Database and branch topology
116
117Include evidence.
118
119### Safety workflow
120
121For Vitess:
122
123- Safe migrations.
124- Deploy requests.
125- Approval requirements.
126- Gated deployment usage.
127- Schema revert runbook.
128
129For Postgres:
130
131- Branch migration workflow.
132- Roles.
133- pg_strict.
134- Traffic Control.
135- Backups/PITR.
136- Connection pooling.
137- Private connectivity and IP restrictions.
138
139### Observability
140
141- Query Insights state.
142- Anomalies.
143- Query tags.
144- Raw query collection posture.
145- Schema recommendations.
146
147### Automation
148
149- Webhooks.
150- Agent loops.
151- CI/PR workflows.
152- Incident routing.
153
154### Repository instrumentation
155
156- Frameworks and ORMs detected.
157- Current SQL comments or tracing.
158- Recommended SQLCommenter package/path.
159- Tag schema.
160
161## Recommendations
162
163Use this table structure:
164
165| ID | Recommendation | Target | Benefit | Risk | Approval needed | Test first? | Evidence |
166|---|---|---|---|---|---|---|---|
167
168Recommendation IDs:
169
170- `OBS-*` for Insights/query tags.
171- `VIT-*` for Vitess safety/deploy workflow.
172- `PG-*` for Postgres roles, pg_strict, Traffic Control, PITR, network.
173- `WEB-*` for webhooks and automation.
174- `APP-*` for repository instrumentation.
175- `AGENT-*` for MCP/agent workflows.
176
177## Proposed change set requiring approval
178
179For every proposed change, include:
180
181- ID.
182- Exact target.
183- Exact change.
184- Interface to use.
185- Why it is recommended.
186- Expected effect.
187- Possible availability impact.
188- Test plan.
189- Rollback plan.
190- Whether it changes production.
191
192## Changes intentionally not applied
193
194State clearly:
195
196- No PlanetScale settings changed.
197- No schema changed.
198- No traffic controls changed.
199- No roles or credentials changed.
200- No webhooks changed.
201- No code changed.
202- No branches, backups, restores, deploy requests, or migrations created.
203
204## Evidence appendix
205
206For each evidence item:
207
208- Source.
209- Command/API/MCP/repository path.
210- Timestamp.
211- Value.
212- Notes.
213
214## Final required sentence
215
216End the report with:
217
218“No changes have been applied. Approve specific change IDs before any mutation.”