@reventlessdev/reventless-core 3.0.0-alpha.143 → 3.0.0-alpha.144

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/CHANGELOG.md CHANGED
@@ -3,6 +3,13 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 3.0.0-alpha.144 (2026-07-07)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **reventless-aws:** thread inferred DCB scope into the deployed command handler ([4d8327f](https://github.com/ReventlessDev/reventless-core/commit/4d8327fad8659a1cde8c36098c72392737437af1))
11
+
12
+
6
13
  # 3.0.0-alpha.143 (2026-07-06)
7
14
 
8
15
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-core",
3
- "version": "3.0.0-alpha.143",
3
+ "version": "3.0.0-alpha.144",
4
4
  "description": "Core package for Reventless framework",
5
5
  "license": "Apache-2.0",
6
6
  "jest": {
@@ -31,14 +31,14 @@
31
31
  "@reventlessdev/rescript-effect": "0.1.0-alpha.25",
32
32
  "@reventlessdev/rescript-fast-csv": "1.2.0-alpha.11",
33
33
  "@reventlessdev/rescript-hash-object": "1.2.0-alpha.10",
34
- "@reventlessdev/rescript-node-streams": "1.1.0-alpha.10",
35
34
  "@reventlessdev/rescript-jest": "1.0.0-alpha.6",
35
+ "@reventlessdev/rescript-node-streams": "1.1.0-alpha.10",
36
36
  "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.14",
37
- "@reventlessdev/reventless-infra": "3.0.0-alpha.89",
38
- "@reventlessdev/reventless-spec": "3.0.0-alpha.67",
39
- "@reventlessdev/reventless-interop": "3.0.0-alpha.24",
40
37
  "@reventlessdev/rescript-uuid": "1.1.0-alpha.14",
41
- "@reventlessdev/rescript-ssh2": "1.1.0-alpha.11"
38
+ "@reventlessdev/reventless-infra": "3.0.0-alpha.90",
39
+ "@reventlessdev/reventless-interop": "3.0.0-alpha.24",
40
+ "@reventlessdev/rescript-ssh2": "1.1.0-alpha.11",
41
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.68"
42
42
  },
43
43
  "devDependencies": {
44
44
  "rescript": "^12.3.0",
@@ -289,11 +289,21 @@ module Make = (
289
289
 
290
290
  // All-or-nothing: thread the derived scope only when every slice resolved.
291
291
  // An ambiguous boundary keeps the annotated values (no partial inference).
292
- let useInferred = inferred.ambiguities->Array.length == 0
293
- let effectiveCrossPartitionTagKeys =
294
- useInferred ? inferred.crossPartitionTagKeys : crossPartitionTagKeys
295
- let effectiveTagKeysByEventType =
296
- useInferred ? inferred.tagKeysByEventType : tagKeysByEventType
292
+ // Both this builder and the deployed command-handler entry point
293
+ // (DcbCommandTopicEntryPoint.mjs) route through `DcbTag.deriveEffectiveScope`
294
+ // so the runtime decision query cannot drift from this scope — see
295
+ // docs/analysis/dcb-runtime-scope-annotation-drift.md.
296
+ let {
297
+ crossPartitionTagKeys: effectiveCrossPartitionTagKeys,
298
+ tagKeysByEventType: effectiveTagKeysByEventType,
299
+ } = Reventless.DcbTag.deriveEffectiveScope(
300
+ stateChangeSlices->Array.map((module(Sc: StateChangeSlice.T)) => {
301
+ Reventless.DcbTag.name: Sc.Spec.name,
302
+ commandSchema: Sc.Spec.commandSchema->S.castToUnknown,
303
+ consumedEventSchema: Sc.Spec.consumedEventSchema->S.castToUnknown,
304
+ eventSchema: Sc.Spec.eventSchema->S.castToUnknown,
305
+ }),
306
+ )
297
307
 
298
308
  module DcbEventLog = DcbEventLog_Builder.Make(
299
309
  DcbEventLogStorage,
@@ -167,9 +167,14 @@ function Make(DcbEventLogStorage) {
167
167
  let scopeIssues = DcbValidation$Reventless.validateScopeVsInference(scopeAnnotations, inferred);
168
168
  scopeIssues.contradictions.forEach(e => log.warn("Dcb_Builder", undefined, `DCB scope contradiction (` + e.sliceName + `): ` + e.message));
169
169
  scopeIssues.redundancies.forEach(e => log.info("Dcb_Builder", undefined, `DCB scope (` + e.sliceName + `): ` + e.message));
170
- let useInferred = inferred.ambiguities.length === 0;
171
- let effectiveCrossPartitionTagKeys = useInferred ? inferred.crossPartitionTagKeys : crossPartitionTagKeys;
172
- let effectiveTagKeysByEventType = useInferred ? inferred.tagKeysByEventType : tagKeysByEventType;
170
+ let match = DcbTag$Reventless.deriveEffectiveScope(stateChangeSlices.map(Sc => ({
171
+ name: Sc.Spec.name,
172
+ commandSchema: Sc.Spec.commandSchema,
173
+ consumedEventSchema: Sc.Spec.consumedEventSchema,
174
+ eventSchema: Sc.Spec.eventSchema
175
+ })));
176
+ let effectiveTagKeysByEventType = match.tagKeysByEventType;
177
+ let effectiveCrossPartitionTagKeys = match.crossPartitionTagKeys;
173
178
  let DcbEventLog = DcbEventLog_Builder$ReventlessCore.Make(DcbEventLogStorage)(DcbEventTopicPublisher);
174
179
  let dcbEventLog = DcbEventLog.make(name, indexes$1, partitionTag, effectiveCrossPartitionTagKeys, opts);
175
180
  Stdlib_Option.forEach(HooksConfig.hooks.onDcbEventLogCreated, hook => hook(dcbEventLog));