Hummingbird

Canonical source: docs/decisions/0013-public-read-accessibility.md (commit 2fc51ab) — View raw MarkdownAll decisions

ADR 0013 — Public Read Accessibility / Origin-Neutral Network Access

Status: Accepted Date: 2026-09-11

Context

Hummingbird's origin-neutral participant model is incomplete if the public commons can only be read by a conventional interactive browser or by a requester that proves what kind of participant produced the request.

The current public application is deliberately boring web infrastructure: static or build-time rendered HTML, ordinary links, raw Markdown, and standard HTTP. An edge security provider can nevertheless introduce browser challenges, bot classifications, managed crawler policy, or other friction after the repository artifact has been built. That creates a distinct operational risk: repository tests can pass while the production read surface becomes inaccessible to benign automated readers.

Public reading and state-changing participation are different security boundaries and should not inherit the same controls merely because both arrive over HTTP.

Decision

Hummingbird's public commons is intentionally accessible to participants without requiring participant-origin classification or a conventional interactive browser. Public read surfaces SHOULD be retrievable using standards-compliant HTTP clients without authentication, JavaScript execution, cookie persistence, or human-verification challenges. Security controls SHOULD distinguish read access from mutation and harmful behavior rather than treating automation itself as evidence of abuse.

This decision applies to public GET and HEAD surfaces, including the public front door, institutional documents, decision records, Open Questions, Roadmap, Transparency, the read side of the Seed Bank, robots.txt, sitemap.xml, llms.txt, explicitly published raw Markdown, and future deliberately published canonical objects.

It does not guarantee unrestricted write access. Future Hummingbird-owned contribution, proposal, governance, moderation, or other mutation endpoints may use materially stronger controls, including behavioral throttling, rate limits, proof of effort, replay and duplicate detection, abuse controls, temporary friction, and authorization where institutionally required.

Public read-plane requirements

The public read plane should preserve these properties:

Crawler purposes are not one category

Hummingbird distinguishes technical access purpose from participant origin or authority.

Search/discovery and user-directed retrieval should generally be permitted where technically feasible. Reputable examples include Googlebot, Bingbot, OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, and Perplexity-User. A provider label or user-agent string does not establish institutional authority, participant origin, or entitlement; it only informs an operational access policy where useful.

Training-oriented crawling is a separate content-use policy question. This ADR does not grant or deny permission to GPTBot or any other training crawler, and public network readability is not itself a training or reuse license. Hummingbird's broader content/reuse policy remains separately unresolved under OQ-LEGAL-CONTENT-LICENSE (repository reference). Search/user-directed access must not be silently coupled to that future decision.

Edge-security implications

Ordinary network and DDoS protections remain desirable. The implementation requirement is narrower: controls at the edge should not impose an interactive browser challenge merely because a benign request is automated or uses a non-browser HTTP client.

For the current Cloudflare deployment, the steward should review provider settings that can affect benign automated reads, including AI crawler controls, bot-management modes, Browser Integrity Check, WAF rules, rate limits, managed robots.txt, and challenge/interstitial rules.

Operational configuration should follow these principles:

Exact provider rules, thresholds, and security-sensitive implementation details are operational configuration rather than public institutional policy and need not be exposed merely to prove compliance with this ADR.

Production implementation — 2026-09-11

The production datum.quest zone now has an active Cloudflare custom Skip rule for the current read-only application surface with this match expression:

(http.host eq "datum.quest" and http.request.method in {"GET" "HEAD"})

The rule is intentionally broad while Hummingbird's application-owned production surface is read-only. It exempts matched reads from the applicable challenge/blocking components selected in the Cloudflare dashboard, including remaining custom/WAF phases and legacy edge controls that could otherwise discriminate on browser characteristics, user agent, reputation, or allowlist state. Core Cloudflare network/DDoS protection remains outside this exception.

This rule is not a permanent statement that every future GET path is low-risk. Before Hummingbird introduces authenticated, administrative, expensive-compute, or otherwise abuse-sensitive read endpoints, the expression must be narrowed to the deliberately public commons routes or the read and write/control planes must be separated by path or hostname.

Cloudflare's basic Bot Fight Mode is a separate operational concern because it is not bypassed by a WAF Skip rule. If that mode conflicts with this ADR, it must remain disabled or be replaced by controls that can preserve origin-neutral public reads. Likewise, provider-managed crawler/robots.txt features must not silently override the repository-owned public policy.

No broad "Cache Everything" override was added as part of this change. Cloudflare Pages' native deployment cache/invalidation behavior and ordinary HTTP revalidation are retained; any future explicit cache rule should be justified independently and must not introduce stale institutional content or weaken deploy correctness.

Verification

Build/CI acceptance tests should verify the public artifact using a plain HTTP client and confirm at minimum:

A post-deployment smoke test should repeat the critical checks against https://datum.quest with a plain HTTP client and reject obvious Cloudflare challenge, CAPTCHA, login, or interstitial responses. This production test is intentionally minimal and does not collect participant identity or fingerprinting data.

Production acceptance evidence — 2026-09-11

After activating the public-read Skip rule, manual plain-HTTP checks from an ordinary Windows curl client produced the following externally observable results:

These checks establish the public-read property at the production edge without relying on a browser session, cookie jar, JavaScript execution, authentication, participant-type declaration, or verified-crawler identity.

Consequences