@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.
- package/assets/operation-contract.wasm +0 -0
- package/check_package.mjs +12 -15
- package/compile_package.mjs +17 -18
- package/compile_proof.mjs +16 -1
- package/dart/CHANGELOG.md +76 -1
- package/dart/README.md +25 -2
- package/dart/lib/src/admission_decision.dart +41 -0
- package/dart/lib/src/application_framework_calls.dart +52 -2
- package/dart/lib/src/application_model_adoption.dart +187 -0
- package/dart/lib/src/application_status.dart +73 -0
- package/dart/lib/src/console_enrolment.dart +271 -0
- package/dart/lib/src/console_http_io.dart +26 -0
- package/dart/lib/src/console_http_stub.dart +7 -0
- package/dart/lib/src/dev_cloud.dart +69 -22
- package/dart/lib/src/generated_call.dart +83 -23
- package/dart/lib/src/kernel_primitives.dart +119 -0
- package/dart/lib/src/nms_conformance_runtime.dart +1 -1
- package/dart/lib/src/nms_generated_runtime.dart +32 -10
- package/dart/lib/src/nms_test_environment.dart +1 -1
- package/dart/lib/src/node_runner_transport.dart +41 -46
- package/dart/lib/src/observed_session_directory.dart +70 -0
- package/dart/lib/src/operation_receipts.dart +112 -0
- package/dart/lib/src/peer_application_streams.dart +103 -0
- package/dart/lib/src/reception/dart_reception.dart +4280 -0
- package/dart/lib/src/reception/event_desk.dart +211 -0
- package/dart/lib/src/reception/extremum_read.dart +46 -0
- package/dart/lib/src/reception/local_copies.dart +371 -0
- package/dart/lib/src/reception/peer_office_connection.dart +11 -0
- package/dart/lib/src/reception/progress_desk.dart +267 -0
- package/dart/lib/src/reception/reception_contract.dart +11 -0
- package/dart/lib/src/reception/reception_session.dart +284 -0
- package/dart/lib/src/reception/sync_diagnostics.dart +26 -0
- package/dart/lib/src/reception/workspace_preparation_report.dart +126 -0
- package/dart/lib/src/replica_readiness.dart +123 -0
- package/dart/lib/src/runner/node-entry.mjs +23905 -15774
- package/dart/lib/src/runtime_v2_gateway.dart +56 -3
- package/dart/lib/src/runtime_v2_transport.dart +544 -3
- package/dart/lib/src/session_bound.dart +200 -311
- package/dart/lib/src/signing_identity_kernel.dart +84 -0
- package/dart/lib/src/sync_status_projection.dart +548 -0
- package/dart/lib/src/sync_status_reducer.dart +170 -0
- package/dart/lib/src/test_harness.dart +809 -1153
- package/dart/lib/src/testing/test_custody.dart +66 -0
- package/dart/lib/src/testing/test_peer.dart +328 -0
- package/dart/lib/src/typed_watch_registry.dart +169 -0
- package/dart/lib/src/workspace_open_progress.dart +27 -0
- package/dart/pubspec.lock +24 -1
- package/dart/pubspec.yaml +7 -2
- package/dart/pubspec_overrides.yaml +2 -0
- package/dart/test/admission_decision_test.dart +48 -0
- package/dart/test/background_model_adoption_test.dart +228 -0
- package/dart/test/bundle_version_pairing_test.dart +4 -4
- package/dart/test/child_authentication_repair_test.dart +359 -0
- package/dart/test/cloud_bound_local_shell_test.dart +119 -0
- package/dart/test/console_enrolment_refusal_test.dart +52 -0
- package/dart/test/console_enrolment_test.dart +227 -0
- package/dart/test/errors_test.dart +5 -5
- package/dart/test/event_plane_seam_test.dart +50 -164
- package/dart/test/extremum_read_test.dart +58 -0
- package/dart/test/fixtures/wedge/wedge-entry.mjs +3 -21
- package/dart/test/generated_query_test.dart +32 -0
- package/dart/test/harness_phase_timeout_test.dart +18 -23
- package/dart/test/kernel_author_after_read_test.dart +242 -0
- package/dart/test/kernel_fence_test.dart +137 -0
- package/dart/test/local_copies_test.dart +222 -0
- package/dart/test/model_adoption_test.dart +198 -0
- package/dart/test/node_peer_local_custody_test.dart +153 -0
- package/dart/test/offer_authentication_proof_test.dart +352 -52
- package/dart/test/operation_compatibility_test.dart +151 -0
- package/dart/test/platform_credential_effect_test.dart +386 -0
- package/dart/test/receiving_group_open_test.dart +213 -0
- package/dart/test/reception/workspace_preparation_report_test.dart +103 -0
- package/dart/test/reception_span_trace_test.dart +23 -0
- package/dart/test/replica_readiness_test.dart +156 -0
- package/dart/test/runtime_projections_test.dart +92 -0
- package/dart/test/runtime_v2_gateway_test.dart +131 -0
- package/dart/test/signing_identity_kernel_test.dart +75 -0
- package/dart/test/sync_status_preparation_report_test.dart +29 -0
- package/dart/test/sync_status_reducer_test.dart +419 -0
- package/dart/test/test_harness_test.dart +71 -95
- package/dart/test/typed_query_watch_test.dart +170 -0
- package/dart/test/typed_watch_registry_test.dart +249 -0
- package/dart_lints/README.md +18 -0
- package/dart_lints/lib/nomos_lints.dart +70 -0
- package/dart_lints/pubspec.lock +580 -0
- package/dart_lints/pubspec.yaml +12 -0
- package/dart_lints/test/reference_identity_test.dart +75 -0
- package/dart_types/CHANGELOG.md +18 -0
- package/dart_types/lib/nomos_kernel_protocol.dart +21 -1
- package/dart_types/lib/nomos_types.dart +9 -1
- package/dart_types/lib/src/admission_decision.dart +37 -0
- package/dart_types/lib/src/aggregate_meta.dart +1 -1
- package/dart_types/lib/src/approved_model.dart +65 -0
- package/dart_types/lib/src/custody.dart +10 -18
- package/dart_types/lib/src/error_info.dart +4 -4
- package/dart_types/lib/src/errors.dart +29 -29
- package/dart_types/lib/src/foreign_ref.dart +62 -33
- package/dart_types/lib/src/local_work_rejected.dart +3 -3
- package/dart_types/lib/src/nomos_ref.dart +3 -1
- package/dart_types/lib/src/principal.dart +2 -2
- package/dart_types/lib/src/proto/google/protobuf/any.pb.dart +163 -0
- package/dart_types/lib/src/proto/google/protobuf/any.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/discovery/v1/workspace_placement.pb.dart +137 -0
- package/dart_types/lib/src/proto/nomos/discovery/v1/workspace_placement.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/kernel/v1/kernel.pb.dart +20721 -10433
- package/dart_types/lib/src/proto/nomos/kernel/v1/kernel.pbenum.dart +555 -27
- package/dart_types/lib/src/proto/nomos/runtime/v2/application_desk.pb.dart +387 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/application_desk.pbenum.dart +46 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/application_readiness_desk.pb.dart +295 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/application_readiness_desk.pbenum.dart +139 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/authentication_desk.pb.dart +269 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/authentication_desk.pbenum.dart +103 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/compatibility_desk.pb.dart +417 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/compatibility_desk.pbenum.dart +62 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/correspondence_desk.pb.dart +9968 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/correspondence_desk.pbenum.dart +133 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/credentials_desk.pb.dart +204 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/credentials_desk.pbenum.dart +54 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/custody_desk.pb.dart +1550 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/custody_desk.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/framework.pb.dart +710 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/framework.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/identity_desk.pb.dart +845 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/identity_desk.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/interaction_desk.pb.dart +198 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/interaction_desk.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/law_desk.pb.dart +369 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/law_desk.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/maintenance_desk.pb.dart +609 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/maintenance_desk.pbenum.dart +65 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/model_adoption_desk.pb.dart +358 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/model_adoption_desk.pbenum.dart +100 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/observability_desk.pb.dart +2231 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/observability_desk.pbenum.dart +271 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/placement_desk.pb.dart +1286 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/placement_desk.pbenum.dart +11 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/receiving_group_desk.pb.dart +636 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/receiving_group_desk.pbenum.dart +116 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/records_desk.pb.dart +1637 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/records_desk.pbenum.dart +175 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/recovery_desk.pb.dart +1269 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/recovery_desk.pbenum.dart +129 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/residency_desk.pb.dart +2782 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/residency_desk.pbenum.dart +97 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/runtime.pb.dart +2232 -8627
- package/dart_types/lib/src/proto/nomos/runtime/v2/runtime.pbenum.dart +0 -358
- package/dart_types/lib/src/proto/nomos/runtime/v2/sealing_desk.pb.dart +1639 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/sealing_desk.pbenum.dart +46 -0
- package/dart_types/lib/src/runtime_outcome.dart +133 -0
- package/dart_types/lib/src/subscriptions.dart +116 -23
- package/dart_types/pubspec.yaml +1 -1
- package/dart_types/test/extremum_subscriptions_test.dart +40 -0
- package/dart_types/test/foreign_ref_resolution_test.dart +75 -0
- package/dart_types/test/nomos_ref_address_test.dart +25 -0
- package/dart_types/test/ordered_subscriptions_test.dart +34 -0
- package/operation_contract_check.mjs +24 -0
- package/package.json +11 -6
- package/src/aggregate.ts +70 -10
- package/src/application_topology.ts +18 -11
- package/src/attested.ts +3 -0
- package/src/attested_core.ts +46 -3
- package/src/birth_meter_ensure.ts +19 -7
- package/src/births.ts +29 -4
- package/src/build_package.ts +140 -13
- package/src/business_birth.ts +181 -4
- package/src/codegen_call_proto.ts +1274 -0
- package/src/codegen_call_usda.ts +49 -6
- package/src/codegen_dart.ts +79 -44
- package/src/codegen_dart_client.ts +458 -800
- package/src/{codegen_dart_application.ts → codegen_dart_facade.ts} +331 -582
- package/src/codegen_dart_framework_calls.ts +320 -37
- package/src/codegen_dart_indexed_variant.ts +159 -0
- package/src/codegen_dart_scenario.ts +42 -13
- package/src/codegen_proof.ts +3 -3
- package/src/codegen_provider_dart.ts +5 -0
- package/src/codegen_query_proto.ts +158 -0
- package/src/codegen_refusal.ts +189 -0
- package/src/codegen_result_proto.ts +931 -0
- package/src/codegen_result_usda.ts +4 -0
- package/src/codegen_ts.ts +464 -616
- package/src/codegen_workspace_access.ts +105 -0
- package/src/compatibility_graph.ts +759 -0
- package/src/compatibility_usda.ts +264 -0
- package/src/compile_package_main.ts +2083 -1248
- package/src/custody_placement.ts +156 -0
- package/src/custody_placement_usda.ts +91 -0
- package/src/decl_shapes.ts +21 -2
- package/src/describe_model.ts +1 -0
- package/src/directive.ts +59 -2
- package/src/drivers.ts +51 -0
- package/src/engine_entry.ts +52 -8
- package/src/evolve_preview.ts +11 -4
- package/src/exists.ts +2 -0
- package/src/fields.ts +75 -11
- package/src/flow_gate.ts +2 -1
- package/src/framework/application_home.ts +170 -18
- package/src/framework/attested_receipts.ts +8 -3
- package/src/framework/auth_provider_law.ts +169 -9
- package/src/framework/birth_certificate_law.ts +4 -0
- package/src/framework/capability.ts +34 -3
- package/src/framework/child_authentication.ts +346 -0
- package/src/framework/console_governance.ts +295 -0
- package/src/framework/delegated_roles.ts +301 -0
- package/src/framework/domain_lifecycle.ts +26 -13
- package/src/framework/founding_genesis.ts +193 -0
- package/src/framework/framework_aggregates.ts +1 -1
- package/src/framework/genesis.ts +6 -1
- package/src/framework/governance_relations.ts +19 -0
- package/src/framework/home.ts +5 -734
- package/src/framework/legacy/child_auth_provider_epoch.ts +73 -0
- package/src/framework/model_authority_repair.ts +116 -0
- package/src/framework/model_authority_seed.ts +185 -0
- package/src/framework/model_transition.ts +211 -0
- package/src/framework/owned_custody.ts +1 -1
- package/src/framework/principal_enrollment.ts +302 -0
- package/src/framework/receiving_group.ts +857 -0
- package/src/framework/receiving_group_recovery.ts +314 -0
- package/src/framework/relations.ts +4 -8
- package/src/framework/signing_identity.ts +242 -95
- package/src/framework/source_roster.ts +11 -5
- package/src/framework/workspace_access.ts +149 -0
- package/src/framework/workspace_invariant.ts +73 -52
- package/src/framework/workspaces.ts +407 -40
- package/src/framework_call_definitions.ts +32 -3
- package/src/generated_client_bundle_boundary.ts +97 -0
- package/src/generated_client_names.ts +1 -0
- package/src/identity_usda.ts +27 -0
- package/src/index.ts +183 -12
- package/src/indexed_variant.ts +83 -0
- package/src/intent.ts +173 -45
- package/src/law_check.ts +8 -5
- package/src/law_dependency_index.ts +231 -0
- package/src/law_graph.ts +508 -71
- package/src/law_graph_usda.ts +170 -24
- package/src/law_identity.ts +119 -81
- package/src/law_source_map.ts +4 -1
- package/src/law_units.ts +498 -0
- package/src/law_value_type.ts +7 -3
- package/src/member_authentication.ts +302 -0
- package/src/null_meta.ts +1 -1
- package/src/openusd_compiled_layer.ts +132 -0
- package/src/operation_contract_check.ts +31 -0
- package/src/ordered_read.ts +2 -1
- package/src/package_config.ts +33 -12
- package/src/package_dependencies.ts +1 -0
- package/src/plan_source_slice.ts +30 -1
- package/src/protobuf_field_number.ts +36 -0
- package/src/provenance_wire.ts +6 -0
- package/src/query.ts +2 -1
- package/src/read.ts +50 -0
- package/src/relation.ts +4 -1
- package/src/relation_schema.ts +15 -2
- package/src/report.ts +2 -2
- package/src/sqlite_computation_bundle.ts +78 -0
- package/src/sqlite_computed.ts +102 -0
- package/src/sqlite_counts.ts +154 -0
- package/src/sqlite_layout.ts +823 -0
- package/src/sqlite_reads.ts +275 -0
- package/src/sqlite_samples.ts +185 -0
- package/src/stable_id_identity_bridge.ts +1 -1
- package/src/stable_ids_for_module.ts +16 -4
- package/src/test_call_usda.ts +6 -6
- package/src/usda_relationship_integrity.ts +20 -3
- package/src/usda_text.ts +21 -1
- package/src/value_object.ts +81 -11
- package/src/wire.ts +22 -0
- package/src/wire_encode.ts +227 -20
- package/src/workspace_sharding.ts +15 -6
- package/src/workspace_sharing.ts +51 -49
- package/src/zod_introspection.ts +2 -0
- package/compat_package.mjs +0 -46
- package/dart/lib/src/home.dart +0 -15
- package/dart/lib/src/runner/offline-install.mjs +0 -15367
- package/dart/lib/src/source_trust.dart +0 -51
- package/dart/lib/src/webview_bridge.dart +0 -6540
- package/dart/lib/src/workspace_name.dart +0 -30
- package/dart/test/acquire_session_credentials_test.dart +0 -150
- package/dart/test/acquire_session_test.dart +0 -534
- package/dart/test/adv_realm_interference_test.dart +0 -600
- package/dart/test/cloud_bound_topology_test.dart +0 -168
- package/dart/test/cluster_births_test.dart +0 -202
- package/dart/test/cluster_device_keyed_acceptance_test.dart +0 -105
- package/dart/test/cluster_local_autosync_test.dart +0 -123
- package/dart/test/cluster_scale_test.dart +0 -122
- package/dart/test/compat_test.dart +0 -61
- package/dart/test/dlq_session_surface_test.dart +0 -222
- package/dart/test/first_app_gauntlet_test.dart +0 -386
- package/dart/test/fixtures/wedge/fake-install.mjs +0 -11
- package/dart/test/four_layer_nested_topology_test.dart +0 -290
- package/dart/test/home_parity_test.dart +0 -13
- package/dart/test/local_sync_inert_test.dart +0 -107
- package/dart/test/node_runner_transport_test.dart +0 -78
- package/dart/test/parent_signer_recovery_test.dart +0 -155
- package/dart/test/residency_refusal_test.dart +0 -49
- package/dart/test/sealing_client_test.dart +0 -181
- package/dart/test/session_bound_test.dart +0 -285
- package/dart/test/stale_bundle_test.dart +0 -80
- package/dart/test/vo_read_typing_test.dart +0 -131
- package/dart/test/watch_after_offer_stall_test.dart +0 -100
- package/dart/test/webview_bridge_test.dart +0 -1930
- package/dart/test/workspace_name_test.dart +0 -24
- package/runtime/generated-application-host.js +0 -22860
- package/src/codegen_query_usda.ts +0 -214
- package/src/compat_manifest.ts +0 -26
- package/src/compat_package_main.ts +0 -224
- package/src/shape_compat.ts +0 -352
- package/src/usd_state.ts +0 -505
package/src/workspace_sharing.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// Durable, framework-owned delivery of a business application's access record.
|
|
2
2
|
//
|
|
3
|
-
// The domain records
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// delivery
|
|
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
|
|
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
|
|
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
|
|
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
|
|
132
|
-
|
|
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;
|
|
141
|
+
* domain state; the ordinary Peer Office correspondence desk owns delivery and retry.
|
|
146
142
|
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
}
|
package/src/zod_introspection.ts
CHANGED
|
@@ -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",
|
package/compat_package.mjs
DELETED
|
@@ -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
|
-
}
|
package/dart/lib/src/home.dart
DELETED
|
@@ -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
|
-
}
|