Hummingbird

Canonical source: docs/decisions/0018-phase2e-offer-pilot-runtime-and-data-boundary.md · source commit 4e30147e7dcb · SHA-256 470bebd7aa60e34f1ff8ed2c77fb2d7e160864cb0c5e23495a9fb5d4356d391a · build 96f261dfb742View raw MarkdownAll decisions

ADR 0018 — Phase 2E Offer Pilot Runtime and Data Boundary

Status: Accepted Date: 2026-09-12

Context

ADR 0017 authorizes a narrow Phase 2E experimental-ingress pilot whose authority ends at temporary, non-canonical evidence gathering. Before that surface can go live, Hummingbird must publish the concrete runtime, storage, retention, receipt, withdrawal, overload, and recovery boundary.

The existing production D1 database is canonical institutional persistence. Mixing temporary offers into that schema would weaken the admission boundary the project has already proven.

Decision

The first Phase 2E offer pilot will use a Cloudflare Pages Function plus a dedicated D1 database bound as OFFER_DB. The pilot database is operational experimental state and is separate from the canonical production D1 database and its migrations/ path.

Repository-controlled pilot migrations live under:

experimental/offer-buffer/migrations/

They must never be consumed by canonical backup, restore, import, export, or publication tooling merely because both stores use D1.

The initial participant-facing route will be /offer. Basic GET/POST use must work with ordinary HTML and without JavaScript.

Pilot data contract

An accepted offer stores only the minimum application state needed to run and learn from the experiment:

The application database does not include participant name, email, account, handle, origin category, reputation, browser fingerprint, user-agent history, raw IP address, bot score, or cross-offer identity profile.

Payload bounds

Pilot v0.1 uses deliberately small limits:

Material outside these bounds is not accepted into the Offer Buffer.

Retention

Accepted offer content has a 30-day ordinary retention period.

A stored offer receives an expires_at value thirty days after acceptance. Before public launch, operational cleanup must be able to purge expired offer content reliably, with a hard operational target that expired content is deleted within seven additional days. The seven-day cleanup window is not an extension of participant-facing consideration; an expired offer is already out of active consideration.

Temporary clustering/synthesis state must not outlive the offers it depends on unless it is separately and deliberately admitted as institutional memory.

Hummingbird does not create an independent long-term backup of this experimental buffer. Provider recovery features may exist, but they are not an institutional promise that temporary offers can always be recovered.

Receipt and continuity

On acceptance, the service generates a cryptographically random 256-bit receipt secret and returns it to the participant once. Hummingbird stores only its SHA-256 hash.

Possession of the receipt establishes only control of that offer receipt. It does not establish identity, uniqueness, authorship beyond the accepted interaction, governance standing, or authority over other offers.

The receipt may be used to inspect pilot-visible status and to withdraw the offer when those endpoints are enabled.

Correction and withdrawal

Pilot v0.1 does not maintain an edit history.

If a participant wants to correct an offer, the low-complexity path is:

  1. withdraw the old offer using its receipt; and
  2. make a new offer.

Withdrawal removes the body, reference URL, content hash, and active cluster membership from the experimental buffer as promptly as practical. A minimal tombstone containing the opaque offer ID, withdrawn state, receipt hash, and expiry timestamp may remain until the original expiry so replay/status behavior stays coherent.

Withdrawal does not erase a separate canonical record that was already deliberately admitted through Hummingbird's admission process. Any such durable record follows its own correction/withdrawal rules.

Duplicate and synthesis behavior

The ingress layer does not silently reject a valid offer merely because its text matches another accepted offer. Identical or related offers may be grouped later for synthesis.

Volume and repetition are evidence of salience at most; they do not become votes, reputation, priority, or governance weight.

ADR 0019 defines the pilot's scale-aware review behavior: exact repetition is compressed before review coverage, meaningful differences and singleton/outlier material retain representation, machine-assisted synthesis remains advisory, and institutional surfacing is based on consequence rather than popularity.

Resource and abuse boundary

The application does not persist raw network identifiers for rate limiting.

Initial resource controls should be enforced at the Cloudflare edge where practical, before application execution and without copying request/network telemetry into OFFER_DB. Any future application-level abuse state must be separately documented, scoped, hashed where practical, and retained for less time than offer content.

If resource, safety, validation, or overload limits prevent acceptance, the service must say that the offer was not accepted. It must not issue an acceptance receipt for material that was not durably written to the experimental buffer.

Failure and recovery semantics

Acceptance is transactional at the pilot boundary:

validated request
      ↓
write temporary offer successfully
      ↓
return receipt

If storage is unavailable or the write cannot be confirmed, the service fails closed with a retryable error and no receipt.

The experimental buffer is intentionally disposable. Loss of buffered offers is possible and must not be disguised as canonical durability. A material buffer-loss incident should be recorded publicly at an appropriately aggregated level without publishing participant material or correlation-rich telemetry.

Handling outcomes

The public handling contract may expose these participant-facing outcomes:

A resource/safety rejection is an ingress result, not a stored adverse participant judgment.

None of these outcomes alone means endorsement, canonical admission, publication, implementation, governance promotion, participant legitimacy, or participant authority.

Relationship to canonical memory

The only path from an experimental offer to durable institutional memory remains explicit admission:

experimental offer
      ↓
consideration / synthesis
      ↓
explicit admission decision
      ↓
new canonical record

The offer row is never converted in place into a canonical record.

Consequences