@githolon/dsl 0.108.6 → 0.110.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.
Files changed (307) hide show
  1. package/assets/operation-contract.wasm +0 -0
  2. package/check_package.mjs +12 -15
  3. package/compile_package.mjs +17 -18
  4. package/compile_proof.mjs +16 -1
  5. package/dart/CHANGELOG.md +76 -1
  6. package/dart/README.md +25 -2
  7. package/dart/lib/src/admission_decision.dart +41 -0
  8. package/dart/lib/src/application_framework_calls.dart +52 -2
  9. package/dart/lib/src/application_model_adoption.dart +187 -0
  10. package/dart/lib/src/application_status.dart +73 -0
  11. package/dart/lib/src/console_enrolment.dart +271 -0
  12. package/dart/lib/src/console_http_io.dart +26 -0
  13. package/dart/lib/src/console_http_stub.dart +7 -0
  14. package/dart/lib/src/dev_cloud.dart +69 -22
  15. package/dart/lib/src/generated_call.dart +83 -23
  16. package/dart/lib/src/kernel_primitives.dart +119 -0
  17. package/dart/lib/src/nms_conformance_runtime.dart +1 -1
  18. package/dart/lib/src/nms_generated_runtime.dart +32 -10
  19. package/dart/lib/src/nms_test_environment.dart +1 -1
  20. package/dart/lib/src/node_runner_transport.dart +41 -46
  21. package/dart/lib/src/observed_session_directory.dart +70 -0
  22. package/dart/lib/src/operation_receipts.dart +112 -0
  23. package/dart/lib/src/peer_application_streams.dart +103 -0
  24. package/dart/lib/src/reception/dart_reception.dart +4280 -0
  25. package/dart/lib/src/reception/event_desk.dart +211 -0
  26. package/dart/lib/src/reception/extremum_read.dart +46 -0
  27. package/dart/lib/src/reception/local_copies.dart +371 -0
  28. package/dart/lib/src/reception/peer_office_connection.dart +11 -0
  29. package/dart/lib/src/reception/progress_desk.dart +267 -0
  30. package/dart/lib/src/reception/reception_contract.dart +11 -0
  31. package/dart/lib/src/reception/reception_session.dart +284 -0
  32. package/dart/lib/src/reception/sync_diagnostics.dart +26 -0
  33. package/dart/lib/src/reception/workspace_preparation_report.dart +126 -0
  34. package/dart/lib/src/replica_readiness.dart +123 -0
  35. package/dart/lib/src/runner/node-entry.mjs +23905 -15774
  36. package/dart/lib/src/runtime_v2_gateway.dart +56 -3
  37. package/dart/lib/src/runtime_v2_transport.dart +544 -3
  38. package/dart/lib/src/session_bound.dart +200 -311
  39. package/dart/lib/src/signing_identity_kernel.dart +84 -0
  40. package/dart/lib/src/sync_status_projection.dart +548 -0
  41. package/dart/lib/src/sync_status_reducer.dart +170 -0
  42. package/dart/lib/src/test_harness.dart +809 -1153
  43. package/dart/lib/src/testing/test_custody.dart +66 -0
  44. package/dart/lib/src/testing/test_peer.dart +328 -0
  45. package/dart/lib/src/typed_watch_registry.dart +169 -0
  46. package/dart/lib/src/workspace_open_progress.dart +27 -0
  47. package/dart/pubspec.lock +24 -1
  48. package/dart/pubspec.yaml +7 -2
  49. package/dart/pubspec_overrides.yaml +2 -0
  50. package/dart/test/admission_decision_test.dart +48 -0
  51. package/dart/test/background_model_adoption_test.dart +228 -0
  52. package/dart/test/bundle_version_pairing_test.dart +4 -4
  53. package/dart/test/child_authentication_repair_test.dart +359 -0
  54. package/dart/test/cloud_bound_local_shell_test.dart +119 -0
  55. package/dart/test/console_enrolment_refusal_test.dart +52 -0
  56. package/dart/test/console_enrolment_test.dart +227 -0
  57. package/dart/test/errors_test.dart +5 -5
  58. package/dart/test/event_plane_seam_test.dart +50 -164
  59. package/dart/test/extremum_read_test.dart +58 -0
  60. package/dart/test/fixtures/wedge/wedge-entry.mjs +3 -21
  61. package/dart/test/generated_query_test.dart +32 -0
  62. package/dart/test/harness_phase_timeout_test.dart +18 -23
  63. package/dart/test/kernel_author_after_read_test.dart +242 -0
  64. package/dart/test/kernel_fence_test.dart +137 -0
  65. package/dart/test/local_copies_test.dart +222 -0
  66. package/dart/test/model_adoption_test.dart +198 -0
  67. package/dart/test/node_peer_local_custody_test.dart +153 -0
  68. package/dart/test/offer_authentication_proof_test.dart +352 -52
  69. package/dart/test/operation_compatibility_test.dart +151 -0
  70. package/dart/test/platform_credential_effect_test.dart +386 -0
  71. package/dart/test/receiving_group_open_test.dart +213 -0
  72. package/dart/test/reception/workspace_preparation_report_test.dart +103 -0
  73. package/dart/test/reception_span_trace_test.dart +23 -0
  74. package/dart/test/replica_readiness_test.dart +156 -0
  75. package/dart/test/runtime_projections_test.dart +92 -0
  76. package/dart/test/runtime_v2_gateway_test.dart +131 -0
  77. package/dart/test/signing_identity_kernel_test.dart +75 -0
  78. package/dart/test/sync_status_preparation_report_test.dart +29 -0
  79. package/dart/test/sync_status_reducer_test.dart +419 -0
  80. package/dart/test/test_harness_test.dart +71 -95
  81. package/dart/test/typed_query_watch_test.dart +170 -0
  82. package/dart/test/typed_watch_registry_test.dart +249 -0
  83. package/dart_lints/README.md +18 -0
  84. package/dart_lints/lib/nomos_lints.dart +70 -0
  85. package/dart_lints/pubspec.lock +580 -0
  86. package/dart_lints/pubspec.yaml +12 -0
  87. package/dart_lints/test/reference_identity_test.dart +75 -0
  88. package/dart_types/CHANGELOG.md +18 -0
  89. package/dart_types/lib/nomos_kernel_protocol.dart +21 -1
  90. package/dart_types/lib/nomos_types.dart +9 -1
  91. package/dart_types/lib/src/admission_decision.dart +37 -0
  92. package/dart_types/lib/src/aggregate_meta.dart +1 -1
  93. package/dart_types/lib/src/approved_model.dart +65 -0
  94. package/dart_types/lib/src/custody.dart +10 -18
  95. package/dart_types/lib/src/error_info.dart +4 -4
  96. package/dart_types/lib/src/errors.dart +29 -29
  97. package/dart_types/lib/src/foreign_ref.dart +62 -33
  98. package/dart_types/lib/src/local_work_rejected.dart +3 -3
  99. package/dart_types/lib/src/nomos_ref.dart +3 -1
  100. package/dart_types/lib/src/principal.dart +2 -2
  101. package/dart_types/lib/src/proto/google/protobuf/any.pb.dart +163 -0
  102. package/dart_types/lib/src/proto/google/protobuf/any.pbenum.dart +11 -0
  103. package/dart_types/lib/src/proto/nomos/discovery/v1/workspace_placement.pb.dart +137 -0
  104. package/dart_types/lib/src/proto/nomos/discovery/v1/workspace_placement.pbenum.dart +11 -0
  105. package/dart_types/lib/src/proto/nomos/kernel/v1/kernel.pb.dart +20721 -10433
  106. package/dart_types/lib/src/proto/nomos/kernel/v1/kernel.pbenum.dart +555 -27
  107. package/dart_types/lib/src/proto/nomos/runtime/v2/application_desk.pb.dart +387 -0
  108. package/dart_types/lib/src/proto/nomos/runtime/v2/application_desk.pbenum.dart +46 -0
  109. package/dart_types/lib/src/proto/nomos/runtime/v2/application_readiness_desk.pb.dart +295 -0
  110. package/dart_types/lib/src/proto/nomos/runtime/v2/application_readiness_desk.pbenum.dart +139 -0
  111. package/dart_types/lib/src/proto/nomos/runtime/v2/authentication_desk.pb.dart +269 -0
  112. package/dart_types/lib/src/proto/nomos/runtime/v2/authentication_desk.pbenum.dart +103 -0
  113. package/dart_types/lib/src/proto/nomos/runtime/v2/compatibility_desk.pb.dart +417 -0
  114. package/dart_types/lib/src/proto/nomos/runtime/v2/compatibility_desk.pbenum.dart +62 -0
  115. package/dart_types/lib/src/proto/nomos/runtime/v2/correspondence_desk.pb.dart +9968 -0
  116. package/dart_types/lib/src/proto/nomos/runtime/v2/correspondence_desk.pbenum.dart +133 -0
  117. package/dart_types/lib/src/proto/nomos/runtime/v2/credentials_desk.pb.dart +204 -0
  118. package/dart_types/lib/src/proto/nomos/runtime/v2/credentials_desk.pbenum.dart +54 -0
  119. package/dart_types/lib/src/proto/nomos/runtime/v2/custody_desk.pb.dart +1550 -0
  120. package/dart_types/lib/src/proto/nomos/runtime/v2/custody_desk.pbenum.dart +11 -0
  121. package/dart_types/lib/src/proto/nomos/runtime/v2/framework.pb.dart +710 -0
  122. package/dart_types/lib/src/proto/nomos/runtime/v2/framework.pbenum.dart +11 -0
  123. package/dart_types/lib/src/proto/nomos/runtime/v2/identity_desk.pb.dart +845 -0
  124. package/dart_types/lib/src/proto/nomos/runtime/v2/identity_desk.pbenum.dart +11 -0
  125. package/dart_types/lib/src/proto/nomos/runtime/v2/interaction_desk.pb.dart +198 -0
  126. package/dart_types/lib/src/proto/nomos/runtime/v2/interaction_desk.pbenum.dart +11 -0
  127. package/dart_types/lib/src/proto/nomos/runtime/v2/law_desk.pb.dart +369 -0
  128. package/dart_types/lib/src/proto/nomos/runtime/v2/law_desk.pbenum.dart +11 -0
  129. package/dart_types/lib/src/proto/nomos/runtime/v2/maintenance_desk.pb.dart +609 -0
  130. package/dart_types/lib/src/proto/nomos/runtime/v2/maintenance_desk.pbenum.dart +65 -0
  131. package/dart_types/lib/src/proto/nomos/runtime/v2/model_adoption_desk.pb.dart +358 -0
  132. package/dart_types/lib/src/proto/nomos/runtime/v2/model_adoption_desk.pbenum.dart +100 -0
  133. package/dart_types/lib/src/proto/nomos/runtime/v2/observability_desk.pb.dart +2231 -0
  134. package/dart_types/lib/src/proto/nomos/runtime/v2/observability_desk.pbenum.dart +271 -0
  135. package/dart_types/lib/src/proto/nomos/runtime/v2/placement_desk.pb.dart +1286 -0
  136. package/dart_types/lib/src/proto/nomos/runtime/v2/placement_desk.pbenum.dart +11 -0
  137. package/dart_types/lib/src/proto/nomos/runtime/v2/receiving_group_desk.pb.dart +636 -0
  138. package/dart_types/lib/src/proto/nomos/runtime/v2/receiving_group_desk.pbenum.dart +116 -0
  139. package/dart_types/lib/src/proto/nomos/runtime/v2/records_desk.pb.dart +1637 -0
  140. package/dart_types/lib/src/proto/nomos/runtime/v2/records_desk.pbenum.dart +175 -0
  141. package/dart_types/lib/src/proto/nomos/runtime/v2/recovery_desk.pb.dart +1269 -0
  142. package/dart_types/lib/src/proto/nomos/runtime/v2/recovery_desk.pbenum.dart +129 -0
  143. package/dart_types/lib/src/proto/nomos/runtime/v2/residency_desk.pb.dart +2782 -0
  144. package/dart_types/lib/src/proto/nomos/runtime/v2/residency_desk.pbenum.dart +97 -0
  145. package/dart_types/lib/src/proto/nomos/runtime/v2/runtime.pb.dart +2232 -8627
  146. package/dart_types/lib/src/proto/nomos/runtime/v2/runtime.pbenum.dart +0 -358
  147. package/dart_types/lib/src/proto/nomos/runtime/v2/sealing_desk.pb.dart +1639 -0
  148. package/dart_types/lib/src/proto/nomos/runtime/v2/sealing_desk.pbenum.dart +46 -0
  149. package/dart_types/lib/src/runtime_outcome.dart +133 -0
  150. package/dart_types/lib/src/subscriptions.dart +116 -23
  151. package/dart_types/pubspec.yaml +1 -1
  152. package/dart_types/test/extremum_subscriptions_test.dart +40 -0
  153. package/dart_types/test/foreign_ref_resolution_test.dart +75 -0
  154. package/dart_types/test/nomos_ref_address_test.dart +25 -0
  155. package/dart_types/test/ordered_subscriptions_test.dart +34 -0
  156. package/operation_contract_check.mjs +24 -0
  157. package/package.json +11 -6
  158. package/src/aggregate.ts +70 -10
  159. package/src/application_topology.ts +18 -11
  160. package/src/attested.ts +3 -0
  161. package/src/attested_core.ts +46 -3
  162. package/src/birth_meter_ensure.ts +19 -7
  163. package/src/births.ts +29 -4
  164. package/src/build_package.ts +140 -13
  165. package/src/business_birth.ts +181 -4
  166. package/src/codegen_call_proto.ts +1274 -0
  167. package/src/codegen_call_usda.ts +49 -6
  168. package/src/codegen_dart.ts +79 -44
  169. package/src/codegen_dart_client.ts +458 -800
  170. package/src/{codegen_dart_application.ts → codegen_dart_facade.ts} +331 -582
  171. package/src/codegen_dart_framework_calls.ts +320 -37
  172. package/src/codegen_dart_indexed_variant.ts +159 -0
  173. package/src/codegen_dart_scenario.ts +42 -13
  174. package/src/codegen_proof.ts +3 -3
  175. package/src/codegen_provider_dart.ts +5 -0
  176. package/src/codegen_query_proto.ts +158 -0
  177. package/src/codegen_refusal.ts +189 -0
  178. package/src/codegen_result_proto.ts +931 -0
  179. package/src/codegen_result_usda.ts +4 -0
  180. package/src/codegen_ts.ts +464 -616
  181. package/src/codegen_workspace_access.ts +105 -0
  182. package/src/compatibility_graph.ts +759 -0
  183. package/src/compatibility_usda.ts +264 -0
  184. package/src/compile_package_main.ts +2083 -1248
  185. package/src/custody_placement.ts +156 -0
  186. package/src/custody_placement_usda.ts +91 -0
  187. package/src/decl_shapes.ts +21 -2
  188. package/src/describe_model.ts +1 -0
  189. package/src/directive.ts +59 -2
  190. package/src/drivers.ts +51 -0
  191. package/src/engine_entry.ts +52 -8
  192. package/src/evolve_preview.ts +11 -4
  193. package/src/exists.ts +2 -0
  194. package/src/fields.ts +75 -11
  195. package/src/flow_gate.ts +2 -1
  196. package/src/framework/application_home.ts +170 -18
  197. package/src/framework/attested_receipts.ts +8 -3
  198. package/src/framework/auth_provider_law.ts +169 -9
  199. package/src/framework/birth_certificate_law.ts +4 -0
  200. package/src/framework/capability.ts +34 -3
  201. package/src/framework/child_authentication.ts +346 -0
  202. package/src/framework/console_governance.ts +295 -0
  203. package/src/framework/delegated_roles.ts +301 -0
  204. package/src/framework/domain_lifecycle.ts +26 -13
  205. package/src/framework/founding_genesis.ts +193 -0
  206. package/src/framework/framework_aggregates.ts +1 -1
  207. package/src/framework/genesis.ts +6 -1
  208. package/src/framework/governance_relations.ts +19 -0
  209. package/src/framework/home.ts +5 -734
  210. package/src/framework/legacy/child_auth_provider_epoch.ts +73 -0
  211. package/src/framework/model_authority_repair.ts +116 -0
  212. package/src/framework/model_authority_seed.ts +185 -0
  213. package/src/framework/model_transition.ts +211 -0
  214. package/src/framework/owned_custody.ts +1 -1
  215. package/src/framework/principal_enrollment.ts +302 -0
  216. package/src/framework/receiving_group.ts +857 -0
  217. package/src/framework/receiving_group_recovery.ts +314 -0
  218. package/src/framework/relations.ts +4 -8
  219. package/src/framework/signing_identity.ts +242 -95
  220. package/src/framework/source_roster.ts +11 -5
  221. package/src/framework/workspace_access.ts +149 -0
  222. package/src/framework/workspace_invariant.ts +73 -52
  223. package/src/framework/workspaces.ts +407 -40
  224. package/src/framework_call_definitions.ts +32 -3
  225. package/src/generated_client_bundle_boundary.ts +97 -0
  226. package/src/generated_client_names.ts +1 -0
  227. package/src/identity_usda.ts +27 -0
  228. package/src/index.ts +183 -12
  229. package/src/indexed_variant.ts +83 -0
  230. package/src/intent.ts +173 -45
  231. package/src/law_check.ts +8 -5
  232. package/src/law_dependency_index.ts +231 -0
  233. package/src/law_graph.ts +508 -71
  234. package/src/law_graph_usda.ts +170 -24
  235. package/src/law_identity.ts +119 -81
  236. package/src/law_source_map.ts +4 -1
  237. package/src/law_units.ts +498 -0
  238. package/src/law_value_type.ts +7 -3
  239. package/src/member_authentication.ts +302 -0
  240. package/src/null_meta.ts +1 -1
  241. package/src/openusd_compiled_layer.ts +132 -0
  242. package/src/operation_contract_check.ts +31 -0
  243. package/src/ordered_read.ts +2 -1
  244. package/src/package_config.ts +33 -12
  245. package/src/package_dependencies.ts +1 -0
  246. package/src/plan_source_slice.ts +30 -1
  247. package/src/protobuf_field_number.ts +36 -0
  248. package/src/provenance_wire.ts +6 -0
  249. package/src/query.ts +2 -1
  250. package/src/read.ts +50 -0
  251. package/src/relation.ts +4 -1
  252. package/src/relation_schema.ts +15 -2
  253. package/src/report.ts +2 -2
  254. package/src/sqlite_computation_bundle.ts +78 -0
  255. package/src/sqlite_computed.ts +102 -0
  256. package/src/sqlite_counts.ts +154 -0
  257. package/src/sqlite_layout.ts +823 -0
  258. package/src/sqlite_reads.ts +275 -0
  259. package/src/sqlite_samples.ts +185 -0
  260. package/src/stable_id_identity_bridge.ts +1 -1
  261. package/src/stable_ids_for_module.ts +16 -4
  262. package/src/test_call_usda.ts +6 -6
  263. package/src/usda_relationship_integrity.ts +20 -3
  264. package/src/usda_text.ts +21 -1
  265. package/src/value_object.ts +81 -11
  266. package/src/wire.ts +22 -0
  267. package/src/wire_encode.ts +227 -20
  268. package/src/workspace_sharding.ts +15 -6
  269. package/src/workspace_sharing.ts +51 -49
  270. package/src/zod_introspection.ts +2 -0
  271. package/compat_package.mjs +0 -46
  272. package/dart/lib/src/home.dart +0 -15
  273. package/dart/lib/src/runner/offline-install.mjs +0 -15367
  274. package/dart/lib/src/source_trust.dart +0 -51
  275. package/dart/lib/src/webview_bridge.dart +0 -6540
  276. package/dart/lib/src/workspace_name.dart +0 -30
  277. package/dart/test/acquire_session_credentials_test.dart +0 -150
  278. package/dart/test/acquire_session_test.dart +0 -534
  279. package/dart/test/adv_realm_interference_test.dart +0 -600
  280. package/dart/test/cloud_bound_topology_test.dart +0 -168
  281. package/dart/test/cluster_births_test.dart +0 -202
  282. package/dart/test/cluster_device_keyed_acceptance_test.dart +0 -105
  283. package/dart/test/cluster_local_autosync_test.dart +0 -123
  284. package/dart/test/cluster_scale_test.dart +0 -122
  285. package/dart/test/compat_test.dart +0 -61
  286. package/dart/test/dlq_session_surface_test.dart +0 -222
  287. package/dart/test/first_app_gauntlet_test.dart +0 -386
  288. package/dart/test/fixtures/wedge/fake-install.mjs +0 -11
  289. package/dart/test/four_layer_nested_topology_test.dart +0 -290
  290. package/dart/test/home_parity_test.dart +0 -13
  291. package/dart/test/local_sync_inert_test.dart +0 -107
  292. package/dart/test/node_runner_transport_test.dart +0 -78
  293. package/dart/test/parent_signer_recovery_test.dart +0 -155
  294. package/dart/test/residency_refusal_test.dart +0 -49
  295. package/dart/test/sealing_client_test.dart +0 -181
  296. package/dart/test/session_bound_test.dart +0 -285
  297. package/dart/test/stale_bundle_test.dart +0 -80
  298. package/dart/test/vo_read_typing_test.dart +0 -131
  299. package/dart/test/watch_after_offer_stall_test.dart +0 -100
  300. package/dart/test/webview_bridge_test.dart +0 -1930
  301. package/dart/test/workspace_name_test.dart +0 -24
  302. package/runtime/generated-application-host.js +0 -22860
  303. package/src/codegen_query_usda.ts +0 -214
  304. package/src/compat_manifest.ts +0 -26
  305. package/src/compat_package_main.ts +0 -224
  306. package/src/shape_compat.ts +0 -352
  307. package/src/usd_state.ts +0 -505
@@ -1,13 +1,13 @@
1
1
  // Durable, framework-owned delivery of a business application's access record.
2
2
  //
3
- // The domain records what should be shared and the business receipts that close
4
- // that order. Generated stateful clients perform and retry the cross-workspace
5
- // delivery. Tenant application code never sees a bridge, signer, home index, or
6
- // delivery protocol.
3
+ // The domain records the grant, or a pending bearer invitation. Source law publishes
4
+ // an exact workspace effect with the admitted
5
+ // grant; Peer Office's correspondence desk delivers and retries it. Generated
6
+ // clients do not own delivery, signer state or a second grant lifecycle.
7
7
 
8
8
  import { aggregate, instance, type AggregateHandle } from "./aggregate.js";
9
9
  import { directive, nomosImplementationDetail, type Directive } from "./directive.js";
10
- import type { BusinessIntent } from "./intent.js";
10
+ import { intent, type BusinessIntent } from "./intent.js";
11
11
  import { query, type QueryDecl } from "./query.js";
12
12
  import { z } from "zod";
13
13
  import { set, withMarker } from "./ops.js";
@@ -15,6 +15,9 @@ import { t } from "./fields.js";
15
15
  import { Lww } from "./drivers.js";
16
16
  import { endorsementOf } from "./principal_evidence.js";
17
17
  import { RelationTuple, writeTuple } from "./framework/relations.js";
18
+ import { publishesWorkspaceAccess, recordReceivedWorkspaceAccess, type WorkspaceAccessPublication, type WorkspaceAccessChange } from "./framework/workspace_access.js";
19
+ import type { Ports } from "./ctx.js";
20
+ import { receivingGroupNameOf } from "./framework/receiving_group.js";
18
21
  import {
19
22
  readRef,
20
23
  readSet,
@@ -25,20 +28,6 @@ import {
25
28
  import { recipientMetaOf } from "./recipient.js";
26
29
  import { zodKind, zodObjectShape } from "./zod_introspection.js";
27
30
 
28
- export type WorkspaceSharingPresence = "present" | "absent";
29
-
30
- export interface WorkspaceSharingWhen {
31
- readonly field: string;
32
- readonly is: WorkspaceSharingPresence;
33
- }
34
-
35
- export interface WorkspaceSharingReceipt {
36
- readonly when?: WorkspaceSharingWhen;
37
- /** Receipt payload field -> durable order field, when the business names differ. */
38
- readonly payload?: Readonly<Record<string, string>>;
39
- readonly records: Directive<any>;
40
- }
41
-
42
31
  export interface WorkspaceSharingPolicy {
43
32
  readonly orders: AggregateHandle;
44
33
  readonly initiatedBy: readonly BusinessIntent<any>[];
@@ -47,8 +36,6 @@ export interface WorkspaceSharingPolicy {
47
36
  readonly person: string;
48
37
  readonly role: string;
49
38
  readonly scope: string;
50
- readonly delivered: readonly WorkspaceSharingReceipt[];
51
- readonly refused: readonly WorkspaceSharingReceipt[];
52
39
  /** Generated law behind `Invitation<User>`; never exported to tenant code. */
53
40
  readonly invitationLaw: WorkspaceSharingInvitationLaw;
54
41
  }
@@ -73,6 +60,10 @@ export const workspaceSharingInvitationRedeemPayload = z.object({
73
60
  invitationId: z.string().regex(/^nomos-invitation-[0-9a-f]{64}$/),
74
61
  redeemedAt: z.string().min(1),
75
62
  });
63
+ /** The framework supplies this recipient from verified identity, never the URL. */
64
+ export const workspaceSharingRedemptionFacts = workspaceSharingInvitationRedeemPayload.extend({
65
+ recipient: z.string().regex(/^user:[A-Za-z0-9][A-Za-z0-9_.-]*$/),
66
+ });
76
67
 
77
68
  /** The private bearer material transported in an invitation URL fragment.
78
69
  * This is canonical USDA, not a JSON web protocol. The literal is part of the
@@ -120,16 +111,21 @@ const NomosInvitationClaim = {
120
111
 
121
112
  export interface WorkspaceSharingOptions {
122
113
  readonly orders: AggregateHandle;
123
- /** Business actions after which the generated application owns delivery. */
114
+ /** Business actions which create a grant or an unclaimed invitation. */
124
115
  readonly initiatedBy: readonly BusinessIntent<any>[];
125
- /** An indexed, single-key query whose value selects pending delivery orders. */
116
+ /** An indexed, single-key query whose value selects unredeemed invitations. */
126
117
  readonly pending: QueryDecl;
127
118
  readonly pendingValue?: string;
128
119
  readonly person: string;
129
120
  readonly role: string;
130
121
  readonly scope: string;
131
- readonly delivered: readonly WorkspaceSharingReceipt[];
132
- readonly refused: readonly WorkspaceSharingReceipt[];
122
+ readonly accessReceiver?: Directive<WorkspaceAccessPublication>;
123
+ /** Local permission object, when the invitation's public discovery scope differs. */
124
+ readonly authorityObject?: string;
125
+ /** Ordinary local business consequences of a successful possession proof.
126
+ * They are part of the SAME redeem offer, never a delivery callback. */
127
+ readonly redeemed?: Directive<z.infer<typeof workspaceSharingRedemptionFacts>>;
128
+ readonly receivedAccess?: (facts: z.infer<typeof workspaceSharingRedemptionFacts>, ctx: Ports) => WorkspaceAccessChange;
133
129
  }
134
130
 
135
131
  const requireOrderField = (orders: AggregateHandle, field: string, purpose: string): void => {
@@ -142,11 +138,10 @@ const requireOrderField = (orders: AggregateHandle, field: string, purpose: stri
142
138
 
143
139
  /**
144
140
  * Declare one durable business sharing policy. The order aggregate is ordinary
145
- * domain state; delivery and retry are generated framework behaviour.
141
+ * domain state; the ordinary Peer Office correspondence desk owns delivery and retry.
146
142
  *
147
- * This is the canonical access-delivery lane. Model the pending order and its
148
- * delivered/refused business receipts here; never call a bridge from application
149
- * code or mirror pending delivery in UI state.
143
+ * Redemption commits source authority and its addressed Home offer atomically.
144
+ * No delivery callback grants access, and generated clients have no delivery loop.
150
145
  *
151
146
  * @example
152
147
  * language("estate", intents, {
@@ -157,12 +152,14 @@ const requireOrderField = (orders: AggregateHandle, field: string, purpose: stri
157
152
  * person: "subject",
158
153
  * role: "relation",
159
154
  * scope: "object",
160
- * delivered: [{ records: recordEstateAccessDelivered }],
161
- * refused: [{ records: recordEstateAccessRefused }],
155
+ * redeemed: recordEstateInvitationRedemption,
162
156
  * })],
163
157
  * })
164
158
  */
165
159
  export function workspaceSharing(options: WorkspaceSharingOptions): WorkspaceSharingPolicy {
160
+ if ("delivered" in options || "refused" in options) {
161
+ throw new Error("workspaceSharing delivery callbacks were removed: access is committed in the source offer; Peer Office delivers correspondence. Use redeemed for local redemption consequences.");
162
+ }
166
163
  const { orders, pending } = options;
167
164
  if (pending.returns !== orders.id) {
168
165
  throw new Error(
@@ -193,19 +190,6 @@ export function workspaceSharing(options: WorkspaceSharingOptions): WorkspaceSha
193
190
  requireOrderField(orders, options.person, "person");
194
191
  requireOrderField(orders, options.role, "role");
195
192
  requireOrderField(orders, options.scope, "scope");
196
- if (options.delivered.length === 0 || options.refused.length === 0) {
197
- throw new Error(
198
- `workspaceSharing(${orders.id}): both delivered and refused business receipts are required`,
199
- );
200
- }
201
- for (const receipt of [...options.delivered, ...options.refused]) {
202
- if (receipt.when !== undefined) {
203
- requireOrderField(orders, receipt.when.field, "receipt condition");
204
- }
205
- for (const [target, source] of Object.entries(receipt.payload ?? {})) {
206
- requireOrderField(orders, source, `receipt payload '${target}'`);
207
- }
208
- }
209
193
  const pendingValue = options.pendingValue ?? "pending";
210
194
  const stem = options.orders.id.replace(/[^A-Za-z0-9]/g, "");
211
195
  const redeemId = `nomosInternalRedeem${stem}Invitation7c1f5e`;
@@ -215,8 +199,8 @@ export function workspaceSharing(options: WorkspaceSharingOptions): WorkspaceSha
215
199
  .returns(options.orders),
216
200
  businessBirthInternal: true as const,
217
201
  };
218
- const redeem = nomosImplementationDetail({
219
- ...directive(redeemId)
202
+ const redeemEffect = nomosImplementationDetail({
203
+ ...directive(options.redeemed === undefined ? redeemId : `${redeemId}Effect`)
220
204
  .mutates(options.orders)
221
205
  .payload(workspaceSharingInvitationRedeemPayload)
222
206
  .plan((facts, ctx) => {
@@ -224,7 +208,7 @@ export function workspaceSharing(options: WorkspaceSharingOptions): WorkspaceSha
224
208
  const claim = instance(NomosInvitationClaim, facts.invitationId);
225
209
  return [
226
210
  ...writeTuple({
227
- object: facts.object,
211
+ object: options.authorityObject ?? facts.object,
228
212
  relation: facts.relation,
229
213
  subject: ctx.principal().asAuthoritySubject(
230
214
  "redeem a possession-proven, single-use business invitation",
@@ -243,6 +227,26 @@ export function workspaceSharing(options: WorkspaceSharingOptions): WorkspaceSha
243
227
  // Possession proof is verified by NomosInvitationGate and intentionally never persisted.
244
228
  nomosInvariantConsumedPayloadFields: ["invitationSignature"] as const,
245
229
  });
230
+ const recipientFacts = (facts: z.infer<typeof workspaceSharingInvitationRedeemPayload>, ctx: Ports) => ({
231
+ ...facts, recipient: endorsementOf(ctx.principal().asAuthoritySubject("possession-proven invitation recipient"))?.principal ?? "",
232
+ });
233
+ const businessRedemption = options.redeemed;
234
+ if ((businessRedemption?.workspaceEffects?.length ?? 0) !== 0) {
235
+ throw new Error("workspaceSharing.redeemed must describe local consequences; Home correspondence is supplied by the sharing policy");
236
+ }
237
+ const localRedemption = businessRedemption === undefined ? redeemEffect : {
238
+ ...nomosImplementationDetail(intent(redeemId)
239
+ .contract({ accepts: workspaceSharingInvitationRedeemPayload })
240
+ .directs(redeemEffect, facts => facts)
241
+ .directs<z.infer<typeof workspaceSharingInvitationRedeemPayload>>({ ...businessRedemption, workspaceEffects: [], payloadSchema: workspaceSharingInvitationRedeemPayload,
242
+ plan: (facts, ctx) => businessRedemption.plan(recipientFacts(facts, ctx), ctx) }, facts => facts).atomically()),
243
+ nomosInvariantConsumedPayloadFields: ["invitationSignature"] as const,
244
+ };
245
+ const access = options.receivedAccess;
246
+ const redeem = publishesWorkspaceAccess(localRedemption, access === undefined ? ((facts, ctx) => ({
247
+ recipient: endorsementOf(ctx.principal().asAttribution())?.principal ?? "",
248
+ object: facts.object, relation: facts.relation, active: true,
249
+ })) : (facts, ctx) => access(recipientFacts(facts, ctx), ctx), receivingGroupNameOf, options.accessReceiver ?? recordReceivedWorkspaceAccess);
246
250
  const gate = workspaceInvariant(`NomosInvitationGate:${options.orders.id}`)
247
251
  .on(redeemId)
248
252
  .reads(readSet(
@@ -305,8 +309,6 @@ export function workspaceSharing(options: WorkspaceSharingOptions): WorkspaceSha
305
309
  return Object.freeze({
306
310
  ...options,
307
311
  pendingValue,
308
- delivered: Object.freeze([...options.delivered]),
309
- refused: Object.freeze([...options.refused]),
310
312
  invitationLaw,
311
313
  });
312
314
  }
@@ -61,6 +61,8 @@ const SUBJECT_SAMPLES: readonly string[] = [
61
61
  `key:${"0".repeat(64)}`,
62
62
  "Type:00000000-0000-0000-0000-000000000000",
63
63
  "0".repeat(64),
64
+ // A console principal (D22 framework scope), for payloads that name exactly one.
65
+ "console:00000000-0000-0000-0000-000000000000",
64
66
  ];
65
67
  const STRING_SAMPLES: readonly string[] = [
66
68
  "sample", "{}", "en", "en-GB", "AA", "A1", "a", "1", "2026-01", "2026-01-01",
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env node
2
- // NOMOS — Nomos Sovereign: participants act · verify · remember LOCALLY; hosted
3
- // remotes are replaceable custody/transport, not truth. ⇒ ONE Nomos GitHolon
4
- // wasm32-wasip1 artifact {kernel · projection · embedded QuickJS engine}.
5
- // If a file isn't this / hosting this / authoring for this / proving this — it's gone.
6
-
7
- // `githolon compat` launcher — the twin of `compile_package.mjs`: resolve `tsx`
8
- // (the caller's, else the DSL's own dependency) and run `src/compat_package_main.ts`
9
- // under it (the main dynamically imports the caller's TS domain modules, which
10
- // needs the tsx ESM loader). Resolution goes through Node's resolver (createRequire),
11
- // NOT node_modules/.bin paths — hoisted/workspace installs put the bin shims elsewhere.
12
- import { execFileSync } from "node:child_process";
13
- import { readFileSync } from "node:fs";
14
- import { createRequire } from "node:module";
15
- import path from "node:path";
16
- import { fileURLToPath, pathToFileURL } from "node:url";
17
-
18
- const DSL_DIR = path.dirname(fileURLToPath(import.meta.url));
19
- const MAIN = path.join(DSL_DIR, "src", "compat_package_main.ts");
20
-
21
- function resolvePkgDir(name, fromDir) {
22
- try {
23
- const req = createRequire(pathToFileURL(path.join(fromDir, "noop.js")));
24
- return path.dirname(req.resolve(`${name}/package.json`));
25
- } catch {
26
- return undefined;
27
- }
28
- }
29
-
30
- const tsxDir = resolvePkgDir("tsx", process.cwd()) ?? resolvePkgDir("tsx", DSL_DIR);
31
- if (!tsxDir) {
32
- console.error("githolon compat: tsx not found — reinstall @githolon/dsl (tsx is one of its dependencies)");
33
- process.exit(1);
34
- }
35
- const tsxPkg = JSON.parse(readFileSync(path.join(tsxDir, "package.json"), "utf8"));
36
- const tsxBinRel = typeof tsxPkg.bin === "string" ? tsxPkg.bin : tsxPkg.bin?.tsx;
37
- const tsxCli = path.join(tsxDir, tsxBinRel ?? "dist/cli.mjs");
38
-
39
- try {
40
- execFileSync(process.execPath, [tsxCli, MAIN, ...process.argv.slice(2)], {
41
- stdio: "inherit",
42
- cwd: process.cwd(),
43
- });
44
- } catch (e) {
45
- process.exit(e.status ?? 1);
46
- }
@@ -1,15 +0,0 @@
1
- @internal
2
- library;
3
-
4
- import 'package:meta/meta.dart' show internal;
5
-
6
- import 'dart:convert';
7
-
8
- import 'package:crypto/crypto.dart';
9
-
10
- /// Compiler/runtime-only receiving-group address. Generated application hosts call this; tenant code does
11
- /// not choose or persist framework workspace names.
12
- String nmsInternalReceivingGroupNameOf(String principal) {
13
- final hex = sha256.convert(utf8.encode(principal)).toString();
14
- return 'nomos-rg-${hex.substring(0, 40)}';
15
- }