Commit 374bcb2
fix(runner/scheduler): preserve dependencies on retry (commontoolsinc#1867)
* fix(runner/scheduler): preserve dependencies on retry
When a reactive action's commit fails and retries, preserve its
dependency information instead of overwriting with empty dependencies.
This ensures topological sorting works correctly during retries.
Previously, the retry logic called:
this.subscribe(action, { reads: [], writes: [] }, true)
This cleared the action's dependencies, breaking topological sorting
when multiple dependent actions retry. The fix directly reschedules
without calling subscribe:
this.queueExecution()
this.pending.add(action)
The action retains its correct dependencies from the previous subscribe
call (line 274), allowing the scheduler to properly order retries.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
* fix(runner/scheduler): ensure dependencies are set on retry
The previous fix attempted to preserve dependencies by not calling
subscribe() during retry. However, this caused a crash because:
1. execute() calls unsubscribe() which deletes the action from dependencies
2. The retry logic then adds action to pending without re-adding to dependencies
3. topologicalSort() tries to access dependencies.get(action) which is undefined
The solution is to call subscribe(action, log, true) during retry, which:
- Re-adds the action to dependencies with the correct read/write log
- Adds the action to pending (via scheduleImmediately parameter)
- Ensures topologicalSort has access to the action's dependencies
Error fixed:
TypeError: Cannot destructure property 'writes' of 'dependencies.get(...)'
as it is undefined at topologicalSort (scheduler.ts:576:13)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
---------
Co-authored-by: Claude <[email protected]>1 parent 33290da commit 374bcb2
2 files changed
+109
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
254 | 254 | | |
255 | 255 | | |
256 | 256 | | |
257 | | - | |
258 | | - | |
259 | | - | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
260 | 261 | | |
261 | 262 | | |
262 | 263 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
867 | 867 | | |
868 | 868 | | |
869 | 869 | | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
870 | 975 | | |
0 commit comments