Repository navigation
docs planning RUST_STATION_BENCHMARK_PLAN
Status: PLANNED — phases RST-10–21; no benchmark results or SLA certification. Date: 2026-10-09. Parent: Rust ingestion plan. This extension defines how to measure preparation, database construction and geographically distributed reads. It does not authorize load against a shared service, deployment, a new database topology or promotion of location trust.
Keep RST-00–09 and existing P25–29 IDs. RST-07 becomes the bounded pilot; the
phases below provide the full experimental campaign for P29-T01, without
accepting G29, Android acceptance or G09. The opening source head is e257ee8:
RST-00/01 have documents/fixtures; RST-02–04 implement offline Rust preparation;
RST-05 implements Go-owned staging. RST-06 changes were concurrently in progress
and are not accepted by this document. Re-read current PROGRESS before execution.
Staging throughput is not canonical publication throughput: freeze the actual
RST-08/09 publication path before measuring end-to-end readiness.
Reuse infra/scripts/load/{run.sh,stats.py,faults.sh} and scripts/tests/test-load.sh
where suitable. The existing smoke uses closed-loop concurrent shell clients,
500 seeded stations/20 seconds in its test wrapper, pooled nearest-rank
percentiles and a 5xx counter. That is useful regression evidence, not a national
capacity, per-city tail-latency or open-arrival-rate campaign. Extend it through
bounded tasks; do not weaken its existing checks or represent new commands as
already available. New tools such as k6 require need/license/version/security
review before adoption; no dependency is added by this plan.
- B-BR-RST-P01 — equivalent work: compare identical validated semantics, datasets, result sets, durability and hardware. Rust vs Go preparation is comparable only where Go has an equivalent transform; otherwise mark that comparison unavailable and report stages independently.
- B-BR-RST-P02 — reproducible inputs: freeze source/fixture hashes, seeds, workloads, revisions, versions, settings, resource limits and budgets before each run. Count and explain every excluded, failed, censored or dropped sample.
- B-BR-RST-P03 — correct before fast: preserve row accounting, canonical CNPJ uniqueness, UUID/history, source separation, pending/reviewed locations and bounded queues. Any mismatch, silent loss, unauthorized promotion or weakened durability fails the variant regardless of speed.
- B-BR-RST-P04 — isolated experiments: use explicit disposable lab resources and a capped run manifest. Never stress the open phone, staging preview, production or a shared database, reset shared statistics, or clear host caches as an implied consequence of this planning request.
- B-BR-RST-P05 — fair geographic coverage: measure request-weighted totals and city strata separately. A fast hot-city cache cannot hide slow small, empty, rural, boundary or previously unseen cities. Synthetic request weights are hypotheses, never claims about actual user traffic.
- B-BR-RST-P06 — useful evidence: retain raw machine-readable samples and definitions, confidence/variability and failures. Do not average percentiles, discard timeouts, call incomplete instrumentation zero, or choose the best run. A dashboard summarizes evidence; it does not replace it.
BUC-RST-P01: reproduce a clean full import and measure each stage separately. BUC-RST-P02: replay/delta updates while city and nearby reads continue. BUC-RST-P03: compare indexes and rebuildable partitions against the same oracle. BUC-RST-P04: find sustainable offered load, headroom and recovery limits. BUC-RST-P05: detect regressions on the same artifact/hardware/workload family.
Every phase produces its own English evidence record with input/behavior SHA, actual commands, machine-readable artifacts, acceptance/limits and next task. All phases below are PLANNED; no run is implied by their existence. Begin only the selected phase and verified dependencies, rather than executing the entire matrix in one turn.
Dependency: verified RST-05 evidence; no dependency on unfinished RST-06 for this protocol-only task. Inventory the lab and target deployment class, current queries, migration/tool versions, data ownership and instrumentation gaps. Freeze a versioned run-manifest schema, metric dictionary, workload IDs, resource ceilings, stop conditions, allowed variants and wall-time/storage budget.
Deliver a workload/SLO worksheet: scenario, layer, dataset, offered load, p95/p99 budget, allowed errors/drops, ingest/freshness target, memory/disk limits and recovery target. The original 256MiB parser / 100ms city / 150ms nearby p95 at eight clients remain provisional laboratory hypotheses; they are not API-wide or production promises. Establish a baseline before freezing useful relative regression thresholds. Unknown hardware/cost/traffic stays unknown.
Exit: a reviewer can reproduce and decide pass/fail from the manifest without inventing thresholds after seeing results. No load runner, database or network change is required for this phase.
Dependency: RST-10. Implement deterministic synthetic fixtures/generators and an independent correctness oracle. Use checksum-valid synthetic establishment identities, explicit IBGE edition/UF mapping and fictitious station attributes; prevent collisions and label generated locations as synthetic. Never turn a generated point into reviewed real evidence or retain contributor GPS.
Create: a tiny correctness set; a representative-size set based on a measured permitted snapshot; 100k and 1M station stress sets (not claims about real station counts); and history cardinalities 1/10/100 assertions per station where the lab storage budget allows. Vary row/field sizes, duplicate/quarantine ratios, missing coordinates and changed/no-op ratios independently. Preserve actual skew as aggregate shape when available; do not scale by copying identical CNPJs. No new national fetch is required just to build synthetic stress cases.
Freeze request traces for: uniform municipalities including zero-row cases; weights proportional to fixture station count (not population/user traffic); 80% of requests to 20% of selected cities; and 90% to one hot city as an adversarial case. Pin exact city sets/weights/seeds and rotate which cities are hot. Stratify by cardinality (empty/1–10/11–100/>100 stations), UF, urban/rural shape and border cases, reporting empty strata rather than inventing rows.
Exit: deterministic byte hashes and counts, oracle result sets, documented distribution and statistical weights. Reordered source inputs retain semantics.
Dependency: RST-11. Extend existing operator/load tooling, with fixture tests for latency/count/error math and histogram merging. Record DB statements, API end to end and client scheduling separately. Qualify an open-arrival-rate driver alongside closed-loop 1/8/32-client comparisons; document generator CPU/network headroom and scheduled/started/completed/dropped counters.
Test timeout, non-2xx, semantic wrong-result, cancellation, missed scheduling, sample-file interruption and instrumentation permission-denied paths. Validate telemetry overhead with instrumentation on/off in paired trials. SQL execution plans belong to diagnostic runs, not every timed request. Pin clocks and units; cross-process lag needs synchronized clocks and recorded uncertainty.
Exit: a deliberately slow/erroring fixture cannot produce a falsely healthy report; raw samples reconcile to summary counters. Tools/permissions unavailable are explicit evidence gaps, not fabricated zero values.
Dependencies: RST-12 and verified RST-03/04. Measure local read/parse/normalize/ municipality lookup/dedup/join/sort/spill/serialize/hash/manifest separately and as a complete preparation path. Build optimized binaries with recorded flags; exclude compile/setup from preparation timing and report them separately.
Run clean snapshot, unchanged replay, source reorder, 1%/10% changed records, duplicate-heavy, quarantine-heavy, long-field and spill-forced cases. Vary one bounded setting at a time: buffer/spill budget, batch size and worker count if parallelism actually exists. No speculative thread pool or runtime addition.
Exit: identical oracle/checksums, accepted+duplicate+quarantined=input accounting, per-stage time, rows/s and MiB/s with peak process-tree/cgroup memory, temporary disk and CPU-seconds. Report empirical memory/time scaling from representative to 100k/1M, no speedup claim against a non-equivalent Go path.
Dependencies: RST-13 and RST-05. Use the owned Go loader on an isolated real PostGIS database. Time database initialization/migrations, validation, staging, reconciliation, profile/read-view creation, index build and ANALYZE separately; mark unimplemented publication/profile stages NOT_AVAILABLE. Measure full build-to-query-ready only when the owned publication path exists and passes its correctness gate. Direct synthetic seeding tests query mechanics separately and cannot stand in for ingestion/publication timing.
Measure empty build, unchanged replay, 1%/10% changes, stale/duplicate input and concurrent duplicate loaders. Compare only implemented bounded row/batch/COPY strategies under the same constraints/durability; a new staging COPY adapter is a separate tested code task. Capture WAL, transactions, commit/lock waits, dead tuples, index/temp bytes and total time to a usable catalog. Assess index build cost on a fresh lab build separately from concurrent live-index creation.
Exit: IDs/counts/history and failed-run visibility agree with the oracle; cost per accepted/changed row and query-ready time have explicit denominators. Empty, upgrade, restricted-role, failure/recovery and concurrent writes get immediate real-PostGIS/race coverage when implementation changes, not at campaign end.
Dependencies: RST-12/14; the measured read path must be available and identified. Measure raw SQL and actual Go API separately for exact city listing, supported text/UF filters, station/profile detail and negative/empty lookup. Use actual existing endpoints/query predicates; a missing feature is a separate task. Freeze 5/20/50-row pages and first/middle/last valid keyset cursors, including same-sort-value ties. Observe deep OFFSET only as a diagnostic comparator if that SQL exists; do not introduce it into the product.
Exercise all RST-11 geographic distributions at controlled 1/8/32 clients and the predeclared arrival-rate range. Compare cold/restarted, warm and rotating unseen-city working sets; pin exact definitions below. Test parameter-sensitive plans for sparse and large cities, prepared generic/custom plan behavior and estimate/actual cardinality mismatch. Measure proposed composite/partial indexes one change at a time with fresh comparable statistics and build/storage costs.
Exit: correct stable pages with no gaps/duplicates, per-query/per-stratum p50/p95/p99/error counts and offered/achieved rate. Show worst strata, weighted national workload results and coverage denominators; do not pool unlike mixes.
Dependencies: RST-15 and verified RST-06 for eligibility cases. Freeze nearby discovery radii 150m/1km/5km/20km, dense/sparse sites, empty results, tied distances and cross-city/UF borders; these are lab scenarios, not changed API permissions. Measure matching GiST/type/predicate use, candidate/result ratio and distance sort/recheck costs. Benchmark the authoritative capture eligibility path separately from discovery and preserve its real request/proof preconditions.
Exit: spatial result oracle and 149.9/150/150.1m/fix-integrity negative cases agree on real PostGIS. Latency, candidate pruning and source/location coverage are separate metrics. Coordinate completeness or faster KNN never certifies station-location accuracy or grants capture trust.
Dependencies: RST-15/16 baselines. Compare A: existing unpartitioned indexed catalog; B: rebuildable UF read projection; C: rebuildable municipality-hash projection with a small predeclared partition count, for example 8/16/32. Canonical station identities/active-CNPJ uniqueness/FKs stay in their owner. Measure optional date partitions/BRIN separately on append-only history with the actual range/retention queries, not as a change to current station semantics.
First compare projection A with B/C using identical columns/indexes to isolate partition effects; report canonical joins as their own cost. Include single-city, cross-partition nearby, all-city and CNPJ-only lookups with/without pruning, generic prepared plans, cache miss, write amplification, build/rebuild, ANALYZE, vacuum and partition lifecycle. Compare whole-plan buffers once, not the sum of inclusive parent/child buffer counters.
Exit: a versioned decision using predeclared benefit/regression/resource bounds and repeated trials, including unsupported/inconclusive cases. Keep A if there is no material repeatable total-workload benefit. No per-city database/table, weakened global uniqueness or automatic production migration.
Dependencies: RST-17 and verified RST-08/09 operational/read publication paths. Run reads alone, full import alone, delta alone, then the same reads with full and incremental ingestion. Preserve identical dataset/workload/configuration. Sweep offered arrival rate and bounded importer concurrency separately; refine near the observed saturation knee. An illustrative rate ladder is 5/20/50/100 requests/s, revised in RST-10 from lab limits, not a traffic forecast.
Measure queue delay, connection-pool wait, backpressure, lock contention, checkpoint/IO interference, freshness/review backlog and per-city tail penalty. Define sustainable capacity as the highest measured load meeting all frozen latency/error/drop/resource budgets without growing backlog during the declared steady interval. Report client count, achieved throughput and headroom against selected demand, not a single unqualified maximum QPS.
Exit: a capacity envelope and bottleneck evidence. If the load generator limits the run, classify it as generator-limited, not the server's capacity.
Dependencies: RST-18 and RST-08 recovery contracts. Inject bounded worker kill, DB disconnect, disk-full, malformed/truncated batch, checksum mismatch, duplicate concurrent loader and stale lease; add upstream timeout/429 only if that fetch path is actually enabled. Use explicit disposable resources and one fault at a time before combinations. Preserve required durability settings throughout.
Exit: no lost accepted facts/duplicate canonical identities/false completeness, and measured detect/retry/recover/backlog-drain times, read degradation and orphan/temp cleanup. Reconcile before/after manifests and invariants. A lab 48h virtual-clock outage tests logic; it does not prove 48h real uptime or a backup-restore RPO/RTO. Real restore acceptance remains with its owning plan.
Dependency: RST-19. Run a bounded 30-minute pilot, then separately scheduled 24h and 48h campaigns on provisioned isolated resources. Short runs cannot be labelled soak success. Include repeated imports, retention/partition maintenance, autovacuum/checkpoints and hot-city rotation; track memory/file/connection growth, dead tuples, index growth, disk pressure and backlog trends over time.
Compare workstation and a constrained deployment-class lab with pinned CPU/RAM/ storage/IO/network limits. Report CPU-seconds/1k prepared and changed rows, MiB/WAL per changed row, storage per station/assertion, query resource cost and minimum measured headroom. If supplied, use dated provider prices to calculate cost per million successful queries and per full/delta import with stated utilization/amortization; no invented currency values or free shared CPU.
Exit: maintenance included, growth/leak slopes and variability reported, costs traceable to measured resources/prices. Unscheduled or interrupted long runs remain OWED/INCOMPLETE, never silently replaced with extrapolation.
Dependency: complete selected RST-10–20 matrix; explicitly name omitted scenarios and unaccepted obligations. Deliver machine-readable results and standalone exportable plots: per-stage ingest time/throughput, memory vs rows, DB bytes/WAL, latency vs offered load, weighted and per-city tails, partition tradeoffs, freshness/recovery and cost. Each plot names units, workload, counts, hardware, cache state and uncertainty. Never fill missing runs with zero values.
Record retain/change/reject for each index/partition/batch/parallelism hypothesis, plus a separate implementation/migration/rollback task for any accepted change. Freeze a bounded deterministic correctness/resource smoke for scoped ordinary CI if implemented; noisy performance comparisons run manually on matched lab hardware, long soak/release campaigns follow existing CI_PLAN. No new recurring automation or aggregate suite on every documentation edit.
Exit: a clean checkout can reproduce the selected manifest using documented implemented commands; every performance claim links raw evidence. Accepted lab budgets do not automatically accept P29-T02/G29/G09 or a production SLA.
Every record includes run_id, scenario/phase, trial/variant, dataset/workload
hashes, code/config versions, layer, unit and observation interval. Raw samples
may stay in an access-controlled local artifact bundle; commit only sanitized
summaries/manifests and small synthetic fixtures. No credentials, DSNs, real
contributor identifiers/GPS or production photos in samples, SQL plans or logs.
- Preparation: when an authorized fetch path is enabled, separately record fetch/first-byte/download/decompression time, wire/uncompressed bytes, retry/ 429 counts and compression ratio; offline-file preparation excludes network time explicitly. Record raw bytes/rows, accepted/duplicate/quarantined by reason, unique CNPJs, unmatched/ambiguous municipalities, coordinate candidate/conflict coverage; wall/CPU seconds per stage, rows/s = input rows / stage wall seconds, MiB/s = input bytes / 2^20 / read wall seconds, output/spill bytes, temporary file count, peak RSS/process-tree or cgroup peak (identify scope), CPU use, page faults, IO bytes/ops and read/write wait. Distinguish throughput based on input rows from useful accepted rows; replay is not a full parse speedup.
- DB load/construction: validated/staged/applied/changed/no-op/failed rows, transactions and batch size, time-to-query-ready, commit/lock/pool waits, active/idle connections, lock timeouts/deadlocks, WAL bytes/records/full-page images, buffers hit/read/dirtied/written, temp bytes/spills, index/table/total size, build/ANALYZE/vacuum durations, live/dead tuples and checkpoint metrics. Report WAL/change-row and bytes/station with zero-denominator as undefined.
- Reads: offered/started/completed/successful requests/s; scheduled drops, transport errors, timeouts, HTTP outcomes and semantic mismatches separately; p50/p90/p95/p99/max and sample count per query/layer/stratum; client queue, pool wait, DB plan/execution, serialization, response bytes and API total. A timeout is a right-censored latency at its deadline and a failed request, not an omitted sample or exact elapsed completion. Goodput counts only correct responses meeting the frozen budget. Histograms merge only like scenarios.
- Geographic/plan efficiency: selected/covered/empty municipalities by UF and size, request weights, per-stratum latency/errors and worst groups; rows examined/returned where observable, actual vs estimated rows, index/ sequential/bitmap scans, partitions touched/pruned, planning overhead, rechecks, heap fetches and shared-hit/(hit+read) with undefined denominators. A PostgreSQL shared-buffer hit is not an OS/device cache measurement.
- Mixed operation/freshness: eligible-to-staged/applied/read-visible lag, upstream source age separately, unchanged replay time, queue depth/oldest age, review-required backlog by reason, service vs enqueue rate, retry volume and read p95/p99 ratio with vs without ingestion at identical offered load. Waiting for human review is not hidden in an importer throughput figure.
- Host, recovery and efficiency: CPU time/utilization/throttling/steal where available, RSS/cgroup/OS cache distinguished, disk capacity/latency/IOPS/ throughput, network bytes/errors, file descriptors, recovery and cleanup durations, verified row loss/duplication, resource/cost per useful unit and steady-state backlog/memory/storage slopes. Replication lag is N/A unless replication is actually configured; energy is N/A without a real meter.
- Freeze the environment: CPU model/vCPU/quota/governor, RAM/swap/container
limits, storage/filesystem/free space, host contention, OS/kernel, exact Rust/
Go/PostgreSQL/PostGIS/PROJ/tool/image versions, release flags, schema/indexes,
pool size and PostgreSQL
shared_buffers,work_mem, parallelism, JIT, durability/checkpoint/autovacuum settings. Data generation/setup is untimed and reported separately. Do not change several knobs between variants. - Cache labels are explicit: process-cold, DB-restarted with OS cache unknown, OS-and-DB-cold only on a dedicated proven environment, or warmed to a recorded workload. A new connection or DB restart alone does not prove disk cold. Do not run privileged global cache drops on a shared host.
- Use a staged matrix: tiny correctness qualification, representative baseline, one-factor screening, selected worst-case/combined runs, then long campaigns. Do not execute a huge Cartesian product. Predeclare scenario exclusions and budgets before screening; optimization decisions need representative and worst-stratum evidence, not just a favorable microbenchmark.
- Initial reproducibility policy: one untimed warm-up and at least five paired measured trials for short cases, randomized/alternated A/B order, each with independently reset comparable data. For steady API cases, predeclare at least 60s warm-up and 5min observation and extend for sample needs. Report per-trial values, median, range and 95% uncertainty using an explicitly versioned method on independent runs/time blocks, not falsely independent autocorrelated requests. These durations are starting protocol choices, revisable at RST-10.
- Tail reporting policy: target at least 10,000 completed samples per reported p99 query/stratum to expose roughly 100 tail observations; this is a declared lab minimum, not a guarantee of accuracy. Report N, censored/drop counts and uncertainty; smaller strata get descriptive tails marked INCONCLUSIVE for gating, or a longer run. Never average per-city or per-run percentiles; retain raw histograms for matched weighted totals and independent per-city results.
- Separate closed-loop concurrency comparisons from open scheduled arrival rates to expose overload rather than allowing slower clients to reduce demand invisibly. Record scheduling delay and unstarted work; maximum VUs/connections are capped. Saturation and expected-overload experiments are diagnostic, not a way to lower ordinary acceptance budgets.
- Use PostgreSQL stats deltas with recorded reset times, restricted observer
permissions and isolated workloads.
pg_stat_statementsgives aggregated statement data, not request p99;pg_stat_io/WAL/lock/activity views explain bottlenecks. Pin view/column support to the actual server version. Recordtrack_io_timing/planning tracking overhead and availability. - Capture selected
EXPLAIN (ANALYZE, BUFFERS, WAL, SETTINGS, FORMAT JSON)in diagnostic trials on the isolated DB. ANALYZE executes the statement and adds profiling cost; it is not the API latency distribution or network measurement. Choose supported options per version and state which metrics are unavailable; do not infer whole-query runtime memory from planner memory. - Predeclare absolute budgets plus a materiality rule: for example an optional design must improve the selected primary metric by >=15% across repeated paired trials without >10% regression in critical strata, unacceptable build/ maintenance costs or broken correctness. These percentages are proposed decision thresholds to freeze/refine at RST-10, not achieved improvements. Uncertain comparisons are INCONCLUSIVE; retain the simpler baseline.
- Status per scenario: PASS, FAIL, INCOMPLETE, INCONCLUSIVE or NOT_APPLICABLE with reason. Correctness failure stops optimization. Predeclared disk/memory/ time/queue limits abort safely and leave incomplete evidence; do not drop failed trials and rerun until green. Diagnose and version any corrected rerun.
Proposed bundle (implemented under RST-12, not existing commands): manifest, environment/config hashes, dataset summaries, query IDs/parameter distribution, counts/oracle checks, raw per-request CSV or histograms with failure/deadline records, per-stage timing JSON, DB/host interval snapshots, EXPLAIN JSON, summary JSON/CSV, figures and an English decision report. Include UTC intervals plus elapsed monotonic timings, units, collector version and artifact checksums. Specify private-artifact retention and sanitize before any publication.
Select RST-10 to start with documentation/protocol only. Use the companion
handoff prompt; verify actual completed
dependencies and do not restart RST-00 or concurrent implementation. Future
commands must be documented and tested when their phase implements them.
Method references checked 2026-10-09: PostgreSQL monitoring, statement aggregates, EXPLAIN behavior, open/closed load models, arrival-rate scheduling, dropped scheduled work. Numeric workloads, durations and decision bounds above are proposed project protocol choices, not recommendations or measured results from those sources.
- Home
- Roadmap
- docs-ADR_INDEX
- docs-AI_ENGINEERING_CONTRACT
- docs-CURRENT_STATE_AUDIT
- docs-MIGRATION_PLAN
- docs-README
- docs-adr-001-kotlin-compose-stack
- docs-adr-002-price-import-immutability
- docs-adr-003-nominatim-reverse-geocode
- docs-adr-004-backend-scope-and-governance
- docs-adr-005-modular-monolith-and-postgresql
- docs-adr-006-official-catalog-and-exact-contracts
- docs-adr-007-anonymous-proof-of-possession
- docs-adr-008-privacy-and-retention
- docs-adr-009-community-consensus-and-projections
- docs-adr-010-private-object-evidence
- docs-adr-011-operations-and-android-gate
- docs-adr-012-licensing-and-hosted-business
- docs-adr-013-fast-phase-delivery
- docs-adr-014-functional-app-before-production-release
- docs-adr-015-kotlin-multiplatform-shared-domain
- docs-adr-016-android-commercial-community-ios-deferred
- docs-adr-017-station-profile-and-verified-representation
- docs-adr-018-project-batch-delivery
- docs-adr-019-android-vps-integration-first
- docs-adr-020-maintained-dev-main-delivery
- docs-adr-021-community-first-contribution
- docs-architecture
- docs-assets-brand-README
- docs-assets-flags-ATTRIBUTION
- docs-assets-fuel-icons-README
- docs-assets-games-fuel-v1-README
- docs-assets-home-art-README
- docs-assets-home-icons-README
- docs-assets-landing-fleet-android-20261012-BRIEF
- docs-assets-landing-hero-20261011-BRIEF
- docs-assets-landing-illustrated-20261012-BRIEF
- docs-assets-landing-illustrated-20261012-README
- docs-assets-landing-minimal-20261012-BRIEF
- docs-assets-landing-redesign-20261011-PREPARATION_EVIDENCE
- docs-assets-landing-redesign-20261011-README
- docs-assets-landing-redesign-20261011-REFERENCE_BRIEF
- docs-assets-landing-sync-20261012-BRIEF
- docs-attribution
- docs-backend-ANDROID_INTEGRATION_GUIDE
- docs-backend-ANP_INGESTION
- docs-backend-API_PLAN
- docs-backend-CI_PR127_RECOVERY
- docs-backend-CI_PR128_PR129_RECOVERY
- docs-backend-COMMUNITY_FIRST_POLICY
- docs-backend-COMMUNITY_PRICING_SPEC
- docs-backend-DATA_MODEL
- docs-backend-DOMAIN_MODEL
- docs-backend-INFRASTRUCTURE_PLAN
- docs-backend-PHOTO_CAPTURE_CONTRACT
- docs-backend-PHOTO_SUBSET_SUBMISSION_CONTRACT
- docs-backend-PREMIUM_API_CONTRACT
- docs-backend-PREMIUM_BILLING_RUNBOOK
- docs-backend-PREMIUM_CLOUD_PROTOCOL
- docs-backend-PRIVACY_NOTICE
- docs-backend-REGISTRY_DAILY_SYNC
- docs-backend-RST_VPS_HARDENING
- docs-backend-STATION_RELIABILITY_AUDIT_20261013
- docs-backend-TARGET_ARCHITECTURE
- docs-backend-TEST_STRATEGY
- docs-backend-TOOLCHAIN
- docs-backend-evidence-community-safety-COMMUNITY_FINAL_SAFETY
- docs-backend-evidence-community-safety-COMMUNITY_HOME_CONSOLIDATION
- docs-backend-evidence-community-safety-CS00_AUDIT
- docs-backend-evidence-community-safety-CS01_HELPFULNESS_CONTRACT
- docs-backend-evidence-community-safety-CS02A_HELPFULNESS_STORE
- docs-backend-evidence-community-safety-CS02B_HELPFULNESS_HTTP
- docs-backend-evidence-community-safety-CS03A_HELPFULNESS_QUOTA
- docs-backend-evidence-community-safety-CS03B_LIMITER_ROTATION
- docs-backend-evidence-community-safety-CS04_FEED_PLANS
- docs-backend-evidence-community-safety-CS05A_CONTRIBUTION_MODERATION
- docs-backend-evidence-community-safety-CS05B_REVIEW_ANNOTATION
- docs-backend-evidence-community-safety-CS06_PROJECTIONS_ISOLATION
- docs-backend-evidence-community-safety-CS07A_BENCH_HARNESS
- docs-backend-evidence-community-safety-CS08A_HELPFULNESS_CLIENT
- docs-backend-evidence-community-safety-CS08B_HELPFULNESS_VIEW
- docs-backend-evidence-community-safety-CS09A_CONSENT_CONTRACT
- docs-backend-evidence-community-safety-CS09B_CONSENT_STORE
- docs-backend-evidence-community-safety-CS09C_CONSENT_HTTP
- docs-backend-evidence-community-safety-CS10A_PROMOTION_CONTRACT
- docs-backend-evidence-community-safety-CS10B_DERIVATIVE_STORE
- docs-backend-evidence-community-safety-CS10C_WORKER_PURGE_SOAK
- docs-backend-evidence-community-safety-CS10D_TRAINING_ERASURE
- docs-backend-evidence-community-safety-CS11A_CONSENT_CLIENT
- docs-backend-evidence-community-safety-CS11B_CONSENT_VIEW
- docs-backend-evidence-community-safety-CS11C_PHOTO_OPT_IN
- docs-backend-evidence-community-safety-CS12A_CONSENT_LIVE
- docs-backend-evidence-community-safety-PRM_COMMUNITY_FIRST
- docs-backend-evidence-community-safety-PRM_COMMUNITY_FIRST_ROLLOUT
- docs-backend-evidence-community-safety-RVA01_INGRESS_CONTRACT
- docs-backend-evidence-community-safety-RVA02_ADMISSION_CONTRACT
- docs-backend-evidence-community-safety-RVA03_ERASURE_RECOVERY
- docs-backend-evidence-community-safety-RVA04_CONSENT_FENCE
- docs-backend-evidence-community-safety-RVA05_OUTPUT_RECOVERY
- docs-backend-evidence-community-safety-RVA06_MINIMIZATION_GATE
- docs-backend-evidence-community-safety-RVA07_DEADLINE_ENFORCEMENT
- docs-backend-evidence-community-safety-RVA08_OWNER_CONSENT
- docs-backend-evidence-community-safety-RVA08_STAGING_ACCEPTANCE_2026-10-12
- docs-backend-evidence-community-safety-RVA09_JWKS_ADMISSION
- docs-backend-evidence-community-safety-RVA_BATCH_DELIVERY_2026-10-13
- docs-backend-evidence-community-safety-SEC01A_ADMISSION_REGRESSIONS
- docs-backend-evidence-community-safety-SEC01B_MAILBOX_BOUND
- docs-backend-evidence-community-safety-SEC01C_ATOMIC_ADMISSION
- docs-backend-evidence-community-safety-SEC01D_RETRY_ROLLBACK
- docs-backend-evidence-community-safety-SEC02A_PROXY_REGRESSIONS
- docs-backend-evidence-community-safety-SEC02B_TRUSTED_RESOLVER
- docs-backend-evidence-community-safety-SEC02C_BUDGET_SPLIT
- docs-backend-evidence-community-safety-SEC03A_ATOMIC_RESERVATION
- docs-backend-evidence-community-safety-SEC03B_TRANSFER_BOUNDARY
- docs-backend-evidence-community-safety-SEC03C_PROVIDER_MATRIX
- docs-backend-evidence-community-safety-SEC03D_NAMESPACE_MONITORING
- docs-backend-evidence-community-safety-SEC04A_ERASURE_INVENTORY
- docs-backend-evidence-community-safety-SEC04B_DELETION_LINKAGE
- docs-backend-evidence-community-safety-SEC04C_ATTRIBUTION_TRAINING
- docs-backend-evidence-community-safety-SEC04D_REPLAY_LOCAL_CLEANUP
- docs-backend-evidence-community-safety-SEC05A_OVERDUE_ORIGINALS
- docs-backend-evidence-community-safety-SEC05B_SCHEDULING_CATCHUP
- docs-backend-evidence-community-safety-SEC05C_TRANSIENT_CACHE
- docs-backend-evidence-community-safety-SEC05D_BACKUP_ASSESSMENT
- docs-backend-evidence-community-safety-SEC05E_EVERY_COPY_SOAK
- docs-backend-evidence-community-safety-SEC06A_SOURCE_BOUNDS
- docs-backend-evidence-community-safety-SEC06B_XLSX_CEILINGS
- docs-backend-evidence-community-safety-SEC06C_OUTBOX_BOUNDS
- docs-backend-evidence-community-safety-SEC06D_RETRY_BUDGETS
- docs-backend-evidence-community-safety-SEC06E_MEASURED_HISTORIES
- docs-backend-evidence-community-safety-SEC07A_REFRESH_REUSE
- docs-backend-evidence-community-safety-SEC07B_JWKS_EXPIRY
- docs-backend-evidence-community-safety-SEC07C_ANDROID_REFRESH
- docs-backend-evidence-community-safety-SEC08A_LOCATION_ASSURANCE
- docs-backend-evidence-community-safety-SEC08B_ADVERSARIAL_CLIENT
- docs-backend-evidence-community-safety-SEC08C_ATTESTATION_DECISION
- docs-backend-evidence-community-safety-SEC08D_PHONE_MATRIX
- docs-backend-evidence-community-safety-SEC09A_CURRENT_HEAD_REVIEW
- docs-backend-evidence-community-safety-SEC09B_DEPENDENCY_SCANS
- docs-backend-evidence-community-safety-SEC09C_INTEGRATION_FAULT
- docs-backend-evidence-community-safety-SEC09D_STAGING_RUNBOOK
- docs-backend-evidence-community-safety-SEC09E_PROTECTED_DELIVERY
- docs-backend-evidence-community-safety-rva08-staging-20261012-README
- docs-backend-evidence-premium-PRM08_T05_GATE_MATRIX
- docs-backend-evidence-premium-PRM_FIRST_TEN
- docs-backend-evidence-premium-PRM_NEXT_TEN
- docs-brand-APP_ICONS
- docs-brand-IDENTITY
- docs-commit-conventions
- docs-data-sources
- docs-glossary
- docs-license
- docs-local-build
- docs-mobile-KOTLIN_MULTIPLATFORM_AUDIT
- docs-mobile-android-developer-preview-key-session
- docs-mobile-bottom-tab-base-navigation
- docs-mobile-evidence-games-v1-README
- docs-mobile-games-mvp
- docs-mobile-games-polish-emulator
- docs-mobile-p12-t01-toolchain-baseline
- docs-mobile-p12-t02-portable-domain
- docs-mobile-p12-t03-application-ports
- docs-mobile-p12-t04-swift-shell
- docs-mobile-p12-t05-foundation-acceptance
- docs-mobile-p13-t05a-shared-auth
- docs-mobile-p13-t05b-android-adapters
- docs-mobile-p13-t05c-auth-screens
- docs-mobile-p17-t04-lifecycle-exit
- docs-mobile-p18-t01-acceptance-matrix
- docs-mobile-p19-t01-baseline
- docs-mobile-p19-t02-information-architecture
- docs-mobile-p20-t01-discovery-contract
- docs-mobile-p20-t02-explore-journey
- docs-mobile-p20-t03-station-detail
- docs-mobile-p20-t04-discovery-acceptance
- docs-mobile-p21-t01-contribution-contract
- docs-mobile-p21-t02-capture-review
- docs-mobile-p21-t03-outbox-status
- docs-mobile-p21-t04-storage-expiry
- docs-mobile-p22-t01-account-journey
- docs-mobile-p22-t02-ratings-comments-votes
- docs-mobile-p22-t03-moderation-support
- docs-mobile-p22-t04-abuse-acceptance
- docs-mobile-p23-city-community-feed
- docs-mobile-p23-t01-return-flows
- docs-mobile-p23-t02-onboarding-rules
- docs-mobile-p23-t03-metrics-operations
- docs-mobile-p23-t04-community-rehearsal
- docs-mobile-p24-t01-device-matrix
- docs-mobile-p24-t02-usability-accessibility
- docs-mobile-p24-t03-performance-memory
- docs-mobile-p24-t04-security-signoff
- docs-mobile-p32-home-commercial
- docs-mobile-p32-home-minimal
- docs-mobile-p32-icon-monochrome
- docs-mobile-p32-t01-public-profile
- docs-mobile-p32-t02-claim-export-import
- docs-mobile-p32-t03-management
- docs-mobile-p32-t04-offline-acceptance
- docs-mobile-p32-ui-completion
- docs-mobile-p34-t01-staging-inventory
- docs-mobile-p34-t02-environment
- docs-mobile-p34-t03-test-catalog
- docs-mobile-p35-station-page
- docs-mobile-p35-t01-directory-ports
- docs-mobile-p35-t02-explore-detail
- docs-mobile-p35-t03-search-regression
- docs-mobile-p36-account-continuity
- docs-mobile-p36-secure-storage-keyboard-integration
- docs-mobile-p36-secure-storage-keyboard
- docs-mobile-p36-t01-staging-accounts
- docs-mobile-p36-t02-feedback-screens
- docs-mobile-p36-t03-activity-rights
- docs-mobile-p37-camera-review
- docs-mobile-p37-image-ocr
- docs-mobile-p37-ocr-expanded-validation
- docs-mobile-p37-owner-scope-expiry
- docs-mobile-p37-photo-capture-eligibility
- docs-mobile-p37-photo-subset-android
- docs-mobile-p37-photo-subset-backend
- docs-mobile-p37-send-feedback-recovery
- docs-mobile-p37-split-price-ocr
- docs-mobile-p37-t01-contextual-capture
- docs-mobile-p37-t02-upload-outbox
- docs-mobile-p37-t03-storage-expiry
- docs-mobile-p38-t01-code-regression
- docs-mobile-p38-t02-manual-matrix
- docs-mobile-p38-t03-candidate-handoff
- docs-mobile-premium-fuel-category
- docs-mobile-stations-auto-sync-20261013
- docs-operator-access
- docs-operator-backup
- docs-operator-deploy
- docs-operator-dou-editions
- docs-operator-edge-cache
- docs-operator-feedback-moderation
- docs-operator-monitoring
- docs-operator-pilot-city
- docs-operator-profile-review
- docs-operator-recovery
- docs-operator-registry-runs
- docs-operator-retention
- docs-planning-ANDROID_VPS_PLAN
- docs-planning-ANDROID_VPS_PLAN_VALIDATION
- docs-planning-BASELINE_VALIDATION
- docs-planning-CI_PLAN
- docs-planning-COMMERCIAL_COMMUNITY_PLAN
- docs-planning-COMMUNITY_SAFETY_EXECUTION_PLAN
- docs-planning-COMMUNITY_SAFETY_EXECUTION_PROMPT
- docs-planning-CONTINUE_ANDROID_VPS_PROMPT
- docs-planning-DECISIONS
- docs-planning-DELIVERY_WORKFLOW
- docs-planning-DOCUMENT_VALIDATION
- docs-planning-FAST_EXECUTION
- docs-planning-GAMES_OFFLINE_PLAN
- docs-planning-LANDING_REDESIGN_EXECUTION_PLAN
- docs-planning-LANDING_REDESIGN_EXECUTION_PROMPT
- docs-planning-MOBILE_DELIVERY_PLAN
- docs-planning-OFFLINE_CAPABILITY_INVENTORY
- docs-planning-OFFLINE_DECISION_FREEZE_CS15B1
- docs-planning-PHOTO_PRICE_CONTRIBUTION_PLAN
- docs-planning-PREMIUM_BACKEND_APP_PLAN
- docs-planning-PREMIUM_PLAN_VALIDATION
- docs-planning-PRM_COMMUNITY_FIRST_PROMPT
- docs-planning-PRM_COMMUNITY_FIRST_VALIDATION
- docs-planning-PROGRESS
- docs-planning-PROJECT_BATCH_FLOW_VALIDATION
- docs-planning-REQUIREMENTS_TRACEABILITY
- docs-planning-RISKS
- docs-planning-RST21_BUNDLE
- docs-planning-RUST_STATION_BENCHMARK_PLAN
- docs-planning-RUST_STATION_INGESTION_PLAN
- docs-planning-RUST_STATION_INGESTION_PROMPT
- docs-planning-RUST_STATION_INGESTION_RST00
- docs-planning-RUST_STATION_INGESTION_RST01
- docs-planning-RUST_STATION_INGESTION_RST02
- docs-planning-RUST_STATION_INGESTION_RST03
- docs-planning-RUST_STATION_INGESTION_RST04
- docs-planning-RUST_STATION_INGESTION_RST05
- docs-planning-RUST_STATION_INGESTION_RST06
- docs-planning-RUST_STATION_INGESTION_RST07
- docs-planning-RUST_STATION_INGESTION_RST08
- docs-planning-RUST_STATION_INGESTION_RST09
- docs-planning-RUST_STATION_INGESTION_RST10
- docs-planning-RUST_STATION_INGESTION_RST11
- docs-planning-RUST_STATION_INGESTION_RST12
- docs-planning-RUST_STATION_INGESTION_RST13
- docs-planning-RUST_STATION_INGESTION_RST14
- docs-planning-RUST_STATION_INGESTION_RST15
- docs-planning-RUST_STATION_INGESTION_RST16
- docs-planning-RUST_STATION_INGESTION_RST17
- docs-planning-RUST_STATION_INGESTION_RST18
- docs-planning-RUST_STATION_INGESTION_RST19
- docs-planning-RUST_STATION_INGESTION_RST20
- docs-planning-SEC00A_REPRODUCTION_RECORD
- docs-planning-SEC00B_ROUTE_INVENTORY
- docs-planning-SEC00C_BUDGET_FREEZE
- docs-planning-SECURITY_OFFLINE_CORRECTION_PLAN_2026-10-11
- docs-planning-SECURITY_REMEDIATION_PLAN_2026-10-11
- docs-planning-SKELETON_LOADING_PLAN
- docs-planning-STATIC_LANDING_PLAN
- docs-planning-STATION_CATALOG_PLAN
- docs-planning-STATION_PROFILE_PLAN
- docs-planning-WIKI_HOME_ADOPTION
- docs-planning-WORKFLOW_PLAN_VALIDATION
- docs-planning-archive-IOS_DEFERRED
- docs-planning-history-CONSOLIDATION_OPENING_20261006
- docs-planning-history-P01_FOUNDATION_EVIDENCE
- docs-planning-history-P01_P09_PROGRESS_20260930
- docs-planning-history-P09_LOCAL_PROGRESS_20260930
- docs-planning-history-P14_PROGRESS_20260930
- docs-planning-history-P15_PROGRESS_20260930
- docs-planning-history-P18_AND_BRAND_PROGRESS_20261001
- docs-planning-history-P32_UI_OPENING_20261005
- docs-planning-history-ROADMAP_BEFORE_MULTIPLATFORM_20260930
- docs-planning-history-WIKI_HOME_BEFORE_20261001
- docs-planning-history-reconciliation-20261013-README
- docs-planning-repository-consolidation-20261006
- docs-planning-repository-reconciliation-20261013
- docs-planning-templates-PHASE_PR
- docs-planning-templates-PHASE_RECORD
- docs-planning-templates-TASK_ISSUE
- docs-play-store-listing
- docs-privacy-policy
- docs-product-COMMUNITY_EXPERIENCE
- docs-product-COMMUNITY_METRICS
- docs-product-COMMUNITY_MODERATION
- docs-product-COMMUNITY_PRIVACY_TERMS_PT_BR
- docs-product-LANDING_CONTENT_CONTRACT
- docs-product-LANDING_GUIDES_CONTRACT
- docs-product-LANDING_MOBILE_TUTORIAL_CATALOG
- docs-product-NOTIFICATION_CONTENT_CONTRACT
- docs-product-OPEN_SOURCE_BUSINESS
- docs-product-PREMIUM_FINANCIAL_METHOD
- docs-product-PREMIUM_PRODUCT_CONTRACT
- docs-product-PREMIUM_SOURCE_POLICY
- docs-product-PRODUCT_CONTRACT
- docs-product-REGISTRY_SOURCES
- docs-product-STATION_CATALOG
- docs-product-STATION_FUEL_FEEDBACK
- docs-product-STATION_PROFILE_CONTRACT_FREEZE
- docs-product-STATION_PROFILE_REPRESENTATION
- docs-product-pilot-plan
- docs-release-build
- docs-release-evidence-G09
- docs-release-evidence-batch-p32-p33-closure
- docs-release-evidence-g09-historical-4ce5aaf
- docs-release-evidence-landing-redesign
- docs-release-evidence-p00-app-icons-commercial-plan
- docs-release-evidence-p00-brand-publication
- docs-release-evidence-p08-t04-restore-drill
- docs-release-evidence-p08-t07-load
- docs-release-evidence-p08-t08-security
- docs-release-evidence-p09-g09-scoped-release
- docs-release-evidence-p09-local-runtime-validation
- docs-release-evidence-p09-t01-rehearsal
- docs-release-evidence-p09-t02-compatibility
- docs-release-evidence-p09-t04-functional-planning
- docs-release-evidence-p09-t05-wiki-overview
- docs-release-evidence-p10-t01-contract-harness
- docs-release-evidence-p10-t02-community-read-cache
- docs-release-evidence-p10-t03-device-keys
- docs-release-evidence-p10-t04-capture-ocr
- docs-release-evidence-p10-t05-outbox-media
- docs-release-evidence-p10-t06-price-ui
- docs-release-evidence-p10-t07-confirm-dispute
- docs-release-evidence-p10-t08-offline-release
- docs-release-evidence-p10-t09-temp-smoke
- docs-release-evidence-p13-t01-account-rules
- docs-release-evidence-p13-t02a-account-service
- docs-release-evidence-p13-t02b-pgstore
- docs-release-evidence-p13-t02c-transport
- docs-release-evidence-p13-t03a-oidc-verifier
- docs-release-evidence-p13-t03b-provider-links
- docs-release-evidence-p13-t03c-transport
- docs-release-evidence-p13-t04a-status-lifecycle
- docs-release-evidence-p13-t04b-binding
- docs-release-evidence-p13-t04c-transport-prover
- docs-release-evidence-p13-t04d-write-gate
- docs-release-evidence-p14-t01-feedback-domain
- docs-release-evidence-p14-t02-ratings
- docs-release-evidence-p14-t03-comments
- docs-release-evidence-p14-t04-votes
- docs-release-evidence-p14-t05a-reports-visibility
- docs-release-evidence-p14-t05b-export-erase
- docs-release-evidence-p15-t01-media-budgets
- docs-release-evidence-p15-t02a-portable-photo
- docs-release-evidence-p15-t02b-android-cache
- docs-release-evidence-p15-t03-backend-processing
- docs-release-evidence-p15-t04-expiry-restore
- docs-release-evidence-p15-t05-privacy-acceptance
- docs-release-evidence-p16-t01-location-risk
- docs-release-evidence-p16-t02-native-adapters
- docs-release-evidence-p16-t03a-server-verification
- docs-release-evidence-p16-t03b-intake-wiring
- docs-release-evidence-p16-t04-device-recovery
- docs-release-evidence-p17-t01-feedback-usecases
- docs-release-evidence-p17-t02-social-flows
- docs-release-evidence-p17-t03-iphone-integration
- docs-release-evidence-p17-t04-lifecycle-exit
- docs-release-evidence-p18-local-integration-exit
- docs-release-evidence-p18-t01-feature-matrix
- docs-release-evidence-p18-t02-performance-baselines
- docs-release-evidence-p18-t03-security-signoff
- docs-release-evidence-p24-g24-user-acceptance
- docs-release-evidence-p25-registry-exit
- docs-release-evidence-p25-static-landing
- docs-release-evidence-p25-t01-source-contracts
- docs-release-evidence-p25-t02-csv-staging
- docs-release-evidence-p25-t03-api-discovery
- docs-release-evidence-p25-t04-reconciliation
- docs-release-evidence-p25-t05-jobs-acceptance
- docs-release-evidence-p26-landing-guides
- docs-release-evidence-p26-regulatory-exit
- docs-release-evidence-p26-t01-edition-access
- docs-release-evidence-p26-t02-act-reconciliation
- docs-release-evidence-p26-t03-review-catchup
- docs-release-evidence-p27-intake-exit
- docs-release-evidence-p27-t01-signed-intake
- docs-release-evidence-p27-t02-verified-decisions
- docs-release-evidence-p27-t03-catalog-cache
- docs-release-evidence-p27-t04-suggest-journey
- docs-release-evidence-p27-t05-abuse-privacy
- docs-release-evidence-p29-catalog-exit
- docs-release-evidence-p29-t01-capacity
- docs-release-evidence-p29-t02-lifecycle
- docs-release-evidence-p29-t03-candidate
- docs-release-evidence-p30-profile-exit
- docs-release-evidence-p30-t01-contract-freeze
- docs-release-evidence-p30-t02-operator-profile
- docs-release-evidence-p30-t03-claims
- docs-release-evidence-p30-t04-proof-intake
- docs-release-evidence-p31-t01-signature-verify
- docs-release-evidence-p31-t02-authority
- docs-release-evidence-p31-t03-review-grants
- docs-release-evidence-p31-t04-manage-replies
- docs-release-evidence-p33-t01-adversarial
- docs-release-evidence-p33-t02-lifecycle
- docs-release-evidence-p33-t03-candidate
- docs-release-evidence-p34-vps-connection-exit
- docs-release-evidence-p35-live-discovery-exit
- docs-release-evidence-p36-live-community-exit
- docs-release-evidence-p37-live-contributions-exit
- docs-release-evidence-p38-app-acceptance-exit
- docs-releases-v1.0.0
- docs-releases-v2.0.0
- docs-releases-v3.0.0
- docs-releases-v3.1.0
- docs-screenshots-v2-README
- docs-screenshots-v3-README
- docs-security-AI_TRAINING_IMAGE_CONSENT_PLAN
- docs-security-FREE_ACCOUNT_ACCESS
- docs-security-LOCAL_MEDIA_LOCATION_POLICY
- docs-security-SECURITY_AUDIT_2026-10-11
- docs-security-SECURITY_OFFLINE_REASSESSMENT_2026-10-11
- docs-security-SECURITY_PRIVACY
- docs-security-evidence-audit-2026-10-11-README
- docs-security-evidence-reassessment-2026-10-11-README
- docs-security-identity-profile
- docs-tech-stack
- docs-use-cases-backend-use-cases
- docs-use-cases-uc-001-sync-price-tables
- docs-use-cases-uc-002-onboarding
- docs-use-cases-uc-003-select-location
- docs-use-cases-uc-004-search-municipality
- docs-use-cases-uc-005-view-municipality-prices
- docs-use-cases-uc-006-view-price-history
- docs-use-cases-uc-007-view-station-prices
- docs-use-cases-uc-008-manage-settings
- docs-use-cases-uc-009-select-survey-week
- docs-use-cases-uc-010-manage-vehicles
- docs-use-cases-uc-011-estimate-tank-fill-cost
- docs-use-cases-uc-012-resolve-location-from-device
- docs-use-cases-uc-013-navigate-to-station
- docs-use-cases-uc-014-fuel-price-drop-alerts
- docs-use-cases-uc-015-find-nearest-best-price-station
- docs-user-business-logic
Source: AlexandreZanata/brazil-fuel-prices @ 08a54dc49c2e43a85aba56a7b56ae96d692cec61