# spikinglabs/aura > Aura: a calm, serverless baby and child log (PWA) with German checkup and vaccination reminders Version 1, digest sha256:ea5843ce68206b2d47a94f00a41ea7675ae990f52db2da70c3942046dfc1885d. product pack · 74 obligations (74 decided, 0 default, 0 open, 5 unchecked) · 10 assumptions (6 monitored) · 288/288 checks trace to an obligation. ## Build this pack For coding agents whose user shared https://symbola.sh/packs/spikinglabs/aura/ and wants it built. Run these steps yourself; ask the user only for the language if they have not named one. 1. Install the Symbola CLI (Python 3.11+): `uv tool install symbola` (or `pipx install symbola`). Not `pip install symbolon`: that PyPI name is another project. 2. Download the pack: `symbola pull spikinglabs/aura --dest spec`. 3. Read `spec/AGENTS.md` and follow it. Build only from `spec/`: don't look for the original product's source, the registry repository (it holds holdout tests) or other builds. Packs released before the rename say `symbolon `: run `symbola ` instead. This is a product pack: `spec/PRODUCT.md` describes the whole product (its shape, surfaces and flows). Build that product, in the user's stack, with the components below as its core. Don't build a demo page around the components instead. 4. Build each component in its own folder and run its checks as you go, fixing what fails: symbola impl-init impl/ai-redaction --contract spec/components/ai-redaction/versions/1 symbola test spec/components/ai-redaction/versions/1 impl/ai-redaction In Python, define `run(input)` in `impl.py`: it takes and returns a dict, and raises `ValueError` for input the contract rejects. Pin third-party packages with `==` in `requirements.lock`. In another language, set `language = "command"` and `command = [...]` in `symbolon-impl.toml`; the program reads one JSON input per line on stdin and writes `{"output": ...}` per line. A component whose `symbolon.toml` says `driver = "cli"` is a command line: build the real program, set `command` to it, and symbola runs it once per check. 5. When every component passes, run `symbola keygen` once, then for each component `symbola attest spec/components/ai-redaction/versions/1 impl/ai-redaction -o attestations/ai-redaction.json`. On macOS, attest needs Docker running and accepts Python, Node or a static Linux binary (for Go, `GOOS=linux`); `symbola test` runs the same checks without it. You are done when every flow in `spec/PRODUCT.md` works in the product you built and attest reports PASSED for every component. Write open questions and the readings you chose in `NOTES.md`. Every command is described at https://kausalflow.github.io/symbola/cli/. Components: - `ai-redaction`: `spec/components/ai-redaction/versions/1` - `backup-retention`: `spec/components/backup-retention/versions/1` - `growth-percentile`: `spec/components/growth-percentile/versions/1` - `ics`: `spec/components/ics/versions/1` - `media-pack`: `spec/components/media-pack/versions/1` - `merge`: `spec/components/merge/versions/1` - `migrate`: `spec/components/migrate/versions/1` - `reminders`: `spec/components/reminders/versions/1` - `save-guard`: `spec/components/save-guard/versions/1` - `schedule`: `spec/components/schedule/versions/1` ## Read it online Start with https://symbola.sh/packs/spikinglabs/aura/pack.md (brief, assumptions, obligations, and links to one file per component under https://files.symbola.sh/packs/spikinglabs/aura/parts/), or download https://symbola.sh/packs/spikinglabs/aura/latest.tar.gz. ## Files - [AGENTS.md](https://files.symbola.sh/packs/spikinglabs/aura/files/AGENTS.md) - [BRIEF.md](https://files.symbola.sh/packs/spikinglabs/aura/files/BRIEF.md) - [PRODUCT.md](https://files.symbola.sh/packs/spikinglabs/aura/files/PRODUCT.md) - [assumptions/ai-service.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/ai-service.toml) - [assumptions/device-clocks.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/device-clocks.toml) - [assumptions/drive-version.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/drive-version.toml) - [assumptions/google-client.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/google-client.toml) - [assumptions/ids-unique.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/ids-unique.toml) - [assumptions/one-timezone.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/one-timezone.toml) - [assumptions/recall-feed.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/recall-feed.toml) - [assumptions/small-log.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/small-log.toml) - [assumptions/stiko-gba-2026.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/stiko-gba-2026.toml) - [assumptions/who-tables.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/assumptions/who-tables.toml) - [components/ai-redaction/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ai-redaction/versions/1/examples.jsonl) - [components/ai-redaction/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ai-redaction/versions/1/properties.py) - [components/ai-redaction/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ai-redaction/versions/1/schema.py) - [components/ai-redaction/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ai-redaction/versions/1/schema/input.json) - [components/ai-redaction/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ai-redaction/versions/1/schema/output.json) - [components/ai-redaction/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ai-redaction/versions/1/symbolon.toml) - [components/backup-retention/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/backup-retention/versions/1/examples.jsonl) - [components/backup-retention/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/backup-retention/versions/1/properties.py) - [components/backup-retention/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/backup-retention/versions/1/schema.py) - [components/backup-retention/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/backup-retention/versions/1/schema/input.json) - [components/backup-retention/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/backup-retention/versions/1/schema/output.json) - [components/backup-retention/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/backup-retention/versions/1/symbolon.toml) - [components/growth-percentile/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/growth-percentile/versions/1/examples.jsonl) - [components/growth-percentile/versions/1/fixtures/who-lms.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/growth-percentile/versions/1/fixtures/who-lms.json) - [components/growth-percentile/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/growth-percentile/versions/1/properties.py) - [components/growth-percentile/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/growth-percentile/versions/1/schema.py) - [components/growth-percentile/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/growth-percentile/versions/1/schema/input.json) - [components/growth-percentile/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/growth-percentile/versions/1/schema/output.json) - [components/growth-percentile/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/growth-percentile/versions/1/symbolon.toml) - [components/ics/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ics/versions/1/examples.jsonl) - [components/ics/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ics/versions/1/properties.py) - [components/ics/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ics/versions/1/schema.py) - [components/ics/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ics/versions/1/schema/input.json) - [components/ics/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ics/versions/1/schema/output.json) - [components/ics/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/ics/versions/1/symbolon.toml) - [components/media-pack/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/media-pack/versions/1/examples.jsonl) - [components/media-pack/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/media-pack/versions/1/properties.py) - [components/media-pack/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/media-pack/versions/1/schema.py) - [components/media-pack/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/media-pack/versions/1/schema/input.json) - [components/media-pack/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/media-pack/versions/1/schema/output.json) - [components/media-pack/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/media-pack/versions/1/symbolon.toml) - [components/merge/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/merge/versions/1/examples.jsonl) - [components/merge/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/merge/versions/1/properties.py) - [components/merge/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/merge/versions/1/schema.py) - [components/merge/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/merge/versions/1/schema/input.json) - [components/merge/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/merge/versions/1/schema/output.json) - [components/merge/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/merge/versions/1/symbolon.toml) - [components/migrate/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/migrate/versions/1/examples.jsonl) - [components/migrate/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/migrate/versions/1/properties.py) - [components/migrate/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/migrate/versions/1/schema.py) - [components/migrate/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/migrate/versions/1/schema/input.json) - [components/migrate/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/migrate/versions/1/schema/output.json) - [components/migrate/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/migrate/versions/1/symbolon.toml) - [components/reminders/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/reminders/versions/1/examples.jsonl) - [components/reminders/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/reminders/versions/1/properties.py) - [components/reminders/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/reminders/versions/1/schema.py) - [components/reminders/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/reminders/versions/1/schema/input.json) - [components/reminders/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/reminders/versions/1/schema/output.json) - [components/reminders/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/reminders/versions/1/symbolon.toml) - [components/save-guard/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/save-guard/versions/1/examples.jsonl) - [components/save-guard/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/save-guard/versions/1/properties.py) - [components/save-guard/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/save-guard/versions/1/schema.py) - [components/save-guard/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/save-guard/versions/1/schema/input.json) - [components/save-guard/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/save-guard/versions/1/schema/output.json) - [components/save-guard/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/save-guard/versions/1/symbolon.toml) - [components/schedule/versions/1/examples.jsonl](https://files.symbola.sh/packs/spikinglabs/aura/files/components/schedule/versions/1/examples.jsonl) - [components/schedule/versions/1/properties.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/schedule/versions/1/properties.py) - [components/schedule/versions/1/schema.py](https://files.symbola.sh/packs/spikinglabs/aura/files/components/schedule/versions/1/schema.py) - [components/schedule/versions/1/schema/input.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/schedule/versions/1/schema/input.json) - [components/schedule/versions/1/schema/output.json](https://files.symbola.sh/packs/spikinglabs/aura/files/components/schedule/versions/1/schema/output.json) - [components/schedule/versions/1/symbolon.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/components/schedule/versions/1/symbolon.toml) - [obligations.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/obligations.toml) - [symbolon-pack.toml](https://files.symbola.sh/packs/spikinglabs/aura/files/symbolon-pack.toml)