@clize/clize 0.35.2 → 0.35.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clize/clize",
3
- "version": "0.35.2",
3
+ "version": "0.35.4",
4
4
  "mcpName": "ai.clize/clize",
5
5
  "description": "The real-world capability layer for AI agents — domains, email, deploy, media, SEO/GEO. CLI + MCP.",
6
6
  "keywords": [
@@ -78,17 +78,32 @@ One free source comes before the paid ones: **the entry read's own gsc face** (
78
78
  `gsc.topQueries` / `newQueries` are Google's list of what it already considers you relevant for.
79
79
  On a site with history it is the best-fitted word source there is; on a new site it is empty.
80
80
 
81
- ### 1.1 Competitor teardown — the only command that produces words
81
+ ### 1.1 The sweepexhaust the competitor space once, then top it up
82
+
83
+ `competitors` is the one command that hands you keywords you did not think of, and it is cheap
84
+ enough to run to exhaustion — which no round had done before 2026-09-03: three sites, a dozen
85
+ rivals torn down in total at `--limit 25`, ledgers of 40–60 rows on sites whose honest cell
86
+ space is a few hundred. Do it once per site, and again whenever a product line is added:
82
87
 
83
88
  ```
84
- clize seo competitors rival-one.com rival-two.com --limit 25
89
+ clize seo competitors a.com b.com c.com --limit 100 # one call per market: --locale
85
90
  ```
86
91
 
87
- Two or three competitors × `--limit 25` is 50–75 candidates for about $0.09 a domain, pre-filtered
88
- by the only filter that matters: somebody already ranks on them. Read `topKeywords[].keyword`,
89
- drop their brand terms, keep the rest. Pick rivals *your size or one step up* a category
90
- leader's list is head terms you cannot have; the site ranking #4 on your queries hands you the
91
- reachable tail. Run this **first**, before writing down a keyword of your own.
92
+ | step | size | cost |
93
+ | --- | --- | --- |
94
+ | list every rival: every host on every SERP you have bought (`items[].host`) plus each product line's direct rivals — sites your size or one step up, not category leaders (their list is head terms you cannot have) | 15–25 domains | $0 |
95
+ | `competitors --limit 100`, per relevant market | 1,500–2,500 keywords, ~800 after dedupe | ~$0.04 a domain |
96
+ | `seo keywords` on all of them, one call per market | ~800 | ~$0.20 |
97
+ | `seo serp` on every `attackable`, `no_volume` and `no_data` survivor (§5) | ~300 | ~$6 |
98
+ | rows into the ledger, each with a verdict | 80–120 buildable | — |
99
+
100
+ About $8 and one session, and the ledger goes from forty rows to a hundred-plus. Read
101
+ `topKeywords[].keyword`, drop their brand terms, keep the rest. Two things the sweep is not: it
102
+ is not re-run every round (the 30-day cache makes that free and pointless — top up with the new
103
+ hosts each round's SERPs reveal), and it does not replace §1.2 (a rival's list is what *they*
104
+ rank for; your capability cells are what *you* can serve). Expect the SERP step to kill a third
105
+ to a half of the low-KD survivors — walls the difficulty score cannot see (§4): PDF→Excel at KD 0
106
+ in five markets was Adobe and iLovePDF in all five. That is the funnel working, not failing.
92
107
 
93
108
  ### 1.2 Capability-surface enumeration — cross the axes, don't brainstorm
94
109
 
@@ -126,7 +141,7 @@ A round is a funnel with a known size and a known price — and there is no such
126
141
  "analysis round": every round ends in pages or in a blocker the human must clear (§10).
127
142
 
128
143
  ```
129
- 30100 candidates (§1: competitor teardown + capability matrix)
144
+ 5001,000 candidates once (§1.1 sweep), then 30–100 a round (§1.2 matrix + top-ups)
130
145
  → seo keywords price the whole list in one batched call
131
146
  → drop `wall`; keep `attackable`, `no_volume` and `no_data` (§5: the SERP decides, not the volume table)
132
147
  → seo serp each survivor the SERP check that KD cannot replace (§4)
@@ -140,12 +155,13 @@ A round is a funnel with a known size and a known price — and there is no such
140
155
  | step | price | note |
141
156
  | --- | --- | --- |
142
157
  | `seo keywords`, 40 words | **~$0.10** | one batched call; per-word cost is negligible next to the fixed cost, so **always send the whole list at once** |
143
- | `seo competitors`, 3 domains × 25 | **~$0.28** | the cheapest words you will ever buy |
158
+ | `seo competitors`, one domain × `--limit 100` | **~$0.04** | the cheapest words you will ever buy — a 20-domain sweep is under a dollar |
144
159
  | `seo serp`, one keyword | **~$0.02** | every survivor gets one, `no_data` cells included — 20–100 of these is $0.40–2.00 |
145
160
  | `seo check` | **free**, plus ~$0.005/word to price words it has never priced | the metrics are reused for 30 days, so a re-check costs nothing |
146
161
  | `seo spend` | **free** | itemized ledger of every charge — **copy it into the deliverable, never hand-tally** |
147
162
 
148
- **A complete cold start runs about $0.70–1.00.** That number is the *cost prior* — carry it.
163
+ **The sweep is about $8, once; a round after it is about $1.** Those are the *cost priors* —
164
+ carry them.
149
165
 
150
166
  Three behaviours follow, and all matter:
151
167
 
@@ -199,10 +215,10 @@ find out where every bet stands. `check` remembers the keyword list, the brand a
199
215
  property; it does not remember whether you shipped the page or sent the pitch, and it never
200
216
  will — it cannot measure those. That half of the state exists only here.
201
217
 
202
- | keyword | locale | sv | kd | serp verdict | intent | target page | page | placement | format | priority |
218
+ | keyword | locale | sv | kd | serp verdict | intent | target page | page | placement | format · angle | priority |
203
219
  | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
204
- | openrouter alternative | en-US | 1,300 | 1 | listicle_window | commercial | /compare/openrouter/ | shipped:/compare/openrouter/, 08-30 | pitched: apidog roundup, 08-31 | comparison + pitch 8 roundups | P0 |
205
- | email api for ai agents | en-US | 0 (no_volume) | — | listicle_window | commercial | /inbox/ | shipped:/inbox/, 08-27 | none | landing + pitch 4 roundups | P0 |
220
+ | openrouter alternative | en-US | 1,300 | 1 | listicle_window | commercial | /compare/openrouter/ | shipped:/compare/openrouter/, 08-30 | pitched: apidog roundup, 08-31 | comparison · *the only gateway that publishes its failover log* + pitch 8 roundups | P0 |
221
+ | email api for ai agents | en-US | 0 (no_volume) | — | listicle_window | commercial | /inbox/ | shipped:/inbox/, 08-27 | none | landing · *an inbox the agent owns, not a Gmail it borrows* + pitch 4 roundups | P0 |
206
222
  | メッセージストリームでエラー | ja-JP | 2,900 | 0 | definition_wall (UGC) | informational | — | none | none | skip: Reddit/Zenn own it | — |
207
223
 
208
224
  - **`target page` is the intent; `page` and `placement` are the facts.** `target page` says which
@@ -216,8 +232,10 @@ will — it cannot measure those. That half of the state exists only here.
216
232
  - **A row with a page and no placement is half a bet.** Building the page and not placing it is
217
233
  manufacturing stock and never shipping it — the failure shape in the formula up top. The
218
234
  `placement` column is there so that half is visible at a glance instead of buried in prose.
219
- - **`target page` and `format` are part of the row.** "This keyword is good" is not a unit of
220
- work; "write /compare/openrouter/ as a comparison page and pitch these eight roundups" is.
235
+ - **`target page`, `format` and the angle are part of the row.** "This keyword is good" is not
236
+ a unit of work; "write /compare/openrouter/ as a comparison page and pitch these eight
237
+ roundups" is — and the angle (§7.1 ①) is the one line that says why that page and not a
238
+ competent copy of the occupants.
221
239
  - **Rows you decided against stay in the table**, with the reason. That is what stops the next
222
240
  session from re-buying the same keyword — and a `skip` row with a reason is a real finding.
223
241
  - **Opening the ledger on a site that already has analysis documents** (a plan, an older
@@ -239,11 +257,13 @@ will — it cannot measure those. That half of the state exists only here.
239
257
  - **Every ledger file counts, and a plan is a queue.** A site may carry more than one ledger
240
258
  (tabledi: `worksheet.md` for en-US and `worksheet-global.md` for the other markets); rows in
241
259
  all of them are the site's rows, and a round that counts only one file will report "nothing
242
- to build" beside 27 verified cells. A batch plan written under an earlier count rule (`≤5,
260
+ to build" beside the cells the other file already verified. A batch plan written under an earlier count rule (`≤5,
243
261
  wait for impressions`) is not re-planned and never "the next batch": each cell is re-gated
244
262
  on its own SERP verdict, and every cell that passes is a `to build` row for step ⓪ of the
245
- next session (§10). tabledi's B1–B4 27 locale tool cells, 15 SERPs bought sat under
246
- "next batch" through three sessions.
263
+ next session (§10). tabledi's B1–B4 sat under "next batch" through three sessionsand when a
264
+ session finally counted, only 15 of its cells had a SERP and 6 of those were unbuilt: a plan
265
+ is not a verified list until each cell has its own verdict; buy the missing ones ($0.02 each)
266
+ in the same session, never "next time".
247
267
 
248
268
  **Page batches — the second table in the ledger.** Keyword rows hold bets; the batch table holds
249
269
  what the site's composition is doing, and it is what the batch gate and the retire rule (§7.3)
@@ -295,8 +315,13 @@ run* — all six have been observed in real runs that read as finished.
295
315
  An opportunity written in prose (a cluster, a family, a locale axis) with no rows behind it
296
316
  is test 1 wearing a different coat. The deliverable counts shipped
297
317
  URLs, not qualified rows; a ledger of twenty rows and two pages is a session that spent itself
298
- on the analysis. Observed on our own tenant zero: eleven weeks of rounds that produced ledgers
299
- and no pages. If a page costs a session, the first deliverable is the generator (§7).
318
+ on the analysis. Observed on kunavo: five rounds, five pages, three of the rounds at zero; and on clize.ai
319
+ the opposite failure — eleven weeks in which no round ran at all. If a page costs a session, the first deliverable is the generator (§7).
320
+ 7. **Pages without a brief.** A page whose row names no occupant gap and no product asset is a
321
+ competent copy of the top 10, and at zero authority a competent copy does not rank: kunavo's
322
+ five model spec pages, built from the query alone against a page of opinion pieces, read zero
323
+ for three to eight weeks. The brief (§7.1 ①) is written before the page, and its angle sits in
324
+ the ledger row; no angle, no page.
300
325
 
301
326
  ---
302
327
 
@@ -415,10 +440,11 @@ So: a `no_volume` row whose SERP is already full of category roundups is worth a
415
440
  A `no_data` row goes to `seo serp` like any other survivor — the SERP does not need a volume
416
441
  figure to show who occupies it. Open and servable → buildable, enrolled as `pending`; wall →
417
442
  skip row with the reason. What `no_data` never is: a reason to drop the cell. Measured across
418
- three sites, the rows with the best positions were disproportionately ones the volume table
419
- could not see (kunavo's payment long-tails at 4.5 and 5.8, clize.ai's German MCP cluster at
420
- 130 impressions), while the priced `attackable` rows sat at 65+ the table's coverage and the
421
- incumbents' coverage are the same coverage. On 2026-09-02, 82 of 119 cells left the funnel at
443
+ three sites: the demand the table could not see was real (clize.ai's German MCP cluster,
444
+ `no_data` in the table, 130 impressions in Search Console), and the only page-1 positions any
445
+ of the sites hold are on such cells (kunavo's payment long-tails at 4.5 and 5.8), while the
446
+ priced `attackable` rows sat at 65+ or unseen the table's coverage and the incumbents'
447
+ coverage are the same coverage. On 2026-09-02, 82 of 119 cells left the funnel at
422
448
  the pricing step without a single SERP look; keeping them would have cost $1.64 in serp calls.
423
449
 
424
450
  ### `--ai` is a different unit
@@ -547,22 +573,33 @@ a family generator existed, and tabledi shipped forty in two days from one. Buil
547
573
  before the second page of any family, and never machine-translate a family page.
548
574
 
549
575
  **On a site that already has tools, this round's page count is the locale siblings of the tools
550
- it has.** A sibling is one strings entry (tabledi: a `DICT` table in `tools/apps.js`; clize.ai:
551
- a `strings.<loc>.mjs`) and its gate is its own SERP (§7.2). Count existing tools × verified
552
- locale cells before anything else tabledi had 23 tools, 6 markets, 27 cells already verified
553
- open, and three sessions wrote "next batch" beside them while building one page. New tools are
554
- code and tests, one to three per session: they are the next batch's rows, not this batch's
555
- excuse. And **building a page that passed the gates is never a question for the human.** The
556
- human's gates are money, external-facing changes (a redirect, DNS, a published post) and sends.
557
- Ask for those in one line and build while you wait never bundle the pages into the question
558
- (tabledi, 2026-09-02: one redirect that needed a yes was asked together with three pages that
559
- did not, and all four waited).
576
+ it has**, and the gate is each cell's own SERP (§7.2). Siblings come in two prices. A *format*
577
+ tool (viewer, merge, split, convert) is one strings entry (tabledi: a `DICT` table in
578
+ `tools/apps.js`; clize.ai: a `strings.<loc>.mjs`)ten in a session is ordinary. A *text* tool
579
+ (duplicates, compare, clean) carries locale semantics full-width and half-width forms in
580
+ Japanese, composed and decomposed accents in French and a sibling that ignores them reports
581
+ "0 duplicates" on a real file, which is gate 3 failed; budget two or three of those per session.
582
+ Count existing tools × verified locale cells before anything else, and buy the SERPs the cells
583
+ lack ($0.02 each) in the same breath tabledi had 23 tools and 6 markets; when a session
584
+ finally counted, 15 cells had a SERP, 6 were passed and unbuilt, and "next batch" had been
585
+ written beside them three times. New tools are code and tests, one to three per session: the
586
+ next batch's rows, not this batch's excuse.
587
+
588
+ **Building and publishing a page that passed the gates on the user's own site is never a
589
+ question for the human.** The human's gates are money, changes that alter what the world already
590
+ sees (a redirect, DNS, a canonical), sends, and posts on other people's platforms. Ask for those
591
+ in one line and build while you wait — never bundle the pages into the question. When a
592
+ human-gated change shares a deploy with pages (a redirect map in the same `vercel.json`), split
593
+ the deploy: ship the pages, hold the change. Step ⓪ is done when the pages are *live*, not
594
+ committed — tabledi, 2026-09-02: one session built three things and ended asking about a
595
+ redirect; the next found all three returning 404 in production and ended the same way. Four
596
+ pages built across two sessions, zero live. A session does not end with built, undeployed pages.
560
597
 
561
598
  ### 7.1 The pipeline — five steps, each with a pass/fail
562
599
 
563
600
  | step | act | it passed if |
564
601
  | --- | --- | --- |
565
- | ① outline | derive structure from `serp`'s `items` (data you already paid for): page type from what the top 10 is, length ≈ closest-shaped rival × 1.1–1.2, topic list from what they cover plus the gap you fill | every H2 can name which SERP occupant or gap it answers; delete any H2 that can't |
602
+ | ① brief | five fields, written into the row before a word of the page: **intent** — what the searcher wants, from the query, the shapes in the top 10, and Search Console when the site already earns on it (§4); **occupants** — open and *read* the top 3–5 pages, not their titles: structure, length, what each answers, promises and lacks (you fetch them yourself; there is no command for this and $0); **product truth** — what the product actually does for this intent (gate 3) and what only it has: first-party data, a working tool, a capability the occupants lack; **angle** — one sentence naming an occupant gap that a product truth fills; **form** — page type from what the top 10 is, length ≈ closest-shaped rival × 1.1–1.2, every H2 mapped to an occupant or a gap, the first 200 words, the FAQ in that market's phrasing. One brief per family; locale siblings change terminology and FAQ only | the angle names a gap *and* an asset — no angle, no page, and the row becomes `skip: no angle`. The three pages that worked had one (clize's OpenClaw page: "an inbox the agent owns" against two "borrow your Gmail" occupants; tabledi's Japanese dedupe: full-width forms, which a wall of tutorials never mentions; kunavo's 529 page: real failover numbers nobody on the page had); the five that read zero did not |
566
603
  | ② produce | skeleton from `build site start`, judgment from here, words and code from you | first 200 words answer the query completely; your definition sentence is verbatim-identical site-wide |
567
604
  | ③ self-check | against the spec sheet — there is deliberately no audit command | visible FAQ ↔ JSON-LD strictly 1:1; ≥2 internal links with varied anchors |
568
605
  | ④ deploy | ship it | page live, in sitemap |
@@ -586,11 +623,17 @@ Judgment calls that matter:
586
623
  translates almost for free, and the non-English cells of your matrix are the low-competition
587
624
  ones. Each locale page is a real, distinct intent — this is not page-stuffing. Build every
588
625
  locale cell whose *own* SERP is not a wall (`seo serp --locale`, $0.02); the English page's
589
- impressions are not the gate, because locale SERPs are only loosely coupled a browser CSV
590
- tool holds #1 in German where the English SERP is a tutorial wall, and a Korean payment
591
- long-tail ranked where its English sibling never did. What does not multiply: marketing and
592
- landing pages. Locale copies of those earned zero on every site measured (72 on clize.ai, 199
593
- near-identical on kunavo) and are the composition drag gate 4 exists to prevent.
626
+ impressions are not the gate, because the same intent draws a different page in each market —
627
+ kunavo's `claude code pricing`: `official_wall` in de-DE and es-ES, `open` in ja-JP and
628
+ fr-FR; one keyword, four verdicts. What does not multiply: marketing and landing pages. Read
629
+ that evidence for what it varied, not for what it sounds like: clize.ai's 72 translated
630
+ landing pages earn about what their English originals earn impressions in the tens, zero
631
+ clicks — so the failure is the *type*, in every language; kunavo's 199 untranslated copies
632
+ were duplicates, collapsed by canonicalization, and say nothing about locales; the locale
633
+ pages that do earn on both sites are translated guides and tools (kunavo's Korean pricing
634
+ guide is its top non-brand page). The bar for adding a locale to a marketing page is local
635
+ non-brand impressions on the ones that exist — indexing is the floor, not the pass. Locale is
636
+ not a page-generation primitive; a SERP-backed intent is.
594
637
  - **Pick tools with a shelf life.** Protocol- and format-level tools (llms.txt, schema, robots)
595
638
  keep earning links for years; trend-chasing tools die with the trend. Ask: will anyone search
596
639
  this in a year?
@@ -622,16 +665,23 @@ do the protecting, not experience:
622
665
  locale page written in-locale, a host page whose install and config really differ;
623
666
  - **the last batch is being indexed** — `gsc.pages.unseen` (§9) shows the previous batch's
624
667
  `index`; find the batch by `firstSeen`, and book the counts in the ledger's batch table (§3).
625
- Mostly `indexed` ship the next family. Mostly `Crawled - currently not indexed`
626
- that is Google's own verdict on those pages; the round is indexing and pruning, not
627
- shipping.
668
+ Read the four states apart: `URL is unknown to Google` and `Discovered - currently not
669
+ indexed` are the queue (a day-old batch sits there; not a verdict); `Crawled - currently
670
+ not indexed` is Google's verdict on a page it has read — after you rule out your own hand
671
+ (a canonical pointing elsewhere, hreflang missing or one-way, a stray `noindex`), which
672
+ produces the same state. Mostly indexed → ship the next family. Mostly crawled-not-indexed
673
+ on a clean implementation → the round is indexing and pruning, not shipping. This check
674
+ paces shipping; it does not certify composition — kunavo's 440 locale model pages indexed
675
+ fine and earned nothing. Composition is the second check and the retire rule.
628
676
  Impressions are not the gate for the next batch: at zero authority they arrive five to six
629
677
  weeks after shipping and clicks may not arrive in a quarter, so a rule that waits for them
630
678
  ships nothing for months — that was the mechanism behind five pages a month. Waiting is for
631
679
  *deciding a new page type* (§10), never for the siblings of a type already decided. The
632
680
  retire rule is the other half of shipping fast: a page indexed for two windows with no
633
- impressions, or refused by the index for two, is noindexed, merged or redirected. The
634
- composition stays clean only if dead pages leave.
681
+ impressions, or refused by the index for two, is retired: `noindex` by default (the page keeps
682
+ serving users, only its index exposure goes), merge or redirect when another page carries the
683
+ intent, delete only what nobody visits. The composition stays clean only if dead pages leave
684
+ the index.
635
685
 
636
686
  ### 7.4 E-E-A-T floor and locales
637
687
 
@@ -669,17 +719,13 @@ the 3–5 questions your money pages answer in the engines themselves (~15 minut
669
719
  and note who gets named. Zero is a reading.
670
720
 
671
721
  **Do not build a citation-probe cron** — a saved prompt set fired at N engines on a schedule.
672
- Field-tested and rejected, for three reasons that don't age: self-authored prompts carry
673
- self-confirmation bias (hits on questions you wrote prove little about questions users ask); on
674
- a low-authority site the output is a flat zero line that still costs keys, spend caps and
675
- upkeep; and a scheduled measurement nobody is present to act on is inventory, not signalone
676
- such cron sat dark for two weeks without a single decision changing, which is the whole case in
677
- one sentence. A probe earns its keep only once there is something to *attribute*: sustained AI
678
- referrals (tens per month, holding for two months), a real attribution question ("why does the
679
- engine name the competitor and not us?"), or a before/after comparison around a content-pack
680
- launch. Until one of those fires, referrers plus the spot-check are the honest instruments.
681
- And all AI-citation measurement is sampling — trust trends against your own baseline, never
682
- absolute share.
722
+ Field-tested and rejected: self-authored prompts carry self-confirmation bias, a low-authority
723
+ site's probe is a flat zero line that still costs keys and upkeep, and a measurement nobody is
724
+ present to act on is inventory (one such cron sat dark for two weeks without a decision
725
+ changing). A probe earns its keep only when there is something to *attribute*sustained AI
726
+ referrals, a real attribution question, a before/after around a launch. Until then, referrers
727
+ plus the spot-check; and all AI-citation measurement is sampling trends against your own
728
+ baseline, never absolute share.
683
729
 
684
730
  ---
685
731
 
@@ -814,7 +860,8 @@ appeared, stop where none did, and keep enumerating cells the ledger has not pri
814
860
 
815
861
  **A round is a pipeline, and it opens by building.** ⓪ **ship the qualified batch** — every
816
862
  `to build` row from the last round and every plan cell with its own SERP verdict (§3), in every
817
- ledger file — before reading a single number, while the session's budget is whole → ① read the
863
+ ledger file, each built from its brief (§7.1 ①) — before reading a single number, while the
864
+ session's budget is whole → ① read the
818
865
  feedback (`check`, free) → ② allocate (double down / stop loss / new bet) → ③ execute what is
819
866
  cheap now (siblings, retargets, placement drafts) and write the rest as the next session's
820
867
  `to build` rows → ④ book it (§3) → ⑤ report it (two tables, below). This round's analysis
@@ -881,18 +928,19 @@ to fill in. That state lives in the ledger or nowhere.
881
928
  What the human reads ends with two tables, not with findings. First, **this round's pages** —
882
929
  every row the round touched, one line each:
883
930
 
884
- | keyword | locale | serp | target URL | type | status |
885
- | --- | --- | --- | --- | --- | --- |
886
- | hreflang 生成 | ja-JP | open (small sites) | /ja/seo/hreflang-tag-generator/ | tool | built |
887
- | open webui api key | en-US | open | /docs/integrations/open-webui | integration doc | to build: generator first |
888
- | claude code preise | de-DE | official_wall | — | — | skip |
931
+ | keyword | locale | serp | target URL | type | angle | status |
932
+ | --- | --- | --- | --- | --- | --- | --- |
933
+ | hreflang 生成 | ja-JP | open (small sites) | /ja/seo/hreflang-tag-generator/ | tool | also emits the sitemap `xhtml:link` block — no occupant does | built |
934
+ | open webui api key | en-US | open | /docs/integrations/open-webui | integration doc | the one setup page that states the model-routing limit | to build: generator first |
935
+ | claude code preise | de-DE | official_wall | — | — | — | skip |
889
936
 
890
937
  `status` is one of `built` (shipped this round), `to build`, `exists` (a page already carries
891
938
  it), `skip` (with the reason). A `to build` row carries a blocker, and only three exist:
892
939
  `needs human` (a redirect, a send, money — asked in one line, §7), `needs tool code` (a new
893
940
  client-side tool; name the session it ships in), `needs generator` (no family scaffold yet).
894
- "Analysis round", "next batch" and "awaiting go-ahead" are not blockers — a row wearing one of
895
- those means the session is not finished, and it goes back to step ⓪. Second, **placement** target /
941
+ "Analysis round", "next batch", "awaiting go-ahead" and "needs a SERP" are not blockers — a
942
+ SERP is $0.02 inside the fuse and is bought on the spot and a row wearing one of those means
943
+ the session is not finished: it goes back to step ⓪. Second, **placement** — target /
896
944
  page / status (`sent` / `drafted` / `blocked: needs human`). Then at most five lines of
897
945
  narrative. A report that is findings and no pages table is test 1 (§3) in its final form: the
898
946
  human cannot act on a paragraph. A round with an empty pages table says so *in* the table, with
@@ -925,6 +973,14 @@ So: **promise time series against yourself, never absolute share.** "Our AI refe
925
973
  it. Breaking this rule in customer-facing copy is a product-integrity failure, not a rounding
926
974
  error.
927
975
 
976
+ **The cases in this file are samples of one to three sites, and each varied one thing.** Before
977
+ a case is cited for a rule, say what it varied, how many, and over which window: clize.ai's 72
978
+ locale pages varied *page type* (their English originals earn the same nothing); kunavo's 199
979
+ copies varied *translation* (identical, so Google collapsed them); tabledi's page-1 tools varied
980
+ *age* (three years), not links; tabledi's 36 marketing locales were a day old when first read.
981
+ A rule that survives only because its example was misread is a rule waiting to fail — three
982
+ such misreadings were found in this file on 2026-09-02 and corrected.
983
+
928
984
  ---
929
985
 
930
986
  ## What this skill will not do