Metadata-Version: 2.4
Name: sheafatlas
Version: 0.1.0a1
Summary: Typed manifests and deterministic queries for coordinate-aware artifact atlases.
Project-URL: Homepage, https://sheaflab.com
Project-URL: Repository, https://github.com/SheafLab/sheafatlas-python
Project-URL: Issues, https://github.com/SheafLab/sheafatlas-python/issues
Author: SheafLab
License: MIT
License-File: LICENSE
Keywords: atlas,coordinates,manifests,provenance,sheaflab
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# sheafatlas

`sheafatlas` is a small, dependency-free manifest format for coordinate-aware
artifact catalogs. It is designed for systems that need to answer questions
such as “which artifacts are valid for this coordinate?” without introducing
a database or an ordering convention hidden in application code.

The package is deliberately manifest-first. `AtlasItem` stores an artifact's
stable identifier, human label, coordinates, tags, source, and optional
metadata. `AtlasManifest` provides immutable updates and deterministic lookup.
The JSON codec makes manifests easy to commit, review, and exchange between
tools.

## Quick start

```python
from sheafatlas import AtlasItem, AtlasManifest, dumps, loads

manifest = AtlasManifest(
    "vision-assets",
    (
        AtlasItem(
            "camera/front",
            "Front camera",
            ("image", "rgb"),
            frozenset({"sensor", "primary"}),
            source="capture-lab",
        ),
    ),
    version="2026-01",
)

matches = manifest.search(tags={"sensor"}, coordinate="rgb")
payload = dumps(manifest)
same_manifest = loads(payload)
```

IDs are unique within a manifest. Searches require every requested tag and
return items sorted by ID, so output stays stable across runs. Calling
`with_item` returns a new manifest instead of mutating an existing one.

## Manifest shape

The serialized form is ordinary JSON and can be reviewed or generated by
other languages:

```json
{
  "items": [
    {
      "coordinates": ["image", "rgb"],
      "id": "camera/front",
      "label": "Front camera",
      "source": "capture-lab",
      "tags": ["primary", "sensor"]
    }
  ],
  "name": "vision-assets",
  "version": "2026-01"
}
```

## CLI

Inspect a manifest file with:

```console
python -m sheafatlas path/to/manifest.json
```

The library has no runtime dependencies and supports Python 3.10 and newer.
