arcane-os 0.1.0-dev.5

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 (248) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/COMMERCIAL-LICENSE.md +13 -0
  3. package/LICENSE +661 -0
  4. package/NOTICE +70 -0
  5. package/README.md +448 -0
  6. package/bin/arcane-test.mjs +741 -0
  7. package/bin/arcane.mjs +5 -0
  8. package/docs/architecture.md +234 -0
  9. package/docs/compatibility.md +36 -0
  10. package/docs/event-manager.md +166 -0
  11. package/docs/platform-targets.md +108 -0
  12. package/docs/publishing.md +203 -0
  13. package/docs/reference/README.md +117 -0
  14. package/docs/reference/arcane-ollama.md +288 -0
  15. package/docs/reference/availability-and-normalization.md +123 -0
  16. package/docs/reference/behavioral-testing.md +86 -0
  17. package/docs/reference/cli.md +569 -0
  18. package/docs/reference/core/README.md +62 -0
  19. package/docs/reference/core/arcane-ai-contracts.md +873 -0
  20. package/docs/reference/core/arcane-api.md +601 -0
  21. package/docs/reference/core/arcane-entities.md +65 -0
  22. package/docs/reference/core/arcane-events.md +134 -0
  23. package/docs/reference/core/ollama-module.md +181 -0
  24. package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +1909 -0
  25. package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +1057 -0
  26. package/docs/reference/core/reference/arcane-api/core-and-events.md +320 -0
  27. package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +610 -0
  28. package/docs/reference/core/reference/arcane-api/namespaces.md +1157 -0
  29. package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +1423 -0
  30. package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +315 -0
  31. package/docs/reference/event-manager.md +957 -0
  32. package/docs/reference/inventory/package-api.json +2632 -0
  33. package/docs/reference/inventory/runtime-components.json +934 -0
  34. package/docs/reference/inventory/runtime-entities.json +26 -0
  35. package/docs/reference/inventory/runtime-modules.json +1249 -0
  36. package/docs/reference/protocols.md +242 -0
  37. package/docs/reference/runtime-components.md +1098 -0
  38. package/docs/reference/runtime-entities.md +303 -0
  39. package/docs/reference/runtime-modules.md +2010 -0
  40. package/docs/reference/sdk-api.md +4901 -0
  41. package/docs/roadmap.md +79 -0
  42. package/docs/work-amplification.md +124 -0
  43. package/node_modules/event-pubsub/CHANGELOG.md +55 -0
  44. package/node_modules/event-pubsub/MIGRATION.md +70 -0
  45. package/node_modules/event-pubsub/README.md +363 -0
  46. package/node_modules/event-pubsub/SECURITY.md +37 -0
  47. package/node_modules/event-pubsub/index.js +141 -0
  48. package/node_modules/event-pubsub/licence +21 -0
  49. package/node_modules/event-pubsub/package.json +59 -0
  50. package/node_modules/strong-type/README.md +408 -0
  51. package/node_modules/strong-type/assets/strong-type-header.png +0 -0
  52. package/node_modules/strong-type/index.js +1151 -0
  53. package/node_modules/strong-type/licence +21 -0
  54. package/node_modules/strong-type/node.js +125 -0
  55. package/node_modules/strong-type/package.json +61 -0
  56. package/package.json +95 -0
  57. package/runtime/ARCANE_RUNTIME_RELEASE.json +791 -0
  58. package/runtime/arcane/components/app-bar.html +468 -0
  59. package/runtime/arcane/components/assistant-panel.html +715 -0
  60. package/runtime/arcane/components/calculator.html +8 -0
  61. package/runtime/arcane/components/chart.html +655 -0
  62. package/runtime/arcane/components/chat.html +1225 -0
  63. package/runtime/arcane/components/conversation-view.html +13 -0
  64. package/runtime/arcane/components/dashboard-config.html +341 -0
  65. package/runtime/arcane/components/data-maintenance.html +112 -0
  66. package/runtime/arcane/components/data-view.html +92 -0
  67. package/runtime/arcane/components/directory-picker.html +197 -0
  68. package/runtime/arcane/components/document-inspector.html +252 -0
  69. package/runtime/arcane/components/file-drop.html +264 -0
  70. package/runtime/arcane/components/file-inspector.html +293 -0
  71. package/runtime/arcane/components/file-manager.html +1715 -0
  72. package/runtime/arcane/components/header.html +142 -0
  73. package/runtime/arcane/components/integration-settings.html +14 -0
  74. package/runtime/arcane/components/local-ai-status.html +360 -0
  75. package/runtime/arcane/components/markdown-document.html +1048 -0
  76. package/runtime/arcane/components/markdown-editor.html +360 -0
  77. package/runtime/arcane/components/media-embed.html +8 -0
  78. package/runtime/arcane/components/modal.html +402 -0
  79. package/runtime/arcane/components/output-panel.html +259 -0
  80. package/runtime/arcane/components/preferences-form.html +135 -0
  81. package/runtime/arcane/components/record-timeline.html +105 -0
  82. package/runtime/arcane/components/relationship-board.html +116 -0
  83. package/runtime/arcane/components/screen-capture.html +8 -0
  84. package/runtime/arcane/components/source-code-viewer.html +441 -0
  85. package/runtime/arcane/components/source-explanation.html +124 -0
  86. package/runtime/arcane/components/speech.html +365 -0
  87. package/runtime/arcane/components/summary-strip.html +177 -0
  88. package/runtime/arcane/components/table.html +77 -0
  89. package/runtime/arcane/components/task-progress.html +282 -0
  90. package/runtime/arcane/components/terminal-workspace.html +65 -0
  91. package/runtime/arcane/components/theme-editor.html +41 -0
  92. package/runtime/arcane/components/theme-switcher.html +46 -0
  93. package/runtime/arcane/components/unified-inbox.html +20 -0
  94. package/runtime/arcane/components/voice-transcription.html +476 -0
  95. package/runtime/arcane/components/weather-widget.html +8 -0
  96. package/runtime/arcane/components/web-navigator.html +239 -0
  97. package/runtime/arcane/css/communications.css +1 -0
  98. package/runtime/arcane/css/dashboard-config.css +45 -0
  99. package/runtime/arcane/css/document-site.css +981 -0
  100. package/runtime/arcane/css/layout.css +438 -0
  101. package/runtime/arcane/css/primitives.css +321 -0
  102. package/runtime/arcane/css/theme.css +112 -0
  103. package/runtime/arcane/css/utility-workspace.css +1 -0
  104. package/runtime/arcane/entities/ApiModelRecord.js +20 -0
  105. package/runtime/arcane/entities/Calculation.js +13 -0
  106. package/runtime/arcane/entities/Chat.js +581 -0
  107. package/runtime/arcane/entities/CommunicationMessage.js +29 -0
  108. package/runtime/arcane/entities/CommunicationThread.js +21 -0
  109. package/runtime/arcane/entities/Document.js +10 -0
  110. package/runtime/arcane/entities/File.js +143 -0
  111. package/runtime/arcane/entities/Image.js +135 -0
  112. package/runtime/arcane/entities/IntentEnvelope.js +834 -0
  113. package/runtime/arcane/entities/Preference.js +83 -0
  114. package/runtime/arcane/entities/TWiNPolicyDecision.js +1092 -0
  115. package/runtime/arcane/entities/TerminalSession.js +46 -0
  116. package/runtime/arcane/entities/Theme.js +107 -0
  117. package/runtime/arcane/entities/User.js +1046 -0
  118. package/runtime/arcane/entities/Weather.js +23 -0
  119. package/runtime/arcane/img/arcane-os-everywhere.png +0 -0
  120. package/runtime/arcane/img/arrow-left.png +0 -0
  121. package/runtime/arcane/img/arrow-right.png +0 -0
  122. package/runtime/arcane/img/doc.svg +5 -0
  123. package/runtime/arcane/img/folder.svg +4 -0
  124. package/runtime/arcane/img/image.svg +5 -0
  125. package/runtime/arcane/img/refresh.png +0 -0
  126. package/runtime/arcane/img/send.svg +9 -0
  127. package/runtime/arcane/img/trash.svg +5 -0
  128. package/runtime/arcane/img/upload.svg +5 -0
  129. package/runtime/arcane/modules/AI.js +2048 -0
  130. package/runtime/arcane/modules/AIPreferenceRuntime.js +32 -0
  131. package/runtime/arcane/modules/AIPreferenceTuple.js +92 -0
  132. package/runtime/arcane/modules/AIResponseLength.js +42 -0
  133. package/runtime/arcane/modules/AIResponseURLPolicy.js +626 -0
  134. package/runtime/arcane/modules/AnsiText.js +53 -0
  135. package/runtime/arcane/modules/ApiModelDatabase.js +25 -0
  136. package/runtime/arcane/modules/AppDataScope.js +245 -0
  137. package/runtime/arcane/modules/AppearancePreferences.js +28 -0
  138. package/runtime/arcane/modules/ArcaneCommunicationBridge.js +22 -0
  139. package/runtime/arcane/modules/ArcaneNavigationPolicy.js +135 -0
  140. package/runtime/arcane/modules/ArcaneNetworkPolicy.js +255 -0
  141. package/runtime/arcane/modules/AsyncBoundary.js +161 -0
  142. package/runtime/arcane/modules/BrowserTestSuite.js +326 -0
  143. package/runtime/arcane/modules/CalculatorEngine.js +20 -0
  144. package/runtime/arcane/modules/CaseEvidenceIndexer.js +134 -0
  145. package/runtime/arcane/modules/ChartLibrary.js +35 -0
  146. package/runtime/arcane/modules/ChatRecords.js +13 -0
  147. package/runtime/arcane/modules/CommunicationAppController.js +43 -0
  148. package/runtime/arcane/modules/CommunicationHub.js +16 -0
  149. package/runtime/arcane/modules/CommunicationPreferences.js +13 -0
  150. package/runtime/arcane/modules/CommunicationProviderRegistry.js +16 -0
  151. package/runtime/arcane/modules/ComponentContracts.js +586 -0
  152. package/runtime/arcane/modules/ConfiguredAIChatSession.js +288 -0
  153. package/runtime/arcane/modules/ConversationActionItems.js +488 -0
  154. package/runtime/arcane/modules/ConversationClosingReport.js +274 -0
  155. package/runtime/arcane/modules/ConversationTimebox.js +527 -0
  156. package/runtime/arcane/modules/CoreLocalModelCatalog.js +255 -0
  157. package/runtime/arcane/modules/DBLS.js +171 -0
  158. package/runtime/arcane/modules/DBOPFS.js +1154 -0
  159. package/runtime/arcane/modules/DBOPFSWorker.js +116 -0
  160. package/runtime/arcane/modules/DataMaintenance.js +91 -0
  161. package/runtime/arcane/modules/DevelopmentWorkspace.js +74 -0
  162. package/runtime/arcane/modules/DirectoryPicker.js +109 -0
  163. package/runtime/arcane/modules/DocumentNavigation.js +223 -0
  164. package/runtime/arcane/modules/Errors.js +1025 -0
  165. package/runtime/arcane/modules/GifEncoder.js +29 -0
  166. package/runtime/arcane/modules/HTMLImport.js +114 -0
  167. package/runtime/arcane/modules/InMemoryCommunicationProvider.js +14 -0
  168. package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +275 -0
  169. package/runtime/arcane/modules/LocalAIReadiness.js +870 -0
  170. package/runtime/arcane/modules/LocalAIReadinessController.js +156 -0
  171. package/runtime/arcane/modules/MD.js +111 -0
  172. package/runtime/arcane/modules/Mail.js +352 -0
  173. package/runtime/arcane/modules/MailTransport.mjs +180 -0
  174. package/runtime/arcane/modules/Marked.min.js +71 -0
  175. package/runtime/arcane/modules/MemoryRecords.js +44 -0
  176. package/runtime/arcane/modules/MessageAdvisory.js +38 -0
  177. package/runtime/arcane/modules/ModelDefinition.js +189 -0
  178. package/runtime/arcane/modules/Ollama.js +74 -0
  179. package/runtime/arcane/modules/OllamaModelIdentifier.js +21 -0
  180. package/runtime/arcane/modules/OllamaSettings.js +24 -0
  181. package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +14 -0
  182. package/runtime/arcane/modules/PreferenceStore.js +109 -0
  183. package/runtime/arcane/modules/QRCode.min.js +1 -0
  184. package/runtime/arcane/modules/Questionnaire.js +61 -0
  185. package/runtime/arcane/modules/RecordLinkIndex.js +24 -0
  186. package/runtime/arcane/modules/RecordPassageIndex.js +222 -0
  187. package/runtime/arcane/modules/RecordReviewStore.js +94 -0
  188. package/runtime/arcane/modules/RevocableProjectionLedger.js +1623 -0
  189. package/runtime/arcane/modules/RiskSignalAnalyzer.js +37 -0
  190. package/runtime/arcane/modules/ScamRiskPolicy.js +62 -0
  191. package/runtime/arcane/modules/ScopedOPFSCache.js +183 -0
  192. package/runtime/arcane/modules/ScreenCapture.js +20 -0
  193. package/runtime/arcane/modules/SpeechPlayback.js +581 -0
  194. package/runtime/arcane/modules/StaticDocumentCatalog.js +1248 -0
  195. package/runtime/arcane/modules/SystemAppearance.js +20 -0
  196. package/runtime/arcane/modules/SystemPlatformPresentation.js +51 -0
  197. package/runtime/arcane/modules/SystemToolRegistry.js +28 -0
  198. package/runtime/arcane/modules/TerminalClient.js +52 -0
  199. package/runtime/arcane/modules/TerminalCommandRegistry.js +50 -0
  200. package/runtime/arcane/modules/ThemeBootstrap.js +26 -0
  201. package/runtime/arcane/modules/ThemeManager.js +131 -0
  202. package/runtime/arcane/modules/TimeGuard.js +149 -0
  203. package/runtime/arcane/modules/ToolCallRouter.js +83 -0
  204. package/runtime/arcane/modules/WaitForComponent.js +102 -0
  205. package/runtime/arcane/modules/YouTubeMedia.js +16 -0
  206. package/runtime/arcane/modules/uPlot.LICENSE.txt +21 -0
  207. package/runtime/arcane/modules/uPlot.iife.min.js +2 -0
  208. package/runtime/arcane/modules/uPlot.min.css +1 -0
  209. package/runtime/arcane/security/arcane-network-policy.json +6 -0
  210. package/runtime/strong-type/index.js +352 -0
  211. package/runtime/strong-type/licence +21 -0
  212. package/runtime/strong-type/package.json +45 -0
  213. package/schemas/arcane-app-bundle.schema.json +125 -0
  214. package/schemas/arcane-app.schema.json +329 -0
  215. package/schemas/arcane-lock.schema.json +86 -0
  216. package/schemas/arcane-package.schema.json +224 -0
  217. package/schemas/cli-event.schema.json +122 -0
  218. package/schemas/event-stack.schema.json +152 -0
  219. package/schemas/native-build-plan.schema.json +176 -0
  220. package/schemas/target-adapter.schema.json +117 -0
  221. package/src/app-descriptor.mjs +500 -0
  222. package/src/cli/main.mjs +561 -0
  223. package/src/constants.mjs +31 -0
  224. package/src/dev-server.mjs +718 -0
  225. package/src/doctor.mjs +315 -0
  226. package/src/dom-event-instrumentation.mjs +594 -0
  227. package/src/errors.mjs +75 -0
  228. package/src/event-manager.mjs +1342 -0
  229. package/src/event-queue.mjs +138 -0
  230. package/src/events.mjs +219 -0
  231. package/src/index.mjs +177 -0
  232. package/src/integrated-provider-loader.mjs +432 -0
  233. package/src/native-plan.mjs +698 -0
  234. package/src/native-provider-loader.mjs +1126 -0
  235. package/src/packager/core.mjs +2691 -0
  236. package/src/process.mjs +353 -0
  237. package/src/release-bundle.mjs +2523 -0
  238. package/src/repository.mjs +90 -0
  239. package/src/runtime.mjs +452 -0
  240. package/src/scaffold.mjs +380 -0
  241. package/src/targets/index.mjs +436 -0
  242. package/src/templates/assets/app-icon.png +0 -0
  243. package/src/templates/workspace-template.mjs +388 -0
  244. package/src/testing-loader.mjs +9 -0
  245. package/src/testing.mjs +427 -0
  246. package/src/toolchain.mjs +1335 -0
  247. package/src/update-check.mjs +307 -0
  248. package/src/workspace.mjs +449 -0
@@ -0,0 +1,79 @@
1
+ # Development roadmap
2
+
3
+ The SDK contract keeps target names and operations stable while each current
4
+ development provider gathers its remaining promotion evidence. Each item below
5
+ is small enough to become a GitHub issue without combining every platform into
6
+ one unbounded build.
7
+
8
+ ## Publication prerequisites
9
+
10
+ - Mark the Arcane OS monorepo root package private or give it an internal-only
11
+ package name before the first `arcane-os` publication.
12
+ - Decide and document the license that permits proprietary applications to
13
+ bundle the synchronized Arcane runtime.
14
+ - Publish one fresh, never-reused prerelease candidate under only the npm `dev`
15
+ tag, verify the tarball and
16
+ provenance, add a second appropriate npm owner, and configure the exact
17
+ trusted-publisher workflow.
18
+
19
+ ## App admission and native extraction
20
+
21
+ - Keep the implemented process-local `arcane-native-build-plan/1` and
22
+ `arcane-native-builder/1` lifecycle as the single provider seam for the CLI,
23
+ GUI, CI, and Codex. Portable, Windows x64, Linux x64, Linux ARM64, and Android
24
+ ARM64 pair only through an explicit compatible Arcane root and a matching
25
+ canonical scaffold descriptor.
26
+ - Migrate built-in apps from the implemented schema-2 `arcane-app.json`
27
+ descriptor fallback to authored descriptors without changing exact v1 release
28
+ or native-host artifacts.
29
+ - Update Arcane's exact-key consumers to project the new descriptor into the
30
+ current catalog while preserving v1 app-release admission during migration.
31
+ - Preserve the implemented portable, Windows x64, Linux x64, Linux ARM64, and
32
+ Android ARM64 providers as one selected app plus its exact declared dependency
33
+ closure. Add new providers without weakening that release-reader boundary.
34
+ - Extend the implemented same-process retained receipt lifecycle through an
35
+ authenticated Arcane host broker only when persistent cross-process reuse or
36
+ restartable app-scoped Core sessions are required.
37
+ - Preserve exact packaged-artifact authority across browser and native plan,
38
+ verify, and run boundaries; never regress to treating a mutable path or
39
+ manifest file as a reusable receipt.
40
+ - Add a manifest-declared origin policy for native enforcement and an optional
41
+ policy-faithful development mode. The current capability-gated loopback host
42
+ deliberately uses a broad development-only policy so the shared runtime can
43
+ exercise remote providers, media, WebSockets, and embeds.
44
+
45
+ ## Platform adapters
46
+
47
+ - `portable`: keep the available verified app-scoped Core directory reproducible
48
+ from an external packed-SDK install and an explicit compatible Arcane checkout;
49
+ do not present it as an executable or direct-run target.
50
+ - `windows-x64`: keep the implemented retained toolchain broker, EXE bundle,
51
+ authenticated host-readiness signal, and owned same-process cancellation
52
+ reproducible. Production signing and installation remain separate work.
53
+ - `linux-x64`: keep the implemented single-app WebKitGTK host, verified amd64
54
+ DEB, user-owned extraction, and same-process cancellation reproducible. Add
55
+ AppImage and RPM only as distinct later format requests.
56
+ - `linux-arm64`: keep the implemented unsigned-local-test ARM64 DEB provider,
57
+ focused provider tests, and exact-SHA native build/verification/readiness/
58
+ cancellation workflow reproducible on a compatible native ARM64 toolchain.
59
+ Keep AppImage, RPM, and production signing as separate future requests.
60
+ - `android-arm64`: keep the implemented single-app, development-signed APK path
61
+ and exact-SHA physical/native ARM64 build/readiness/cleanup evidence
62
+ reproducible. The APK contains no native ABI and is architecture-neutral. Add
63
+ AAB, release signing, store publishing, and update continuity only as explicit
64
+ later promotion work.
65
+
66
+ ## Developer experience
67
+
68
+ - Keep the integrated shared/Core profile explicit through `--scope shared`:
69
+ one exact repository-relative focused test or Arcane's one canonical
70
+ development check, never app discovery or an arbitrary package-script loop.
71
+ - Add the Arcane Developer control panel as a client of the same operation API;
72
+ it stores local repository paths per user and never becomes a second builder.
73
+ - Add authenticated GitHub artifact admission so Arcane OS installs verified
74
+ releases without cloning proprietary source.
75
+ - Preserve the implemented integrated app-scoped native path: `--workspace` and
76
+ `--arcane-root` identify the same checkout, one app and one target are
77
+ selected, and `--output-root` remains outside the checkout. Future GUI clients
78
+ must use that path rather than introducing a second builder or an implicit
79
+ all-target build.
@@ -0,0 +1,124 @@
1
+ # Work-amplification review
2
+
3
+ The default cardinality is:
4
+
5
+ ```text
6
+ 1 workspace x 1 app x 1 command x 1 target x 1 architecture x 1 format x 1 signing profile
7
+ ```
8
+
9
+ There is no implicit all-app, all-target, or Android-flavor loop.
10
+ Selecting `android-arm64` produces exactly one architecture-neutral APK with no
11
+ native ABI fan-out. It does not build one artifact per ABI, an AAB, a release
12
+ signing variant, or a publication/update artifact. Every native invocation also
13
+ selects one explicit compatible `--arcane-root` and one app descriptor that
14
+ already declares that target; a target list never causes provider discovery or
15
+ additional builds.
16
+
17
+ The SDK repository test cardinality is:
18
+
19
+ ```text
20
+ 1 repository x 4 named sets x each assigned test file exactly once
21
+ ```
22
+
23
+ Unit, functional, integration, and regression scripts form one validated,
24
+ non-overlapping inventory. The complete command adds three lightweight set
25
+ coordinator launches compared with the former single discovery pass, but it
26
+ does not repeat a test file, assertion, package installation, provider scan,
27
+ build, or fixture. Smaller nested `vanilla-test` cases reuse their parent
28
+ file's already-owned setup and cleanup boundary.
29
+
30
+ Shared/Core development has a separate integrated-only cardinality:
31
+
32
+ ```text
33
+ 1 integrated workspace x 1 fixed provider generation x 1 operation x 1 owned process tree
34
+ ```
35
+
36
+ The focused-test operation selects exactly one repository-relative
37
+ `.test.mjs`; the development-check operation selects only Arcane's canonical
38
+ check. The 14,465-byte provider is read and hashed once for the process
39
+ generation, then its unchanged filesystem identity is checked without rereading
40
+ or rehashing its bytes around import and execution. Preparation reads Arcane's
41
+ 10,270-byte package manifest once and launches one owned process tree. A focused
42
+ fixture completed in about 0.14 seconds on the development laptop; the canonical
43
+ check owns its nested npm/test process tree and intentionally costs the complete
44
+ Arcane development gate. Within one SDK process, one checkout admits only one
45
+ such process tree at a time, so concurrent requests fail busy instead of
46
+ multiplying that gate. Shared scope has no app, package, target, architecture,
47
+ format, or signing loop and does not produce app output.
48
+
49
+ ## Cold-path budget
50
+
51
+ - Scaffold: approximately 15-25 files, less than 100 KiB, target under one
52
+ second before an optional dependency installation.
53
+ - Shared browser payload: 158 files / 3,359,960 bytes, comprising the exact
54
+ 155-file / 3,320,994-byte dev.4 runtime receipt plus three SDK licensing files
55
+ / 38,966 bytes, verified once per exact SDK installation state.
56
+ - Small browser package: app bytes plus the shared runtime, copied and inventoried
57
+ once into an atomic staging directory.
58
+ - Portable build: one explicitly selected app and one host platform request. In
59
+ a fresh packed-SDK external-repository run on Windows, the SDK's Arcane 0.8.11
60
+ runtime produced a 153-file, 3,236,727-byte selected release against the newer
61
+ compatible Arcane 0.8.12 toolchain. The verified portable result contained
62
+ 160 files and 4,570,320 bytes. The complete pack, install, Ollama doctor, app
63
+ check, toolchain preparation, build, and verification sequence completed in
64
+ approximately 9.2 seconds. This is development evidence, not a cross-machine
65
+ performance guarantee.
66
+ - Shared native closure packaging: one retained shared-payload snapshot reads
67
+ and hashes the current manifest-bound runtime and licensing inventory once. A
68
+ two-app closure reuses that snapshot instead of repeating those source reads
69
+ for each app; each distinct app release still writes and inventories its own
70
+ output once.
71
+ - Windows x64 executable: one cold development request retained 2,530 toolchain
72
+ files / 218,292,008 bytes once, compiled one 22-file / 60,488,912-byte
73
+ external artifact, reused its verified receipt, reached authenticated host
74
+ readiness, and cancelled the owned process tree in 11.8 seconds. The selected
75
+ app release contained seven files, each read once.
76
+ - Linux x64 executable: one WSL development request produced one 23,577,108-byte
77
+ amd64 DEB with 328 verified installed files / 82,783,539 uncompressed bytes.
78
+ Toolchain preparation took 7.1 seconds, build plus verification took 15.7
79
+ seconds, repeat verification reused the identical receipt in 0 ms, and the
80
+ WSLg host ran for eight seconds before owned cancellation.
81
+ - Linux ARM64 executable: exact-SHA workflow run `31842361832` authenticated one
82
+ seven-file / 5,143-byte release with seven provider reads and two retained
83
+ browser-runtime source reads, each exactly once. It retained 2,461 toolchain
84
+ files / 113,959,126 bytes, compiled a 149,720-byte AArch64 host and 71,240-byte
85
+ AArch64 bridge, and built one retained-verified 21,232,932-byte ARM64 DEB.
86
+ Preparation took 6,304 ms, build 16,868 ms, verification 447 ms, WebKit
87
+ readiness 1,972 ms, and the complete build/readiness/cancellation lifecycle
88
+ 25,625 ms. The owned leader and process group were live at readiness and
89
+ absent after cancellation. The workflow kept Ubuntu's AppArmor
90
+ user-namespace restriction enabled while loading the packaged Bubblewrap
91
+ profile. This is development evidence for source revision
92
+ `4382043c09285ea203aa6daba1732660966ac409`, not Linux signing, installation,
93
+ release, or promotion evidence.
94
+ - Android ARM64 application: one exact-SHA development request authenticated a
95
+ five-file / 611-byte synthetic external release with five release reads,
96
+ prepared one retained offline Gradle/toolchain closure in 159.4 seconds,
97
+ built one 1,438,324-byte APK in 69.9 seconds, reused verification evidence in
98
+ 3 ms, and reached exact process/generation/nonce-bound content-and-bridge
99
+ readiness on a physical ARM64/API 37 device in 4.5 seconds. The APK contained
100
+ 64 ZIP entries and zero native ABI entries. The 234.2-second total also proved
101
+ owned cancellation, force-stop, uninstall, and post-run package absence. This
102
+ is development evidence for source revision `be6732ab71cbecb43d037aaad994ade5f2f4d1b6`,
103
+ not Android release, store, update, or promotion evidence.
104
+
105
+ Invariant work includes SDK/runtime resolution and each selected provider
106
+ generation, snapshotted once per prepared toolchain state. The portable
107
+ provider's 20 required Arcane toolchain inputs remain one such snapshot. App
108
+ source validation, tests, and release inventory are identity-bound once per app
109
+ state. Portable assembly, Windows/Linux compilation, and Android APK assembly
110
+ and development signing are identity-bound once per requested target. Final
111
+ artifact verification authenticates and reuses the retained receipt instead of
112
+ repeating toolchain preparation or final inventory work. Compatible file
113
+ traversal is batched with bounded sequential streaming.
114
+
115
+ Runtime verification binds version, source identity, inventory, and hashes. The
116
+ schema-1 app-release manifest binds its packaged inventory and content digest.
117
+ Because an ordinary filesystem tree can change after a process-local receipt is
118
+ issued, the browser consumer performs one bounded read/hash/post-identity check
119
+ for the exact response bytes before headers. That creates the response's
120
+ immutable state; it is not a second package-inventory pass. At most four files
121
+ of 64 MiB each can be active, and additional requests wait in a bounded queue.
122
+ Future reusable cross-process receipts must additionally bind and retain the
123
+ canonical location, filesystem identity, policy, toolchain, platform,
124
+ architecture, signer, and generation, and must be invalidated before mutation.
@@ -0,0 +1,55 @@
1
+ # Changelog
2
+
3
+ ## 6.1.0 — 2026-08-21
4
+
5
+ Published to npm as the current registry release from the verified `main` source. No separate 6.1.0 GitHub tag or release was created.
6
+
7
+ - Added direct CommonJS `require('event-pubsub')` support while keeping one native ESM implementation for both module systems.
8
+
9
+ - Restored `strong-type` 2.0.0 as the sole production dependency and preserved the original package-shaped `../strong-type/index.js` Node/browser shim.
10
+ - Kept wildcard and typed registrations together in one null-prototype registry, with the real wildcard stored under `Symbol.for('event-pubsub-all')`.
11
+ - Moved one-shot state from user functions into per-registration `{handler, once}` records and removed each one-shot registration before invocation.
12
+ - Restored delegated public validation; invalid-input `TypeError` messages can differ from the direct checks in 6.0.0.
13
+ - Restored live-array dispatch behavior while making duplicate removal linear and registry reset constant-time.
14
+ - Set the production and development floor to Node.js 22.12.0, where synchronous ESM can be loaded directly through `require()` without a duplicate build.
15
+ - Expanded the shared Node/Chrome inventory to 119 cases, including mixed once/persistent handlers, live mutation, strict wildcard removal, stale cleanup, and throwing-handler regressions.
16
+ - Kept `copyfiles` out of the runtime and development dependency trees.
17
+
18
+ ## 6.0.0 — 2026-08-21
19
+
20
+ Published as the GitHub source release after complete `main` verification. At that milestone npm latest remained 5.0.3; 6.1.0 later became the registry release.
21
+
22
+ ### Runtime
23
+
24
+ - Rebuilt the event registry and hot dispatch paths for modern Node.js and browsers.
25
+ - Preserved wildcard-first synchronous execution and fluent public methods.
26
+ - Removed one-shot metadata mutation from user-provided functions.
27
+ - Removed one-shot records before invocation for reentrant and throwing-handler safety.
28
+ - Deferred handlers added during dispatch and skipped handlers removed before their turn.
29
+ - Regression-tested the existing fluent `emit` return contract, including wildcard-only and missing-type dispatch.
30
+ - Made `list` return isolated handler-array snapshots.
31
+ - Made prototype-like event names safe.
32
+ - Removed the runtime dependency and replaced delegated hot-path validation with direct native checks.
33
+
34
+ ### Verification
35
+
36
+ - Replaced duplicated legacy tests with one shared 110-case registry.
37
+ - Split verification into Unit (16), Functional (26), Integration (14), Regression (34), and Interface (20) suites.
38
+ - Updated to exact `vanilla-test` 2.1.1.
39
+ - Added independent Node and real-Chrome native V8 coverage with 100% per-runtime gates.
40
+ - Added a packed npm consumer smoke test.
41
+ - Added eight fixed-count hot-path benchmarks with execution-only timing boundaries, nanoseconds-per-operation summaries, raw samples, and machine-readable schema v2 results.
42
+ - Added a Node 22.12/24, Ubuntu/macOS/Windows CI matrix.
43
+
44
+ ### Documentation
45
+
46
+ - Added a focused 21-page GitHub Pages site, robust event-console and mutation-scenario playgrounds, live shared-suite runner, coverage reports, latency charts, migration guide, and security policy.
47
+ - Migrated the repository default branch from `master` to `main` while preserving the legacy branch.
48
+ - Removed stale committed c8 output and legacy copy-based test emulation.
49
+ - Removed `c8`, `copyfiles`, and the test-only static server from development dependencies.
50
+
51
+ ## 5.0.3 — 2020-11-26
52
+
53
+ - Published the prior 5.x npm package with ESM Node/browser examples and the original vanilla-test checks.
54
+
55
+ Earlier release lines remain available in Git tags and historical branches.
@@ -0,0 +1,70 @@
1
+ # Migrating from event-pubsub 5.x to 6.x
2
+
3
+ Version 6 preserves the public method names and synchronous wildcard-first model while formalizing previously inconsistent edge behavior. The 6.1.0 npm release restores the original delegated validation and package layout while adding shared-source CommonJS consumption.
4
+
5
+ ## Requirements
6
+
7
+ - Use Node.js 22.12.0 or newer for production and repository development.
8
+ - Install the current 6.x package from your configured registry:
9
+
10
+ ```sh
11
+ npm install event-pubsub@6
12
+ ```
13
+
14
+ - Continue importing the default or named ESM export, or require the same source directly from CommonJS:
15
+
16
+ ```js
17
+ import EventPubSub, {EventPubSub as NamedEventPubSub} from 'event-pubsub';
18
+ ```
19
+
20
+ ```js
21
+ const EventPubSub = require('event-pubsub');
22
+ ```
23
+
24
+ ### Package layout
25
+
26
+ The package keeps its historical ESM entry at `event-pubsub/index.js` without a restrictive export map. Applications should normally import `event-pubsub`; repository-only paths are not part of the supported API.
27
+
28
+ ## Behavior to review
29
+
30
+ ### `emit` remains fluent
31
+
32
+ `emit(type, ...payload)` continues to return the current instance, including when no typed subscriber exists. Version 6 adds regression coverage for this established contract; no migration is required.
33
+
34
+ ### One-shot state is internal
35
+
36
+ Version 5 wrote `Symbol.for('event-pubsub-once')` onto handler functions. Version 6.1.0 stores one-shot state in internal `{handler, once}` registration records, so frozen and nonextensible functions work. Code that inspected or changed that undocumented symbol must stop doing so.
37
+
38
+ ### One-shot removal happens before invocation
39
+
40
+ A one-shot subscriber cannot run again through a reentrant emit. It also stays removed if it throws.
41
+
42
+ ### Validation is delegated again
43
+
44
+ Public argument checks again come from `strong-type` 2.0.0. Invalid inputs still throw `TypeError`, but applications must not depend on the exact error text introduced by the direct checks in the 6.0.0 source release.
45
+
46
+ ### Dispatch remains live
47
+
48
+ - A subscriber appended to the active array can run in the same emit.
49
+ - A specifically removed subscriber does not run if its turn has not arrived. Removing a whole bucket detaches it from future lookup while an already-active array finishes.
50
+ - `reset()` replaces the registry, but an array already being dispatched continues. If reset happens in the wildcard phase, the old typed bucket is not looked up afterward.
51
+
52
+ ### `list` is an isolated snapshot
53
+
54
+ Each `list` access creates a null-prototype object with copied handler arrays. Mutating or deleting snapshot values no longer mutates the live registry. Use `Object.hasOwn(snapshot, type)` instead of calling `snapshot.hasOwnProperty(...)`. The wildcard entry remains available through `Symbol.for('event-pubsub-all')`.
55
+
56
+ ### Browser package imports
57
+
58
+ The 6.1.0 release restores `strong-type` 2.0.0 as the sole production dependency and preserves the deliberate `../strong-type/index.js` include shim. Node installs both packages as siblings. For an unbundled browser, serve the same sibling directories and map the public `event-pubsub` name to its `index.js`; the relative validator import then resolves without a second package-name mapping.
59
+
60
+ ## Tooling cleanup
61
+
62
+ - `vanilla-test` is now pinned exactly at 2.1.1.
63
+ - Native Node and Chrome coverage replaces c8.
64
+ - The old `copyfiles` dependency is gone; a dependency-free staging script now verifies the package-shaped Node/browser layout.
65
+ - `copyfiles`, `c8`, and the test-only `node-http-server` dependency are removed.
66
+ - Production installs contain exactly one dependency: `strong-type` 2.0.0. They do not install `copyfiles` or the development-only `vanilla-test`.
67
+
68
+ ## Suggested migration test
69
+
70
+ Run your application suite after the upgrade, paying particular attention to reentrant emit flows, handler removal during dispatch, synchronous throws, asynchronous rejections, list inspection, and browsers that use unbundled ESM.