Back to Black Site Map Editor
SOURCE / PINNED RELEASE

Made of little things.

Black Site Map Editor

Release
32a57733b7e9…
Author-recorded commit
3f54890f542f…
License
LICENSE
Author’s source reference
nostr://npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr/wss%3A%2F%2Fgit.shakespeare.diy%2F/black-site-map-editor

Archive hash verified: 7a4b1abbac7db5b0…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

docs/editor-verification.md
# Editor verification

The editor, original game and adjacent soyLI source host now implement the requested map lifecycle and official inbound map intents. Verification below distinguishes working local source from public release/deployment.

## Requirement audit

| Requirement                                   | Authoritative evidence                                                                                                                                            | Result                                            |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| Original Black Site style                     | Inspected populated `preview.png`, mobile captures; game palette/type and tactical tile renderer                                                                  | Verified                                          |
| Full v1 editing                               | All terrain/cover/unit layers, building doors/interior walls, theme/metadata and gameplay extras through labeled controls; model/browser tests                    | Verified                                          |
| Compatible with both referenced projects      | Six game golden-hash templates, actual authored builder parity; reference schema29 spec tests and required gates                                                  | Verified                                          |
| New maps, templates, import/export, undo/redo | Editor browser workflows, immutable model/history, invalid map-file preservation                                                                                  | Verified; sandbox download fallback is documented |
| Nostr login and own maps                      | Actual host viewer identity, real signed author queries, owner checks and two independent test identities                                                         | Verified locally                                  |
| OUTBOX + RESOURCE reads                       | Actual relay events, author discovery, byte retrieval, independent hash/size/schema checks; invalid-byte browser regressions                                      | Verified locally                                  |
| Blossom upload + native publication           | Real source shim/runtime, signed Blossom authorization, viewer upload and publish consent, kind35858 map signatures                                               | Verified locally                                  |
| Update/reopen/manage/remix/delete             | Same-address update, fresh page discovery/reload, second author credited remix, owner kind5 deletion through actual host                                          | Verified locally                                  |
| Durable drafts/account safety                 | Guest host storage operation, viewer draft partitioning, invalid storage, identity changes and stale-load browser checks                                          | Verified                                          |
| Other napplets open editor                    | Official SDK0.29 receiver; actual game EDIT → source broker → signed installed editor → correct parent map                                                        | Verified locally                                  |
| Opened editor remains fully usable            | Delivered editor changes name/brief and publishes; game refresh retrieves new revision and deploys it                                                             | Verified locally                                  |
| Original game actually plays custom maps      | Actual built game deploy/update/render; author-qualified custom identities, builtin same-ID isolation and unchanged five builtin geometries                       | Verified                                          |
| Responsive/theme/input                        | Six frame sizes including useful200×160 minimum notice, phone portrait/landscape touch, keyboard object movement, unchanged app-owned palette/canvas under themes | Browser verified; physical phones not tested      |
| Sandbox/single artifact                       | Type/build, forbidden-surface guidance and conformance; dist contains only inline index.html                                                                      | Verified                                          |
| CI wiring                                     | Existing-lock install, pinned transitive Chromium, verification/conformance/browser scripts                                                                       | Wired; remote CI has not run                      |

## Verification commands and boundaries

Editor `pnpm verify`: six guidance tests,23 model/host/intent tests, TypeScript and production build pass. `pnpm test:conformance`:5 pass,0 fail,5 skip. Skips are manifest, wire and lifecycle evidence not supplied to the reference harness; actual source-host serialized SDK interaction tests separately exercise real wire and cleanup. `tests/editor-ui.mjs` passed31 browser checks with the source preview URL and refreshed representative desktop/phone captures. Report is ignored under `.napplet-space/promotion/editor-tests/report.json`.

Original game required type/build/guidance/conformance gates pass; guidance/unit count19, reference conformance5 pass/5 skip plus avatar/account/community browser suites. The game supports roadless/all-covered authored maps without decoration crashes, and keeps builtin campaign/customization identity separate.

Canonical `../black-site-map-schema` remains clean at `c43e903`:8 guidance,29 spec, TypeScript/build and5-pass/5-skip conformance pass. Its resource URL helper is already correct in current source; no unnecessary edit was made.

Host `bun run typecheck`, web production build and83 runtime tests pass. Broader check:636 pass,3 failures caused by system Git2.34.1 lacking `merge-tree --write-tree`; the full six-test affected suite passes with packaged Git2.55.0. Native map sessions10 tests/101 assertions cover strict/optional lineage, stale reads, cancellation, signatures, retries and owner deletion. INTENT13 tests cover real host handshake, startup retention/deduplication, discovery/choice/defaults, spoofing, lifetime cancellation and payload/startup bounds.

`bun test tests/services/black-site-editor.test.ts` passes with14 Bun assertions plus Playwright assertions. It creates two isolated fixture identities and real local relay/Blossom services, injects only the standard NIP07 viewer signer in the host, and uses the real shim/runtime; app SDK domains are not mocked. It proves four signed uploads, original/update/remix publication, reload/discovery/verified bytes, game EDIT to cold editor, publication from the delivered editor, game reloading/deploying that revision and owner deletion. All servers/browser sessions are stopped in cleanup. No real account is changed or public service used.

Host `scripts/nix-update-hashes.sh` updated only the exact nodeModules output hash for the shim dependency change, then passed the complete `check:nix` build/forced rebuild and flake/VM gates on x86_64 Linux. aarch64 checks were not requested/run. The source CLI preview used its printed URL and is stopped after captures; no preview is intentionally left running.

## Runtime and release boundary

Use the updated source host from the editor directory:

```sh
bun ../napplet-soy/apps/cli/src/index.ts dev --port 0
```

The existing installed soyLI0.27.0 and public website are independent compiled/deployed releases and have not been replaced. No push, publication or deployment was requested or performed. Local native map admission validates bounded metadata/lineage; the editor/game independently verify actual map JSON, exact bytes and schema. See `../napplet-soy/docs/MAP-INTENTS.md` and [caller contract](map-intents.md).

Runtime hints use each project's already configured public relay/Blossom destinations. Viewer consent remains mandatory, and connected NIP46 sessions may need renewed35858 permission. Creator publishing keys are not borrowed for map actions. The full functional loop is verified in the new source host; public availability requires a separate release/deployment.

## Player-facing editor refinements

The palette groups tools into collapsible Terrain, Structures, Cover & supplies and Mission categories. Selected objects use labeled position, size and property controls. Map name, briefing, size, appearance, gameplay extras, map files and sharing options live in the dedicated Settings modal. Internal IDs, schema documents, protocol names and publication receipts are hidden from the player interface; errors describe the next editing action in plain language.

The required type/build/guidance checks and model/host/intent tests pass. Reference conformance remains 5 passed, 0 failed and 5 skipped. The real source-host lifecycle test passes with the Settings modal, including the game opening this editor, publishing an edit and loading that edited map back into play. Browser checks cover structured object and gameplay controls, invalid values preserving the map, category collapse/reopen, modal operation, responsive frames and the hosted preview.

Settings now uses Map, Appearance, Gameplay, Files and Sharing tabs with a single visible panel. The hosted browser suite passes 35 checks, including keyboard tab navigation, preserved values and all five tabs visible at 320×560. Desktop and narrow settings screenshots were inspected; the owned preview was stopped afterward. Type/build/guidance and reference conformance checks passed (5 passed, 0 failed, 5 skipped).