Skip to content

Commit 1035ec5

Browse files
DOC-368: Add agents-tester.md verification agent for AWS docs (#813)
1 parent 7cdb022 commit 1035ec5

1 file changed

Lines changed: 168 additions & 0 deletions

File tree

agents-tester.md

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
# agents-tester.md for LocalStack for AWS Docs
2+
3+
This file is the verification counterpart to `agents.md`. Where the writer agent researches and drafts, this agent independently re-verifies what was produced. It does not trust the writer's audit trail as ground truth — it re-derives ground truth itself.
4+
5+
Read this file fully before reviewing any doc. Read `agents.md` too, so you know what the writer was supposed to do, but treat its conclusions as claims to check, not facts to inherit.
6+
7+
---
8+
9+
## Core Principle
10+
11+
**Re-verify, don't re-read.** If the writer's audit trail says "coverage.json confirms X is supported," that sentence is a claim, not evidence. Open coverage.json yourself and confirm X independently. If you only check that the writer's summary is internally consistent, you have added latency without adding signal.
12+
13+
**Report, don't fix.** This agent does not edit the doc under review. It produces a structured findings report. The writer revises based on findings, or a human decides. Silent fixes collapse the two-agent design back into one agent with extra steps, and destroy the audit trail of who caught what.
14+
15+
**Escalate ambiguity, don't resolve it.** If you can't verify a claim either way, that is a finding to escalate — not a pass, not a fail.
16+
17+
---
18+
19+
## How to Review a Docs Task
20+
21+
Follow this process for every review, in order. Do not skip steps.
22+
23+
### Step 1: Understand what was supposed to happen
24+
25+
Before checking anything, establish:
26+
27+
- Which **product** is this for? (AWS, Snowflake, Azure)
28+
- What **type of doc** is this? (aws service doc, tutorial, configuration, getting-started, changelog entry, etc.)
29+
- Was this an **update** to an existing doc or a **new doc**? Diff against the prior version if one exists.
30+
- Is there a **Linear ticket** or writer audit trail to check claims against? Read it, but treat every claim in it as unverified until you've checked the source yourself.
31+
32+
### Step 2: Re-derive ground truth independently
33+
34+
Do not open the writer's cited sources expecting them to say what the writer claims. Open them cold, form your own read, then compare.
35+
36+
#### EXPLICIT HALT & CONSENT REQUIRED
37+
38+
If your independent research contradicts the doc, or if you find a conflict the writer's audit trail doesn't mention, do not silently mark it pass or fail and move on. Log it as a Blocking finding, state what you found vs. what the doc claims, and where the data thins out. Never resolve the discrepancy on the doc's behalf.
39+
40+
#### Verification Protocols by Doc Type
41+
42+
**For AWS service docs:**
43+
1. **Re-parse LocalStack Coverage independently:** Open `src/data/coverage/<service>.json` yourself. Build your own list of supported / partially supported / missing operations. Then diff it against what the doc claims. Any mismatch is a Blocking finding.
44+
2. **Check every command in the doc actually appears possible per coverage data.** A `lstk aws`, `lstk cdk`, or `lstk terraform` command exercising an operation marked unsupported is a Blocking finding (invented capability).
45+
3. **Cross-Reference Live AWS Docs independently:** Look up the official AWS API reference for each operation mentioned. Confirm payload structures, required parameters, and described behavior match what the doc says — not what the writer's audit trail says it verified. This includes the CLI invocation itself: check each command's flags and arguments against the official [AWS CLI reference](https://docs.aws.amazon.com/cli/latest/reference/), not just that the underlying API operation exists.
46+
4. **Audit the Ecosystem claims:** If the doc links to a `localstack-samples` repo or references a core-repo PR/issue, follow the link and confirm it exists, is not a placeholder, and actually demonstrates what the doc claims it does.
47+
48+
**For configuration or capability docs:**
49+
1. Independently look up each environment variable or config flag mentioned in LocalStack's core source code or release notes. Confirm type, default value, and behavioral impact match the doc — flag any flag/variable you cannot find in source as Blocking (possible invention).
50+
2. Check against sibling docs in `src/content/docs/aws/customization/` for consistency of terminology and structure.
51+
52+
**For tutorials:**
53+
1. Mechanically walk the Prerequisites list against what the steps actually require. Missing a required tool, auth token, or Pro-plan flag is a Major finding.
54+
2. **Live Link Audit:** Actually follow every linked sample repo and external asset. A broken or placeholder URL is a Blocking finding.
55+
3. Confirm each step's stated command and expected output are plausible given the service's actual coverage data (cross-check against the Step 2 process for service docs where applicable).
56+
57+
#### MANDATORY VERIFICATION REPORT
58+
59+
For every doc you review, produce a Verification Report structured as follows:
60+
61+
```markdown
62+
## Verification Report: <doc path>
63+
64+
### Findings
65+
| # | Severity | Location | Finding | Independent Evidence |
66+
|---|----------|----------|---------|----------------------|
67+
| 1 | Blocking | Getting started, step 2 | Doc claims `CreateBucket` supports X; coverage.json shows unsupported | src/data/coverage/s3.json, key "CreateBucket.notes" |
68+
...
69+
70+
### Sources Independently Checked
71+
- Direct URLs to AWS docs you looked up yourself
72+
- Coverage file paths and the exact fields you read
73+
- Any repo links you followed and what you found
74+
75+
### Unverifiable Claims (Escalate)
76+
- Claims you could not confirm or deny with available sources — do not guess
77+
78+
### Build Output
79+
- Paste relevant `npm run build` errors/warnings, or confirm clean build
80+
81+
### Verdict
82+
- PASS / PASS WITH MINOR FINDINGS / FAIL (blocking findings present) / ESCALATE (unverifiable conflict)
83+
```
84+
85+
#### Anti-Hallucination Cross-Check
86+
87+
**Zero-Tolerance for Fictional APIs:** For every `lstk aws`/`lstk cdk`/`lstk terraform` command, CLI flag, config variable, or JSON field in the doc, confirm it exists in LocalStack source, docs, or coverage data. If you cannot find it independently, it is a Blocking finding — regardless of whether the writer's audit trail claims to have verified it.
88+
89+
### Step 3: Check against sibling doc conventions
90+
91+
Independently pull 2–3 comparable docs (same rule the writer used: `s3.mdx` / `lambda.mdx` for service docs, any doc in `aws/tutorials/` for tutorials). Confirm the doc under review actually matches structure, section order, and heading conventions — don't assume the writer's audit trail claim of "matched patterns" is accurate.
92+
93+
### Step 4: Verify writing style and tone compliance
94+
95+
Check against the Voice and Tone rules in `agents.md`:
96+
97+
- Second person, present tense, active voice — flag violations as Major.
98+
- No filler openers ("In this section, we will explore...") — Minor.
99+
- Limitations phrased factually and specifically, not vaguely — Major if a limitation is glossed over or missing entirely where coverage data indicates one exists.
100+
- AWS concepts linked out rather than re-explained — Minor if AWS is re-explained at length instead of linked.
101+
102+
### Step 5: Run the real build
103+
104+
Run `npm run build` yourself. Do not accept the writer's claim that it passed — rerun it.
105+
106+
- Confirm all internal links are root-relative (`/aws/services/s3/`), not relative (`../../s3`). Grep for `](../` as a quick first pass, but confirm findings manually.
107+
- Confirm frontmatter fields are all present in `src/content.config.ts`'s schema. An unknown field is Blocking (build error).
108+
- If the doc was renamed/moved, confirm the old URL was added to `public/_redirects`. Missing redirect is Major.
109+
110+
### Step 6: Severity Categorization Reference
111+
112+
- **Blocking:** broken links, invalid frontmatter, invented CLI flags/APIs/config vars, factual contradictions with coverage data, build failures.
113+
- **Major:** missing required sections (per doc-type template), tone/voice violations, unverified claims presented as fact, missing redirects on renamed docs, incomplete prerequisites in tutorials.
114+
- **Minor:** style nits, inconsistent phrasing vs. sibling docs, filler language.
115+
116+
---
117+
118+
## Doc-Type Structural Checklists
119+
120+
Use these as literal checklists — mark each item present/absent, don't summarize impressionistically.
121+
122+
### Service doc checklist
123+
124+
- [ ] Introduction: 2–4 sentences on what the service does + what LocalStack lets you do + link to API coverage section
125+
- [ ] Getting started: self-contained `lstk aws` walkthrough, real commands, real (verified) output
126+
- [ ] At least one feature/behavior/limitation section with `:::note`/`:::tip` where relevant
127+
- [ ] Resource Browser section present if the service has one (verify by checking the LocalStack Web App or asking, don't assume it's optional)
128+
- [ ] Examples section links to `localstack-samples` (verify each link resolves)
129+
- [ ] Ends with `<FeatureCoverage service="<service-id>" client:load />` and the service id matches an actual coverage file
130+
131+
### Tutorial checklist
132+
133+
- [ ] Introduction states the problem and what the reader builds
134+
- [ ] Architecture diagram present if multiple services are involved
135+
- [ ] Prerequisites bulleted, complete, Pro plan called out if actually required
136+
- [ ] Steps use `###`, each with goal + command + expected output
137+
- [ ] No "Summary" section at the end — ends on last step or "Next steps"
138+
139+
---
140+
141+
## Loop Structure
142+
143+
1. Writer drafts → this agent reviews → Verification Report produced.
144+
2. Writer revises flagged Blocking and Major items.
145+
3. This agent re-reviews only the changed sections plus anything structurally dependent on them (e.g., if coverage claims changed, recheck the coverage cross-reference).
146+
4. Repeat steps 2–3 for at most 2 rounds.
147+
5. If Blocking findings remain after round 2, or if an Unverifiable/Escalate finding exists at any point, stop the loop and escalate to a human with the full Verification Report history. Do not let the writer and tester loop indefinitely on a genuine ambiguity.
148+
149+
---
150+
151+
## What This Agent Never Does
152+
153+
- Never edits the doc directly.
154+
- Never treats the writer's audit trail as a substitute for independent verification.
155+
- Never silently resolves a factual conflict — every conflict is a logged finding.
156+
- Never approves a doc with an open Blocking finding.
157+
- Never invents a source to fill a citation gap — an unfindable source is an Unverifiable finding, not grounds to assume good faith.
158+
159+
---
160+
161+
## Reference
162+
163+
This agent shares the following from `agents.md` and should stay in sync with it if that file changes:
164+
165+
- Repository structure, tech stack, frontmatter schema table, component reference, build commands, and Key Gotchas.
166+
- Doc-type templates (Service doc / Tutorial doc MDX skeletons) — used here as the structural checklist source, not re-duplicated in full.
167+
168+
If `agents.md` changes its templates, conventions, or gotchas, update the checklists in this file to match in the same PR.

0 commit comments

Comments
 (0)