@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
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// Compile-time indexing of the existing transient typed law graph. This is neither a second
|
|
2
|
+
// law representation nor an authorization evaluator: only emitted USD is runtime authority.
|
|
3
|
+
import type { LawGraph } from "./law_graph.js";
|
|
4
|
+
import type { CompiledSparseLawGraphUsda } from "./law_graph_usda.js";
|
|
5
|
+
|
|
6
|
+
type Node = LawGraph["nodes"][number];
|
|
7
|
+
type Dependency = Parameters<
|
|
8
|
+
CompiledSparseLawGraphUsda["resolveDependency"]
|
|
9
|
+
>[0];
|
|
10
|
+
interface Entry {
|
|
11
|
+
readonly graph: LawGraph;
|
|
12
|
+
readonly node: Node;
|
|
13
|
+
readonly path: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface LawDependencySlice {
|
|
17
|
+
readonly nodes: ReadonlySet<Node>;
|
|
18
|
+
readonly paths: ReadonlySet<string>;
|
|
19
|
+
readonly visitedNodes: number;
|
|
20
|
+
readonly traversedEdges: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Build once per package. A selection subsequently visits only reachable adjacency lists.
|
|
24
|
+
* Domain ownership is context, not a request to follow the domain's complete member inventory.
|
|
25
|
+
* USD population masks retain the selected prims' ancestors and their authored metadata.
|
|
26
|
+
*/
|
|
27
|
+
export class LawDependencyIndex {
|
|
28
|
+
private readonly entries = new Map<Node, Entry>();
|
|
29
|
+
private readonly edges = new Map<Node, Set<Node>>();
|
|
30
|
+
private readonly guards = new Map<Node, Set<Node>>();
|
|
31
|
+
private readonly local = new Map<LawGraph, Map<string, Node>>();
|
|
32
|
+
private readonly byPath = new Map<string, Node>();
|
|
33
|
+
|
|
34
|
+
constructor(
|
|
35
|
+
graphs: readonly LawGraph[],
|
|
36
|
+
paths: ReadonlyMap<Node, string>,
|
|
37
|
+
private readonly resolveExport: (
|
|
38
|
+
graph: LawGraph,
|
|
39
|
+
dependency: Dependency
|
|
40
|
+
) => string
|
|
41
|
+
) {
|
|
42
|
+
for (const graph of graphs) {
|
|
43
|
+
this.local.set(
|
|
44
|
+
graph,
|
|
45
|
+
new Map(graph.nodes.map((node) => [node.entity.id, node]))
|
|
46
|
+
);
|
|
47
|
+
for (const node of graph.nodes) {
|
|
48
|
+
const path = paths.get(node);
|
|
49
|
+
this.entries.set(node, { graph, node, path });
|
|
50
|
+
if (path !== undefined) this.byPath.set(path, node);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
for (const entry of this.entries.values()) {
|
|
54
|
+
// Lowering can retain source-only anonymous occurrences which have no emitted prim.
|
|
55
|
+
// They are not index roots. A semantic edge reaching one still fails in select(), below.
|
|
56
|
+
if (entry.path === undefined) continue;
|
|
57
|
+
const edges = new Set<Node>();
|
|
58
|
+
// `owner` locates a structural node in the source graph. Except a flow's explicit `on`
|
|
59
|
+
// relationship it is provenance/namespace placement, not a runtime dependency back to an
|
|
60
|
+
// unrelated source command which happened to introduce a shared value type first.
|
|
61
|
+
const { owner: _owner, ...value } = entry.node as Node & {
|
|
62
|
+
owner?: unknown;
|
|
63
|
+
};
|
|
64
|
+
const semantic =
|
|
65
|
+
entry.node.kind === "structural" && entry.node.structuralKind === "flow"
|
|
66
|
+
? entry.node
|
|
67
|
+
: value;
|
|
68
|
+
try {
|
|
69
|
+
this.visitReferences(entry.graph, semantic, (target) => {
|
|
70
|
+
if (target.kind !== "domain") edges.add(target);
|
|
71
|
+
});
|
|
72
|
+
} catch (error) {
|
|
73
|
+
throw new Error(
|
|
74
|
+
`${entry.graph.domain.entity.label}/${entry.node.entity.label}: ${
|
|
75
|
+
error instanceof Error ? error.message : error
|
|
76
|
+
}`
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
this.edges.set(entry.node, edges);
|
|
80
|
+
const node = entry.node;
|
|
81
|
+
// These declarations point TO the governed member. Outgoing reachability alone would
|
|
82
|
+
// silently omit them. Keep these reverse applicability edges distinct from ordinary refs.
|
|
83
|
+
const appliesTo =
|
|
84
|
+
node.kind === "invariant"
|
|
85
|
+
? node.invariantKind === "workspace"
|
|
86
|
+
? [node.on]
|
|
87
|
+
: [node.onAggregate]
|
|
88
|
+
: node.kind === "structural" && node.structuralKind === "flow"
|
|
89
|
+
? [node.owner]
|
|
90
|
+
: node.kind === "capability"
|
|
91
|
+
? [
|
|
92
|
+
node.task,
|
|
93
|
+
node.obligation,
|
|
94
|
+
node.complete,
|
|
95
|
+
node.fail,
|
|
96
|
+
node.block,
|
|
97
|
+
node.deadLetter,
|
|
98
|
+
]
|
|
99
|
+
: [];
|
|
100
|
+
for (const ref of appliesTo) {
|
|
101
|
+
const target = this.local.get(entry.graph)?.get(ref.id);
|
|
102
|
+
if (target === undefined)
|
|
103
|
+
throw new Error(
|
|
104
|
+
`law guard '${node.entity.id}' has missing owner '${ref.id}'`
|
|
105
|
+
);
|
|
106
|
+
const guards = this.guards.get(target) ?? new Set();
|
|
107
|
+
guards.add(node);
|
|
108
|
+
this.guards.set(target, guards);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private visitReferences(
|
|
114
|
+
graph: LawGraph,
|
|
115
|
+
value: unknown,
|
|
116
|
+
visit: (node: Node) => void
|
|
117
|
+
): void {
|
|
118
|
+
if (Array.isArray(value)) {
|
|
119
|
+
for (const item of value) this.visitReferences(graph, item, visit);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (value === null || typeof value !== "object") return;
|
|
123
|
+
const record = value as Readonly<Record<string, unknown>>;
|
|
124
|
+
if (record.kind === "dependency-export") {
|
|
125
|
+
if (
|
|
126
|
+
typeof record.entityKind !== "string" ||
|
|
127
|
+
typeof record.label !== "string"
|
|
128
|
+
) {
|
|
129
|
+
throw new Error("typed law graph has a malformed dependency export");
|
|
130
|
+
}
|
|
131
|
+
// Resolution is supplied by the USD emitter itself. There is no second implementation
|
|
132
|
+
// of domain qualification, shared-contract fallback, or framework relation identity here.
|
|
133
|
+
const path = this.resolveExport(graph, record as unknown as Dependency);
|
|
134
|
+
if (path.startsWith("/Nomos/Framework/")) return;
|
|
135
|
+
const target = this.byPath.get(path);
|
|
136
|
+
if (target === undefined)
|
|
137
|
+
throw new Error(`emitted law dependency '${path}' has no indexed node`);
|
|
138
|
+
visit(target);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// References are nominal {id} records. An entity's own identity/source is not an edge.
|
|
142
|
+
if (typeof record.id === "string" && Object.keys(record).length === 1) {
|
|
143
|
+
const target = this.local.get(graph)?.get(record.id);
|
|
144
|
+
if (target === undefined)
|
|
145
|
+
throw new Error(
|
|
146
|
+
`law dependency has missing local identity '${record.id}'`
|
|
147
|
+
);
|
|
148
|
+
visit(target);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
for (const [key, nested] of Object.entries(record)) {
|
|
152
|
+
if (key !== "entity" && key !== "source")
|
|
153
|
+
this.visitReferences(graph, nested, visit);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
select(
|
|
158
|
+
seeds: Iterable<Node>,
|
|
159
|
+
includeApplicableGuards = false
|
|
160
|
+
): LawDependencySlice {
|
|
161
|
+
const nodes = new Set<Node>();
|
|
162
|
+
const paths = new Set<string>();
|
|
163
|
+
const queue: Node[] = [];
|
|
164
|
+
let traversedEdges = 0;
|
|
165
|
+
const enqueue = (node: Node): void => {
|
|
166
|
+
if (!this.entries.has(node))
|
|
167
|
+
throw new Error("law dependency selection uses a foreign graph node");
|
|
168
|
+
if (node.kind === "domain" || nodes.has(node)) return;
|
|
169
|
+
nodes.add(node);
|
|
170
|
+
queue.push(node);
|
|
171
|
+
};
|
|
172
|
+
for (const seed of seeds) enqueue(seed);
|
|
173
|
+
// An index cursor, not Array.shift(): large closures remain linear in visited nodes/edges.
|
|
174
|
+
for (let cursor = 0; cursor < queue.length; cursor++) {
|
|
175
|
+
const node = queue[cursor]!;
|
|
176
|
+
const entry = this.entries.get(node)!;
|
|
177
|
+
if (entry.path === undefined)
|
|
178
|
+
throw new Error(
|
|
179
|
+
`selected law dependency '${node.entity.id}' (${entry.graph.domain.entity.label}/${node.entity.label}) has no emitted USD path`
|
|
180
|
+
);
|
|
181
|
+
paths.add(entry.path);
|
|
182
|
+
for (const edge of this.edges.get(node) ?? []) {
|
|
183
|
+
traversedEdges++;
|
|
184
|
+
enqueue(edge);
|
|
185
|
+
}
|
|
186
|
+
if (includeApplicableGuards) {
|
|
187
|
+
for (const guard of this.guards.get(node) ?? []) {
|
|
188
|
+
traversedEdges++;
|
|
189
|
+
enqueue(guard);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return { nodes, paths, visitedNodes: nodes.size, traversedEdges };
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
command(command: Node): LawDependencySlice {
|
|
197
|
+
if (command.kind !== "intent")
|
|
198
|
+
throw new Error("command law selection requires an intent node");
|
|
199
|
+
return this.select([command], true);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** Diagnostic output only. Not a serialized law contract or runtime authority. */
|
|
204
|
+
export function commandWorkingSetReport(
|
|
205
|
+
graphs: readonly LawGraph[],
|
|
206
|
+
index: LawDependencyIndex
|
|
207
|
+
) {
|
|
208
|
+
const commands = graphs.flatMap((graph) =>
|
|
209
|
+
graph.nodes.flatMap((node) => {
|
|
210
|
+
if (node.kind !== "intent") return [];
|
|
211
|
+
const slice = index.command(node);
|
|
212
|
+
return [
|
|
213
|
+
{
|
|
214
|
+
domain: graph.domain.entity.label,
|
|
215
|
+
directive: node.publicRoute,
|
|
216
|
+
id: node.entity.id,
|
|
217
|
+
visitedNodes: slice.visitedNodes,
|
|
218
|
+
traversedEdges: slice.traversedEdges,
|
|
219
|
+
paths: [...slice.paths].sort(),
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
})
|
|
223
|
+
);
|
|
224
|
+
return {
|
|
225
|
+
kind: "nomos-command-working-sets-v1",
|
|
226
|
+
scope:
|
|
227
|
+
"compile-time static dependency selection; not runtime contract or performance proof",
|
|
228
|
+
graphNodes: graphs.reduce((sum, graph) => sum + graph.nodes.length, 0),
|
|
229
|
+
commands,
|
|
230
|
+
};
|
|
231
|
+
}
|