arcane-os 0.3.1 → 0.3.3

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.
Files changed (153) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +86 -117
  3. package/bin/arcane-test.mjs +170 -46
  4. package/browser-runtime/ai/browser-speech-artifacts.mjs +855 -895
  5. package/browser-runtime/ai/browser-speech-providers.mjs +80 -204
  6. package/browser-runtime/ai/browser-wasm-llm-provider.mjs +627 -819
  7. package/browser-runtime/ai/browser-wasm.mjs +24 -35
  8. package/browser-runtime/ai/browser-wllama-runtime.mjs +64 -316
  9. package/browser-runtime/ai/model-controller.mjs +584 -181
  10. package/browser-runtime/ai/speech-worker-client.mjs +8 -148
  11. package/browser-runtime/ai/speech-worker-runtime.mjs +642 -374
  12. package/browser-runtime/dom-event-instrumentation.mjs +55 -147
  13. package/browser-runtime/event-manager.mjs +239 -624
  14. package/package.json +5 -6
  15. package/runtime/arcane/components/app-bar.html +3 -15
  16. package/runtime/arcane/components/assistant-panel.html +10 -10
  17. package/runtime/arcane/components/calculator.html +1 -1
  18. package/runtime/arcane/components/chat.html +1359 -135
  19. package/runtime/arcane/components/conversation-view.html +2 -2
  20. package/runtime/arcane/components/document-inspector.html +11 -17
  21. package/runtime/arcane/components/file-manager.html +13 -56
  22. package/runtime/arcane/components/markdown-document.html +82 -281
  23. package/runtime/arcane/components/markdown-editor.html +7 -10
  24. package/runtime/arcane/components/media-embed.html +6 -6
  25. package/runtime/arcane/components/screen-capture.html +4 -4
  26. package/runtime/arcane/components/source-explanation.html +2 -2
  27. package/runtime/arcane/components/speech.html +113 -69
  28. package/runtime/arcane/components/terminal-workspace.html +4 -4
  29. package/runtime/arcane/components/theme-editor.html +1 -1
  30. package/runtime/arcane/components/unified-inbox.html +2 -2
  31. package/runtime/arcane/components/voice-transcription.html +31 -21
  32. package/runtime/arcane/entities/Calculation.js +2 -3
  33. package/runtime/arcane/entities/Chat.js +228 -43
  34. package/runtime/arcane/entities/Preference.js +3 -5
  35. package/runtime/arcane/entities/Weather.js +5 -5
  36. package/runtime/arcane/modules/AI.js +1042 -427
  37. package/runtime/arcane/modules/AIProviderRuntime.js +618 -359
  38. package/runtime/arcane/modules/AIResponseLength.js +9 -19
  39. package/runtime/arcane/modules/AIRuntimeState.js +109 -72
  40. package/runtime/arcane/modules/ArcaneNavigationPolicy.js +45 -32
  41. package/runtime/arcane/modules/BrowserTestSuite.js +78 -122
  42. package/runtime/arcane/modules/CalculatorEngine.js +9 -9
  43. package/runtime/arcane/modules/CommunicationAppController.js +3 -7
  44. package/runtime/arcane/modules/ComponentContracts.js +30 -32
  45. package/runtime/arcane/modules/ConfiguredAIChatSession.js +281 -230
  46. package/runtime/arcane/modules/ConversationActionItems.js +26 -59
  47. package/runtime/arcane/modules/ConversationClosingReport.js +34 -61
  48. package/runtime/arcane/modules/ConversationTimebox.js +27 -15
  49. package/runtime/arcane/modules/DBOPFSDocumentLibrary.js +152 -344
  50. package/runtime/arcane/modules/DocumentLexicalSearch.js +25 -91
  51. package/runtime/arcane/modules/HTMLImport.js +54 -1
  52. package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +40 -203
  53. package/runtime/arcane/modules/LocalAIReadiness.js +40 -60
  54. package/runtime/arcane/modules/LocalAIReadinessController.js +15 -13
  55. package/runtime/arcane/modules/MD.js +1 -45
  56. package/runtime/arcane/modules/Mail.js +51 -103
  57. package/runtime/arcane/modules/MailOutbox.mjs +95 -193
  58. package/runtime/arcane/modules/MailTransport.mjs +36 -57
  59. package/runtime/arcane/modules/ModelDefinition.js +22 -106
  60. package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +39 -101
  61. package/runtime/arcane/modules/PersistentAIChatSession.js +281 -18
  62. package/runtime/arcane/modules/PreferenceStore.js +102 -30
  63. package/runtime/arcane/modules/RiskSignalAnalyzer.js +8 -9
  64. package/runtime/arcane/modules/ScopedOPFSCache.js +7 -42
  65. package/runtime/arcane/modules/ScreenCapture.js +175 -128
  66. package/runtime/arcane/modules/SpeechPlayback.js +46 -149
  67. package/runtime/arcane/modules/StaticDocumentCatalog.js +173 -407
  68. package/runtime/arcane/modules/ToolCallRouter.js +25 -12
  69. package/runtime/arcane/modules/YouTubeMedia.js +6 -5
  70. package/schemas/arcane-app-bundle.schema.json +13 -78
  71. package/schemas/arcane-app.schema.json +9 -25
  72. package/schemas/arcane-lock.schema.json +19 -149
  73. package/schemas/arcane-package.schema.json +2 -16
  74. package/schemas/native-build-plan.schema.json +119 -122
  75. package/src/app-descriptor.mjs +75 -132
  76. package/src/application-tests.mjs +200 -0
  77. package/src/cli/main.mjs +27 -46
  78. package/src/constants.mjs +3 -4
  79. package/src/dev-server.mjs +42 -327
  80. package/src/doctor.mjs +92 -154
  81. package/src/dom-event-instrumentation.mjs +55 -147
  82. package/src/errors.mjs +2 -3
  83. package/src/event-manager.mjs +239 -624
  84. package/src/event-queue.mjs +3 -3
  85. package/src/import-map.mjs +273 -1028
  86. package/src/index.mjs +14 -16
  87. package/src/installed-sdk-runtime.mjs +48 -66
  88. package/src/integrated-provider-loader.mjs +53 -382
  89. package/src/mail-api.mjs +0 -2
  90. package/src/mail-server.mjs +224 -580
  91. package/src/mail.mjs +4 -10
  92. package/src/native-plan.mjs +163 -598
  93. package/src/native-provider-loader.mjs +104 -1063
  94. package/src/packager/core.mjs +492 -3229
  95. package/src/process.mjs +5 -10
  96. package/src/release-bundle.mjs +292 -2405
  97. package/src/runtime.mjs +76 -396
  98. package/src/scaffold.mjs +48 -79
  99. package/src/sdk-browser-runtime.mjs +70 -626
  100. package/src/source-server.mjs +588 -0
  101. package/src/targets/index.mjs +78 -188
  102. package/src/templates/workspace-template.mjs +55 -135
  103. package/src/testing-loader.mjs +164 -0
  104. package/src/testing.mjs +1 -1
  105. package/src/toolchain.mjs +133 -544
  106. package/src/update-check.mjs +26 -64
  107. package/src/workspace-operation-lock.mjs +139 -430
  108. package/src/workspace-runtime.mjs +109 -1558
  109. package/src/workspace.mjs +40 -302
  110. package/browser-runtime/ARCANE_SDK_BROWSER_RELEASE.json +0 -218
  111. package/browser-runtime/ai/ARCANE_AI_BROWSER_SPEECH_COMPONENTS.json +0 -203
  112. package/browser-runtime/ai/ARCANE_AI_BROWSER_WASM_COMPONENTS.json +0 -80
  113. package/browser-runtime/ai/internal/sha256.mjs +0 -166
  114. package/docs/architecture.md +0 -344
  115. package/docs/compatibility.md +0 -36
  116. package/docs/event-manager.md +0 -294
  117. package/docs/platform-targets.md +0 -108
  118. package/docs/publishing.md +0 -201
  119. package/docs/reference/README.md +0 -185
  120. package/docs/reference/ai/browser-speech-package-authority.json +0 -835
  121. package/docs/reference/ai/browser-speech.md +0 -1295
  122. package/docs/reference/ai/browser-wasm.md +0 -530
  123. package/docs/reference/arcane-ollama.md +0 -288
  124. package/docs/reference/availability-and-normalization.md +0 -183
  125. package/docs/reference/behavioral-testing.md +0 -133
  126. package/docs/reference/cli.md +0 -779
  127. package/docs/reference/core/README.md +0 -62
  128. package/docs/reference/core/arcane-ai-contracts.md +0 -907
  129. package/docs/reference/core/arcane-api.md +0 -601
  130. package/docs/reference/core/arcane-entities.md +0 -65
  131. package/docs/reference/core/arcane-events.md +0 -134
  132. package/docs/reference/core/ollama-module.md +0 -181
  133. package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +0 -1909
  134. package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +0 -1057
  135. package/docs/reference/core/reference/arcane-api/core-and-events.md +0 -320
  136. package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +0 -610
  137. package/docs/reference/core/reference/arcane-api/namespaces.md +0 -1157
  138. package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +0 -1423
  139. package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +0 -315
  140. package/docs/reference/event-manager.md +0 -1511
  141. package/docs/reference/inventory/package-api.json +0 -3284
  142. package/docs/reference/inventory/runtime-components.json +0 -1011
  143. package/docs/reference/inventory/runtime-entities.json +0 -26
  144. package/docs/reference/inventory/runtime-modules.json +0 -1431
  145. package/docs/reference/mail.md +0 -316
  146. package/docs/reference/protocols.md +0 -719
  147. package/docs/reference/runtime-components.md +0 -1366
  148. package/docs/reference/runtime-entities.md +0 -303
  149. package/docs/reference/runtime-modules.md +0 -2965
  150. package/docs/reference/sdk-api.md +0 -6698
  151. package/docs/roadmap.md +0 -79
  152. package/docs/work-amplification.md +0 -129
  153. package/runtime/ARCANE_RUNTIME_RELEASE.json +0 -826
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.3
4
+
5
+ - Corrected installed-workspace import-map refresh to preserve rich browser
6
+ document inspection records while passing only navigable document paths to
7
+ the public generator, including `.html` and `.htm` pages without modifying
8
+ HTML fragments.
9
+ - Restored one semantic `arcane.lock.json` contract across scaffold, init, and
10
+ installed runtime materialization, replacing stale versions with the exact
11
+ installed package version and npm-alias roots without byte or security
12
+ metadata.
13
+ - Added selected installed-package coverage for stale-lock replacement and the
14
+ public multi-document import-map command through the packed npm artifact.
15
+
16
+ ## 0.3.2
17
+
18
+ - Preserved complete application, document, model, message, event, process,
19
+ mail, and diagnostic content across the ordinary SDK runtime and tooling.
20
+ - Removed ordinary byte, hash, digest, receipt, provenance, exact-inventory,
21
+ truncation, clipping, freeze, and unapproved hardening gates while retaining
22
+ unavoidable transport framing and credential protection at their owners.
23
+ - Added the complete browser-WASM chat, speech, persistence, structural-tool,
24
+ source-example serving, descriptor, packaging, and application-test contracts
25
+ required by SDK consumers, with optional security remaining opt-in.
26
+ - Limited the npm package to consumer runtime, source, schema, CLI/tooling, and
27
+ required root metadata; examples, documentation, generated site output, and
28
+ tests remain repository-owned follow-up surfaces outside the published package.
29
+
3
30
  ## 0.3.1
4
31
 
5
32
  - Restored ordinary warn-first Browser Speech operation with explicit
package/README.md CHANGED
@@ -19,15 +19,15 @@ version-locked SDK runtime, while an integrated Arcane checkout uses its live
19
19
  `arcane/` runtime. Both profiles preserve the same app URLs, theme, packaging,
20
20
  event, cancellation, and browser run contracts.
21
21
 
22
- This checkout defines the `0.3.1` SDK contract. Applications pin one exact npm
23
- version and lockfile; registry state is deliberately not baked into immutable
24
- application artifacts.
22
+ This checkout defines the `0.3.3` SDK contract. Applications pin one exact npm
23
+ version and lockfile; registry state is deliberately not baked into application
24
+ artifacts.
25
25
 
26
26
  That registry query is a maintainer action, not an application behavior. Apps
27
27
  never poll npm for SDK updates or replace their own SDK or synchronized runtime.
28
28
  The app repository's exact dependency and lockfile select the SDK; changing that
29
- selection is an explicit repository update followed by the normal validation
30
- and release gates.
29
+ selection is an explicit repository update. Tests and checks run only when the
30
+ user expressly selects them, or when required for a selected release output.
31
31
 
32
32
  ## Developer API reference
33
33
 
@@ -47,14 +47,14 @@ Use `arcane-os/event-manager` as the primary instrumentation surface for new
47
47
  SDK code. Its shared `arcaneEvents` bus is powered by `event-pubsub`; SDK-owned
48
48
  operation queues already mirror their normalized events through it while
49
49
  preserving awaited delivery and cancellation. An opt-in `timeTravel` flag adds
50
- timestamped causal event stacks, bounded snapshots, export/import, seek and safe
51
- review playback. Attaching a DOM root records interactions and mutation records,
50
+ complete timestamped causal event stacks, export/import, seek and safe review
51
+ playback. Attaching a DOM root records interactions and mutation records,
52
52
  including supported open shadow roots. Source-stack capture is a separate,
53
53
  off-by-default diagnostic option.
54
54
 
55
- Recording is off by default. A session is complete until its configured event
56
- limit; reaching that limit appends an overflow marker and disables recording
57
- instead of silently evicting history. Review [the EventManager guide](docs/event-manager.md)
55
+ Recording is off by default. Once explicitly enabled, a session retains its
56
+ complete recorded content until the caller clears it or disables recording.
57
+ Review [the EventManager guide](docs/event-manager.md)
58
58
  before enabling DOM values, node content, event details, source stacks, or live
59
59
  event redispatch. Password targets, text-entry details, clipboard data, URL
60
60
  attributes, and common credential keys are excluded or redacted by default.
@@ -63,28 +63,21 @@ attributes, and common credential keys are excluded or redacted by default.
63
63
 
64
64
  The SDK repository is the canonical source for portable shared runtime modules,
65
65
  entities, components, themes, browser providers and workers, public contracts,
66
- and their packaged byte receipts. Portable applications consume those
66
+ and their packaged content. Portable applications consume those
67
67
  SDK-owned paths and never read an Arcane OS install or source checkout at
68
68
  runtime. Arcane OS is a consumer of this contract; its repository-side cutover
69
69
  is coordinated separately and cannot become a second source authority.
70
70
 
71
71
  The source-authority cutover is complete. `runtime/arcane/` is authored here,
72
- and its generated manifest authenticates the complete portable inventory. The
73
- old Arcane OS-to-SDK synchronization direction is retired and fails closed; it
74
- cannot overwrite SDK-canonical source. Regenerate the receipt only after an
75
- authorized SDK source change:
76
-
77
- ```bash
78
- node tools/runtime-manifest.mjs --write
79
- npm run check
80
- ```
72
+ and applications copy the complete portable inventory selected by the package.
73
+ The old Arcane OS-to-SDK synchronization direction is retired; it cannot
74
+ overwrite SDK-canonical source.
81
75
 
82
76
  `tools/runtime-source.json` declares the SDK authority and retains the prior
83
- Arcane OS commit only as legacy provenance for migrated compatibility bytes.
77
+ Arcane OS commit only as migration history.
84
78
  Arcane OS must consume the same locked SDK projection as other applications;
85
79
  any remaining OS-side duplicate is legacy consumer migration state, not source
86
- authority. The generated runtime manifest is the published content-addressed
87
- byte receipt.
80
+ authority.
88
81
 
89
82
  ## Browser-local AI
90
83
 
@@ -103,17 +96,18 @@ const source=createBrowserModelSource({
103
96
  });
104
97
  ```
105
98
 
106
- Expected `bytes` and `sha256` values are optional while the inherited app
107
- security policy leaves those checks disabled. Enabling either check requires
108
- that field on every member. The DBOPFS store admits all members in order and
109
- commits its completion manifest last. Capability reports evaluate each
99
+ Model members require only their names and URLs. The ordinary path does not
100
+ count, limit, hash, or identify model content by its byte representation.
101
+ Optional hardening is inactive unless the caller explicitly selects
102
+ `secure:true`. The DBOPFS store processes all members in order and commits its
103
+ completion record last. Capability reports evaluate each
110
104
  app-supplied model as `compatible`, `incompatible`, or `unknown`; the app can
111
105
  render that result without the SDK inventing or filtering its catalog.
112
106
 
113
107
  `arcane-os/ai/browser-speech` exposes independent Whisper STT and Kokoro TTS
114
108
  provider factories. The package contains the plain-JavaScript provider and
115
109
  Worker machinery, not speech runtimes, models, voices, or a CDN default. An app
116
- must supply each immutable runtime/model authority explicitly. Speech roles
110
+ must supply each runtime/model selection explicitly. Speech roles
117
111
  load, cancel, unload, fail, and recover independently, so speech failure never
118
112
  silently falls back or prevents text chat.
119
113
 
@@ -132,7 +126,7 @@ uses the same controller for automatic memory extraction.
132
126
  Create a new repository-shaped Arcane application with the exact stable SDK:
133
127
 
134
128
  ```bash
135
- npx arcane-os@0.3.1 new my-app --path ./my-app --target portable --git
129
+ npx arcane-os@0.3.3 new my-app --path ./my-app --target portable --git
136
130
  cd my-app
137
131
  npm install
138
132
  npm run check
@@ -143,7 +137,7 @@ To enroll an existing repository, install the exact SDK and initialize only
143
137
  missing Arcane files:
144
138
 
145
139
  ```bash
146
- npm install --save-dev --save-exact arcane-os@0.3.1
140
+ npm install --save-dev --save-exact arcane-os@0.3.3
147
141
  npm exec -- arcane init my-app --target portable
148
142
  ```
149
143
 
@@ -159,7 +153,7 @@ npm exec -- arcane-os targets
159
153
  No global SDK install or standalone Arcane CLI is required. The application
160
154
  repository's exact npm dependency and lockfile own the CLI and toolchain version.
161
155
 
162
- Use `npx arcane-os@0.3.1` for the initial bootstrap because it names this npm
156
+ Use `npx arcane-os@0.3.3` for the initial bootstrap because it names this npm
163
157
  package explicitly; bare `npx arcane` outside an installed project could resolve
164
158
  a different package. Both installed commands invoke the same headless toolchain.
165
159
  Project-local npm scripts use the SDK pinned by that app's `package-lock.json`,
@@ -180,18 +174,17 @@ node ./bin/arcane.mjs new local-app --path ../local-app --target portable --git
180
174
 
181
175
  # From the generated app repository
182
176
  cd ../local-app
183
- npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.3.1.tgz
177
+ npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.3.3.tgz
184
178
  npm run check
185
179
  npm ci
186
180
  ```
187
181
 
188
182
  Adjust the relative tarball path for your layout and keep that `.tgz` at the
189
- same location. npm records its integrity in `package-lock.json`, while Arcane
190
- still verifies the installed package name and exact version, the locked runtime
191
- identity, and the runtime bytes. Local directory `file:` dependencies are not
183
+ same location. The lockfile retains the selected package dependency while
184
+ Arcane uses the installed package name and version. Local directory `file:` dependencies are not
192
185
  accepted because npm may install them as links; use a packed `.tgz`. A GitHub
193
186
  runner also needs that tarball at the locked path. After publication, replace
194
- the local declaration with the exact `arcane-os@0.3.1` registry package and
187
+ the local declaration with the exact `arcane-os@0.3.3` registry package and
195
188
  commit the regenerated lock.
196
189
 
197
190
  Generated repositories use `npm ci --ignore-scripts` in CI. Run dependency
@@ -237,8 +230,9 @@ app-test behavior.
237
230
  Integrated native app builds are also implemented. `--workspace` and
238
231
  `--arcane-root` must resolve to the same Arcane checkout, one `--app` and one
239
232
  declared native target are selected, and `--output-root` must resolve outside
240
- that checkout. The SDK then uses the same package, plan, provider, retained
241
- verification, and same-process run lifecycle as an external app repository.
233
+ that checkout. The SDK then uses the same package, plan, provider, and
234
+ same-process run lifecycle as an external app repository. Verification remains
235
+ an explicit operation for a selected release output.
242
236
 
243
237
  ## Commands
244
238
 
@@ -246,6 +240,7 @@ verification, and same-process run lifecycle as an external app repository.
246
240
  arcane new <id> [--path <directory>] [--display-name <name>] [--target <target>] [--git]
247
241
  arcane init [id] [--workspace <directory>] [--display-name <name>] [--target <target>]
248
242
  arcane doctor [--workspace <directory>] [--arcane-root <directory>]
243
+ arcane import-map [--workspace <directory>] [--app <id>]
249
244
  arcane dev [--app <id>] [--host 127.0.0.1] [--port 8000]
250
245
  arcane test [--app <id>] [--scope app]
251
246
  arcane test --scope shared --test-file <repo-relative.test.mjs>
@@ -265,13 +260,13 @@ arcane repo status|pull|push
265
260
 
266
261
  All commands support `--output human|json|ndjson`. Machine modes keep stdout
267
262
  structured. Every operation emits or reports acceptance before filesystem,
268
- network, hashing, test, process, or service work begins.
263
+ network, explicitly requested test, process, or service work begins.
269
264
 
270
265
  ## External application release bundles
271
266
 
272
- An authored schema-2 `arcane-app.json` can be sealed with one already packaged
273
- and verified browser release. The bundle contains only the canonical descriptor,
274
- the release manifest, and the exact `dist/<id>/` payload inventory:
267
+ An authored schema-2 `arcane-app.json` can be bundled with one already packaged
268
+ browser release. The bundle contains only the canonical descriptor, the release
269
+ manifest, and the complete selected `dist/<id>/` payload inventory:
275
270
 
276
271
  ```bash
277
272
  npm exec -- arcane package --app my-app
@@ -280,55 +275,32 @@ npm exec -- arcane verify-bundle dist/my-app-1.0.0.arcane-app.tar.gz
280
275
  ```
281
276
 
282
277
  `bundle` creates `dist/<id>-<version>.arcane-app.tar.gz` by default. It refuses
283
- an existing destination unless `--overwrite` is explicit, preserves the prior
284
- file until the promoted replacement has passed no-follow, single-link,
285
- byte-length, and SHA-256 revalidation, and restores the prior file on
286
- cancellation or pre-commit failure only while both the promoted pathname and
287
- prior backup retain their respective full recorded identity tuples, each
288
- pinned by an open handle. If the promoted path is replaced or changed in
289
- place, it and the prior backup are preserved; if the backup is changed or
290
- missing, the valid promoted output is preserved instead of being deleted.
291
- Operation locks carry a random nonce
292
- and filesystem identity; a replaced lock is preserved and reported as degraded
293
- cleanup instead of being removed by pathname.
294
-
295
- The archive uses one byte-exact USTAR+gzip encoding and publishes its v1 JSON
296
- contract at `arcane-os/schemas/arcane-app-bundle.json`. Verification rejects
297
- links, devices, extension headers, unsafe or colliding paths, alternate gzip
298
- members, noncanonical metadata, trailing data, expansion bombs, and every
299
- descriptor, policy, inventory, size, or hash mismatch. The envelope adds no
300
- repository-only source or tooling beyond the exact authenticated release
301
- inventory; each app owns its leak/source policy, and Arcane's source-free runtime
302
- gates remain separate. Source controls, payloads, and bundle artifacts must remain single-link regular files at their exact
303
- recorded length through a final identity check; an appended byte, concurrent
304
- growth, path replacement, or hard link fails closed. NFC paths use defined
305
- UTF-8 byte ordering, covered by one pinned golden bundle digest on every
306
- supported Node/runner combination. This SDK accepts only the explicitly listed
307
- `0.3.1` bundle generation; structural validity does not imply cross-SDK
308
- compatibility, and a release with zero payload bytes cannot be created. Portable
309
- path validation rejects file/directory prefix conflicts, case-colliding prefix
310
- spellings, and Windows device aliases including superscript COM/LPT digits.
311
-
312
- Successful creation and verification return complete consistency metadata for
313
- the artifact digest/bytes, descriptor canonical/file/package digests and byte
314
- length, and release manifest/policy/content digests, file count, and payload
315
- bytes. Those values are consistency evidence for the exact archive, not
316
- installation authority.
317
-
318
- Internal hashes establish consistency, not permission to install. Arcane
319
- admission must also authenticate the archive through its approved repository
320
- provenance or independent signature and match that identity to an Arcane-owned
321
- authorization lock. The reusable `.github/workflows/release-app.yml` workflow
278
+ an existing destination unless `--overwrite` is explicit and preserves the
279
+ prior file until the replacement is complete. Cancellation or failure before
280
+ commit restores the prior output when that can be done without overwriting a
281
+ concurrent change. A conflicting or uncertain path is preserved for inspection.
282
+
283
+ The archive uses the documented USTAR+gzip structure and publishes its v1 JSON
284
+ contract at `arcane-os/schemas/arcane-app-bundle.json`. When the user explicitly
285
+ selects bundle verification, it rejects malformed archives, links, devices,
286
+ unsafe or colliding paths, unsupported archive members, trailing data, and
287
+ inconsistent descriptor or inventory structure. These checks reject corrupt
288
+ selected artifacts; they do not impose byte-count, hash, provenance, or
289
+ admission gates on ordinary development, packaging, serving, or running.
290
+ Portable path validation rejects file/directory prefix conflicts,
291
+ case-colliding prefix spellings, and Windows device aliases including
292
+ superscript COM/LPT digits.
293
+
294
+ The reusable `.github/workflows/release-app.yml` workflow
322
295
  builds one selected app in a `contents: read` job with no OIDC or attestation
323
296
  authority. An always-run fresh job downloads the uploaded artifact by immutable
324
- artifact id, checks out only the reusable workflow's exact SDK revision, uses
325
- supported Node 24, directly imports the trusted verifier, rechecks the selected
326
- app id and complete metadata, and becomes the sole source of reusable outputs.
297
+ artifact id, checks out only the reusable workflow's selected SDK revision, uses
298
+ supported Node 24, and checks the selected app id and complete inventory.
327
299
  When requested, a third job downloads that same artifact id, independently
328
300
  repeats those checks against the post-upload outputs, and alone receives narrow
329
301
  OIDC/attestation permissions. No package manager, dependency resolution, caller
330
302
  checkout, check, or adapter runs with that authority. An unattested uploaded
331
- artifact is still not an authorized Arcane app by itself.
303
+ artifact remains an ordinary build output.
332
304
 
333
305
  ## SDK test sets
334
306
 
@@ -350,15 +322,15 @@ package installation, or assertions.
350
322
 
351
323
  ## Current target support
352
324
 
353
- Version `0.3.1` exposes one browser target and five explicitly paired
354
- native development targets: a verified non-runnable portable directory, a
325
+ Version `0.3.3` exposes one browser target and five explicitly paired
326
+ native development targets: a non-runnable portable directory, a
355
327
  Windows x64 unsigned-local-test EXE bundle, Linux x64 and Linux ARM64
356
328
  unsigned-local-test DEBs, and an Android development-signed APK. The
357
329
  `android-arm64` APK is architecture-neutral because it contains no native ABI;
358
330
  the target name identifies its supported physical/native ARM64 run profile.
359
331
 
360
- Every native build requires an explicit Arcane OS checkout that passes this SDK
361
- version's admission checks and a canonical app descriptor that declares the
332
+ Every native build requires an explicit Arcane OS checkout compatible with this
333
+ SDK version and a canonical app descriptor that declares the
362
334
  exact selected target. The SDK never searches for or silently selects a mutable
363
335
  toolchain root. Scaffold a separate
364
336
  repository with the matching `--target`, or add and validate that target in the
@@ -395,17 +367,16 @@ The browser remains available from the same repository. A native command does
395
367
  not infer a missing descriptor target from `--target` and never substitutes a
396
368
  browser package.
397
369
 
398
- `native-prepare` is available as a standalone toolchain-integrity diagnostic.
399
- Do not run it immediately before `build`: receipts are process-owned, and the
400
- build command prepares and reuses its own exact toolchain state once.
370
+ `native-prepare` is available as a standalone toolchain diagnostic. Do not run
371
+ it automatically: the build command prepares the selected toolchain itself.
401
372
 
402
- The build authenticates the selected app release and descriptor, requires the
373
+ The build reads the selected app release and descriptor, requires the
403
374
  Core to meet the highest minimum declared by the SDK runtime, selected app, and
404
375
  bundled dependencies, keep their declared Arcane protocol, and provide every
405
376
  required feature, capability, and method. A Core reporting a higher version is
406
377
  accepted only when it passes those same current-SDK checks; this is not a promise
407
- that future SDK or Core releases will remain compatible. The build copies
408
- release bytes through verified readers. Portable emits an app-scoped
378
+ that future SDK or Core releases will remain compatible. The build copies the
379
+ complete selected release. Portable emits an app-scoped
409
380
  Arcane Core payload under `build/portable/`; that directory is not executable
410
381
  and `arcane run --target portable` is intentionally unavailable. Windows emits
411
382
  an app-scoped executable bundle under `build/windows-x64/`. Linux emits an
@@ -413,8 +384,9 @@ app-scoped amd64 DEB under `build/linux-x64/` or ARM64 DEB under
413
384
  `build/linux-arm64/`. Android emits one development-signed, architecture-neutral
414
385
  APK under `build/android-arm64/`; there is no native ABI payload, and its run
415
386
  path requires a physical device with native ARM64 support. Executable `run`
416
- performs package, prepare, plan, build, verify, launch, and owned cancellation
417
- in one process because native receipts are process-owned.
387
+ performs package, prepare, plan, build, launch, and owned cancellation in one
388
+ process. Verification occurs only when explicitly selected for that release
389
+ output.
418
390
 
419
391
  The Windows x64 and Linux x64 paths have been exercised end to end from
420
392
  independent external repositories. Windows compiled, verified, reached an
@@ -423,15 +395,13 @@ while a valid installed publisher-continuity pin remained present. Linux x64
423
395
  built and verified a real DEB and launched it under WSLg without installation
424
396
  or `sudo`.
425
397
 
426
- At Arcane source revision `4382043c09285ea203aa6daba1732660966ac409`, the
427
- official native ARM64 workflow built and retained-verified a 21,232,932-byte
428
- ARM64 DEB, proved AArch64 host, Core, and bridge binaries, reached WebKit
398
+ At the recorded Arcane source revision, the native ARM64 workflow built an
399
+ ARM64 DEB, exercised its AArch64 host, Core, and bridge, reached WebKit
429
400
  load-finished readiness, and drained its owned process group. The workflow kept
430
401
  Ubuntu's AppArmor user-namespace restriction enabled and loaded the packaged
431
- Bubblewrap profile. At revision `be6732ab71cbecb43d037aaad994ade5f2f4d1b6`,
432
- the hardened Android path passed build, retained verification, exact
433
- process/generation/nonce readiness, cancellation, uninstall, and absence checks
434
- on a physical ARM64/API 37 device. These are development results, not production
402
+ Bubblewrap profile. The recorded Android development path exercised build,
403
+ readiness, cancellation, uninstall, and absence behavior on a physical ARM64
404
+ device. These are development results, not production
435
405
  signing, store-publishing, release, or promotion evidence.
436
406
 
437
407
  | Capability | Ready now |
@@ -440,11 +410,11 @@ signing, store-publishing, release, or promotion evidence.
440
410
  | External proprietary-source repository workflow | Yes, subject to the distribution license below |
441
411
  | Integrated Arcane checkout workflow | Yes |
442
412
  | ArcaneOllama managed-service check | Yes on supported Windows hosts |
443
- | SDK native plan/provider/receipt boundary | Yes |
444
- | Portable app-scoped Core directory | Yes, with explicit `--arcane-root`; verified but not directly runnable |
413
+ | SDK native plan/provider boundary | Yes |
414
+ | Portable app-scoped Core directory | Yes, with explicit `--arcane-root`; not directly runnable |
445
415
  | Windows x64 EXE bundle | Yes, unsigned local development with explicit `--arcane-root` |
446
416
  | Linux x64 DEB | Yes, unsigned local development with explicit `--arcane-root` |
447
- | Linux ARM64 DEB | Yes, unsigned local development on a compatible native ARM64 toolchain with explicit `--arcane-root`; exact-SHA native build, verification, WebKit readiness, and cancellation evidence is recorded |
417
+ | Linux ARM64 DEB | Yes, unsigned local development on a compatible native ARM64 toolchain with explicit `--arcane-root`; native build, WebKit readiness, and cancellation evidence is recorded |
448
418
  | Android ARM64 APK | Yes, development-signed and architecture-neutral with explicit `--arcane-root`; a physical/native ARM64 device is required for run |
449
419
 
450
420
  Android supports APK only in this development profile. AAB, release signing,
@@ -456,15 +426,15 @@ release acceptance.
456
426
 
457
427
  See [docs/platform-targets.md](docs/platform-targets.md) for the matrix and
458
428
  [docs/architecture.md](docs/architecture.md) for the boundary. The exact
459
- minimum-version and required-contract admission rule is documented in
429
+ minimum-version and required-contract compatibility rule is documented in
460
430
  [docs/compatibility.md](docs/compatibility.md). The issue-ready
461
431
  extraction sequence is tracked in [docs/roadmap.md](docs/roadmap.md).
462
432
 
463
433
  ## Canonical app descriptor
464
434
 
465
435
  New apps own `apps/<id>/arcane-app.json` schema 2. It contains publisher,
466
- permissions, security, native presentation, Core requirements, and target
467
- intent, and deterministically projects the exact schema-1
436
+ optional permissions and security declarations, native presentation, optional
437
+ Core requirements, and target intent, and deterministically projects the schema-1
468
438
  `arcane-package.json` required by the current browser packager. The pinned
469
439
  schema-1 apps recognized by this SDK are accepted through a read-only projection
470
440
  of the current native registry until each app adopts the authored descriptor.
@@ -478,13 +448,12 @@ read-only managed-service assessment where the host supports one. Native apps
478
448
  use an app-scoped Arcane Core and `Arcane.localAI.status()` in this SDK version.
479
449
  Ollama is optional for packaging and non-AI applications.
480
450
 
481
- The loopback development server uses an unguessable session capability and a
482
- broad development-only content policy so the shared runtime can exercise remote
483
- providers, media, WebSockets, and embeds. It is not a production security
484
- boundary. Declared origins remain native policy input through the approved
485
- Arcane descriptor; enforcement for any additional target is roadmap scope, not
486
- a compatibility promise. Served files are verified into bounded response
487
- snapshots before headers; the current development limit is 64 MiB per file.
451
+ The loopback development server serves complete selected files and does not
452
+ apply byte-count or truncation gates. Optional hardening is inactive unless the
453
+ caller explicitly selects `secure:true`. Required credential protection,
454
+ malformed-request rejection, and unavoidable browser or operating-system safety
455
+ remain in effect. Declared origins remain native policy input only when the app
456
+ explicitly authors them.
488
457
 
489
458
  ## Licensing
490
459