@crowdedkingdoms/crowdy-dsh 0.5.0-dev.1 → 0.5.1-test.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -73,9 +73,19 @@ cached files. Both sides drop frames without the boot nonce: a
73
73
  implements the page side in `src/crowdy-dsh/`; it also confirms a live deploy
74
74
  with the player on the page before running it.
75
75
 
76
+ The game's own host serves the page and `/dsh/`. Crowded Kingdoms does not
77
+ host games: the developer deploys both to the game's origin, on any static
78
+ host that can set response headers.
79
+ [Host your game](https://docs.crowdedkingdoms.com/build-a-game/host-your-game)
80
+ and the Construct's
81
+ [hosting guide](https://github.com/CrowdedKingdoms/the-construct/blob/prod/docs/HOSTING.md)
82
+ have the full header set and recipes for common hosts.
83
+
76
84
  Headers the host must send (verified with `crossOriginIsolated === true`):
77
- game page CSP unchanged except `frame-src 'self'`; every `/dsh/*` response
78
- carries `script-src 'self' 'unsafe-eval' 'unsafe-inline' blob:`,
85
+ the cross-origin isolation headers (COOP `same-origin` and a COEP) on every
86
+ response, `/dsh/*` included; game page CSP unchanged except `frame-src 'self'`;
87
+ every `/dsh/*` response carries
88
+ `script-src 'self' 'unsafe-eval' 'unsafe-inline' blob:`,
79
89
  `connect-src 'self' blob:`, `worker-src 'self' blob:`, `frame-ancestors 'self'`
80
90
  (the worker compiles pre-lowered module bodies with `new Function`; the harness
81
91
  document runs its own client module system). The API and model endpoints must
@@ -92,11 +102,12 @@ a `persistScope` of its own (sessions of the two editors never mix) and
92
102
  older worker says so instead of running the mod editor on a game.
93
103
 
94
104
  - **The draft is the page's.** CrowdyJS keeps it (a `DraftStore`: an overlay
95
- over the repository at a base commit, in the browser for a hosted game, on
96
- the dev server's checkout locally). The worker's filesystem is a view of it:
97
- `draft.tree` once, then every change through `page.draftChanged`; text by
98
- `draft.read` in batches, cached by blob id. Versions are git blob SHA-1s, so
99
- listing, `stat` and `read_file` agree with what the page shows.
105
+ over the repository at a base commit, in the browser when the game runs from
106
+ its own deployed origin, on the dev server's checkout locally). The worker's
107
+ filesystem is a view of it: `draft.tree` once, then every change through
108
+ `page.draftChanged`; text by `draft.read` in batches, cached by blob id.
109
+ Versions are git blob SHA-1s, so listing, `stat` and `read_file` agree with
110
+ what the page shows.
100
111
  - **Writes are guarded the harness's way.** A write carries the tool's intent
101
112
  (`createIfAbsent`, or `replaceIfVersion` as `ifHash`); a file the player
102
113
  changed since the model read it is a stale write (`FS_STALE_VERSION`), never
@@ -141,7 +152,10 @@ Once the pin publishes, the hint is inert; drop it with the next SDK bump.
141
152
  `vfs-image.tar.gz`, ~7 MB), `BUILD.json` (package version, this repo's commit,
142
153
  upstream tag and commit, the CrowdyJS the worker bundles, sha256 of every file),
143
154
  `LICENSE.deepseek-harness` and `THIRD_PARTY_NOTICES.md`. Serve it under
144
- `/dsh/` of the game origin.
155
+ `/dsh/` of the game's own origin, with the headers above.
156
+ `preview/vfs-image.tar.gz` must reach the browser with no `Content-Encoding`
157
+ header, because the worker decompresses it itself; a host that adds
158
+ `Content-Encoding: gzip` to `.gz` files needs an exception for that file.
145
159
 
146
160
  The build refuses an artifact that names the builder's home directory or the
147
161
  upstream checkout path (`//#region` markers and `patched by` comments are
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "package": "@crowdedkingdoms/crowdy-dsh",
3
- "version": "0.5.0",
4
- "builtAt": "2026-10-29T18:46:30.824Z",
3
+ "version": "0.5.1",
4
+ "builtAt": "2026-10-30T01:16:21.091Z",
5
5
  "source": {
6
6
  "repository": "CrowdedKingdoms/crowdy-dsh",
7
- "commit": "c92aba4652a01e190173d08d38cb8cc3aa72feaa",
7
+ "commit": "7c091864b480fae82820bf324c4dfa5a3a962718",
8
8
  "dirty": false
9
9
  },
10
10
  "upstream": {
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "crowdyjs": {
17
17
  "name": "@crowdedkingdoms/crowdyjs",
18
- "version": "18.23.0-dev.1",
18
+ "version": "18.23.1-test.1",
19
19
  "source": "node_modules"
20
20
  },
21
21
  "files": {
@@ -112,7 +112,7 @@
112
112
  "manifest.webmanifest": "sha256:9b54d57eea00f2fdd1affe6e7999a4209a515755f12ac1a3299da2d55e178d4c",
113
113
  "preview/bootstrap-CYECZNXt.js": "sha256:9f303a0485c0badfdd19fad0c357ef050c5b9a343744ab5bf0c70015e7d95092",
114
114
  "preview/crowdy-boot-Cklh1qNl.js": "sha256:b21e8eb126e1cd8a52159d2d577e610df6c8af36a436f9ed5028cfabd11a85ff",
115
- "preview/vfs-image.tar.gz": "sha256:4a0db11a886375b333ab3ce340d363a7ae49d6b69aa76e8595842a9cf98c94d0",
115
+ "preview/vfs-image.tar.gz": "sha256:2418544db16aaa805f7db5020ab2aca95d16505b0bbc0771f5c4d2ba964a7c6e",
116
116
  "preview/worker-C8-_ANaz.js": "sha256:81099e5732dfe0c32bacd5897316b7956c5a0a22da01b4a0c6e21d0a3b9d9aa1"
117
117
  }
118
118
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@crowdedkingdoms/crowdyjs",
3
- "version": "18.23.0-dev.1",
3
+ "version": "18.23.1-test.1",
4
4
  "source": "node_modules"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crowdedkingdoms/crowdy-dsh",
3
- "version": "0.5.0-dev.1",
3
+ "version": "0.5.1-test.1",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -110,11 +110,11 @@
110
110
  "crowdyDsh": {
111
111
  "build": {
112
112
  "package": "@crowdedkingdoms/crowdy-dsh",
113
- "version": "0.5.0",
114
- "builtAt": "2026-10-29T18:46:30.824Z",
113
+ "version": "0.5.1",
114
+ "builtAt": "2026-10-30T01:16:21.091Z",
115
115
  "source": {
116
116
  "repository": "CrowdedKingdoms/crowdy-dsh",
117
- "commit": "c92aba4652a01e190173d08d38cb8cc3aa72feaa",
117
+ "commit": "7c091864b480fae82820bf324c4dfa5a3a962718",
118
118
  "dirty": false
119
119
  },
120
120
  "upstream": {
@@ -125,7 +125,7 @@
125
125
  },
126
126
  "crowdyjs": {
127
127
  "name": "@crowdedkingdoms/crowdyjs",
128
- "version": "18.23.0-dev.1",
128
+ "version": "18.23.1-test.1",
129
129
  "source": "node_modules"
130
130
  },
131
131
  "files": {
@@ -222,7 +222,7 @@
222
222
  "manifest.webmanifest": "sha256:9b54d57eea00f2fdd1affe6e7999a4209a515755f12ac1a3299da2d55e178d4c",
223
223
  "preview/bootstrap-CYECZNXt.js": "sha256:9f303a0485c0badfdd19fad0c357ef050c5b9a343744ab5bf0c70015e7d95092",
224
224
  "preview/crowdy-boot-Cklh1qNl.js": "sha256:b21e8eb126e1cd8a52159d2d577e610df6c8af36a436f9ed5028cfabd11a85ff",
225
- "preview/vfs-image.tar.gz": "sha256:4a0db11a886375b333ab3ce340d363a7ae49d6b69aa76e8595842a9cf98c94d0",
225
+ "preview/vfs-image.tar.gz": "sha256:2418544db16aaa805f7db5020ab2aca95d16505b0bbc0771f5c4d2ba964a7c6e",
226
226
  "preview/worker-C8-_ANaz.js": "sha256:81099e5732dfe0c32bacd5897316b7956c5a0a22da01b4a0c6e21d0a3b9d9aa1"
227
227
  }
228
228
  }