doxa-maps/documentation
doxa-maps-88655c70 3c17245c73
Some checks are pending
build-gate / build (push) Waiting to run
packets: give CI something to check, instead of a sweep that always SKIPs
check:packets-all is in gates:post. CI runs it on every build. It has SKIPped
every single time, because library/scripts/posters/out/ is gitignored — both the
records cache and every generated packet — so a clean checkout has none.

Every packet assertion in this tree has therefore never once been evaluated
there: the 12 prayer points, the wheel's 12 labels, page 1's geography paths,
the print layer, the build stamp. Several ticks of work accumulating on a gate
that had only ever graded files in my own working tree.

A SKIP that is always taken is indistinguishable from an unwired gate — and the
wave-membership census cannot tell them apart, because membership measures
invocation, not evaluation. That census is how check:packets-all was created in
the first place, which makes this the same class recurring one level up.

I raised this at the end of the last tick and deferred it on the premise that
closing it "adds a live-API call to every build". The premise was wrong.
packet.mjs already had an OFFLINE mode, and a fixture needs no network at all.

The fixture is the smallest zone — Tibet, 43 slugs, 20KB — with image_url
stripped so CI can never fetch 43 photos from someone else's CDN. It is DERIVED,
not hand-maintained: membership comes from the committed clusters.json, so
check:packet-fixture regenerates and content-compares it. Re-adding an image_url
fails; dropping a record fails naming the slug.

A fixture packet stamps itself "fixture", and "fixture nomap" in CI, which has
no poster sources either. `fixture` implies nophotos in the gate — without that
it reported "every source record carries an image_url", a true sentence about
real records and a false one about this packet.

A real bug in my own change, caught only by running the script through its REAL
invocation path: packet.mjs fails closed on a missing VITE_API_BASE_URL BEFORE
loadRecords() ever looks at PACKET_RECORDS, so `bun run packet:ci` exited 1 on a
tree that had everything it needed. Every hand-test had passed because I was
supplying a dummy host. The guard now exempts fixture builds and still fails
closed otherwise.

From a genuinely clean state — the whole out/ directory moved away — the sweep
now reports "1 packet(s) checked, 1 passed". i18n verified through that same
path: a partial block (1 string, 5/12 points, 3/12 rhythms) renders 12 points,
12/12 wheel labels, wheel 3 translated and 9 English, 0 blanks.

check:packet-fixture joins gates:post (34 -> 35), README quote re-synced in the
same commit. Wave 35/35, packets-all 11/11 here and 2/2 in the studio.
2026-09-24 14:33:36 +00:00
..
architecture Document why a gate cannot import plugin source, and stop teaching public binds 2026-09-22 17:40:11 +00:00
assets consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
contributing consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
readme-images README: map-cruncher hero, cross-origin deploy certification shots, repo tree 2026-09-24 02:00:00 +00:00
screenshots consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
CONTRIBUTING.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
develop-a-plugin-and-see-it-live.md Point the golden-path doc at the self-test of the golden path 2026-09-23 10:19:40 +00:00
explanation.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
how-to.md Land the swarm's work: no iframes anywhere, a tree that keeps its shape, deeper facets 2026-09-22 14:51:52 +00:00
README-embed-example.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
README-longform.md Say which embed targets we actually verified, and which we only expect to work 2026-09-23 05:33:51 +00:00
README-SECTION-3-cli-commands.md packets: give CI something to check, instead of a sweep that always SKIPs 2026-09-24 14:33:36 +00:00
README.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
reference-capability-exemplars.md Rebuild the served tree after merging main, and unswallow two self-test flags 2026-09-24 14:23:20 +00:00
reference-library-index.md Merge main into bundler-1/work (regenerate the tree, re-hash) 2026-09-24 05:33:32 +00:00
reference.md Fix the same broken token command in reference.md, and say only what was measured 2026-09-23 04:13:45 +00:00
slide-deck-outline.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
tutorial.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
vendored-font-noto-serif-devanagari.md Move the vendored font's README out of the served folder 2026-09-24 04:15:26 +00:00
why.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00

documentation/ — pick your path

        "what is this?"          "teach me"        "how do I …?"       "look it up"      "all the detail"
             │                       │                   │                  │                  │
         why.md  ──────────►  tutorial.md  ────►  how-to.md  ────►  reference.md  ───►  architecture/
        (2 min, 1 diagram)   (first map)         (task recipes)     (tables)           (contracts)
  • why.md — the problem and the "map islands" idea. Start here.
  • tutorial.md — build your first map, no jargon.
  • how-to.md — recipes: embed, iframe, SPA, colors, CDN, mobile, tokens.
  • reference.md — config fields, build scripts, the profile-config contract.
  • explanation.md — the model in 15 lines.
  • architecture/ — the deep end: full contracts, the per-file catalog.
  • README-embed-example.md — the drop-in README used when this bundler is embedded inside a host repo.

Nothing on the simple path is longer than a few minutes; everything complex lives in architecture/, linked from where you'd need it.