Skip to content

Commit 8628ea7

Browse files
committed
Rename operator-model → site-model and sweep "operator" prose
The "Operator model" doc page is renamed to "Site model" and the "operator" framing is dropped throughout the docs handbook in favor of direct address ("you", "site", or just dropping the qualifier where it added nothing). Three exceptions: the phrase "bot operators" stays as-is in faq.md and site-model.md because there it refers to the adversaries running bots, not to anyone running mod_botshield. Mechanics: - docs-src/operator-model.md → docs-src/site-model.md (git mv). - 11 cross-links across 8 docs-src files retargeted to ../site-model/index.html. - Three docs/index card summaries de-"operator"-ed. - README.md: "Operator handbook" → "Site handbook" and the table entry now points at docs-src/site-model.md. - CHANGELOG.md: "Operator handbook" entry renamed to "Site handbook" plus one inline prose tweak. The rebuilt docs/ output for these doc pages lands in the following commit alongside the home-page polish work.
1 parent a503c01 commit 8628ea7

12 files changed

Lines changed: 71 additions & 71 deletions

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
wrk-driven, results saved per timestamp. Cookied scenario mints
6666
a real `_bs_verified` and replays. `LogLevel info` scenario
6767
measures decision-log overhead.
68-
- Operator handbook: 9 markdown source files (~2,400 lines) under
68+
- Site handbook: 9 markdown source files (~2,400 lines) under
6969
`docs-src/`, rendered to `docs/` via `tools/build_site.py`.
7070
- Performance section in `docs-src/deployment.md` with single-
7171
connection / saturation / fixed-rate framing.
@@ -113,7 +113,7 @@
113113
`app_claims_secret` into one shared `app_integration_secret`
114114
the two protocols' canonical forms are structurally distinct
115115
(single-field vs seven-field) so cross-replay isn't possible,
116-
and operators no longer maintain two key files.
116+
and you no longer maintain two key files.
117117
- **E14 rework: replaced adaptive-intensity machinery with
118118
`BotShieldFlagTrigger`.** Original E14 design used a flag-meta
119119
registry with `penalty=` / `next_difficulty=` / `next_tier=`

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ code has to absorb the traffic.
2626

2727
**Status: beta.** Stable shape, exercising in dev; not yet a production
2828
deployment. Architecture, threat model, and per-extension design notes
29-
live in [DESIGN.md](DESIGN.md). Operator-facing handbook is rendered to
29+
live in [DESIGN.md](DESIGN.md). Site handbook is rendered to
3030
GitHub Pages from `docs-src/`; see the [documentation index](#documentation)
3131
below.
3232

@@ -97,14 +97,14 @@ chmod 600 /etc/botshield/secret`. Full setup walkthrough in
9797

9898
## Documentation
9999

100-
Operator handbook (rendered to
100+
Site handbook (rendered to
101101
[hubzero.github.io/botshield](https://hubzero.github.io/botshield/)
102102
from these sources):
103103

104104
| Topic | Source |
105105
|---|---|
106106
| Getting started — install, first vhost, smoke test | [`docs-src/getting-started.md`](docs-src/getting-started.md) |
107-
| Operator model — scoring, tiers, cookie reputation, multi-vhost | [`docs-src/operator-model.md`](docs-src/operator-model.md) |
107+
| Site model — scoring, tiers, cookie reputation, multi-vhost | [`docs-src/site-model.md`](docs-src/site-model.md) |
108108
| Directives reference | [`docs-src/directives.md`](docs-src/directives.md) |
109109
| Policy — triggers, rate limits, block-paths, robots.txt | [`docs-src/policy.md`](docs-src/policy.md) |
110110
| Captcha tier — providers, hardening, configuration | [`docs-src/captcha.md`](docs-src/captcha.md) |

docs-src/captcha.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ shouldn't black-hole legitimate traffic.
5757

5858
`BotShieldCaptchaCABundle` is optional. If unset, libcurl uses its
5959
compiled-in default (usually `/etc/ssl/certs/ca-certificates.crt`
60-
on Debian-family). Operators with custom trust stores or air-gapped
60+
on Debian-family). Sites with custom trust stores or air-gapped
6161
deployments can pin a specific bundle.
6262

6363
### Verify-endpoint hardening
@@ -91,7 +91,7 @@ BotShieldCaptchaMaxInFlight 64 # global, 1..1024
9191

9292
Several providers (hCaptcha, reCAPTCHA, Turnstile) return a
9393
`hostname` and `action` field in the siteverify response. mod_
94-
botshield validates these against operator-configured expectations:
94+
botshield validates these against the configured expectations:
9595

9696
```apache
9797
BotShieldCaptchaExpectedHostname example.com
@@ -265,6 +265,6 @@ parser shape, not by key separation.
265265
## Where to next
266266

267267
- Real-world deployment topology: [deployment](../deployment/index.html).
268-
- Tier model and scoring: [operator model](../operator-model/index.html).
268+
- Tier model and scoring: [site model](../site-model/index.html).
269269
- Triggers, allow lists, robots: [policy](../policy/index.html).
270270
- Decision log + metrics: [observability](../observability/index.html).

docs-src/deployment.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ clients with the legacy cookie still work during the transition.
8383

8484
Each vhost gets its own isolated bot reputation by default. A bot
8585
flagged on `site-a.example.com` doesn't carry that flag to
86-
`site-b.example.com`. Operators running many vhosts on one Apache
86+
`site-b.example.com`. Sites running many vhosts on one Apache
8787
instance get per-site detection without configuring anything.
8888

8989
### Default: auto-isolation per ServerName
@@ -105,7 +105,7 @@ automatically maintain separate reputation. No configuration required.
105105
```
106106

107107
Different sites usually have different threat models — the strict
108-
isolation is what most operators want.
108+
isolation is what most sites want.
109109

110110
### Opt-in shared reputation: `BotShieldShareScope`
111111

@@ -167,7 +167,7 @@ emit a NOTICE and are ignored. The SHM segment is module-global, so
167167
sizing happens once at the main-server level.
168168

169169
The headroom watchdog logs notices when any table approaches
170-
capacity, so operators can size reactively rather than guess
170+
capacity, so you can size reactively rather than guess
171171
up-front. Look for log lines of the form:
172172

173173
```
@@ -216,7 +216,7 @@ save more work than many pass-through BotShield checks cost.
216216
The `tests/bench/run-bench.sh` and `tests/bench/run-rate-bench.sh`
217217
drivers reproduce these measurements on your own hardware. Raw
218218
`wrk` / `oha` output is saved under `tests/bench/results/` so
219-
operators can inspect the full latency and throughput distribution
219+
you can inspect the full latency and throughput distribution
220220
when sizing a deployment.
221221

222222
## State persistence
@@ -276,7 +276,7 @@ file.
276276

277277
## Where to next
278278

279-
- Tier model, scoring, decision log: [operator model](../operator-model/index.html).
279+
- Tier model, scoring, decision log: [site model](../site-model/index.html).
280280
- Allow lists, rate limits, triggers: [policy](../policy/index.html).
281281
- Captcha and app-bridge integration: [captcha](../captcha/index.html).
282282
- Staging policy changes safely: [staging](../staging/index.html).

docs-src/directives.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# Directive reference
22

33
mod_botshield registers 78 directives at config time. This page is
4-
the canonical operator-facing reference, grouped by family. The
4+
the canonical reference, grouped by family. The
55
underlying source-of-truth is `bs_cmds[]` in `src/botshield.c:139`
6-
operators tuning behavior should treat the source as authoritative
6+
when tuning behavior, treat the source as authoritative
77
when it disagrees with a doc page.
88

99
## Scope and validity
@@ -92,7 +92,7 @@ Tier dispatch ladder:
9292
- `BotShieldScoreHard ≤ score < BotShieldScoreCaptcha` → form
9393
- `BotShieldScoreCaptcha ≤ score` → captcha (or form if no provider)
9494

95-
See [operator model](../operator-model/index.html) for the full scoring
95+
See [site model](../site-model/index.html) for the full scoring
9696
discussion.
9797

9898
`BotShieldForgivenessCapPerHour` caps total cookie-side
@@ -108,16 +108,16 @@ resistance; 0 disables (legacy behavior).
108108

109109
`interstitial` (the default) serves a no-click splash page that
110110
auto-submits a SHA-256 PoW on load — the legacy silent-tier
111-
behavior. `embedded` instead hands off to the operator-included
111+
behavior. `embedded` instead hands off to the site-included
112112
`/botshield/embedded.js` wrapper: the page serves DECLINED (real
113113
content) and the wrapper does the PoW in a Web Worker, then POSTs
114114
the result back to `/botshield/embedded-verify` to mint
115115
`_bs_verified` on the next request. Embedded mode trades a brief
116116
window where the cookie isn't yet on the client (the very first
117117
request goes through unverified) for a zero-interstitial UX.
118118

119-
Embedded mode requires the operator to include the wrapper
120-
script in their page templates; without it, the request still
119+
Embedded mode requires you to include the wrapper
120+
script in your page templates; without it, the request still
121121
serves the real content but no cookie ever lands.
122122

123123
## Widget customization
@@ -141,7 +141,7 @@ block itself. Max 256 KiB.
141141

142142
Logo and help files are 64 KiB max each. Logo content is served
143143
inline as `<img>`-equivalent SVG; help content is rendered as
144-
trusted HTML (no escaping — operator owns sanitization).
144+
trusted HTML (no escaping — you own sanitization).
145145

146146
`BotShieldShowLogo/Label/Box` strip widget chrome down to a lone
147147
checkbox if the surrounding page styles its own chrome. When label
@@ -316,7 +316,7 @@ This is the directive that replaces the legacy `BotShieldFlagIP`
316316
Action verbs: `action=score add=N` (signed N -1000..1000),
317317
`action=tier_floor min=<tier>` (raise effective tier; tier is one
318318
of `pass`/`silent`/`form`/`captcha`). The `reset` keyword clears
319-
all earlier triggers (compiled-in defaults + prior operator
319+
all earlier triggers (compiled-in defaults + prior
320320
declarations) for the named flag at post-config time.
321321

322322
Flag bits: `honeypot_hit`, `scanner_probe`, `fake_bot`,
@@ -391,7 +391,7 @@ and security model.
391391

392392
## Where to next
393393

394-
- Conceptual model and scoring: [operator model](../operator-model/index.html).
394+
- Conceptual model and scoring: [site model](../site-model/index.html).
395395
- Deployment topology and capacity: [deployment](../deployment/index.html).
396396
- Per-family policy semantics: [policy](../policy/index.html).
397397
- Captcha and app-bridge integration: [captcha](../captcha/index.html).

docs-src/faq.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
### Does this just block all bots?
66

77
No, and that's deliberate. The goal isn't bot elimination — it's
8-
*operator control over the terms of access*. Search-engine
8+
*site control over the terms of access*. Search-engine
99
crawlers, LLM training bots, archival crawlers, monitoring
10-
agents, partner integrations — many of these are bots an operator
11-
*wants* to reach the content, but on conditions the operator sets:
10+
agents, partner integrations — many of these are bots a site
11+
*wants* to reach the content, but on conditions the site sets:
1212
when, how often, which paths, with what rate cap, with what
1313
attribution. mod_botshield's primitives are built around setting
1414
those terms:
@@ -17,7 +17,7 @@ those terms:
1717
configured CIDR ranges are loaded, verified crawlers (UA-and-IP
1818
match against the published ranges) bypass the score ladder
1919
entirely. The built-in seed list covers Googlebot, Bingbot,
20-
and Applebot; operators add others via `BotShieldAllowBot` and
20+
and Applebot; you add others via `BotShieldAllowBot` and
2121
refresh ranges out of band with `tools/refresh-bot-ranges.sh`.
2222
- **Robots.txt enforcement.** A bot that ignores your `Disallow`
2323
rules gets enforced at the policy layer — robots.txt is no
@@ -36,7 +36,7 @@ those terms:
3636
A site that wanted to block every bot could do that with much
3737
less than mod_botshield offers. The reason this module exists is
3838
that "block everything that isn't a real human browser" is the
39-
*wrong* answer for most operators — they want search-engine
39+
*wrong* answer for most sites — they want search-engine
4040
indexing, want LLM crawlers to cite them under controlled terms,
4141
want monitoring to reach health endpoints, want partner bots to
4242
hit their API. mod_botshield is the policy surface for saying
@@ -62,7 +62,7 @@ What Cloudflare gives you that mod_botshield doesn't:
6262
application-layer attacks orders of magnitude bigger than a
6363
single Apache instance can survive.
6464
- **Managed challenges and turnkey product.** No tuning, no
65-
capacity sizing, no operator log-grepping. Pay the bill, get a
65+
capacity sizing, no log-grepping. Pay the bill, get a
6666
policy.
6767

6868
What mod_botshield gives you that Cloudflare doesn't:
@@ -72,7 +72,7 @@ What mod_botshield gives you that Cloudflare doesn't:
7272
- **No vendor lock-in or recurring cost.** Bot mitigation that
7373
goes beyond simple known-bad-IP blocking is typically a paid
7474
tier with managed CDNs.
75-
- **Operator control.** You write the rules in Apache config you
75+
- **Direct control.** You write the rules in Apache config you
7676
already understand; you don't have to learn a separate dashboard
7777
or wait for a vendor to add a feature.
7878

@@ -304,7 +304,7 @@ For challenged requests, yes, the user experiences friction
304304
of clicked PoW; captcha for as long as the provider takes). That's
305305
the entire point: *make scraping expensive without making real use
306306
expensive*. The threshold tuning workflow in
307-
[staging](../staging/index.html) is the operator handle on where
307+
[staging](../staging/index.html) is your handle on where
308308
that line falls.
309309

310310
### Does it work with PHP / FastCGI / mod_php / mod_proxy / nginx upstream?
@@ -342,7 +342,7 @@ Yes — it's just an Apache module. The constraints are:
342342
### How much memory does it use?
343343

344344
Default: 16 MiB SHM segment shared across all workers, growing as
345-
operators raise capacity directives. Per-process overhead is
345+
sites raise capacity directives. Per-process overhead is
346346
negligible (the `.so` is a few hundred KB; no per-request heap
347347
allocation outside of Apache's `r->pool` which is freed at request
348348
end).
@@ -355,15 +355,15 @@ sizing is documented in [deployment](../deployment/index.html#capacity-sizing).
355355
### Does it phone home? Send data anywhere?
356356

357357
No. The module makes outbound network calls in two
358-
operator-controlled categories:
358+
configured categories:
359359

360360
1. **Captcha siteverify.** When `BotShieldCaptchaProvider` is
361361
configured, mod_botshield makes one HTTPS POST per verify
362362
attempt to the configured provider's siteverify URL with the
363363
client's captcha token (and the client IP as the `remoteip`
364364
field). This fires from three paths: the `/captcha-verify`
365365
endpoint, the silent-tier embedded-verify endpoint when an
366-
operator pairs silent with a captcha provider, and the
366+
site pairs silent with a captcha provider, and the
367367
form-captcha fixup. No siteverify call ever happens without
368368
a captcha provider explicitly configured on the scope.
369369

@@ -376,8 +376,8 @@ operator-controlled categories:
376376
2. **Bot-range refresh script.** `tools/refresh-bot-ranges.sh`
377377
fetches published JSON from search-engine providers
378378
(Googlebot, Bingbot, etc.) and rewrites the CIDR files in
379-
`/var/lib/botshield/bots/`. This runs only when the operator
380-
invokes it (cron or manual); the module itself never makes
379+
`/var/lib/botshield/bots/`. This runs only when you
380+
invoke it (cron or manual); the module itself never makes
381381
these calls at runtime.
382382

383383
No telemetry. No analytics. No phoning the project. The module is
@@ -415,7 +415,7 @@ The module's data footprint (client IP + flag bits + TTL) is
415415
generally classified as personal data under GDPR. Considerations:
416416

417417
- **Lawful basis.** Bot mitigation is generally a "legitimate
418-
interest" — preventing scraping of operator data. Document the
418+
interest" — preventing scraping of site data. Document the
419419
basis in your privacy notice.
420420
- **Retention.** Flagged-IP entries expire after the configured
421421
TTL (default 1 hour for honeypot hits). The Bloom filter
@@ -456,11 +456,11 @@ mod_botshield fails open for siteverify timeouts. If
456456
provider responds, the verification path treats the request as
457457
passing — same outcome it would get without the provider. A
458458
WARNING-level log line carries the literal string `failing open`
459-
so operators can grep / alert on it. The Prometheus metrics
459+
so you can grep / alert on it. The Prometheus metrics
460460
count these as `outcome=failopen`.
461461

462462
The reasoning: a third-party provider outage shouldn't black-hole
463-
legitimate traffic. Operators preferring fail-closed semantics
463+
legitimate traffic. Sites preferring fail-closed semantics
464464
can wrap the provider in a circuit breaker (e.g. require captcha
465465
tier through a different path that doesn't fail-open) but that
466466
isn't the default.
@@ -472,9 +472,9 @@ mod_botshield degrades gracefully:
472472
- Periodic state-file snapshots stop. The graceful-shutdown save
473473
still runs.
474474
- The capacity headroom watchdog stops emitting NOTICE/WARN
475-
lines. Operators can read the same data from the on-demand
475+
lines. You can read the same data from the on-demand
476476
Prometheus gauges (`botshield_shm_flagged_used` etc.).
477-
- The robots.txt mtime-poller stops. Operators must reload Apache
477+
- The robots.txt mtime-poller stops. You must reload Apache
478478
to pick up robots.txt changes.
479479
- The load sampler stops; load triggers won't fire.
480480

@@ -578,7 +578,7 @@ permanent denial better than mod_botshield does.
578578
## Where to next
579579

580580
- Install + minimal config: [getting-started](../getting-started/index.html).
581-
- Tier model and scoring: [operator-model](../operator-model/index.html).
581+
- Tier model and scoring: [site model](../site-model/index.html).
582582
- Allow lists, triggers, robots: [policy](../policy/index.html).
583583
- Captcha + app-bridge: [captcha](../captcha/index.html).
584584
- Common operational issues: [troubleshooting](../troubleshooting/index.html).

docs-src/getting-started.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ Drop a single block into the vhost you want gated:
9494

9595
That's the floor. Everything else (tier thresholds, forgiveness,
9696
allow lists, captcha providers, triggers) ships with reasonable
97-
defaults documented on the [operator model](../operator-model/index.html) and
97+
defaults documented on the [site model](../site-model/index.html) and
9898
[directives](../directives/index.html) pages.
9999

100100
`BotShieldAlgorithm sha256-zeros` is currently the only built-in PoW
@@ -161,7 +161,7 @@ curl -sk -A "python-requests/2.31" https://example.test/ | grep -c BOTSHIELD
161161

162162
If you don't see the widget, the heuristic configuration on your
163163
scope likely diverges from the defaults — see
164-
[operator model](../operator-model/index.html#tuning-workflow) for the
164+
[site model](../site-model/index.html#tuning-workflow) for the
165165
tuning workflow and [observability](../observability/index.html) for how
166166
to inspect what each request scored.
167167

@@ -192,7 +192,7 @@ gradual rollback prefer `BotShieldShadowMode on` (see
192192
## Where to next
193193

194194
- Real-world deployments behind a proxy: [deployment](../deployment/index.html).
195-
- Tier model, scoring, and tuning: [operator model](../operator-model/index.html).
195+
- Tier model, scoring, and tuning: [site model](../site-model/index.html).
196196
- Allow lists, rate limits, and triggers: [policy](../policy/index.html).
197197
- Third-party captcha integration: [captcha](../captcha/index.html).
198198
- Metrics, decision log, mod_status: [observability](../observability/index.html).

0 commit comments

Comments
 (0)