@githolon/dsl 0.108.7 → 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 +1994 -1189
- 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/evolve_preview.ts
CHANGED
|
@@ -21,7 +21,10 @@
|
|
|
21
21
|
* REMOVAL (refuse) — a sid disappeared; declare a typed retirement in the evolution layer.
|
|
22
22
|
* CONTRACT (refuse) — same sid, changed value language without a deterministic projection;
|
|
23
23
|
* needs `.evolvesFrom(...)`, never a disposition.
|
|
24
|
-
* DRIVER (refuse) — same sid,
|
|
24
|
+
* DRIVER (refuse) — same sid, merge driver moved to a different stored value space (e.g.
|
|
25
|
+
* Lww → Counter); needs a typed evolution or a new field. Switching among single-value
|
|
26
|
+
* drivers (Lww/LwwCausal/LwwBy/FirstWriterWins/FirstWriterCandidates/Surfaced/Attributed)
|
|
27
|
+
* is a plain law change (D20: the driver is a projection-time reduction).
|
|
25
28
|
* PAYLOAD (warn) — a directive's payload shape changed; clients compiled against the old
|
|
26
29
|
* law get typed 422s until regenerated (directives are not sid-tracked).
|
|
27
30
|
*
|
|
@@ -31,13 +34,14 @@
|
|
|
31
34
|
* reading the carried sids, never produces.
|
|
32
35
|
*/
|
|
33
36
|
import type { Finding } from "./law_check.js";
|
|
34
|
-
import type { DirectivePayloadShape, DomainInterface } from "./
|
|
35
|
-
import { domainInterface } from "./
|
|
37
|
+
import type { DirectivePayloadShape, DomainInterface } from "./compatibility_graph.js";
|
|
38
|
+
import { domainInterface } from "./compatibility_graph.js";
|
|
36
39
|
import type { StableIds } from "./stable_ids_types.js";
|
|
37
40
|
import type { CompilerIdentityModel } from "./identity_model.js";
|
|
38
41
|
export type { CompilerIdentityModel } from "./identity_model.js";
|
|
39
42
|
import type { DomainModule } from "./codegen_dart.js";
|
|
40
43
|
import type { WireSchema } from "./wire.js";
|
|
44
|
+
import { driversShareValueSpace } from "./drivers.js";
|
|
41
45
|
|
|
42
46
|
// ── the normalized law shape both sides of the diff speak ──────────────────────────
|
|
43
47
|
|
|
@@ -346,8 +350,11 @@ function diffDomain(
|
|
|
346
350
|
});
|
|
347
351
|
}
|
|
348
352
|
const kindChanged = oldF.kind !== "" && newF.kind !== "" && oldF.kind !== newF.kind;
|
|
353
|
+
// A driver switch that keeps the stored value space (among single-value drivers, D20)
|
|
354
|
+
// is a plain law change: the projection re-reduces the same stored antichain.
|
|
349
355
|
const driverChanged =
|
|
350
|
-
oldF.driver !== undefined && newF.driver !== undefined && oldF.driver !== newF.driver
|
|
356
|
+
oldF.driver !== undefined && newF.driver !== undefined && oldF.driver !== newF.driver &&
|
|
357
|
+
!driversShareValueSpace(JSON.parse(oldF.driver), JSON.parse(newF.driver));
|
|
351
358
|
const contractChanged =
|
|
352
359
|
oldF.contract !== undefined && newF.contract !== undefined && oldF.contract !== newF.contract;
|
|
353
360
|
const evolutionCovered = evolutionReaches(newF, oldF.schema, newF.schema);
|
package/src/exists.ts
CHANGED
|
@@ -57,6 +57,7 @@ export interface ExistsDecl extends CountDecl {
|
|
|
57
57
|
export interface ExistsBuilder<F extends Record<string, Field> = Record<string, Field>> {
|
|
58
58
|
readonly id: string;
|
|
59
59
|
readonly of: string;
|
|
60
|
+
readonly _existsMarker: true;
|
|
60
61
|
/** Attach a PREDICATE: only aggregates satisfying it count toward existence. */
|
|
61
62
|
where(fn: (p: ReturnType<typeof predBuilder<F>>) => Predicate<F>): ExistsBuilder<F>;
|
|
62
63
|
/** Partition by a GROUP-BY field: exists per distinct group-key value. */
|
|
@@ -136,6 +137,7 @@ function makeExistsBuilder<F extends Record<string, Field>>(
|
|
|
136
137
|
const b = {
|
|
137
138
|
id,
|
|
138
139
|
of: ofType,
|
|
140
|
+
_existsMarker: true as const,
|
|
139
141
|
...(where !== undefined ? { _where: where } : {}),
|
|
140
142
|
where(fn: (p: ReturnType<typeof predBuilder<F>>) => Predicate<F>): ExistsBuilder<F> {
|
|
141
143
|
const pred = fn(predBuilder<F>());
|
package/src/fields.ts
CHANGED
|
@@ -143,7 +143,11 @@ export interface EvidenceRefValue {
|
|
|
143
143
|
storageClass: "git" | "external";
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* One workspace-qualified record identity inside Nomos custody.
|
|
148
|
+
* `workspace` is an identity, not a URL: routing and retention come from that
|
|
149
|
+
* workspace's independently verified placement ref. This value grants no authority.
|
|
150
|
+
*/
|
|
147
151
|
export interface NomosRefValue {
|
|
148
152
|
readonly workspace: string;
|
|
149
153
|
readonly type: string;
|
|
@@ -250,6 +254,55 @@ export const versionedNomosRefValueSchema: z.ZodType<VersionedNomosRefValue> = z
|
|
|
250
254
|
series: nomosRefValueSchema,
|
|
251
255
|
}).strict();
|
|
252
256
|
|
|
257
|
+
// These are the same global brands consumed by `law_value_type.ts`. Field
|
|
258
|
+
// builders must put nominal reference meaning on the Zod value itself because
|
|
259
|
+
// that value is what is lowered into the shared law graph and, from there, the
|
|
260
|
+
// Protobuf contract used by every language. Keeping the target solely on the
|
|
261
|
+
// outer Field made the graph see an anonymous record and forced generators to
|
|
262
|
+
// rediscover type meaning independently.
|
|
263
|
+
const NOMOS_REFOF_SCHEMA_BRAND = Symbol.for("nomos.refOf");
|
|
264
|
+
const NOMOS_VERSIONED_REFOF_SCHEMA_BRAND = Symbol.for("nomos.versionedRefOf");
|
|
265
|
+
|
|
266
|
+
function nomosRefSchema(
|
|
267
|
+
aggregateType: string,
|
|
268
|
+
targetKind: "aggregate" | "contract",
|
|
269
|
+
): z.ZodType<NomosRefValue> {
|
|
270
|
+
const schema = z.object({
|
|
271
|
+
workspace: z.string().min(1),
|
|
272
|
+
type: z.string().min(1),
|
|
273
|
+
id: z.string().min(1),
|
|
274
|
+
}).strict();
|
|
275
|
+
Object.defineProperty(schema, NOMOS_REFOF_SCHEMA_BRAND, {
|
|
276
|
+
value: { aggregateType, targetKind },
|
|
277
|
+
enumerable: false,
|
|
278
|
+
});
|
|
279
|
+
return schema;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function versionedNomosRefSchema(
|
|
283
|
+
targetAggregateType: string,
|
|
284
|
+
targetKind: "aggregate" | "contract",
|
|
285
|
+
seriesAggregateType: string,
|
|
286
|
+
seriesKind: "aggregate" | "contract",
|
|
287
|
+
currentField: string,
|
|
288
|
+
): z.ZodType<VersionedNomosRefValue> {
|
|
289
|
+
const schema = z.object({
|
|
290
|
+
pinned: nomosRefValueSchema,
|
|
291
|
+
series: nomosRefValueSchema,
|
|
292
|
+
}).strict();
|
|
293
|
+
Object.defineProperty(schema, NOMOS_VERSIONED_REFOF_SCHEMA_BRAND, {
|
|
294
|
+
value: {
|
|
295
|
+
targetAggregateType,
|
|
296
|
+
targetKind,
|
|
297
|
+
seriesAggregateType,
|
|
298
|
+
seriesKind,
|
|
299
|
+
currentField,
|
|
300
|
+
},
|
|
301
|
+
enumerable: false,
|
|
302
|
+
});
|
|
303
|
+
return schema;
|
|
304
|
+
}
|
|
305
|
+
|
|
253
306
|
/** The Zod schema for an authored `EvidenceRefValue` — the single source of truth. */
|
|
254
307
|
export const evidenceRefSchema: z.ZodType<EvidenceRefValue> = z.object({
|
|
255
308
|
hash: z.string(),
|
|
@@ -288,28 +341,30 @@ export type ValueObjectFieldDescriptor =
|
|
|
288
341
|
/** Present only for an `idOf(recordContract(...))` target. Aggregate is the default. */
|
|
289
342
|
readonly idOfContract?: true;
|
|
290
343
|
readonly optional?: true;
|
|
344
|
+
readonly nullable?: true;
|
|
291
345
|
}
|
|
292
346
|
/** `int: true` when the zod carried `.int()` (Dart `int`, TS `number`); `unit` when the field
|
|
293
347
|
* was declared through `unit(...)` — the generated Dart extension-type wrapper's name. */
|
|
294
|
-
| { readonly type: "number"; readonly int?: true; readonly unit?: string; readonly optional?: true }
|
|
295
|
-
| { readonly type: "boolean"; readonly optional?: true }
|
|
348
|
+
| { readonly type: "number"; readonly int?: true; readonly unit?: string; readonly optional?: true; readonly nullable?: true }
|
|
349
|
+
| { readonly type: "boolean"; readonly optional?: true; readonly nullable?: true }
|
|
296
350
|
| {
|
|
297
351
|
readonly type: "enum";
|
|
298
352
|
readonly values: readonly string[];
|
|
299
353
|
/** Stable authored scalar name from enumType(...), when this is shared vocabulary. */
|
|
300
354
|
readonly name?: string;
|
|
301
355
|
readonly optional?: true;
|
|
356
|
+
readonly nullable?: true;
|
|
302
357
|
}
|
|
303
358
|
/** A `z.literal(<string>)` — a CONSTANT discriminator-style member (generated as a getter). */
|
|
304
|
-
| { readonly type: "literal"; readonly value: string; readonly optional?: true }
|
|
305
|
-
| { readonly type: "array"; readonly items: ValueObjectFieldDescriptor; readonly optional?: true }
|
|
359
|
+
| { readonly type: "literal"; readonly value: string; readonly optional?: true; readonly nullable?: true }
|
|
360
|
+
| { readonly type: "array"; readonly items: ValueObjectFieldDescriptor; readonly optional?: true; readonly nullable?: true }
|
|
306
361
|
/** A MAP/RECORD (`z.record(z.string(), X)`) — string-keyed entries of `values`. TS
|
|
307
362
|
* `Record<string, V>`, Dart `Map<String, V>`; the wire is a plain json object. */
|
|
308
|
-
| { readonly type: "map"; readonly values: ValueObjectFieldDescriptor; readonly optional?: true }
|
|
363
|
+
| { readonly type: "map"; readonly values: ValueObjectFieldDescriptor; readonly optional?: true; readonly nullable?: true }
|
|
309
364
|
/** A nested value object, referenced BY NAME (its own descriptor rides alongside). */
|
|
310
|
-
| { readonly type: "object"; readonly ref: string; readonly optional?: true }
|
|
365
|
+
| { readonly type: "object"; readonly ref: string; readonly optional?: true; readonly nullable?: true }
|
|
311
366
|
/** A nested GEO value object (RFC 7946 geometry), referenced by name. */
|
|
312
|
-
| { readonly type: "geometry"; readonly ref: string; readonly geometry: GeometryKind; readonly optional?: true };
|
|
367
|
+
| { readonly type: "geometry"; readonly ref: string; readonly geometry: GeometryKind; readonly optional?: true; readonly nullable?: true };
|
|
313
368
|
|
|
314
369
|
/**
|
|
315
370
|
* One arm of a `union(...)` value object: either an ANONYMOUS shape (fields ride inline,
|
|
@@ -947,7 +1002,7 @@ function assertNullEligible(field: Field<unknown, FieldKind>, wrapper: "clearabl
|
|
|
947
1002
|
);
|
|
948
1003
|
}
|
|
949
1004
|
const dk = (field.driver as { kind?: string }).kind;
|
|
950
|
-
if (dk !== "FirstWriterWins" && dk !== "Lww" && dk !== "LwwCausal" && dk !== "LwwBy") {
|
|
1005
|
+
if (dk !== "FirstWriterWins" && dk !== "FirstWriterCandidates" && dk !== "Lww" && dk !== "LwwCausal" && dk !== "LwwBy") {
|
|
951
1006
|
throw new Error(
|
|
952
1007
|
`t.${wrapper}(...) needs a wholesale scalar field (FirstWriterWins / Lww / LwwCausal / LwwBy) — ` +
|
|
953
1008
|
`a null/clear replaces the value WHOLESALE, which a '${dk}' merge cannot express.`,
|
|
@@ -1282,7 +1337,10 @@ export const t = {
|
|
|
1282
1337
|
target: AggregateHandle<string, Record<string, Field>> | ContractHandle,
|
|
1283
1338
|
): Field<NomosRefValue, "ref"> {
|
|
1284
1339
|
const isContract = (target as { __isContract?: unknown }).__isContract === true;
|
|
1285
|
-
return makeField<NomosRefValue, "ref">("ref",
|
|
1340
|
+
return makeField<NomosRefValue, "ref">("ref", nomosRefSchema(
|
|
1341
|
+
target.id,
|
|
1342
|
+
isContract ? "contract" : "aggregate",
|
|
1343
|
+
), FirstWriterWins, {
|
|
1286
1344
|
refAggregateId: target.id,
|
|
1287
1345
|
nomosRef: {
|
|
1288
1346
|
targetAggregateId: target.id,
|
|
@@ -1314,7 +1372,13 @@ export const t = {
|
|
|
1314
1372
|
const seriesIsContract = (opts.series as { __isContract?: unknown }).__isContract === true;
|
|
1315
1373
|
return makeField<VersionedNomosRefValue, "ref">(
|
|
1316
1374
|
"ref",
|
|
1317
|
-
|
|
1375
|
+
versionedNomosRefSchema(
|
|
1376
|
+
opts.target.id,
|
|
1377
|
+
targetIsContract ? "contract" : "aggregate",
|
|
1378
|
+
opts.series.id,
|
|
1379
|
+
seriesIsContract ? "contract" : "aggregate",
|
|
1380
|
+
opts.current,
|
|
1381
|
+
),
|
|
1318
1382
|
FirstWriterWins,
|
|
1319
1383
|
{
|
|
1320
1384
|
versionedForeignRef: {
|
package/src/flow_gate.ts
CHANGED
|
@@ -33,6 +33,7 @@ type Projection = {
|
|
|
33
33
|
readonly key?: readonly string[];
|
|
34
34
|
readonly by?: string;
|
|
35
35
|
readonly valueField?: string;
|
|
36
|
+
readonly orderKey?: string;
|
|
36
37
|
readonly where?: CanonicalPred;
|
|
37
38
|
};
|
|
38
39
|
|
|
@@ -120,7 +121,7 @@ export function assertFlowGate(m: FlowLaw, mod?: FlowModule): void {
|
|
|
120
121
|
const typeOf = (p: Projection): string | undefined =>
|
|
121
122
|
p.of ?? (typeof p.returns === "string" ? p.returns : undefined);
|
|
122
123
|
const fieldsOf = (p: Projection): (string | undefined)[] =>
|
|
123
|
-
[...(p.key ?? []), p.by, p.valueField, ...predFields(p.where)];
|
|
124
|
+
[...(p.key ?? []), p.by, p.valueField, p.orderKey, ...predFields(p.where)];
|
|
124
125
|
const reads: { list: readonly Projection[]; sink: string }[] = [
|
|
125
126
|
{ list: (m.queries ?? []) as unknown as Projection[], sink: "a query key" },
|
|
126
127
|
{ list: (m.counts ?? []) as unknown as Projection[], sink: "a count group / where" },
|
|
@@ -10,13 +10,20 @@
|
|
|
10
10
|
|
|
11
11
|
import type { AggregateHandle } from "../aggregate.js";
|
|
12
12
|
import type { ApplicationHomeGenesis } from "../application_home_genesis.js";
|
|
13
|
-
import type { WorkspaceRole } from "../births.js";
|
|
14
13
|
import type { Directive } from "../directive.js";
|
|
14
|
+
import { intent } from "../intent.js";
|
|
15
15
|
import type { QueryDecl } from "../query.js";
|
|
16
16
|
import { APPLICATION_HOME_DOMAIN } from "./application_home_domain.js";
|
|
17
17
|
import {
|
|
18
18
|
AuthProvider,
|
|
19
|
+
AuthProviderCertificate,
|
|
20
|
+
AuthProviderKey,
|
|
21
|
+
AUTH_PROVIDER_AUTHORITY,
|
|
22
|
+
adoptIdentityProviderWitness,
|
|
19
23
|
authProvider,
|
|
24
|
+
authProviderCertificates,
|
|
25
|
+
authProviderKeys,
|
|
26
|
+
identityProviderSourceTrust,
|
|
20
27
|
authProviderSeedBeforeWarrant,
|
|
21
28
|
seedAuthProvider,
|
|
22
29
|
setAuthProvider,
|
|
@@ -38,12 +45,44 @@ import {
|
|
|
38
45
|
receivingGroupRelations,
|
|
39
46
|
receivingGroupRevocationFollowsPolicy,
|
|
40
47
|
recordShare,
|
|
48
|
+
recordReceivedWorkspaceAccess,
|
|
49
|
+
receivedWorkspaceAccess,
|
|
50
|
+
receivedWorkspaceAccessIsForOwner,
|
|
51
|
+
receivingGroupFoundedBirthBindsOwner,
|
|
41
52
|
seedBirthAttestation,
|
|
42
53
|
seedReceivingGroup,
|
|
43
54
|
seedReceivingGroupPolicy,
|
|
44
55
|
sharedByObject,
|
|
45
56
|
sharedByWorkspace,
|
|
46
|
-
|
|
57
|
+
PLATFORM_IDENTITY_PROVIDER_RECOVERY,
|
|
58
|
+
type ReceivingGroupRecoveryPolicy,
|
|
59
|
+
} from "./receiving_group.js";
|
|
60
|
+
import { receivingGroupRecoveryLaw } from "./receiving_group_recovery.js";
|
|
61
|
+
import {
|
|
62
|
+
BirthOrigin,
|
|
63
|
+
FoundingPrincipal,
|
|
64
|
+
birthOriginVirginOnly,
|
|
65
|
+
foundingPrincipalVirginOnly,
|
|
66
|
+
seedBirthOrigin,
|
|
67
|
+
seedFoundingPrincipal,
|
|
68
|
+
} from "./founding_genesis.js";
|
|
69
|
+
import {
|
|
70
|
+
enrollDevice,
|
|
71
|
+
principalScopeRelations,
|
|
72
|
+
relationTuplesByRelation,
|
|
73
|
+
revokeDevice,
|
|
74
|
+
} from "./principal_enrollment.js";
|
|
75
|
+
import { workspaceOperatorRelations } from "./workspaces.js";
|
|
76
|
+
import {
|
|
77
|
+
delegatedRoleRelations,
|
|
78
|
+
grantDelegatedRole,
|
|
79
|
+
revokeDelegatedRole,
|
|
80
|
+
} from "./delegated_roles.js";
|
|
81
|
+
import { consoleGovernanceLaw } from "./console_governance.js";
|
|
82
|
+
import { childAuthenticationExports } from "./child_authentication.js";
|
|
83
|
+
import { modelTransitionExports } from "./model_transition.js";
|
|
84
|
+
import { modelAuthorityRepairExports } from "./model_authority_repair.js";
|
|
85
|
+
import { modelAuthoritySeedBeforeWarrant, seatInheritedModelAuthority } from "./model_authority_seed.js";
|
|
47
86
|
import { RelationTuple, relationTuplesByObject } from "./relations.js";
|
|
48
87
|
import {
|
|
49
88
|
SignerDelegation,
|
|
@@ -55,7 +94,11 @@ import {
|
|
|
55
94
|
enrollSigner,
|
|
56
95
|
enrollSignerSelf,
|
|
57
96
|
enrollSignerSelfRequiresVerified,
|
|
97
|
+
enrollDelegationRetainsEvidence,
|
|
98
|
+
enrollFirstDeviceRetainsEvidence,
|
|
58
99
|
identityRelations,
|
|
100
|
+
lastAdmissionCheckpointSignerRemains,
|
|
101
|
+
revokeAdmissionCheckpointSigner,
|
|
59
102
|
revokeSigner,
|
|
60
103
|
revokeSignerEpochStrictlyIncreases,
|
|
61
104
|
signerDelegationByUser,
|
|
@@ -70,8 +113,10 @@ const internal = <T extends object>(value: T): Internal<T> => ({
|
|
|
70
113
|
...value,
|
|
71
114
|
businessBirthInternal: true,
|
|
72
115
|
});
|
|
73
|
-
const aggregate = (value: AggregateHandle): Internal<AggregateHandle> =>
|
|
74
|
-
|
|
116
|
+
const aggregate = (value: AggregateHandle): Internal<AggregateHandle> =>
|
|
117
|
+
internal(value);
|
|
118
|
+
const directive = <P>(value: Directive<P>): Internal<Directive<P>> =>
|
|
119
|
+
internal(value);
|
|
75
120
|
const query = (value: QueryDecl): Internal<QueryDecl> => internal(value);
|
|
76
121
|
|
|
77
122
|
// Parent primitive + the law its born home uses. The compiler supplies the application's explicit
|
|
@@ -80,8 +125,11 @@ export function applicationHomePolicyLaw(
|
|
|
80
125
|
maxChildWorkspacesPerUser: number,
|
|
81
126
|
birthPolicyDomains: readonly string[],
|
|
82
127
|
homeGenesis?: ApplicationHomeGenesis,
|
|
83
|
-
|
|
128
|
+
recoveryPosture?: ReceivingGroupRecoveryPolicy,
|
|
84
129
|
) {
|
|
130
|
+
// THE PARENT'S ROLE ON A RECEIVING GROUP IS A FRAMEWORK CONSTANT. The platform that births the anchor is
|
|
131
|
+
// its provider authority (verifier epochs + device repair flow down through that seat); no tenant names it.
|
|
132
|
+
const providerRootRoles = [AUTH_PROVIDER_AUTHORITY];
|
|
85
133
|
return {
|
|
86
134
|
__nomos_birthReceivingGroup: directive(
|
|
87
135
|
birthReceivingGroupForDomain(
|
|
@@ -89,20 +137,96 @@ export function applicationHomePolicyLaw(
|
|
|
89
137
|
maxChildWorkspacesPerUser,
|
|
90
138
|
birthPolicyDomains,
|
|
91
139
|
homeGenesis,
|
|
92
|
-
|
|
93
|
-
|
|
140
|
+
providerRootRoles,
|
|
141
|
+
recoveryPosture,
|
|
142
|
+
)
|
|
94
143
|
),
|
|
144
|
+
// THE RECOVERY DOOR IS DECLARED, NOT DISCOVERED. Only the attested-parent posture has a platform
|
|
145
|
+
// door; an application that declares nothing (or the guardian default) composes no recovery law at
|
|
146
|
+
// all, so its application-home identity is byte-identical to a compile before this existed.
|
|
147
|
+
...(recoveryPosture === PLATFORM_IDENTITY_PROVIDER_RECOVERY
|
|
148
|
+
? receivingGroupRecoveryLaw(recoveryPosture)
|
|
149
|
+
: {}),
|
|
150
|
+
// CHILD AUTHENTICATION IS FRAMEWORK LAW FOR EVERY PACKAGE THAT BIRTHS CHILDREN (receiving_group_
|
|
151
|
+
// lifecycle.md, cut 1 item 3): the verifier-epoch serve/accept pair and the workspace-parameterised
|
|
152
|
+
// child repair, composed here — the one compiler-owned domain, installed into every born workspace —
|
|
153
|
+
// so no tenant copies them per child kind. A package whose only birth-capable domain is this one
|
|
154
|
+
// births no children and composes none of it (the era rule).
|
|
155
|
+
...(birthPolicyDomains.some((domain) => domain !== APPLICATION_HOME_DOMAIN)
|
|
156
|
+
? childAuthenticationExports()
|
|
157
|
+
: {}),
|
|
158
|
+
// THE PARENT-DIRECTED MODEL TRANSITION (architecture/parent_directed_model_transition.md) rides the
|
|
159
|
+
// same seam: the platform's direction and the child's attested-parent acceptor, one exported pair,
|
|
160
|
+
// composed only when the package births children.
|
|
161
|
+
...(birthPolicyDomains.some((domain) => domain !== APPLICATION_HOME_DOMAIN)
|
|
162
|
+
? modelTransitionExports()
|
|
163
|
+
: {}),
|
|
164
|
+
// THE SELF-HEAL (same design, the third door): a child born before the birth seat existed, and
|
|
165
|
+
// never directed, asks its OWN verified parent for the model authority it should have been born
|
|
166
|
+
// holding. Composed under the same era rule, so a package that births nothing is byte-identical.
|
|
167
|
+
...(birthPolicyDomains.some((domain) => domain !== APPLICATION_HOME_DOMAIN)
|
|
168
|
+
? modelAuthorityRepairExports()
|
|
169
|
+
: {}),
|
|
95
170
|
};
|
|
96
171
|
}
|
|
172
|
+
// MODEL AUTHORITY DESCENDS: every receiving group is born holding its platform's installDomain holders
|
|
173
|
+
// (the genesis step the birth above embeds), so the anchor law declares the seed + its genesis-only posture.
|
|
174
|
+
export const __nomos_seatInheritedModelAuthority = directive(seatInheritedModelAuthority);
|
|
175
|
+
export const __nomos_modelAuthoritySeedBeforeWarrant = internal(modelAuthoritySeedBeforeWarrant);
|
|
97
176
|
export const __nomos_ReceivingGroup = aggregate(ReceivingGroup);
|
|
98
177
|
export const __nomos_seedReceivingGroup = directive(seedReceivingGroup);
|
|
99
178
|
export const __nomos_ReceivingGroupPolicy = aggregate(ReceivingGroupPolicy);
|
|
100
|
-
export const __nomos_seedReceivingGroupPolicy = directive(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
export const
|
|
104
|
-
|
|
105
|
-
|
|
179
|
+
export const __nomos_seedReceivingGroupPolicy = directive(
|
|
180
|
+
seedReceivingGroupPolicy
|
|
181
|
+
);
|
|
182
|
+
export const __nomos_receivingGroupNameBindsPrincipal = internal(
|
|
183
|
+
receivingGroupNameBindsPrincipal
|
|
184
|
+
);
|
|
185
|
+
export const __nomos_receivingGroupRejectsKeylessAdditionalDevice = internal(
|
|
186
|
+
receivingGroupRejectsKeylessAdditionalDevice
|
|
187
|
+
);
|
|
188
|
+
export const __nomos_receivingGroupAdditionalDeviceFollowsPolicy = internal(
|
|
189
|
+
receivingGroupAdditionalDeviceFollowsPolicy
|
|
190
|
+
);
|
|
191
|
+
export const __nomos_receivingGroupRevocationFollowsPolicy = internal(
|
|
192
|
+
receivingGroupRevocationFollowsPolicy
|
|
193
|
+
);
|
|
194
|
+
export const __nomos_receivingGroupRelations = internal(
|
|
195
|
+
receivingGroupRelations
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
// TOKEN-FREE FOUNDING (identity target model D22): the founding step a founded group's recipe carries,
|
|
199
|
+
// the birth origin and warrant the kernel's founded birth effect appends, and what they seat — the
|
|
200
|
+
// operator and enroller relations — plus the enrolled scope's first-key lane, so an enroller the group
|
|
201
|
+
// inherited from its parent enrols (and revokes) the owner's further devices here.
|
|
202
|
+
export const __nomos_FoundingPrincipal = aggregate(FoundingPrincipal);
|
|
203
|
+
// Parent side: the proof that a founded group's author is its owner, and the enroller read its recipe captures.
|
|
204
|
+
export const __nomos_receivingGroupFoundedBirthBindsOwner = internal(receivingGroupFoundedBirthBindsOwner);
|
|
205
|
+
export const __nomos_relationTuplesByRelation = query(relationTuplesByRelation);
|
|
206
|
+
export const __nomos_seedFoundingPrincipal = directive(seedFoundingPrincipal);
|
|
207
|
+
export const __nomos_foundingPrincipalVirginOnly = internal(foundingPrincipalVirginOnly);
|
|
208
|
+
export const __nomos_BirthOrigin = aggregate(BirthOrigin);
|
|
209
|
+
export const __nomos_seedBirthOrigin = directive(seedBirthOrigin);
|
|
210
|
+
export const __nomos_birthOriginVirginOnly = internal(birthOriginVirginOnly);
|
|
211
|
+
export const __nomos_workspaceOperatorRelations = internal(workspaceOperatorRelations);
|
|
212
|
+
export const __nomos_principalScopeRelations = internal(principalScopeRelations);
|
|
213
|
+
// The console's lawful reach into the group (framework/console_governance.ts): the founding seat of the
|
|
214
|
+
// inherited operators' and enrollers' keys and law authority, operator handover, console key rotation.
|
|
215
|
+
export const __nomos_seedInheritedGovernance = directive(consoleGovernanceLaw.seedInheritedGovernance);
|
|
216
|
+
export const __nomos_inheritedGovernanceBeforeWarrant = internal(consoleGovernanceLaw.inheritedGovernanceBeforeWarrant);
|
|
217
|
+
export const __nomos_grantConsoleOperator = directive(consoleGovernanceLaw.grantConsoleOperator);
|
|
218
|
+
export const __nomos_revokeConsoleOperator = directive(consoleGovernanceLaw.revokeConsoleOperator);
|
|
219
|
+
export const __nomos_lastOperatorRemains = internal(consoleGovernanceLaw.lastOperatorRemains);
|
|
220
|
+
export const __nomos_enrollConsoleSigner = directive(consoleGovernanceLaw.enrollConsoleSigner);
|
|
221
|
+
export const __nomos_revokeConsoleSigner = directive(consoleGovernanceLaw.revokeConsoleSigner);
|
|
222
|
+
export const __nomos_lastConsoleSignerRemains = internal(consoleGovernanceLaw.lastConsoleSignerRemains);
|
|
223
|
+
// Roles a parent delegates into founded groups: the parent's policy and grant lane. The child's seat
|
|
224
|
+
// and adoption lane are the tenant's `delegatedRoles(...)` declaration, in the domain that owns the role.
|
|
225
|
+
export const __nomos_delegatedRoleRelations = internal(delegatedRoleRelations);
|
|
226
|
+
export const __nomos_grantDelegatedRole = directive(grantDelegatedRole);
|
|
227
|
+
export const __nomos_revokeDelegatedRole = directive(revokeDelegatedRole);
|
|
228
|
+
export const __nomos_enrollDevice = directive(enrollDevice);
|
|
229
|
+
export const __nomos_revokeDevice = directive(revokeDevice);
|
|
106
230
|
|
|
107
231
|
// Subject-side discovery/share custody.
|
|
108
232
|
export const __nomos_SharedWithMe = aggregate(SharedWithMe);
|
|
@@ -110,6 +234,9 @@ export const __nomos_recordShare = directive(recordShare);
|
|
|
110
234
|
export const __nomos_pruneShare = directive(pruneShare);
|
|
111
235
|
export const __nomos_sharedByWorkspace = query(sharedByWorkspace);
|
|
112
236
|
export const __nomos_sharedByObject = query(sharedByObject);
|
|
237
|
+
export const __nomos_recordReceivedWorkspaceAccess = recordReceivedWorkspaceAccess;
|
|
238
|
+
export const __nomos_receivedWorkspaceAccess = query(receivedWorkspaceAccess);
|
|
239
|
+
export const __nomos_receivedWorkspaceAccessIsForOwner = internal(receivedWorkspaceAccessIsForOwner);
|
|
113
240
|
|
|
114
241
|
// Warrant, provenance, signer seating, recovery and verifier state.
|
|
115
242
|
export const __nomos_GenesisWarrant = aggregate(GenesisWarrant);
|
|
@@ -123,21 +250,46 @@ export const __nomos_RelationTuple = aggregate(RelationTuple);
|
|
|
123
250
|
export const __nomos_relationTuplesByObject = query(relationTuplesByObject);
|
|
124
251
|
export const __nomos_identityRelations = internal(identityRelations);
|
|
125
252
|
export const __nomos_enrollSigner = directive(enrollSigner);
|
|
126
|
-
export const
|
|
253
|
+
export const __nomos_enrollAdmissionCheckpointSignerIntent = internal(
|
|
254
|
+
intent("enrollAdmissionCheckpointSigner").performs(
|
|
255
|
+
enrollAdmissionCheckpointSigner
|
|
256
|
+
)
|
|
257
|
+
);
|
|
258
|
+
// Called directly (as revokeSigner is), so its last-key invariant binds the directive the offer names.
|
|
259
|
+
export const __nomos_revokeAdmissionCheckpointSigner = directive(revokeAdmissionCheckpointSigner);
|
|
260
|
+
export const __nomos_lastAdmissionCheckpointSignerRemains = internal(
|
|
261
|
+
lastAdmissionCheckpointSignerRemains
|
|
262
|
+
);
|
|
127
263
|
export const __nomos_enrollFirstDevice = directive(enrollFirstDevice);
|
|
128
264
|
export const __nomos_enrollSignerSelf = directive(enrollSignerSelf);
|
|
129
|
-
export const __nomos_enrollSignerSelfRequiresVerified = internal(
|
|
265
|
+
export const __nomos_enrollSignerSelfRequiresVerified = internal(
|
|
266
|
+
enrollSignerSelfRequiresVerified
|
|
267
|
+
);
|
|
130
268
|
export const __nomos_revokeSigner = directive(revokeSigner);
|
|
131
|
-
export const __nomos_revokeSignerEpochStrictlyIncreases = internal(
|
|
269
|
+
export const __nomos_revokeSignerEpochStrictlyIncreases = internal(
|
|
270
|
+
revokeSignerEpochStrictlyIncreases
|
|
271
|
+
);
|
|
132
272
|
export const __nomos_SignerEpoch = aggregate(SignerEpoch);
|
|
133
273
|
export const __nomos_signerEpochCurrent = query(signerEpochCurrent);
|
|
134
274
|
export const __nomos_advanceSignerEpoch = directive(advanceSignerEpoch);
|
|
135
|
-
export const __nomos_signerEpochStrictlyIncreases = internal(
|
|
275
|
+
export const __nomos_signerEpochStrictlyIncreases = internal(
|
|
276
|
+
signerEpochStrictlyIncreases
|
|
277
|
+
);
|
|
278
|
+
export const __nomos_enrollDelegationRetainsEvidence = internal(enrollDelegationRetainsEvidence);
|
|
279
|
+
export const __nomos_enrollFirstDeviceRetainsEvidence = internal(enrollFirstDeviceRetainsEvidence);
|
|
136
280
|
export const __nomos_SignerDelegation = aggregate(SignerDelegation);
|
|
137
281
|
export const __nomos_enrollDelegation = directive(enrollDelegation);
|
|
138
282
|
export const __nomos_signerDelegationByUser = query(signerDelegationByUser);
|
|
139
283
|
export const __nomos_AuthProvider = aggregate(AuthProvider);
|
|
284
|
+
export const __nomos_AuthProviderKey = aggregate(AuthProviderKey);
|
|
285
|
+
export const __nomos_AuthProviderCertificate = aggregate(AuthProviderCertificate);
|
|
140
286
|
export const __nomos_seedAuthProvider = directive(seedAuthProvider);
|
|
141
|
-
export const __nomos_authProviderSeedBeforeWarrant = internal(
|
|
287
|
+
export const __nomos_authProviderSeedBeforeWarrant = internal(
|
|
288
|
+
authProviderSeedBeforeWarrant
|
|
289
|
+
);
|
|
142
290
|
export const __nomos_setAuthProvider = directive(setAuthProvider);
|
|
291
|
+
export const __nomos_adoptIdentityProviderWitness = directive(adoptIdentityProviderWitness);
|
|
292
|
+
export const __nomos_identityProviderSourceTrust = internal(identityProviderSourceTrust);
|
|
143
293
|
export const __nomos_authProvider = query(authProvider);
|
|
294
|
+
export const __nomos_authProviderKeys = query(authProviderKeys);
|
|
295
|
+
export const __nomos_authProviderCertificates = query(authProviderCertificates);
|
|
@@ -32,6 +32,7 @@ import { Lww } from "../drivers.js";
|
|
|
32
32
|
import { directive } from "../directive.js";
|
|
33
33
|
import { set } from "../ops.js";
|
|
34
34
|
import { query } from "../query.js";
|
|
35
|
+
import { valueObject } from "../value_object.js";
|
|
35
36
|
|
|
36
37
|
/** The framework-reserved receipt instance-id prefix (kernel mirror:
|
|
37
38
|
* `nomos_executor::ATTESTATION_RECEIPT_PREFIX`). */
|
|
@@ -58,6 +59,10 @@ export function sourceDishonorId(sourceGenesis: string, keyHash: string): string
|
|
|
58
59
|
* extra signed bytes and NO reader identity (least-disclosure). `receiptPath` (the kernel
|
|
59
60
|
* query op) serves Merkle inclusion `{batchRoot, index, path}` from the folded `leaves`.
|
|
60
61
|
*/
|
|
62
|
+
export const AttestationReceiptLeaves = valueObject("AttestationReceiptLeaves", {
|
|
63
|
+
values: z.array(z.string().min(1)).min(1),
|
|
64
|
+
});
|
|
65
|
+
|
|
61
66
|
export const NomosAttestationReceipt = aggregate("NomosAttestationReceipt", {
|
|
62
67
|
/** `"<epoch>-<nSealedReceiptsInFold>-<keyHash8>"` — chain-derived mint (collision-free across remounts); promised on every envelope's `receipt_hint`. */
|
|
63
68
|
batchId: t.string().merge(Lww),
|
|
@@ -65,8 +70,8 @@ export const NomosAttestationReceipt = aggregate("NomosAttestationReceipt", {
|
|
|
65
70
|
batchRoot: t.string().merge(Lww),
|
|
66
71
|
/** The leaf count (kernel-verified == leaves.length at the gate). */
|
|
67
72
|
leafCount: t.int().merge(Lww),
|
|
68
|
-
/** The leaf hashes, in serve order
|
|
69
|
-
leaves:
|
|
73
|
+
/** The leaf hashes, in serve order, stored as a typed structural value object. */
|
|
74
|
+
leaves: AttestationReceiptLeaves.field().merge(Lww),
|
|
70
75
|
/** The `attested_at_ms` range the batch covers. */
|
|
71
76
|
firstAt: t.int().merge(Lww),
|
|
72
77
|
lastAt: t.int().merge(Lww),
|
|
@@ -113,7 +118,7 @@ export const recordAttestationBatch = directive("recordAttestationBatch")
|
|
|
113
118
|
set(r, "batchId", p.batchId),
|
|
114
119
|
set(r, "batchRoot", p.batchRoot),
|
|
115
120
|
set(r, "leafCount", p.leafCount),
|
|
116
|
-
set(r, "leaves",
|
|
121
|
+
set(r, "leaves", { values: p.leaves }),
|
|
117
122
|
set(r, "firstAt", p.firstAt),
|
|
118
123
|
set(r, "lastAt", p.lastAt),
|
|
119
124
|
set(r, "headAtSeal", p.headAtSeal),
|