From b7de9f1e303795302e3d44135244c86a22cd9e3b Mon Sep 17 00:00:00 2001 From: GeoGeek Date: Sun, 20 Sep 2026 18:44:48 +0800 Subject: [PATCH 1/6] docs: add Scout mascot assets --- docs/assets/mascot/scout-hero.webp | Bin 0 -> 15009 bytes docs/assets/mascot/scout-terminal.webp | Bin 0 -> 15009 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/mascot/scout-hero.webp create mode 100644 docs/assets/mascot/scout-terminal.webp diff --git a/docs/assets/mascot/scout-hero.webp b/docs/assets/mascot/scout-hero.webp new file mode 100644 index 0000000000000000000000000000000000000000..32e960cf92e414f43c4b1ed5b333a3183c6a3cdc GIT binary patch literal 15009 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 literal 0 HcmV?d00001 diff --git a/docs/assets/mascot/scout-terminal.webp b/docs/assets/mascot/scout-terminal.webp new file mode 100644 index 0000000000000000000000000000000000000000..a808e2af622aca4b9d326adb2c8171790894a0e4 GIT binary patch literal 15009 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 literal 0 HcmV?d00001 From 8a43c304b50a35e11695112c9915ad3d5adbaed3 Mon Sep 17 00:00:00 2001 From: GeoGeek Date: Sun, 20 Sep 2026 18:45:58 +0800 Subject: [PATCH 2/6] docs: rewrite README around the Scout workflow --- README.md | 681 ++++++++++++++++++++---------------------------------- 1 file changed, 252 insertions(+), 429 deletions(-) diff --git a/README.md b/README.md index 959a16d..3b2a06a 100644 --- a/README.md +++ b/README.md @@ -2,147 +2,67 @@ # STAC Scout -**Find the data. Prove it exists. Know what you're getting.** - -`intent → task semantics → catalog federation → live item evidence → asset plan → manifest` - -[![CI](https://github.com/GeoGeekLab/stac-scout/actions/workflows/ci.yml/badge.svg)](https://github.com/GeoGeekLab/stac-scout/actions/workflows/ci.yml) -[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.13%20%7C%203.14-3776AB?style=flat-square&logo=python&logoColor=white)](.github/workflows/ci.yml) -[![License: MIT](https://img.shields.io/badge/license-MIT-2ea44f?style=flat-square)](LICENSE) -[![STAC](https://img.shields.io/badge/STAC-evidence--first-111111?style=flat-square)](https://stacspec.org/) - -A deterministic decision layer for the STAC ecosystem. - - - -## STAC is syntax. Dataset choice is semantics. - -A model can generate a valid STAC query. - -That does not mean it chose the right dataset. - -A Collection can advertise the right spatial and temporal extent. - -That does not mean an Item actually exists for your AOI and date. - -An asset can be called `B08`. +--- -That does not mean a caller should silently assume what it contains. +**Scout STAC catalogs before you commit the compute.** -STAC Scout lives in that gap. +A Python CLI for finding suitable datasets, checking real Items, choosing assets, +planning raster reads, and replaying the result later. -```text -"find imagery for this task" - │ - ▼ - what does the task need? - │ - ▼ - which datasets fit? - │ - ▼ - do matching items exist? - │ - ▼ - which assets are actually required? - │ - ▼ - how much data will this read? - │ - ▼ - can the decision be replayed? -``` +[![CI](https://img.shields.io/github/actions/workflow/status/GeoGeekLab/stac-scout/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/GeoGeekLab/stac-scout/actions/workflows/ci.yml) +[![release](https://img.shields.io/github/v/release/GeoGeekLab/stac-scout?style=flat-square&color=f97316)](https://github.com/GeoGeekLab/stac-scout/releases) +[![PyPI](https://img.shields.io/pypi/v/stac-scout?style=flat-square&color=2563eb)](https://pypi.org/project/stac-scout/) +[![license](https://img.shields.io/badge/license-MIT-16a34a?style=flat-square)](LICENSE) +[![python](https://img.shields.io/pypi/pyversions/stac-scout?style=flat-square&logo=python&logoColor=white)](https://pypi.org/project/stac-scout/) +[![typing](https://img.shields.io/badge/typing-strict-2563eb?style=flat-square)](pyproject.toml) -The operating rule is simple: +[Quickstart](#quickstart) · +[Workflow](#workflow) · +[Tasks](#task-intelligence) · +[Providers](#providers) · +[Planning](#asset-and-raster-planning) · +[Replay](#manifests-and-replay) · +[Examples](examples/) · +[Contributing](CONTRIBUTING.md) · +[Security](SECURITY.md) · +[Releases](https://github.com/GeoGeekLab/stac-scout/releases) -> **Never infer what can be inspected.** +
-## What Scout actually does +Scout, the STAC Scout mascot -```text -natural language / structured request - │ - ▼ - IntentDraft - │ - task_type + facts - ▼ - ┌───────────────────┐ - │ TaskAdvisor │◄──── versioned task rules - └────────┬─────────┘ - │ - ▼ - ScoutRequest - │ - ┌───────┴────────┐ - │ │ - ▼ ▼ - ScoutEngine FederatedScout - │ │ - │ provider isolation - │ dataset identity - │ duplicate evidence - │ explicit failures - │ │ - └───────┬────────┘ - ▼ - live Item probe - │ - AOI coverage - │ - asset semantics - │ - access planning - │ - ▼ - manifest + replay -``` +**Find it. Verify it. Plan it. Replay it.** -Scout does **not** replace `pystac-client`, `odc-stac`, or a STAC API. + -It decides what should be asked, checks what came back, and records why. +## What is STAC Scout? -## The invariants +STAC Scout is a small decision layer for STAC workflows. -These are not style preferences. They are the contract. +It helps answer the questions that usually show up between "I found a Collection" and +"my pipeline is ready to run": -- **Collection metadata is not availability evidence.** Item Search is. -- **`intersects` is not AOI coverage.** -- **Unknown is not false.** -- **Required and preferred measurements are different things.** -- **Task rules do not invent dates.** -- **Explicit user constraints beat defaults.** -- **Probable duplicates stay visible.** -- **Provider health is not scientific quality.** -- **A language model may classify intent; it does not own geospatial truth.** -- **Every useful decision should be reproducible.** +- Which collections match the task and the hard constraints? +- Do matching Items actually exist for this AOI and time window? +- Which assets should be loaded? +- What resolution, CRS, resampling, and approximate transfer size should the read use? +- Can the same choice be inspected again after the catalog changes? -Or shorter: +Scout works with normal STAC APIs. It does not replace +[pystac-client](https://github.com/stac-utils/pystac-client), +[odc-stac](https://github.com/opendatacube/odc-stac), or the provider itself. -```text -metadata ≠ evidence -similarity ≠ identity -availability ≠ suitability -confidence ≠ proof -``` +## Quickstart -## Install +Install from PyPI: ```bash python -m pip install stac-scout ``` -Python 3.12 or newer is required. Python 3.12, 3.13, and 3.14 are tested in CI. - -For Planetary Computer access recipes: - -```bash -python -m pip install "stac-scout[planetary-computer]" -``` - -## 60-second first success +Python 3.12, 3.13, and 3.14 are tested in CI. -This first check is deterministic and does not call a remote catalog: +Create a request: ```bash cat > request.json <<'JSON' @@ -155,302 +75,212 @@ cat > request.json <<'JSON' } } JSON - -stac-scout advise request.json --task wildfire_impact ``` -The important part of the output is the decision contract, not prose: - -```json -{ - "data_type": "optical", - "required_measurements": ["nir", "swir22"], - "follow_up_requirements": ["comparison_windows"] -} -``` - -Scout derives the optical/NIR/SWIR2 requirement but refuses to invent the missing comparison -window. For a live Item-to-manifest walkthrough, see -[`examples/wildfire-impact/`](examples/wildfire-impact/). - -## Geo Task Intelligence - -![Geo Task Intelligence workflow](docs/assets/geo-task-intelligence.svg) - -The user often knows the problem, not the bands. +Ask Scout what the task needs: -```text -"assess wildfire impact" - ↓ -optical - ↓ -NIR + SWIR2 required - ↓ -surface reflectance preferred - ↓ -before/after strategy - ↓ -comparison_windows still required from the user +```bash +stac-scout advise request.json --task wildfire_impact ``` -Scout keeps that knowledge in a versioned, inspectable registry instead of hiding it in prompts. +The task profile adds the dataset requirements it can derive and reports anything that still +needs to come from the caller. -List the built-in task archetypes: +Then move on to live catalogs: ```bash -stac-scout tasks -stac-scout task-profile wildfire_impact -``` - -Derive task-aware data requirements: +stac-scout federate request.json -```bash -stac-scout advise request.json --task wildfire_impact -``` +stac-scout verify request.json \ + --provider earth-search \ + --collection sentinel-2-l2a -The output includes: +stac-scout plan request.json \ + --provider earth-search \ + --collection sentinel-2-l2a \ + --manifest scout.manifest.json \ + --recipe load.py -```text -TaskProfile -├── rule_id -├── rationale -├── sources -├── required measurements -├── preferred measurements -├── temporal strategy -├── processing preferences -└── mask preferences - -TaskAdvice -├── enriched ScoutRequest -├── derivations[] -│ ├── rule_id -│ ├── field -│ ├── value -│ ├── required | preferred -│ └── rationale -├── follow_up_requirements[] -└── notes[] +stac-scout replay scout.manifest.json ``` -Task rules live in: - -```text -src/stac_scout/data/tasks.toml -``` +For a complete runnable walkthrough, see +[`examples/wildfire-impact/`](examples/wildfire-impact/). -The scientific basis and rule boundaries are documented in [`docs/TASK_RULES.md`](docs/TASK_RULES.md). +## Workflow -### Rules are allowed to say "I don't know" +Scout deliberately keeps the workflow boring and inspectable: -For example, a before/after wildfire task does **not** cause Scout to hallucinate a pre-fire window. +| Stage | CLI | What you get | +| --- | --- | --- | +| **Find** | `discover`, `federate` | candidate collections from one or more catalogs | +| **Verify** | `verify` | matching Items, timestamps, footprints, asset keys, cloud metadata when present | +| **Plan** | `plan` | selected assets, raster settings, estimated bytes, manifest, optional load recipe | +| **Replay** | `replay` | comparison against the saved manifest and current catalog state | -It returns: +Typical single-provider run: -```json -{ - "follow_up_requirements": ["comparison_windows"] -} +```bash +stac-scout discover request.json --provider earth-search +stac-scout verify request.json --provider earth-search --collection sentinel-2-l2a +stac-scout plan request.json --provider earth-search --collection sentinel-2-l2a ``` -Likewise, if the user explicitly asks for SAR while a task's default modality is optical, Scout preserves SAR and skips incompatible optical band defaults. - -No spectral fan fiction. +Typical multi-provider run: -## Intent boundary +```bash +stac-scout federate request.json --max-workers 4 --overall-timeout 30 +``` -STAC Scout deliberately does not ship an LLM SDK in the core package. +## Task intelligence -Any structured-output model can produce an `IntentDraft`. +Users usually know the job before they know the bands. -Get the contract: +Scout ships versioned task profiles for common geospatial workflows: ```bash -stac-scout intent-contract -stac-scout schema intent +stac-scout tasks +stac-scout task-profile wildfire_impact ``` -The model may identify a supported `task_type`. - -It is explicitly told **not** to invent: - -- coordinates; -- dates; -- dataset names; -- measurement names; -- hidden constraints. +A profile can define: -Those belong to deterministic code, explicit user input, or live metadata. +- optical or SAR modality; +- required and preferred measurements; +- temporal strategy; +- processing preferences; +- mask preferences; +- short scientific rationale and sources. -Resolve an intent directly: +Apply one to a request: ```bash -stac-scout resolve-intent intent.json +stac-scout advise request.json --task wildfire_impact ``` -Resolve it and apply task intelligence: +For example, the wildfire profile requires NIR and SWIR2 and uses a before/after strategy. +If the comparison windows are not in the request, Scout asks for them instead of making them up. -```bash -stac-scout advise-intent intent.json -``` +Task rules live in +[`src/stac_scout/data/tasks.toml`](src/stac_scout/data/tasks.toml), with notes in +[`docs/TASK_RULES.md`](docs/TASK_RULES.md). -If required information is still ambiguous, the draft stays unresolved. +## Providers -That is a feature. +The built-in provider registry currently enables: -## Providers are adapters, not assumptions +- **Element 84 Earth Search** +- **Microsoft Planetary Computer** -List the built-in provider registry: +List providers: ```bash stac-scout providers stac-scout providers --all ``` -Check operational health: +Check connectivity and adapter health: ```bash stac-scout health stac-scout health --provider earth-search ``` -The default enabled providers are: - -- Element 84 Earth Search -- Microsoft Planetary Computer - -Provider quirks stay behind adapters. - -Planetary Computer signing is recorded explicitly and generated recipes use the official `planetary_computer.sign_inplace` path instead of reimplementing SAS handling. - -Provider latency and uptime are reported as operational evidence only. - -Network behavior is bounded: adapters use explicit connect/read timeouts, a finite transient-retry -budget, capped backoff/Retry-After delays, and typed provider errors. A reachable provider with -invalid metadata is reported as degraded rather than falsely labeled unreachable. - -A slow endpoint does not make a scientifically suitable dataset worse. - -## Federation without pretending everything is the same - -Search a single provider: - -```bash -stac-scout discover request.json --provider earth-search -``` - -Or a raw STAC endpoint: +You can also point Scout at a raw STAC API: ```bash stac-scout discover request.json \ --catalog https://earth-search.aws.element84.com/v1 ``` -Search across enabled providers: - -```bash -stac-scout federate request.json -stac-scout federate request.json --max-workers 4 --overall-timeout 30 -``` - -Federation isolates expected provider failures such as timeouts, rate limits, authentication -errors, malformed metadata, and unsupported capabilities. Each failure reports its type, HTTP -status when known, and whether retry is reasonable. Unexpected internal exceptions are not -converted into provider failures. - -Dataset identity is conservative: +Provider-specific behavior stays behind adapters, including Planetary Computer signing. -```text -sci:doi - → exact +## Federation -collection id + platform / constellation / instrument evidence - → probable +`federate` searches enabled providers concurrently and keeps provider failures separate. -everything else - → local to that catalog +```bash +stac-scout federate request.json \ + --max-workers 4 \ + --overall-timeout 30 ``` -Only exact groups are considered safe to collapse. +Duplicate grouping is conservative: -Probable matches stay visible. +- DOI match → exact identity; +- matching collection/platform/constellation/instrument metadata → probable identity; +- otherwise → local to that catalog. -Because two catalogs agreeing on a name is not the same thing as two catalogs describing the same scientific product. +Probable matches remain visible instead of being silently collapsed. -## The catalog says maybe. Items say yes or no. +## Verification -Verification is item-level. +Collection metadata is useful for discovery. Item Search is what tells you whether the requested +scene is there. ```bash stac-scout verify request.json \ --provider earth-search \ - --collection sentinel-2-l2a + --collection sentinel-2-l2a \ + --max-items 20 ``` -Scout records: +Verification reports, when available: -- matching Item count; -- Item IDs; -- timestamps; +- Item IDs and datetimes; +- AOI coverage; - asset keys; -- cloud metadata when available; -- AOI coverage ratio; -- fraction of each Item intersected by the AOI; -- warnings when geometry or metadata cannot be evaluated. +- cloud metadata; +- provider warnings; +- whether the search hit its Item limit. -AOI coverage normalizes antimeridian-crossing geometry and measures overlap in an AOI-centered WGS84 equal-area projection rather than treating raw longitude/latitude as a flat Cartesian plane. +AOI coverage handles antimeridian-crossing and high-latitude geometry without treating raw +longitude/latitude as a flat Cartesian grid. -Because this is geospatial software. +## Asset and raster planning -## Asset planning - -A scientifically correct Collection can still produce a bad access plan. - -Scout resolves requested measurements against declared asset and band metadata rather than guessing asset names. +`plan` turns a verified collection into an explicit read plan. ```bash stac-scout plan request.json \ --provider earth-search \ --collection sentinel-2-l2a \ + --max-items 20 \ --manifest scout.manifest.json \ --recipe load.py ``` -Planning can produce: - -```text -measurement → asset + selection evidence -resampling strategy + evidence -windowed-read estimate -explicit target output resolution -provider signing requirements -warnings -odc-stac recipe -``` +The access plan can include: -`max_source_resolution_m` answers “is this source data fine enough?” while -`target_resolution_m` answers “what output grid should I request?”. It requires an explicit -`target_crs` whose units are meters (or odc-stac's explicit `"utm"` selector), because odc-stac -interprets resolution in output-CRS units. Scout never reuses the source threshold as an output -resampling instruction. The legacy input name -`max_spatial_resolution_m` is accepted as a source-resolution alias for compatibility. +- measurement → asset mapping; +- why an asset was selected; +- categorical vs continuous resampling choice; +- source GSD checks; +- target CRS and output resolution; +- provider signing requirements; +- estimated transfer bytes when `file:size` is available. -If multiple assets remain equally supported after semantic, role, coverage, media-type, and GSD -evidence, Scout reports the selection as ambiguous instead of choosing the alphabetically first -key. Unknown resampling semantics likewise remain unresolved rather than defaulting to bilinear. +Source and output resolution are separate settings: -When `file:size` exists, Scout estimates transfer volume from the AOI/item intersection fraction. +```text +max_source_resolution_m # "is the source detailed enough?" +target_resolution_m # "what output grid should I request?" +target_crs # projected CRS or "utm" +``` -It is an estimate, not a bandwidth prophecy. +If asset metadata is genuinely ambiguous, the plan stays unresolved instead of choosing a key +alphabetically. -## Manifests: because catalogs move +## Manifests and replay -A successful query today is not a frozen scientific record. +A plan can be saved as a versioned manifest: -Scout writes a versioned provenance manifest containing the canonical request/query, -provider/catalog identity, search limit and completeness, Collection fingerprint, full access -plan, selected-asset metadata, and the observed decision-matching Item set. Ephemeral asset URLs -are not copied into the provenance snapshot. +```bash +stac-scout plan request.json \ + --provider earth-search \ + --collection sentinel-2-l2a \ + --manifest scout.manifest.json +``` Replay it later: @@ -458,49 +288,41 @@ Replay it later: stac-scout replay scout.manifest.json ``` -By default replay reuses the manifest's recorded `max_items`. You can override it explicitly, -but Scout records that the limits differ. +The manifest records the request, provider/catalog identity, search limit/completeness, +collection fingerprint, selected Item IDs, asset metadata needed by the plan, output settings, +warnings, and assumptions. -Replay reports: +Replay reports retained, missing, new, and unresolved Item IDs plus collection metadata changes. -```text -comparison status: complete / partial / inconclusive -retained Item IDs -confirmed missing Item IDs -confirmed new Item IDs -unresolved missing Item IDs -unresolved new Item IDs -Collection metadata changed: true / false / unknown -``` +A capped search is not treated as a complete catalog snapshot. -A search that returns exactly `max_items` is marked `limit_reached`, not assumed complete or -definitely truncated. If either historical or current completeness cannot be proven, Scout will -not promote ordering/sample differences into confirmed drift. +## A few opinions -The manifest is evidence of the decision. +Scout is intentionally opinionated about a small number of things: -It is not a copy of the remote data. +- hard constraints are checked before ranking; +- missing metadata stays unknown; +- an Item limit is not proof that the search was complete; +- explicit user choices beat task defaults. -## CLI map +That is most of the philosophy. The rest is code and tests. + +## CLI ```text stac-scout ├── version ├── validate-request ├── schema -│ ├── intent-contract ├── resolve-intent ├── advise-intent -│ ├── tasks ├── task-profile ├── advise -│ ├── providers ├── health ├── inspect-catalog -│ ├── discover ├── federate ├── verify @@ -508,86 +330,57 @@ stac-scout └── replay ``` -## Repository map +Use `--help` on any command: -```text -stac-scout/ -├── src/stac_scout/ -│ ├── catalogs/ # STAC access boundary -│ ├── data/ -│ │ ├── providers.toml -│ │ └── tasks.toml -│ ├── discovery/ # candidate retrieval -│ ├── models/ # strict contracts -│ ├── normalize/ # provider metadata → stable models -│ ├── planning/ # assets, raster semantics, volume -│ ├── provenance/ # manifest + replay -│ ├── verify/ # live evidence + dateline-safe coverage -│ ├── federation.py -│ ├── health.py -│ ├── identity.py -│ ├── reasoning.py -│ ├── scout.py -│ ├── tasking.py -│ └── tasks.py -├── evals/ -│ ├── cases/ -│ ├── federation_cases/ -│ ├── task_cases/ -│ ├── regression_matrix.json -│ ├── runner.py -│ └── live.py -├── examples/ -│ └── wildfire-impact/ -├── docs/ -│ ├── ARCHITECTURE.md -│ └── TASK_RULES.md -├── skill/ -│ └── SKILL.md -└── tests/ +```bash +stac-scout --help +stac-scout plan --help ``` -## Evals over vibes +## Examples -The deterministic evaluation corpus checks contracts that affect dataset decisions: +### Wildfire impact -```bash -python evals/runner.py -``` +[`examples/wildfire-impact/`](examples/wildfire-impact/) follows a real Lahaina use case through: + +1. task requirements; +2. provider federation; +3. live Item verification; +4. asset selection; +5. volume estimation; +6. manifest generation; +7. replay. -It covers request invariants, modality mismatches, cloud PASS/FAIL/UNKNOWN, required versus -preferred measurements, DOI identity strength, multiple extents, antimeridian/polar AOIs, -empty and >100 Item behavior, provider timeout/429/partial failure, categorical resampling, -missing `file:size`, volume budgets, task/user conflicts, malformed provider metadata, -cross-provider identity, task derivation, temporal strategy, and follow-up requirements. +Remote catalog contents can change, so the example documents the workflow rather than pinning a +magic Item count. -`evals/regression_matrix.json` binds the hardening acceptance scenarios to concrete pytest node -IDs, so removing a required regression causes the eval runner to fail. +## Intent integration -Remote providers are intentionally kept out of ordinary CI. +The core package does not depend on an LLM SDK. -Live checks run separately: +If another system produces structured user intent, use the built-in contract: ```bash -python evals/live.py +stac-scout intent-contract +stac-scout schema intent +stac-scout resolve-intent intent.json +stac-scout advise-intent intent.json ``` -That separation is deliberate: - -```text -deterministic behavior - → CI gate - -remote catalog state - → live observation -``` +The rest of the pipeline is the same CLI and model layer used by hand-written requests. ## Development -Contributor installs are editable; normal users should use the PyPI command above. +Scout working at a geospatial developer terminal + +Scout is happiest when the tests are boring. ```bash +git clone https://github.com/GeoGeekLab/stac-scout.git +cd stac-scout + python -m pip install -e ".[dev]" + ruff check . ruff format --check . mypy @@ -596,41 +389,71 @@ python evals/runner.py python -m build ``` -CI runs on Python 3.12, 3.13, and 3.14. Python 3.15 prereleases are exercised as a non-blocking compatibility signal before the final 3.15 release. +CI runs the deterministic suite on Python 3.12, 3.13, and 3.14. Python 3.15 prereleases are used +as a non-blocking compatibility signal. + +Remote provider checks are separate: -Coverage must stay at or above 90%. +```bash +python evals/live.py +``` -The wheel is also checked to ensure the provider and task registries are actually packaged. +See [CONTRIBUTING.md](CONTRIBUTING.md) for the development workflow. -## What Scout refuses to fake +
+ +## Repository map ```text -"the collection covers 2024, so data must exist" -"cloud_cover=8 means my AOI is clear" -"B08 probably means NIR" -"these two collections have similar names, merge them" -"the provider is fast, therefore the dataset is better" -"wildfire task means I'll invent a pre-fire date" -"the model sounded confident" +stac-scout/ +├── src/stac_scout/ +│ ├── catalogs/ # STAC adapters and network boundary +│ ├── data/ # provider + task registries +│ ├── discovery/ # candidate retrieval +│ ├── models/ # request/result contracts +│ ├── normalize/ # STAC metadata normalization +│ ├── planning/ # asset + raster planning +│ ├── provenance/ # manifest + replay +│ └── verify/ # Item checks and AOI coverage +├── evals/ # deterministic compatibility corpus +├── examples/ +│ └── wildfire-impact/ +├── docs/ +│ ├── ARCHITECTURE.md +│ ├── MASCOT.md +│ └── TASK_RULES.md +└── tests/ ``` -Those are shortcuts. +## Scout, the mascot -Scout's job is to turn them into inspectable claims. +The little field bug is **Scout**. -## Philosophy +Its layered shell loosely mirrors Collection → Item → Asset, and the scanner is there because +looking first is cheaper than debugging the wrong dataset later. -```text -STAC gives us a language. +Mascot files and usage notes live in [`docs/MASCOT.md`](docs/MASCOT.md). + +## Release -Scout adds skepticism. +The current package is published on PyPI and GitHub Releases: + +```bash +python -m pip install stac-scout +stac-scout version ``` -Or, in GeoGeek form: +Release artifacts are built once, published through PyPI Trusted Publishing, checksum-recorded, +and attached to the matching GitHub Release. + +See [`docs/RELEASE.md`](docs/RELEASE.md). + +## Security -> **The map can look right while the geography is wrong. -> The query can run while the dataset choice is wrong. -> Check the semantics. Check the evidence.** +For security reports, use [SECURITY.md](SECURITY.md). + +If STAC Scout is embedded in a hosted service, treat arbitrary catalog URLs as outbound network +input and apply the deployment's normal egress policy. ## License @@ -640,8 +463,8 @@ Or, in GeoGeek form:
-**Find it. Verify it. Plan it. Replay it.** +**STAC Scout** -`catalog metadata ≠ ground truth` +`find → verify → plan → replay`
From 698f6d09143440b1ec69c1b9a8766e287e3a34d3 Mon Sep 17 00:00:00 2001 From: GeoGeek Date: Sun, 20 Sep 2026 18:46:16 +0800 Subject: [PATCH 3/6] docs: define the Scout mascot system --- docs/MASCOT.md | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 docs/MASCOT.md diff --git a/docs/MASCOT.md b/docs/MASCOT.md new file mode 100644 index 0000000..3fc7340 --- /dev/null +++ b/docs/MASCOT.md @@ -0,0 +1,93 @@ +# Scout mascot system + +Scout is the visual mascot for **STAC Scout**. + +The character is a small field-scout beetle with a geospatial scanner, layered shell plates, and a +slightly skeptical expression. The goal is to give the project a recognizable open-source face +without turning the README into a product landing page. + +## Character + +Scout should read as: + +- curious; +- technical; +- calm; +- slightly skeptical; +- more field tool than chatbot. + +The character is not a debugging ladybug and should not be drawn as a generic AI robot. + +## Visual language + +Core features should stay stable across new artwork: + +- dark navy / charcoal body; +- cyan scanner eye and small cyan accents; +- two antennae; +- layered shell plates; +- compact geospatial scanner or terminal; +- simple explorer / field-kit details; +- one half-lidded eye or similarly understated expression. + +The layered shell is a loose visual nod to STAC's Collection → Item → Asset structure. It is not a +literal UI diagram. + +## Palette + +| Role | Color | +| --- | --- | +| Midnight | `#0B1B3B` | +| Slate | `#334155` | +| Cyan | `#00D1FF` | +| Blue | `#2563EB` | +| Verified | `#22C55E` | +| Unknown | `#F59E0B` | +| Failed | `#EF4444` | + +Green, amber, and red are status accents only. The normal mascot should remain mostly +midnight/slate/cyan. + +## README assets + +### Main pose + +`docs/assets/mascot/scout-hero.webp` + +Use for the repository header, release notes, or a compact project introduction. + +### Developer pose + +`docs/assets/mascot/scout-terminal.webp` + +Use around development, CLI, contributor, or geospatial coding material. + +## Usage rules + +- Prefer transparent-background art. +- Keep large mascot art to one or two pieces per document. +- Do not bake paragraphs, slogans, version numbers, or command output into the artwork. +- Keep technical labels in Markdown, where they stay searchable and editable. +- Do not use the mascot as a substitute for an architecture diagram. +- Do not imply that Scout is an AI assistant. +- Avoid excessive neon / cyberpunk styling; this is a geospatial developer tool. +- Keep alt text descriptive and short. + +## Suggested poses + +Future artwork can extend the same character into four small actions: + +- **Find** — scanning catalog cards or map layers; +- **Verify** — inspecting an Item footprint; +- **Plan** — organizing raster/assets into a stack; +- **Replay** — comparing two saved map states. + +Those actions should stay visually simple. The README owns the text labels. + +## Naming + +The project is **STAC Scout**. + +The mascot is simply **Scout**. + +Avoid introducing a second product name such as "ScoutBot" or "STAC Bug". From 22294706187488acb48ee00746f610e06415d324 Mon Sep 17 00:00:00 2001 From: GeoGeek Date: Sun, 20 Sep 2026 18:46:19 +0800 Subject: [PATCH 4/6] docs: remove obsolete workflow illustration --- docs/assets/geo-task-intelligence.svg | 129 -------------------------- 1 file changed, 129 deletions(-) delete mode 100644 docs/assets/geo-task-intelligence.svg diff --git a/docs/assets/geo-task-intelligence.svg b/docs/assets/geo-task-intelligence.svg deleted file mode 100644 index 4d7d25f..0000000 --- a/docs/assets/geo-task-intelligence.svg +++ /dev/null @@ -1,129 +0,0 @@ - - Geo Task Intelligence - A deterministic workflow from user goal to task rules, derived requirements, catalog discovery, live verification, and replayable decision output. - - - - Geo Task Intelligence - Turn a geospatial problem into explicit, testable data requirements. - - - - - - User Goal - wildfire impact - flood extent - snow cover - - - - - - - - Task Type - wildfire_impact - flood_extent - snow_cover - - - - - - - - Task Rules - - - required measurements - - preferred measurements - - temporal strategy - - processing preferences - - mask preferences - versioned • inspectable • deterministic - - - - - - - Derived Requirements - - data type - - bands / measurements - - before-after or single-window - - follow-up requirements - - - - - - - Scout - Request - - - - - - - - - Catalog - Discovery - which datasets fit? - - - - - Live - Verification - do matching items exist? - - - - - - - - Decision Output - asset plan - manifest - replayable evidence - - - ⓘ - Rules do not invent - dates or coordinates. - - - - ⓘ - Explicit user constraints - are preserved. - - - - - intent → task semantics → data requirements → discovery → verification - \ No newline at end of file From 9b294f98d3fca9c568075edc2ba1dbeaf8210f1f Mon Sep 17 00:00:00 2001 From: GeoGeek Date: Sun, 20 Sep 2026 18:51:35 +0800 Subject: [PATCH 5/6] docs: optimize Scout mascot assets --- docs/assets/mascot/scout-hero.webp | Bin 15009 -> 12678 bytes docs/assets/mascot/scout-terminal.webp | Bin 15009 -> 12886 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/mascot/scout-hero.webp b/docs/assets/mascot/scout-hero.webp index 32e960cf92e414f43c4b1ed5b333a3183c6a3cdc..96f008d66ddddda44062ff3e6c0bfce8e0b278d4 100644 GIT binary patch literal 12678 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 diff --git a/docs/assets/mascot/scout-terminal.webp b/docs/assets/mascot/scout-terminal.webp index a808e2af622aca4b9d326adb2c8171790894a0e4..208c4469321be51f75a1e85d181c8499fc06e9a6 100644 GIT binary patch literal 12886 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 AjsO4v literal 15009 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 From d935ed29c22bd188d9892ac3ae279a8f3547e7c3 Mon Sep 17 00:00:00 2001 From: GeoGeek Date: Sun, 20 Sep 2026 18:51:56 +0800 Subject: [PATCH 6/6] docs: tune mascot display sizes for GitHub --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3b2a06a..8b706e3 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ planning raster reads, and replaying the result later.
-Scout, the STAC Scout mascot +Scout, the STAC Scout mascot **Find it. Verify it. Plan it. Replay it.** @@ -371,7 +371,7 @@ The rest of the pipeline is the same CLI and model layer used by hand-written re ## Development -Scout working at a geospatial developer terminal +Scout working at a geospatial developer terminal Scout is happiest when the tests are boring.