@agoric/swingset-liveslots 0.10.3-u12.0 → 0.10.3-u14.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/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
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
+ ### [0.10.3-u14.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/swingset-liveslots@0.10.3-u13.0...@agoric/swingset-liveslots@0.10.3-u14.0) (2024-02-27)
7
+
8
+ **Note:** Version bump only for package @agoric/swingset-liveslots
9
+
10
+
11
+
12
+
13
+
14
+ ### [0.10.3-u13.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/swingset-liveslots@0.10.3-u12.0...@agoric/swingset-liveslots@0.10.3-u13.0) (2023-12-07)
15
+
16
+ **Note:** Version bump only for package @agoric/swingset-liveslots
17
+
18
+
19
+
20
+
21
+
6
22
  ### [0.10.3-u12.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/swingset-liveslots@0.10.3-u11wf.0...@agoric/swingset-liveslots@0.10.3-u12.0) (2023-11-10)
7
23
 
8
24
  **Note:** Version bump only for package @agoric/swingset-liveslots
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/swingset-liveslots",
3
- "version": "0.10.3-u12.0",
3
+ "version": "0.10.3-u14.0",
4
4
  "description": "SwingSet ocap support layer",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -18,9 +18,9 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@agoric/assert": "^0.6.1-u11wf.0",
21
- "@agoric/internal": "^0.4.0-u12.0",
22
- "@agoric/store": "^0.9.3-u12.0",
23
- "@agoric/vat-data": "^0.5.3-u12.0",
21
+ "@agoric/internal": "^0.4.0-u14.0",
22
+ "@agoric/store": "^0.9.3-u14.0",
23
+ "@agoric/vat-data": "^0.5.3-u14.0",
24
24
  "@endo/eventual-send": "0.17.2",
25
25
  "@endo/exo": "0.2.2",
26
26
  "@endo/far": "0.2.18",
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "ee5a5fdad9187a6b1b7b26b772b6564c0db3062e"
64
+ "gitHead": "b3a6f3374cb3bddab39fc6d6f426429cae6c29c6"
65
65
  }
@@ -587,12 +587,12 @@ test('durable kind IDs can be reanimated', t => {
587
587
 
588
588
  // Store it in the store without having used it
589
589
  placeToPutIt.init('savedKindID', kindHandle);
590
- t.is(log.shift(), 'get vc.1.ssavedKindID => undefined');
590
+ t.is(log.shift(), 'get vc.4.ssavedKindID => undefined');
591
591
  t.is(log.shift(), `get vom.rc.${khid} => undefined`);
592
592
  t.is(log.shift(), `set vom.rc.${khid} 1`);
593
- t.is(log.shift(), `set vc.1.ssavedKindID ${vstr(kind)}`);
594
- t.is(log.shift(), 'get vc.1.|entryCount => 0');
595
- t.is(log.shift(), 'set vc.1.|entryCount 1');
593
+ t.is(log.shift(), `set vc.4.ssavedKindID ${vstr(kind)}`);
594
+ t.is(log.shift(), 'get vc.4.|entryCount => 0');
595
+ t.is(log.shift(), 'set vc.4.|entryCount 1');
596
596
  t.deepEqual(log, []);
597
597
 
598
598
  // Forget its Representative
@@ -606,7 +606,7 @@ test('durable kind IDs can be reanimated', t => {
606
606
 
607
607
  // Fetch it from the store, which should reanimate it
608
608
  const fetchedKindID = placeToPutIt.get('savedKindID');
609
- t.is(log.shift(), `get vc.1.ssavedKindID => ${vstr(kind)}`);
609
+ t.is(log.shift(), `get vc.4.ssavedKindID => ${vstr(kind)}`);
610
610
  t.is(
611
611
  log.shift(),
612
612
  'get vom.dkind.10.descriptor => {"kindID":"10","tag":"testkind"}',
@@ -654,9 +654,23 @@ test('virtual object gc', t => {
654
654
  ];
655
655
  t.is(log.shift(), `get storeKindIDTable => undefined`);
656
656
  t.is(log.shift(), `set ${skit[0]} ${skit[1]}`);
657
+ t.is(log.shift(), 'set vc.1.|nextOrdinal 1');
658
+ t.is(log.shift(), 'set vc.1.|entryCount 0');
659
+ t.is(log.shift(), 'get watcherTableID => undefined');
660
+ t.is(log.shift(), 'set vc.2.|nextOrdinal 1');
661
+ t.is(log.shift(), 'set vc.2.|entryCount 0');
662
+ t.is(log.shift(), 'set watcherTableID o+d6/2');
663
+ t.is(log.shift(), 'get vom.rc.o+d6/2 => undefined');
664
+ t.is(log.shift(), 'set vom.rc.o+d6/2 1');
665
+ t.is(log.shift(), 'get watchedPromiseTableID => undefined');
666
+ t.is(log.shift(), 'set vc.3.|nextOrdinal 1');
667
+ t.is(log.shift(), 'set vc.3.|entryCount 0');
668
+ t.is(log.shift(), 'set watchedPromiseTableID o+d6/3');
669
+ t.is(log.shift(), 'get vom.rc.o+d6/3 => undefined');
670
+ t.is(log.shift(), 'set vom.rc.o+d6/3 1');
657
671
  t.is(
658
672
  log.shift(),
659
- `set vom.vkind.10.descriptor {"kindID":"10","tag":"thing"}`,
673
+ 'set vom.vkind.10.descriptor {"kindID":"10","tag":"thing"}',
660
674
  );
661
675
  t.is(log.shift(), `set vom.vkind.11.descriptor {"kindID":"11","tag":"ref"}`);
662
676
  t.deepEqual(log, []);
@@ -682,6 +696,12 @@ test('virtual object gc', t => {
682
696
  t.deepEqual(dumpStore(), [
683
697
  ['kindIDID', '1'],
684
698
  skit,
699
+ ['vc.1.|entryCount', '0'],
700
+ ['vc.1.|nextOrdinal', '1'],
701
+ ['vc.2.|entryCount', '0'],
702
+ ['vc.2.|nextOrdinal', '1'],
703
+ ['vc.3.|entryCount', '0'],
704
+ ['vc.3.|nextOrdinal', '1'],
685
705
  [`vom.${tbase}/1`, minThing('thing #1')],
686
706
  [`vom.${tbase}/2`, minThing('thing #2')],
687
707
  [`vom.${tbase}/3`, minThing('thing #3')],
@@ -691,8 +711,12 @@ test('virtual object gc', t => {
691
711
  [`vom.${tbase}/7`, minThing('thing #7')],
692
712
  [`vom.${tbase}/8`, minThing('thing #8')],
693
713
  [`vom.${tbase}/9`, minThing('thing #9')],
714
+ ['vom.rc.o+d6/2', '1'],
715
+ ['vom.rc.o+d6/3', '1'],
694
716
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
695
717
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
718
+ ['watchedPromiseTableID', 'o+d6/3'],
719
+ ['watcherTableID', 'o+d6/2'],
696
720
  ]);
697
721
 
698
722
  // This is what the finalizer would do if the local reference was dropped and GC'd
@@ -718,6 +742,12 @@ test('virtual object gc', t => {
718
742
  t.deepEqual(dumpStore(), [
719
743
  ['kindIDID', '1'],
720
744
  skit,
745
+ ['vc.1.|entryCount', '0'],
746
+ ['vc.1.|nextOrdinal', '1'],
747
+ ['vc.2.|entryCount', '0'],
748
+ ['vc.2.|nextOrdinal', '1'],
749
+ ['vc.3.|entryCount', '0'],
750
+ ['vc.3.|nextOrdinal', '1'],
721
751
  [`vom.es.${tbase}/1`, 'r'],
722
752
  [`vom.${tbase}/1`, minThing('thing #1')],
723
753
  [`vom.${tbase}/2`, minThing('thing #2')],
@@ -728,8 +758,12 @@ test('virtual object gc', t => {
728
758
  [`vom.${tbase}/7`, minThing('thing #7')],
729
759
  [`vom.${tbase}/8`, minThing('thing #8')],
730
760
  [`vom.${tbase}/9`, minThing('thing #9')],
761
+ ['vom.rc.o+d6/2', '1'],
762
+ ['vom.rc.o+d6/3', '1'],
731
763
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
732
764
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
765
+ ['watchedPromiseTableID', 'o+d6/3'],
766
+ ['watcherTableID', 'o+d6/2'],
733
767
  ]);
734
768
 
735
769
  // drop export -- should delete
@@ -759,6 +793,12 @@ test('virtual object gc', t => {
759
793
  t.deepEqual(dumpStore(), [
760
794
  ['kindIDID', '1'],
761
795
  skit,
796
+ ['vc.1.|entryCount', '0'],
797
+ ['vc.1.|nextOrdinal', '1'],
798
+ ['vc.2.|entryCount', '0'],
799
+ ['vc.2.|nextOrdinal', '1'],
800
+ ['vc.3.|entryCount', '0'],
801
+ ['vc.3.|nextOrdinal', '1'],
762
802
  [`vom.${tbase}/2`, minThing('thing #2')],
763
803
  [`vom.${tbase}/3`, minThing('thing #3')],
764
804
  [`vom.${tbase}/4`, minThing('thing #4')],
@@ -767,8 +807,12 @@ test('virtual object gc', t => {
767
807
  [`vom.${tbase}/7`, minThing('thing #7')],
768
808
  [`vom.${tbase}/8`, minThing('thing #8')],
769
809
  [`vom.${tbase}/9`, minThing('thing #9')],
810
+ ['vom.rc.o+d6/2', '1'],
811
+ ['vom.rc.o+d6/3', '1'],
770
812
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
771
813
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
814
+ ['watchedPromiseTableID', 'o+d6/3'],
815
+ ['watcherTableID', 'o+d6/2'],
772
816
  ]);
773
817
 
774
818
  // case 2: export, drop export, drop local ref
@@ -786,6 +830,12 @@ test('virtual object gc', t => {
786
830
  t.deepEqual(dumpStore(), [
787
831
  ['kindIDID', '1'],
788
832
  skit,
833
+ ['vc.1.|entryCount', '0'],
834
+ ['vc.1.|nextOrdinal', '1'],
835
+ ['vc.2.|entryCount', '0'],
836
+ ['vc.2.|nextOrdinal', '1'],
837
+ ['vc.3.|entryCount', '0'],
838
+ ['vc.3.|nextOrdinal', '1'],
789
839
  [`vom.es.${tbase}/2`, 's'],
790
840
  [`vom.${tbase}/2`, minThing('thing #2')],
791
841
  [`vom.${tbase}/3`, minThing('thing #3')],
@@ -795,8 +845,12 @@ test('virtual object gc', t => {
795
845
  [`vom.${tbase}/7`, minThing('thing #7')],
796
846
  [`vom.${tbase}/8`, minThing('thing #8')],
797
847
  [`vom.${tbase}/9`, minThing('thing #9')],
848
+ ['vom.rc.o+d6/2', '1'],
849
+ ['vom.rc.o+d6/3', '1'],
798
850
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
799
851
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
852
+ ['watchedPromiseTableID', 'o+d6/3'],
853
+ ['watcherTableID', 'o+d6/2'],
800
854
  ]);
801
855
 
802
856
  // drop local ref -- should delete
@@ -817,6 +871,12 @@ test('virtual object gc', t => {
817
871
  t.deepEqual(dumpStore(), [
818
872
  ['kindIDID', '1'],
819
873
  skit,
874
+ ['vc.1.|entryCount', '0'],
875
+ ['vc.1.|nextOrdinal', '1'],
876
+ ['vc.2.|entryCount', '0'],
877
+ ['vc.2.|nextOrdinal', '1'],
878
+ ['vc.3.|entryCount', '0'],
879
+ ['vc.3.|nextOrdinal', '1'],
820
880
  [`vom.${tbase}/3`, minThing('thing #3')],
821
881
  [`vom.${tbase}/4`, minThing('thing #4')],
822
882
  [`vom.${tbase}/5`, minThing('thing #5')],
@@ -824,8 +884,12 @@ test('virtual object gc', t => {
824
884
  [`vom.${tbase}/7`, minThing('thing #7')],
825
885
  [`vom.${tbase}/8`, minThing('thing #8')],
826
886
  [`vom.${tbase}/9`, minThing('thing #9')],
887
+ ['vom.rc.o+d6/2', '1'],
888
+ ['vom.rc.o+d6/3', '1'],
827
889
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
828
890
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
891
+ ['watchedPromiseTableID', 'o+d6/3'],
892
+ ['watcherTableID', 'o+d6/2'],
829
893
  ]);
830
894
 
831
895
  // case 3: drop local ref with no prior export
@@ -847,14 +911,24 @@ test('virtual object gc', t => {
847
911
  t.deepEqual(dumpStore(), [
848
912
  ['kindIDID', '1'],
849
913
  skit,
914
+ ['vc.1.|entryCount', '0'],
915
+ ['vc.1.|nextOrdinal', '1'],
916
+ ['vc.2.|entryCount', '0'],
917
+ ['vc.2.|nextOrdinal', '1'],
918
+ ['vc.3.|entryCount', '0'],
919
+ ['vc.3.|nextOrdinal', '1'],
850
920
  [`vom.${tbase}/4`, minThing('thing #4')],
851
921
  [`vom.${tbase}/5`, minThing('thing #5')],
852
922
  [`vom.${tbase}/6`, minThing('thing #6')],
853
923
  [`vom.${tbase}/7`, minThing('thing #7')],
854
924
  [`vom.${tbase}/8`, minThing('thing #8')],
855
925
  [`vom.${tbase}/9`, minThing('thing #9')],
926
+ ['vom.rc.o+d6/2', '1'],
927
+ ['vom.rc.o+d6/3', '1'],
856
928
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
857
929
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
930
+ ['watchedPromiseTableID', 'o+d6/3'],
931
+ ['watcherTableID', 'o+d6/2'],
858
932
  ]);
859
933
 
860
934
  // case 4: ref virtually, export, drop local ref, drop export
@@ -867,15 +941,25 @@ test('virtual object gc', t => {
867
941
  t.deepEqual(dumpStore(), [
868
942
  ['kindIDID', '1'],
869
943
  skit,
944
+ ['vc.1.|entryCount', '0'],
945
+ ['vc.1.|nextOrdinal', '1'],
946
+ ['vc.2.|entryCount', '0'],
947
+ ['vc.2.|nextOrdinal', '1'],
948
+ ['vc.3.|entryCount', '0'],
949
+ ['vc.3.|nextOrdinal', '1'],
870
950
  [`vom.${tbase}/4`, minThing('thing #4')],
871
951
  [`vom.${tbase}/5`, minThing('thing #5')],
872
952
  [`vom.${tbase}/6`, minThing('thing #6')],
873
953
  [`vom.${tbase}/7`, minThing('thing #7')],
874
954
  [`vom.${tbase}/8`, minThing('thing #8')],
875
955
  [`vom.${tbase}/9`, minThing('thing #9')],
956
+ ['vom.rc.o+d6/2', '1'],
957
+ ['vom.rc.o+d6/3', '1'],
876
958
  [`vom.rc.${tbase}/4`, '1'],
877
959
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
878
960
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
961
+ ['watchedPromiseTableID', 'o+d6/3'],
962
+ ['watcherTableID', 'o+d6/2'],
879
963
  ]);
880
964
  // export
881
965
  setExportStatus(`${tbase}/4`, 'reachable');
@@ -909,6 +993,12 @@ test('virtual object gc', t => {
909
993
  t.deepEqual(dumpStore(), [
910
994
  ['kindIDID', '1'],
911
995
  skit,
996
+ ['vc.1.|entryCount', '0'],
997
+ ['vc.1.|nextOrdinal', '1'],
998
+ ['vc.2.|entryCount', '0'],
999
+ ['vc.2.|nextOrdinal', '1'],
1000
+ ['vc.3.|entryCount', '0'],
1001
+ ['vc.3.|nextOrdinal', '1'],
912
1002
  [`vom.es.${tbase}/4`, 's'],
913
1003
  [`vom.es.${tbase}/5`, 'r'],
914
1004
  [`vom.${tbase}/4`, minThing('thing #4')],
@@ -917,10 +1007,14 @@ test('virtual object gc', t => {
917
1007
  [`vom.${tbase}/7`, minThing('thing #7')],
918
1008
  [`vom.${tbase}/8`, minThing('thing #8')],
919
1009
  [`vom.${tbase}/9`, minThing('thing #9')],
1010
+ ['vom.rc.o+d6/2', '1'],
1011
+ ['vom.rc.o+d6/3', '1'],
920
1012
  [`vom.rc.${tbase}/4`, '1'],
921
1013
  [`vom.rc.${tbase}/5`, '1'],
922
1014
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
923
1015
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
1016
+ ['watchedPromiseTableID', 'o+d6/3'],
1017
+ ['watcherTableID', 'o+d6/2'],
924
1018
  ]);
925
1019
  // drop local ref -- should not delete because ref'd virtually AND exported
926
1020
  pretendGC(`${tbase}/5`, false);
@@ -944,6 +1038,12 @@ test('virtual object gc', t => {
944
1038
  t.deepEqual(dumpStore(), [
945
1039
  ['kindIDID', '1'],
946
1040
  skit,
1041
+ ['vc.1.|entryCount', '0'],
1042
+ ['vc.1.|nextOrdinal', '1'],
1043
+ ['vc.2.|entryCount', '0'],
1044
+ ['vc.2.|nextOrdinal', '1'],
1045
+ ['vc.3.|entryCount', '0'],
1046
+ ['vc.3.|nextOrdinal', '1'],
947
1047
  [`vom.es.${tbase}/4`, 's'],
948
1048
  [`vom.es.${tbase}/5`, 's'],
949
1049
  [`vom.${tbase}/4`, minThing('thing #4')],
@@ -952,11 +1052,15 @@ test('virtual object gc', t => {
952
1052
  [`vom.${tbase}/7`, minThing('thing #7')],
953
1053
  [`vom.${tbase}/8`, minThing('thing #8')],
954
1054
  [`vom.${tbase}/9`, minThing('thing #9')],
1055
+ ['vom.rc.o+d6/2', '1'],
1056
+ ['vom.rc.o+d6/3', '1'],
955
1057
  [`vom.rc.${tbase}/4`, '1'],
956
1058
  [`vom.rc.${tbase}/5`, '1'],
957
1059
  [`vom.rc.${tbase}/6`, '1'],
958
1060
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
959
1061
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
1062
+ ['watchedPromiseTableID', 'o+d6/3'],
1063
+ ['watcherTableID', 'o+d6/2'],
960
1064
  ]);
961
1065
  // drop local ref -- should not delete because ref'd virtually
962
1066
  pretendGC(`${tbase}/6`, false);
@@ -966,6 +1070,12 @@ test('virtual object gc', t => {
966
1070
  t.deepEqual(dumpStore(), [
967
1071
  ['kindIDID', '1'],
968
1072
  skit,
1073
+ ['vc.1.|entryCount', '0'],
1074
+ ['vc.1.|nextOrdinal', '1'],
1075
+ ['vc.2.|entryCount', '0'],
1076
+ ['vc.2.|nextOrdinal', '1'],
1077
+ ['vc.3.|entryCount', '0'],
1078
+ ['vc.3.|nextOrdinal', '1'],
969
1079
  [`vom.es.${tbase}/4`, 's'],
970
1080
  [`vom.es.${tbase}/5`, 's'],
971
1081
  [`vom.${tbase}/4`, minThing('thing #4')],
@@ -974,11 +1084,15 @@ test('virtual object gc', t => {
974
1084
  [`vom.${tbase}/7`, minThing('thing #7')],
975
1085
  [`vom.${tbase}/8`, minThing('thing #8')],
976
1086
  [`vom.${tbase}/9`, minThing('thing #9')],
1087
+ ['vom.rc.o+d6/2', '1'],
1088
+ ['vom.rc.o+d6/3', '1'],
977
1089
  [`vom.rc.${tbase}/4`, '1'],
978
1090
  [`vom.rc.${tbase}/5`, '1'],
979
1091
  [`vom.rc.${tbase}/6`, '1'],
980
1092
  ['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
981
1093
  ['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
1094
+ ['watchedPromiseTableID', 'o+d6/3'],
1095
+ ['watcherTableID', 'o+d6/2'],
982
1096
  ]);
983
1097
  });
984
1098
 
@@ -2,8 +2,9 @@
2
2
  /* eslint-disable max-classes-per-file */
3
3
  import { makeMarshal } from '@endo/marshal';
4
4
  import { assert } from '@agoric/assert';
5
- import { parseVatSlot } from '../src/parseVatSlots.js';
5
+ import { isPromise } from '@endo/promise-kit';
6
6
 
7
+ import { parseVatSlot } from '../src/parseVatSlots.js';
7
8
  import { makeVirtualReferenceManager } from '../src/virtualReferences.js';
8
9
  import { makeWatchedPromiseManager } from '../src/watchedPromises.js';
9
10
  import { makeFakeVirtualObjectManager } from './fakeVirtualObjectManager.js';
@@ -158,6 +159,14 @@ export function makeFakeLiveSlotsStuff(options = {}) {
158
159
  return exportID;
159
160
  }
160
161
 
162
+ // different starting point for more distinct IDs
163
+ let nextPromiseID = 7;
164
+ function allocatePromiseID() {
165
+ const promiseID = nextPromiseID;
166
+ nextPromiseID += 1;
167
+ return promiseID;
168
+ }
169
+
161
170
  let nextCollectionID = 1;
162
171
  function allocateCollectionID() {
163
172
  const collectionID = nextCollectionID;
@@ -193,7 +202,9 @@ export function makeFakeLiveSlotsStuff(options = {}) {
193
202
 
194
203
  function convertValToSlot(val) {
195
204
  if (!valToSlot.has(val)) {
196
- const slot = `o+${allocateExportID()}`;
205
+ const slot = isPromise(val)
206
+ ? `p+${allocatePromiseID()}`
207
+ : `o+${allocateExportID()}`;
197
208
  valToSlot.set(val, slot);
198
209
  setValForSlot(slot, val);
199
210
  }
@@ -311,6 +322,7 @@ export function makeFakeWatchedPromiseManager(
311
322
  maybeExportPromise: fakeStuff.maybeExportPromise,
312
323
  });
313
324
  }
325
+
314
326
  /**
315
327
  * Configure virtual stuff with relaxed durability rules and fake liveslots
316
328
  *
@@ -331,6 +343,7 @@ export function makeFakeVirtualStuff(options = {}) {
331
343
  fakeStuff.setVrm(vrm);
332
344
  const cm = makeFakeCollectionManager(vrm, fakeStuff, actualOptions);
333
345
  const wpm = makeFakeWatchedPromiseManager(vrm, vom, cm, fakeStuff);
346
+ wpm.preparePromiseWatcherTables();
334
347
  return { fakeStuff, vrm, vom, cm, wpm };
335
348
  }
336
349