@forgeax/game 0.2.3 → 0.3.0
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 +180 -172
- package/assets/asset3d/schemas/receipt-1.0.0.json +29 -0
- package/assets/asset3d/schemas/result-1.0.0.json +242 -0
- package/assets/asset3d/vibegame-art-3d-asset-library-2.0.0.tgz +0 -0
- package/assets/skills/forgeax-game/SKILL.md +80 -90
- package/dist/main.js +5187 -1732
- package/docs/asset3d.md +157 -0
- package/docs/release-0.3.0.md +100 -0
- package/package.json +18 -7
- package/assets/skills/forgeax-game/references/engine-authoring-traps.md +0 -81
- package/assets/skills/forgeax-game/references/engine-project.md +0 -35
- package/assets/skills/forgeax-game/references/engine-skills.md +0 -24
- package/assets/skills/forgeax-game/references/validation.md +0 -26
package/README.md
CHANGED
|
@@ -1,223 +1,231 @@
|
|
|
1
1
|
# `@forgeax/game`
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@forgeax/game)
|
|
4
|
-
[](https://modelcontextprotocol.io/)
|
|
4
|
+
[](./package.json)
|
|
5
|
+
[](https://modelcontextprotocol.io/)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- `forgeax-game` with no arguments runs the stdio MCP server.
|
|
11
|
-
- `forgeax-game <command>` performs one-time setup and project operations.
|
|
12
|
-
|
|
13
|
-
The package has one exact runtime dependency, `@forgeax/game-runtime@0.3.32`, and
|
|
14
|
-
externalizes it from the Game bundle.
|
|
7
|
+
Two-command MCP/CLI onboarding for ForgeaX Engine games. The Game Plugin delegates
|
|
8
|
+
creation, build, and Preview to the exact Engine SDK instead of carrying a second
|
|
9
|
+
runtime.
|
|
15
10
|
|
|
16
11
|
> [!IMPORTANT]
|
|
17
|
-
> The
|
|
18
|
-
>
|
|
19
|
-
>
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
> The published package carries `forgeax-game` and scoped `game` binary aliases and resolves the exact
|
|
13
|
+
> `@forgeax/engine-sdk@0.1.7` and `pnpm@11.7.0` dependencies. It has no
|
|
14
|
+
> `@forgeax/game-runtime` dependency and no static Preview fallback.
|
|
15
|
+
|
|
16
|
+
## Supported flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart LR
|
|
20
|
+
INSTALL["npx -y @forgeax/game install --ide codex,cursor,claude"] --> HOSTS["Agent MCP entries"]
|
|
21
|
+
INIT["npx -y @forgeax/game init"] --> GAME["Engine game in current directory"]
|
|
22
|
+
CARRIER["Exact npm SDK carrier"] --> GAME
|
|
23
|
+
PLUGIN["@forgeax/game"] --> INSTALL
|
|
24
|
+
PLUGIN --> INIT
|
|
25
|
+
GAME --> BUILD["Exact Engine CLI build --json"]
|
|
26
|
+
BUILD --> PREVIEW["Exact Engine CLI preview --json"]
|
|
27
|
+
PREVIEW --> PROOF["Release-aware readiness proof"]
|
|
28
|
+
```
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
`install` verifies the unbound package identity before changing any Agent config.
|
|
31
|
+
`init` creates the default empty game in a genuinely blank current directory through
|
|
32
|
+
the exact Engine carrier, then binds routing and host skills. The connector never asks
|
|
33
|
+
users to download an SDK, unpack a carrier, run a third Engine command, or set a
|
|
34
|
+
mutable SDK path/environment override.
|
|
24
35
|
|
|
25
|
-
|
|
36
|
+
## Two-command onboarding
|
|
26
37
|
|
|
27
|
-
|
|
38
|
+
Requirements: Node.js `>=22.13.0` and a genuinely blank target directory for `init`.
|
|
39
|
+
The exact package and Engine carrier are resolved by npm and the Game Plugin.
|
|
28
40
|
|
|
29
41
|
```bash
|
|
30
42
|
npx -y @forgeax/game install --ide codex,cursor,claude
|
|
43
|
+
cd ./empty-game-directory
|
|
44
|
+
npx -y @forgeax/game init
|
|
31
45
|
```
|
|
32
46
|
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
The first command writes only the `forgeax` MCP member in the canonical Codex,
|
|
48
|
+
Cursor, and Claude Code user configs. It preserves unrelated bytes and values,
|
|
49
|
+
reports `CURRENT` on an idempotent rerun, and says which host must restart or reload.
|
|
50
|
+
The second command must run from the intended blank directory. It creates the Engine
|
|
51
|
+
game there, binds the exact release identity, and reports the canonical root and
|
|
52
|
+
host-skill result. Existing exact games are read back and bound without recreation;
|
|
53
|
+
unknown non-empty directories fail closed.
|
|
54
|
+
|
|
55
|
+
> [!NOTE]
|
|
56
|
+
> Asset3D is optional and **disabled by default**. The two commands above never contact
|
|
57
|
+
> the internal asset catalog, download a platform Provider, or add
|
|
58
|
+
> `asset3d-search` to the project. Enable it only in an already initialized project:
|
|
59
|
+
>
|
|
60
|
+
> ```bash
|
|
61
|
+
> npx -y @forgeax/game asset3d enable
|
|
62
|
+
> ```
|
|
63
|
+
|
|
64
|
+
## Agent completion contract
|
|
65
|
+
|
|
66
|
+
`init` records `.forgeax/game-authoring-baseline.json` before gameplay authoring. An
|
|
67
|
+
untouched Empty template remains runnable, but once gameplay or assets change the
|
|
68
|
+
connector refuses Preview until the Agent has replaced the template identity, kept a
|
|
69
|
+
single game README heading, removed the Empty package output name, updated gameplay
|
|
70
|
+
tests, and documented controls. A valid behavior test imports a named game-specific
|
|
71
|
+
state transition or rule and exercises it with an assertion; merely renaming an Empty
|
|
72
|
+
template test does not qualify. Standalone source remains in `<game-root>/src`; the
|
|
73
|
+
Studio-hosted `.forgeax/games/<slug>` layout is never created by this package.
|
|
74
|
+
|
|
75
|
+
Every supported host receives the same packaged `forgeax-game` Skill and routing rule.
|
|
76
|
+
They require UI to mount under the Engine Host `uiRoot` or `#game-ui`. The released
|
|
77
|
+
standalone Host provides `#game-ui`; direct `document.body` mutation is rejected.
|
|
78
|
+
An explicit request for an existing/library 3D asset requires the separately installed
|
|
79
|
+
project-local `asset3d-search/search_asset` tool. When it is absent, Agents must report
|
|
80
|
+
`BLOCKED(asset-library-tools-missing)` instead of relabeling procedural geometry or
|
|
81
|
+
generation as an asset-library result.
|
|
82
|
+
|
|
83
|
+
## MCP transports
|
|
84
|
+
|
|
85
|
+
Local Agent clients should use the default stdio transport installed by
|
|
86
|
+
`forgeax-game install`. For a shared local daemon, bind only to loopback:
|
|
35
87
|
|
|
36
88
|
```bash
|
|
37
|
-
|
|
89
|
+
forgeax-game mcp --transport http --host 127.0.0.1 --port 18940 --root "$PWD"
|
|
38
90
|
```
|
|
39
91
|
|
|
40
|
-
|
|
92
|
+
The Streamable HTTP endpoint is `http://127.0.0.1:18940/mcp`. A non-loopback
|
|
93
|
+
listener requires `FORGEAX_REMOTE_MCP_TOKEN`; `--require-auth` also enforces bearer
|
|
94
|
+
authentication on loopback. HTTP mode adds bounded game-file tools under the fixed
|
|
95
|
+
root and never accepts a caller-provided `target_dir`.
|
|
41
96
|
|
|
42
|
-
|
|
43
|
-
|
|
97
|
+
## MCP surface
|
|
98
|
+
|
|
99
|
+
| Surface | Kind | Contract |
|
|
100
|
+
|:--|:--|:--|
|
|
101
|
+
| `forgeax://status` | Resource | Read-only game, Engine release, DevKit, and Preview identity |
|
|
102
|
+
| `forgeax_status_lite` | Tool | Resource fallback for clients without MCP resource support |
|
|
103
|
+
| `forgeax_run_current_game` | Tool | Exact Engine build followed by start/reuse of Engine-owned Preview |
|
|
104
|
+
| `forgeax_generate_image` | Tool | Existing image-generation helper; outside the G0 Preview cutover |
|
|
105
|
+
| `forgeax_generate_3d` | Tool | Generation fallback used only for misses after the Asset3D search lifecycle |
|
|
106
|
+
| `forgeax_game_list_files` | HTTP tool | List non-hidden files below the selected game |
|
|
107
|
+
| `forgeax_game_read_file` | HTTP tool | Read one UTF-8 game file and return its SHA-256 |
|
|
108
|
+
| `forgeax_game_read_logs` | HTTP tool | Read a bounded Preview log tail for remote diagnosis |
|
|
109
|
+
| `forgeax_game_write_file` | HTTP tool | Atomically create or hash-guard replacement of a text file |
|
|
110
|
+
|
|
111
|
+
The build plus Preview-readiness deadline is 150 seconds. Preview readiness starts
|
|
112
|
+
with one bounded `CommandEnvelope@1.0.0`. Engines that expose
|
|
113
|
+
`GET /.forgeax/preview-health` are bearer-authenticated and must echo the canonical
|
|
114
|
+
root, exact release, build digest, and instance ID. Released Engine 0.1.7 emits the
|
|
115
|
+
documented minimal Preview envelope instead; the connector binds its already verified
|
|
116
|
+
release and fresh instance ID, then reads the served `forgeax-dist.json` and requires
|
|
117
|
+
its SHA-256 to equal the build it just produced.
|
|
118
|
+
|
|
119
|
+
Any build or Preview failure is an MCP `isError` result. Agents must not probe or
|
|
120
|
+
reuse an existing localhost port after a failed call: HTTP 200 is not ownership
|
|
121
|
+
evidence. Only a successful result containing `preview.status: ready`, `preview_url`,
|
|
122
|
+
`preview.root`, `preview.build_digest`, and `preview.instance_id` authorizes a Preview
|
|
123
|
+
claim. If another game owns the Engine port, stop that game explicitly or report the
|
|
124
|
+
blocker; never substitute its URL.
|
|
125
|
+
|
|
126
|
+
## Preview ownership
|
|
127
|
+
|
|
128
|
+
Per game, connector-owned state lives at:
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
<project>/.forgeax/run/engine-preview/<sha256(canonical-game-root)>/
|
|
132
|
+
├── lock
|
|
133
|
+
├── state.json
|
|
134
|
+
├── stdout.log
|
|
135
|
+
└── stderr.log
|
|
44
136
|
```
|
|
45
137
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
138
|
+
The directory is `0700`; files are `0600`; logs rotate at 8 MiB and keep two prior
|
|
139
|
+
files. Reuse requires the build/Engine/instance identity, unchanged process-start
|
|
140
|
+
identity, and either authenticated health or the exact served dist digest after MCP
|
|
141
|
+
restart. PID alone never authorizes a signal.
|
|
50
142
|
|
|
51
143
|
```bash
|
|
52
|
-
|
|
144
|
+
forgeax-game preview stop --target-dir ./my-game
|
|
145
|
+
forgeax-game preview stop --target-dir ./my-game --json
|
|
53
146
|
```
|
|
54
147
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
with the `.bak.latest` suffix.
|
|
148
|
+
Stop and cancellation signal only the verified owning Preview process, with a bounded
|
|
149
|
+
TERM/KILL cleanup. Dead state is removed under the lock; a matching orphan is adopted;
|
|
150
|
+
a live unverifiable PID fails closed as `preview_ownership_unverified`.
|
|
59
151
|
|
|
60
|
-
|
|
152
|
+
## Asset3D installation and transaction
|
|
61
153
|
|
|
62
|
-
|
|
154
|
+
Asset3D is an opt-in, project-local MCP integration for the internal catalog. Run it
|
|
155
|
+
only after `init` and while connected to the internal network:
|
|
63
156
|
|
|
64
157
|
```bash
|
|
65
|
-
|
|
66
|
-
|
|
158
|
+
npx -y @forgeax/game asset3d enable
|
|
159
|
+
forgeax-game asset3d doctor --json
|
|
67
160
|
```
|
|
68
161
|
|
|
69
|
-
`
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
162
|
+
`enable` first probes `http://21.214.216.8:5180/api/assets` with a body-free `HEAD`
|
|
163
|
+
request. The current network-gated service returns `200` and requires no API Key, so
|
|
164
|
+
the plugin reports `authentication=none`. It then reuses the exact verified Provider
|
|
165
|
+
from `~/.forgeax/providers/asset3d-search/<sha256>/`, or downloads the digest-pinned
|
|
166
|
+
platform release artifact over HTTPS when the cache is absent. Only after Provider
|
|
167
|
+
verification and its MCP handshake succeed does the command merge the `forgeax` and
|
|
168
|
+
`asset3d-search` entries into `.forgeax/mcp.json` and project the approved Asset3D
|
|
169
|
+
workflow into the Agent hosts selected during `install`.
|
|
73
170
|
|
|
74
171
|
> [!IMPORTANT]
|
|
75
|
-
>
|
|
76
|
-
>
|
|
77
|
-
>
|
|
78
|
-
|
|
79
|
-
|
|
172
|
+
> The internal catalog does **not** use `ANTHROPIC_API_KEY`. No model-provider key is
|
|
173
|
+
> accepted, copied, or written by `asset3d enable`. If a future catalog returns
|
|
174
|
+
> `401`/`403`, this release fails closed with `asset3d_api_key_contract_missing` until
|
|
175
|
+
> that service publishes an explicit authentication header and validation contract;
|
|
176
|
+
> an arbitrary secret is never guessed or persisted in project config.
|
|
80
177
|
|
|
81
|
-
|
|
82
|
-
same `init` again:
|
|
178
|
+
The transaction commands are normally driven by the installed Agent workflow:
|
|
83
179
|
|
|
84
180
|
```bash
|
|
85
|
-
cd /path/to/existing-forgeax-project
|
|
86
|
-
npx -y @forgeax/game update
|
|
87
|
-
```
|
|
88
181
|
|
|
89
|
-
|
|
182
|
+
forgeax-game asset3d begin --query "weathered oak tree" --json
|
|
183
|
+
# Call the configured asset3d-search/search_asset MCP tool with the returned output_dir.
|
|
184
|
+
# Pass its complete TextContent JSON to commit on stdin:
|
|
185
|
+
forgeax-game asset3d commit --execution <uuid> --provider-result-stdin --json < result.json
|
|
90
186
|
|
|
91
|
-
|
|
92
|
-
|
|
187
|
+
forgeax-game asset3d doctor --json
|
|
188
|
+
forgeax-game asset3d uninstall
|
|
93
189
|
```
|
|
94
190
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
run `/mcp status` to confirm `forgeax` is connected.
|
|
191
|
+
<details>
|
|
192
|
+
<summary>Maintainer-only local bundle installation</summary>
|
|
98
193
|
|
|
99
|
-
|
|
194
|
+
The low-level command remains available for producing and validating platform release
|
|
195
|
+
artifacts. It is not the user onboarding path.
|
|
100
196
|
|
|
101
197
|
```bash
|
|
102
|
-
|
|
198
|
+
forgeax-game asset3d install \
|
|
199
|
+
--provider-bundle ./asset3d-search-provider-<commit>-<os>-<arch>.tar.gz \
|
|
200
|
+
--sha256 <archive-sha256> \
|
|
201
|
+
--download-origin http://21.214.216.8:5180 \
|
|
202
|
+
--catalog-base-url http://21.214.216.8:5180
|
|
103
203
|
```
|
|
104
204
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
| Command | Purpose |
|
|
108
|
-
|:--|:--|
|
|
109
|
-
| `install [--ide a,b] [--local]` | Verify the MCP launch command, then merge client configuration |
|
|
110
|
-
| `init [--game <slug>] [--ide ...]` | Create a project/game, install routing rules, and materialize the bundled Engine SDK |
|
|
111
|
-
| `use <slug>` | Activate an existing game through the server |
|
|
112
|
-
| `doctor` | Check Node, project binding, service tiers, and client configuration |
|
|
113
|
-
| `devkit install` | Install the game-development Skill and host rules; use `forgeax-install` only when available |
|
|
114
|
-
| `agents update` | Insert or refresh only the managed ForgeaX block in `AGENTS.md` |
|
|
115
|
-
| `update [--ide ...]` | Verify the published launch command, refresh installed client entries, and update project routing rules |
|
|
116
|
-
|
|
117
|
-
`init` can create the minimal `.forgeax/` instance and game in an ordinary empty
|
|
118
|
-
directory. It also installs `.forgeax/engine-sdk/`, containing declarations, API
|
|
119
|
-
metadata, both canonical templates (`game-default` and `game-empty`), authoring
|
|
120
|
-
skills, and the Engine implementation source generated from the same Engine pin as the
|
|
121
|
-
selected Runtime package. `use`, `devkit install`, and `agents update` operate on the nearest
|
|
122
|
-
project root. Runtime extraction and startup are automatic; a running server is not
|
|
123
|
-
an `init` prerequisite.
|
|
205
|
+
The catalog authority must also be an exact member of `--download-origin`.
|
|
124
206
|
|
|
125
|
-
|
|
207
|
+
</details>
|
|
126
208
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
209
|
+
Provider output is checked at a 1 MiB stdin boundary. The transaction ignores
|
|
210
|
+
`downloaded_to`, accepts only declared relative manifest paths contained by its
|
|
211
|
+
private quarantine, and publishes the whole asset directory under
|
|
212
|
+
`assets/3d/ea-3d/<providerAssetId>`. It invokes only the exact released Engine CLI
|
|
213
|
+
with `asset add ... --reimport-policy semantic-only --json`, then requires
|
|
214
|
+
verify/list/inspect readback before committing provenance. Same-digest content is
|
|
215
|
+
reused only after live file and catalog checks; changed content requires `--refresh`
|
|
216
|
+
and rolls back the entire prior directory on failure.
|
|
130
217
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
| `forgeax://status` | Resource | Preferred read-only project, service, and next-action status |
|
|
134
|
-
| `forgeax_status_lite` | Tool | Status fallback for clients without MCP resource support |
|
|
135
|
-
| `forgeax_run_current_game` | Tool | Build or reuse the active game's static preview, return its URL and health identity, and identify the runtime log file |
|
|
218
|
+
See [docs/asset3d.md](docs/asset3d.md) for the platform, origin, ownership, recovery,
|
|
219
|
+
and evidence boundaries.
|
|
136
220
|
|
|
137
|
-
|
|
221
|
+
## Scope boundary
|
|
138
222
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
captured there; exceptions thrown inside the browser remain in the browser console.
|
|
145
|
-
The run result reports the Runtime version, instance identity, selected ports, and
|
|
146
|
-
whether the log belongs to the current plugin-owned process; status reports the
|
|
147
|
-
cached Runtime installation state.
|
|
148
|
-
|
|
149
|
-
Runtime artifacts are cached per platform and version under `~/.forgeax/runtimes/`.
|
|
150
|
-
The selected `@forgeax/game-runtime-<platform>-<arch>` package carries the archive,
|
|
151
|
-
so first run verifies and extracts npm-installed bytes without another download.
|
|
152
|
-
The cache uses a checksum-verified ready
|
|
153
|
-
marker and keeps the previous version until a new version has started successfully.
|
|
154
|
-
`forgeax_run_current_game` reports `runtime.version`, `engine_sdk.commit`, and a
|
|
155
|
-
combined `engine.identity`; those must match before preview acceptance.
|
|
156
|
-
|
|
157
|
-
The game SDK is available at `.forgeax/engine-sdk/`. Use its declaration files and
|
|
158
|
-
`templates/game-default` or `templates/game-empty` before writing imports. If an API
|
|
159
|
-
is absent, inspect `source/<package>/src/` instead of guessing.
|
|
160
|
-
|
|
161
|
-
## Supported clients
|
|
162
|
-
|
|
163
|
-
| Client ID | Config path | Scope |
|
|
164
|
-
|:--|:--|:-:|
|
|
165
|
-
| `codex` | `~/.codex/config.toml` | User |
|
|
166
|
-
| `claude` | `~/.claude.json` | User |
|
|
167
|
-
| `cursor` | `~/.cursor/mcp.json` | User |
|
|
168
|
-
| `trae` | `<project>/.trae/mcp.json` | Project |
|
|
169
|
-
| `codebuddy` / `workbuddy` | `~/.codebuddy/.mcp.json` | User |
|
|
170
|
-
| `windsurf` | `~/.codeium/windsurf/mcp_config.json` | User |
|
|
171
|
-
| `vscode` | `<project>/.vscode/mcp.json` | Project |
|
|
172
|
-
| `zcode` | `~/.zcode/cli/config.json` | User |
|
|
173
|
-
| `opencode` | `~/.config/opencode/opencode.json` | User |
|
|
174
|
-
|
|
175
|
-
> [!NOTE]
|
|
176
|
-
> `workbuddy` is an accepted installer alias. Both names target CodeBuddy's current
|
|
177
|
-
> MCP file, so selecting both does not create duplicate entries.
|
|
178
|
-
>
|
|
179
|
-
> The OpenCode entry follows its stable configuration schema (`mcp.<name>`,
|
|
180
|
-
> `type: "local"`, and an argv-style `command`). It is process-verified with
|
|
181
|
-
> OpenCode 1.17.9: `opencode mcp list` starts this package and reports
|
|
182
|
-
> `forgeax connected`. If a future client release changes the schema, `doctor`
|
|
183
|
-
> will still report whether the configured entry matches what this package writes.
|
|
184
|
-
>
|
|
185
|
-
> ZCode uses its native `mcp.servers.<name>` user configuration rather than the
|
|
186
|
-
> `.agents/mcp.json` fallback. Project Skills are installed under `.zcode/skills`;
|
|
187
|
-
> start a new ZCode session and run `/mcp status` after installation.
|
|
188
|
-
|
|
189
|
-
## Game development Skill
|
|
190
|
-
|
|
191
|
-
The canonical Skill lives at the repository root in `skills/forgeax-game/`. Package
|
|
192
|
-
builds derive the copy shipped under `assets/`; there is no second handwritten source.
|
|
193
|
-
The Skill contains the MCP/file/browser decision loop, failure recovery, current
|
|
194
|
-
engine-project map, example-selection rules, scaffold/template authority, and the
|
|
195
|
-
real Studio-versus-Play validation boundary.
|
|
196
|
-
|
|
197
|
-
The published package also carries the host-install metadata needed to expose that
|
|
198
|
-
Skill directly to Codex, Claude Code, Cursor and other configured clients. A harness
|
|
199
|
-
checkout is optional compatibility support, not a user prerequisite. Inside a ForgeaX
|
|
200
|
-
project, `install`, `init`, and `update` refresh it automatically. It can also be
|
|
201
|
-
installed explicitly:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
npx -y @forgeax/game devkit install
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
When the project already has a `.forgeax-harness/install-manifest.json`, the command
|
|
208
|
-
may replay that project's recorded `forgeax-install` specification. Otherwise the
|
|
209
|
-
published package uses its bundled host-install metadata and writes only its managed
|
|
210
|
-
Skill/rule blocks. It never reports a successful user install while silently requiring
|
|
211
|
-
a missing harness checkout.
|
|
212
|
-
|
|
213
|
-
## Develop
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
bun run typecheck
|
|
217
|
-
bun test
|
|
218
|
-
bun run build
|
|
219
|
-
node dist/main.js help
|
|
220
|
-
```
|
|
223
|
+
> [!WARNING]
|
|
224
|
+
> G0/A0 packed and controlled-fixture evidence is supporting evidence only. It does
|
|
225
|
+
> not prove Studio, Editor, RuntimeInstance, host permission parity, visible Play, or
|
|
226
|
+
> real EA/provider access. Those remain separate downstream integration and terminal
|
|
227
|
+
> acceptance gates.
|
|
221
228
|
|
|
222
|
-
|
|
223
|
-
|
|
229
|
+
See [docs/runtime.md](docs/runtime.md) for the exact artifact and lifecycle contract.
|
|
230
|
+
For the `0.3.0` onboarding release, migration, verification, and maintainer publish
|
|
231
|
+
checklist, see [docs/release-0.3.0.md](docs/release-0.3.0.md).
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "forgeax.asset3d-search-receipt/1.0.0",
|
|
4
|
+
"title": "ForgeaX Asset3D Search Receipt",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"provider",
|
|
10
|
+
"providerCommit",
|
|
11
|
+
"originSetDigest"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"schemaVersion": {
|
|
15
|
+
"const": "forgeax.asset3d-search-receipt/1.0.0"
|
|
16
|
+
},
|
|
17
|
+
"provider": {
|
|
18
|
+
"const": "ea-3d"
|
|
19
|
+
},
|
|
20
|
+
"providerCommit": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^[0-9a-f]{40}$"
|
|
23
|
+
},
|
|
24
|
+
"originSetDigest": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|