# stac-workbench — design record (v0.1.0, 2026-07-21)

Debbie on Stephen's `ask debbie [ make a standalone STAC viewer, selector and creator of STACs and
save them to your bead when created · use devops and acequia-hub · include a leaflet view · you are
combining table-view, grid-view and map view with timeline with channels like fire-watch-grid ]`.
Live: [guerin/apps/stac-workbench/](https://redfish.acequia.io/guerin/apps/stac-workbench/).

## Interaction ranking

1. **Scan the corpus** — three synchronized item faces (table / grid / map) share one selection;
   the strongest position (widest pane) goes to the map, the densest scan surface to the table.
2. **Scrub time** — the channel timeline is a full-width band above the workspace, per the
   [camera-grid](https://redfish.acequia.io/guerin/.agents/ade9cea6-f50e-4922-8266-4bdd14ed9c73/about.md)
   idiom it borrows: expanded per-channel lanes with a tick per record, collapsed aggregate,
   draggable playhead, nearness dimming (their ±30 min becomes ±5 % of extent here).
3. **Select** — click any face; count + actions live in a persistent bottom bar (the rank-1
   *outcome* affordance, "Create STAC", sits there in the accent).
4. **Compose** — name → create → save → **the created catalog immediately re-loads as a source**,
   so the proof of the write is the thing itself appearing in the views.

## Decisions

- **Channels = collections** (v0.1): honest to STAC structure; at 40+ collections the lanes
  compress and labels withdraw (below 11 px a label is ink-smear — found by screenshot, fixed by
  rule). The right grouping is genuinely open → fan W1.
- **Creator writes to THIS bead's `stacs/`** ("save them to your bead when created" read as the
  app/Debbie's bead — the communal shelf). Whether creations belong in the *user's* bead or a
  freshly minted bead-per-STAC is fork W4; first-cut says W4-C long-term (a STAC that matters
  deserves its own GUID).
- **Reference, don't copy** (v0.1): created items carry absolutized asset hrefs + `derived_from`
  links; the catalog carries `via` links to its sources. Copy-vs-reference is fork W2 — Debbie's
  first-cut is W2-B (copy small data assets) because a reference-only STAC dies with its sources.
- **Auth ladder = ballot.js precedent:** ambient identity (`credentials: include`) → on 401/403 an
  honest browser-download bundle, never a silent failure.
- **Undated items are counted beside the axis, never faked onto it** (the osm-skill epistemics:
  carry the hole).
- Vendored `stac-loader` + `vt-basemaps` from venice-traffic (drift discipline: vendor + check).

## Verification

`check.mjs`: DOM ids, module exports, local assets, **live probes of the three preset catalogs**.
Headless screenshots local + deployed (dark scheme). CORS verified cross-origin during the local
run (the venice preset loaded from localhost). The creator's PUT path is NOT headless-verified
(needs an authenticated browser identity) — first real creation should be watched; the fallback
path is exercised by the same code shape as ballot.js.

## Open forks → the fan

[stac-workbench-fan](../artifacts/sketches/stac-workbench-fan/index.html): W1 channel semantics
(collection / source / asset-kind / user-pinned) · W2 copy-vs-reference (slider) · W3 selection
gestures (drag-range / lasso / query bar) · W4 whose bead keeps creations. Ballots →
[feedback/](../../feedback/).
