These are the raw, unedited notes I wrote while shaping this article. They are closer to a brain dump than a prompt library: my thinking, philosophy, corrections, and direction. The ideas are mine. AI helped turn them into a smoother, more readable essay.

Research footprint

Open the evidence artifacts ↗
41human prompts
27agent sessions
21committed artifacts
193.0Mtokens processed

These sessions cover the original research, implementation, later investigations, and publication. They also include shared analytics and follow-up work, so this is not an exclusive total for writing this article. Codex accounting sums the final cumulative counter before each reset and at the session cutoff. Claude Code accounting counts usage once per API message, removing repeated log records. The artifact count covers committed Markdown files in the linked research directory.

The included sessions span 96h 56m of elapsed wall-clock time, from to . The measured token total includes 192.1M input tokens (186.3M served from cache) and 875K output tokens. Reasoning tokens (259K) are already included in output. Elapsed time includes gaps between sessions and does not measure human hands-on work.

This is a provenance measure, not a quality score, cost estimate, or environmental-impact estimate. Token counts come from the private agent sessions identified in the public manifest, which records the log format, included session IDs, selected usage boundaries, and SHA-256 prefix commitments. The author can audit the totals against those logs; readers cannot independently reconstruct them without the private logs. The committed artifacts show the resulting work.

Prompt 1
i am seeing daily clients as 113 for today, and it seems unbelievable to me, like which articles are they reading, where are they coming from and so on... i just published a new article and its not even coming up in the Top pages by views section... like whats going on... Like sometimes when i publish the post i wanna see for this particular post how many readers have arrived and through which sources, its impossible to figure out. But still the most bizarre is the numbers, who is all reading these articles, it seems insane, which i appreciate but I don't want to gaslight ourselves, like something is not adding up
Prompt 2
also I am looking at the: Matched User-Agent rules by views PerplexityBot UA rule · AI 51 views. I wanna see the breakdown of articles based on the AI bots for example, what are they reading? What if eventually I pivot my blog post to embrace the AI readership and understand what they are reading and provide valuable content for AI or Bot readership?
Prompt 3
we need some authoritative guidance on this, i want the analytics to be honest and believable, explore, plan, write adr and proceed with engineering
Prompt 4
why did we lose all the views lmao... you need to migrate properly and maintain the historical views, even if it was miscalculated doesn't matter, its okay, we can trace the commit history and know with full honesty what happened and why
Prompt 5
this is kinda confusing, and saying browser-like is a little misleading and screams low confidence, like what is the browser like, do we know deterministically or what? Browsers
Browser-like
Bots
AI UAs
All

You need to ground yourself better
Prompt 6
no, why are you thrashing? you need to explore cross references and authoritative sources, and read open source more, this is still subpar
Prompt 7
why dont we have a really good authoritative open source reference to learn more about all of this properly?
Prompt 8
i like this idea, start the plan for it too, start the worklist: One more thought. Your readership tenet is hard, trustworthy work nobody else bothers to do. A post titled something like "How I separate readers from bots on a static blog, without JavaScript" would be that reference, with the evidence tables from tonight. Worth deciding after the rule settles. We are actively under the tension and facing an active challenge, and lets write an article from the unresolved pain and tension that we literally are doing right now. This is the primest example of writing from the unresolved pain and tension, facing a challenge, that we have iterated and spent so much effort, over and over again. Start the worklist, and initial prompts for this article.
Prompt 9
i even want to know the headless browsers on home connections, like Meshclaws or Hermess cloud agents using playwright or cypress or any type of automation, we don't want to miscount or block them, on the contrary, I want to embrace them, anyone can read my articles... I just want full visibility and transparency and categorization, like we need to explicitly know who is who (of course with respecting PII), but lots of people might stop reading articles directly and might use their AI agents like Meshclaws and Hermes agents running on the cloud to read my articles and so on, and I want to know who is reading what, like I am trying to understand how people are using my articles... Ideally I would love to have some kind of official citation for my articles as well, like you know how Arxiv or research papers have citations? I want to embrace that as well, like people reading and finding my content valuable and recommending them to cite them as needed, and have some kind of visibility into those citations. Like another example is how scholar.google.com shows Total citations Cited by 51, something like that would love to.
Prompt 10
and TASK-0101 was meant to measure it on real referred traffic first. WHY? You are telling me noone else faced this problem?
Prompt 11
can't we learn from other people and prior art? this is 2026 september
Prompt 12
dont we already have some raw logs in cloudflare?
Prompt 13
│ Unchecked │ unchecked (rows before 2026-09-03 with no evidence) why dont we have data for this, i believe we have correct provenance even for historical data
Prompt 14
we need better semantic naming: What is not done. The stats page still shows Browsers, Browser-like, Bots, AI UAs. Everything above is stored per row but not shown. Here is the label set I propose for the public filters, one message as promised, based on the closed set of reader kinds:
Prompt 15
i am already writing /Users/goga/Documents/goga/blog/packages/blog/posts/023-which-ai-fetchers-send-which-headers.md, which i know is different, but whats your opinion, do they go alongside in a series or something similar together? I love that we are pretty much can write from the unresolved pain and tension
Prompt 16
write the article 24
Prompt 17
step back and ground yourself, what challenges did we face, what is valuable so that 80% come for the value here? step back and think more, read all the research artifacts and all the meaningful work we did
Prompt 18
respect this rule: Mannered prose substitutes metaphor and flourish for direct statement. Instead of "a parameter worth varying," the mannered writer produces "a dial worth turning." Instead of "this point still matters," they write "this point earns its keep." The phrases exist to display the writer, not to convey the idea, and readers can tell. That is why mannered prose irritates: it makes the reader work harder so the writer can perform. It is also imprecise. Metaphors drag in connotations the writer did not choose and cannot control. The fix is to say what you mean. When a literal phrase is available, use it.
Prompt 19
do not quote me anywhere unless it was literally my verbatim prompt message
Prompt 20
i was working on the /Users/goga/Documents/goga/blog/packages/blog/posts/024-how-i-separate-readers-from-bots-without-javascript.md and it is now published, but i don't think its ready
Prompt 21
i am slowly leaning into the idea that modern day articles should provide value, like the computation/tokens are allows us to lets say someone poses an idea - "yeah execute that idea and show me the results", like I don't want plain raw ideas without explicit numbers/metrics. So in that sense, i want the article to be grounded in real life evidences, numbers, metrics, execution, thats why we have worklists for each article. So which are shall we run experiments, like literal experiments, and then turn it into real article sections?
Prompt 22
also its been few days since the latest code changes and deployment, we should have much more ground truth and more evidences, i want you dive into it on cloudflare
Prompt 23
we need to be fully in control, and have visibility. I am writing 10 articles on this area, analytics in 2026 in the era when we are embracing AI agents to read my blog. Shall we make the plan and further iterate on the code? whats the highest impact 2 items right now, that will also end up in the article. What did we learn with data. Also, is there anything else we could have captured to learn more withour crossing the line into capturing privacy data?
Prompt 24
User-Agents, city-level metadata, and TLS details. I don't think this is an infringment of privacy at all... So be mindful lets avoid crossing the line but lets not harm the analytics either
Prompt 25
explain to me better
Prompt 26
Who does the client claim to be? Ahrefs <- didn't we already implement this?
Prompt 27
my goal is that we need to deterministically understand, what, who, how each request is arriving. So what is the new functionality that you are proposing
Prompt 28
we need to figure this out authoritatively and deterministically: We should preserve the identity machinery we built and correct that grouping and wording. That is a targeted fix; the larger, higher-impact work is explaining the
95-versus-14 discrepancy through controlled experiments.
Prompt 29
we should have traces via cloudflare already
Prompt 30
also i am curious at what point do we finish the iteration on this article and start working on a new one? for example how do you differentiate the agent identiy if they are signed or unsigned, if the human trigger the agent to read the article or an automation, like this can be an article in itself correct? Do we have a plan of upcoming 10 articles in the analytics series?
Prompt 31
shall we iterate or rewrite sections of the /Users/goga/Documents/goga/blog/packages/blog/posts/024-how-i-separate-readers-from-bots-without-javascript.md? whats the plan for now
Prompt 32
also did you read this parallel investigation? **Yes. We have evidence that the classifier removes substantial automation, but several claims go further than our measurements support.** The most important correction is that we have improved classification—not yet established audience accuracy.

The new [reproducible snapshot](/tmp/blog-analytics-evidence-20260906/report.md) gives us a firmer baseline for September 4–5:

- **372 requests had browser User-Agents; 95 remained in Browsers.** The rules reclassified 74.5%. That measures their effect, not their accuracy.
- **Cloudflare recorded 14 comparable script page loads**, leaving a 6.79× discrepancy.
- **22 Browser events belong to the investigated polling cluster.** Setting those aside still leaves a 5.21× discrepancy.
- **60 cloud-classified requests passed the navigation-header checks.** Network evidence adds information that those headers alone miss.

The remaining disagreement needs explanation. Script blocking, delivery loss, caching, different eligibility rules, owner traffic, and unidentified automation can all contribute. Cloudflare documents several of these collection limitations. [RUM FAQ](https://developers.cloudflare.com/web-analytics/faq/).

**These claims need correction now.**

| Current claim or implication | What the evidence supports |
|---|---|
| The two rules fix the reader count or close the problem | They remove substantial traffic from the Browser classification. The remaining population is uncalibrated. |
| A ratio below two validates the counter; above two diagnoses automation | Those thresholds were unsupported expectations. Counter agreement alone does not establish accuracy, and disagreement does not identify its cause. |
| Browsers is a lower bound on readership | It admits some automation and excludes some legitimate access. **Its error can run in both directions**, so it is not a defensible lower bound. |
| Signed requests establish software fetching because a person asked | Signatures establish an identity association under the verifier’s checks. Purpose requires separate evidence. |
| No signed requests have arrived | The recorded cohort contains **nine verified requests: five Ahrefs, two Exa, and two deliberate DuckAssist tests**. |
| Every row records its network provenance | All **1,797 recent rows inspected had null `asn_source`**. The ingestion INSERT omits it. |
| The production AI-agent classification checks vendor IP lists | The probe study performed those checks. Routine ingestion uses UA rules and signature verification; it does not perform that vendor-IP validation. |

These appear in the [current post 024 file](/Users/goga/Documents/goga/blog/packages/blog/posts/024-how-i-separate-readers-from-bots-without-javascript.md), README, or earlier research. They deserve factual correction without waiting for another implementation.

The signature distinction is especially important: Exa documents its signed client as a **search crawler**. The Web Bot Auth draft explicitly separates identity from human authentication, authorization, and delegation. [Exa documentation](https://crawler.exa.ai/), [protocol draft](https://datatracker.ietf.org/doc/html/draft-meunier-webbotauth-httpsig-protocol-01).

**Some of our earlier interpretations also need tightening—including mine.**

The estimate of approximately 21 people was too strong. It was a manual assessment of plausible reader-like **requests**, not a verified count of distinct people. Likewise, saying no additional people arrived after launch went beyond what the remaining rows could establish.

The original eleven-to-one comparison also mixed **daily client identifiers with visits**. That was a useful alarm, but those units differ. Our new comparison uses page events versus page loads with explicit exclusions.

And routine ChatGPT-UA requests should not become a count of reads. A declared fetcher, a verified provider request, a user-directed retrieval, and someone consuming the content are different observations.

**What remains strong is more useful than the overclaims.**

We now have concrete examples of browser-shaped automation on both hosting and consumer networks. We have working signature verification producing real observations. We found a reproducible `Accept` parsing defect and missing provenance. We also learned that the existing repair was only partly released: migration completion had been mistaken for implementation completion.

My recommendation is:

1. **Correct the factual and semantic claims first**, including metadata that promises a resolved count.
2. **Finish provenance, identity/purpose separation, and the existing deployment repair.**
3. **Run the controlled-client experiments** to distinguish classification errors from collection differences.

The larger change in expectation is this: analytics can give us increasingly specific evidence about access and distribution. Establishing how many people—or agents acting for people—actually used the writing requires additional evidence that our counters do not currently provide.
Prompt 33
packages/blog/drafts/research/readers-vs-bots/16-claims-and-work-status-2026-09-06.md
Prompt 34
Updated the [claims and work-status ledger](/Users/goga/Documents/goga/blog/packages/blog/drafts/research/readers-vs-bots/16-claims-and-work-status-2026-09-06.md), research index, and related task records.

They now distinguish:

- Completed: research plan, extractor, production capture, validation.
- Pending: article corrections, classification wording, deployment verification.
- Ongoing: discrepancy investigation and longer calibration.

Retired unsupported accuracy thresholds while preserving historical evidence. All 23 local links resolve; whitespace checks pass. No article or production changes.
Prompt 35
what to do afterall?
Prompt 36
i want to iterate and publish the article and start working on the next generation aka next iteration of analytics and the next article.
Prompt 37
**The reason is that we’ve found definite mistakes in what we claim, definite implementation defects, and an unexplained measurement gap. Each needs a different response.** My earlier answer gave you the order without explaining that distinction.

1. **Correct the claims because the evidence already contradicts them.**

Our September 4–5 capture shows the rules reduced 372 browser-UA observations to 95 Browser HTML observations—a 74.5% reduction. That establishes how much the rules change the count. Establishing accuracy would also require knowing which excluded requests were human and which remaining requests were automated. We don’t have those labels. Calling the result an accurate reader count, or a lower bound on people, therefore goes beyond our evidence. [Saved findings and correction ledger](/Users/goga/Documents/goga/blog/packages/blog/drafts/research/readers-vs-bots/16-claims-and-work-status-2026-09-06.md)

The signature claim has an especially clear counterexample: Exa documents that its **search crawler signs requests**. A valid signature can support attribution to a signer under the verifier’s trust rules; it does not independently establish a human trigger. That follows from the mechanism in RFC 9421 and Exa’s documented use of it. Keeping signature verification is useful; changing what we infer from it is necessary. [RFC 9421](https://www.rfc-editor.org/rfc/rfc9421.html#section-3.2), [Exa’s crawler documentation](https://crawler.exa.ai/)

**Why do this now?** Further experiments may explain traffic, but they cannot justify retaining claims we already know are unsupported.

2. **Investigate the 95-versus-14 gap because either measurement can miss or include different things.**

D1 records server observations; Cloudflare RUM depends on browser-side collection. Cloudflare explicitly documents beacon blocking and delivery loss. Our returned RUM groups were unsampled, which removes one explanation for this particular query; it does not establish complete collection. [Cloudflare FAQ](https://developers.cloudflare.com/web-analytics/faq/)

Consequently, subtracting 14 from 95 does **not** establish 81 bots or 81 lost beacons. We have not established that the two counts represent matching events. Our existing-data investigation found candidate correlations for 77 D1 rows, but no shared request identifier that makes those joins conclusive. [Diagnostic evidence and limitations](/Users/goga/Documents/goga/blog/packages/blog/drafts/research/readers-vs-bots/15-existing-cloudflare-evidence-2026-09-06.md)

**Why controlled visits?** Knowing what generated a request lets us test the mechanism. For example, repeat the same browser navigation with the beacon allowed and blocked, observing the network and stored results. That can demonstrate a cause of disagreement. It still cannot establish how common that cause was in historical traffic.

3. **Fix known defects because they have independently checkable expected behavior.**

Our local reproduction treats `Accept: text/html;q=0` as accepting HTML. HTTP specifies that zero quality means unacceptable. This gives us a concrete correctness test; we don’t need to infer the visitor’s identity to establish the defect. Its historical contribution remains unknown because we retained only a boolean. [RFC 9110, quality values and Accept](https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2), [reproduction record](/Users/goga/Documents/goga/blog/packages/blog/drafts/research/readers-vs-bots/15-existing-cloudflare-evidence-2026-09-06.md)

Missing network provenance and uncertain deployment state similarly undermine interpretation: we need to know what evidence and code produced a classification before evaluating it. Those gaps are recorded in the ledger above.

4. **Choose additional data by the question it resolves.**

The most useful additions may be collection outcomes, classification reasons, and build versions. They answer whether an observation was attempted, excluded, failed, or processed under different code. There is concrete prior art: Plausible’s ingestion code records buffered/dropped outcomes, drop reasons, parser timeouts, pipeline timings, and tracker versions. That supports the design direction; it does not prove we need every field. [Plausible source at the reviewed revision](https://github.com/plausible/analytics/blob/543b30185c104ce17900d03c95d95429180acc0b/lib/plausible/ingestion/event.ex#L82-L154)

I would adjust my earlier ordering slightly: **preserve the time-sensitive evidence first**, then make the compact corrections and run the controlled checks. Cloudflare retains unsampled beacon data for seven days before longer-term aggregation, so waiting until September 17 to collect would weaken the comparison. [Cloudflare retention and sampling](https://developers.cloudflare.com/web-analytics/faq/#is-the-data-sampled)

The engineering objective is to explain specific counting failures and correct them. A smaller Browser total—or closer agreement with RUM—would not, by itself, demonstrate improvement.
Prompt 38
is article ready to be shared on hackernews and X? does it have all the valuable information? does it have researchFootprint? does it have all the authoritative cross references and all that
Prompt 39
lets add the researchFootprint
Prompt 40
lets do this then: - Missing footprint: the original research and later investigation sessions still need reconciliation before publishing a defensible token total. I would not invent one or treat token volume as proof of quality. - What are we waiting for otherwise
Prompt 41
should the title be from i perspective or you perspective How I Classify Browser and Bot Requests Without JavaScript, because imagine how the AI agent is searching for it or someone else is searching for it... we need to make it highly come acrossable