authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-19 19:41:26-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-25 20:26:20-07:00
log3d0dd98f39482111b7e2e32734d71bc806d826c8
tree6e4494476092b235918d2e86035cf94bfda1f7bb
parentcf24fa511d61da2e5d87246aad01eccced587479
signature Signed by SSH key SHA256:52mNGHRsVFBDED9IAX5pe+LRWUefqTbxEReunq21QvU

fix: bring the soak harnesses up to coalesced saves and a loaded host

The cache-kill oracle accepts a save that replaced the newest pending save under the same intent. The maintenance guardian runs only the library test it needs, so it exits when released instead of building every test binary, and native convergence gets ten minutes, which a few hundred background-synced edits need on a host that is also fuzzing. Assisted-by: claude-fable-5.1

3 files changed, 6 insertions(+), 3 deletions(-)

tools/native_collaboration.py+2-1
...@@ -219,7 +219,8 @@ def replay(output, server, stress_clients=0, stress_operations=30, sync_every=1,...@@ -219,7 +219,8 @@ def replay(output, server, stress_clients=0, stress_operations=30, sync_every=1,
219 return observed219 return observed
220220
221 def wait_text(client, expected):221 def wait_text(client, expected):
222 deadline = time.monotonic() + 120222 # Background sync of a few hundred queued native edits takes minutes on a loaded host.
223 deadline = time.monotonic() + 600
223 while time.monotonic() < deadline:224 while time.monotonic() < deadline:
224 action(client, 'sync')225 action(client, 'sync')
225 observed = action(client, 'snapshot')226 observed = action(client, 'snapshot')
tools/native_maintenance.py+1-1
...@@ -125,7 +125,7 @@ Sleep(1000)...@@ -125,7 +125,7 @@ Sleep(1000)
125 hold.mkdir()125 hold.mkdir()
126 config = json.loads((output / 'linux.json').read_text())126 config = json.loads((output / 'linux.json').read_text())
127 with (hold / 'run.log').open('w') as guardian_log:127 with (hold / 'run.log').open('w') as guardian_log:
128 guardian = subprocess.Popen(['cargo', 'test', '-p', 'notebook', '--features', 'smb', 'live_reader_hold', '--', '--ignored', '--nocapture'],128 guardian = subprocess.Popen(['cargo', 'test', '-p', 'notebook', '--features', 'smb', '--lib', 'live_reader_hold', '--', '--ignored', '--nocapture'],
129 cwd=ROOT, stdout=guardian_log, stderr=subprocess.STDOUT,129 cwd=ROOT, stdout=guardian_log, stderr=subprocess.STDOUT,
130 env={**os.environ, 'ONESTORE_SMB_LAB': f'127.0.0.1:{config["samba_port"]}',130 env={**os.environ, 'ONESTORE_SMB_LAB': f'127.0.0.1:{config["samba_port"]}',
131 'ONESTORE_SMB_PATH': 'm6-collaboration/synthetic.one', 'ONESTORE_SMB_HOLD': str(hold)})131 'ONESTORE_SMB_PATH': 'm6-collaboration/synthetic.one', 'ONESTORE_SMB_HOLD': str(hold)})
tools/offline_cache_crash.py+3-1
...@@ -88,7 +88,9 @@ def run(binary, output):...@@ -88,7 +88,9 @@ def run(binary, output):
88 actual = json.loads(read.stdout)88 actual = json.loads(read.stdout)
89 operations = actual["operations"]89 operations = actual["operations"]
90 ids = actual["ids"]90 ids = actual["ids"]
91 assert operations in (retained, retained + [operation]), (retained, operation, actual)91 # A save replaces the newest pending save of its page under the same intent.
92 coalesced = retained[:-1] + [operation] if ids == retained_ids else None
93 assert operations in (retained, retained + [operation], coalesced), (retained, operation, actual)
92 assert ids[:len(retained_ids)] == retained_ids, (retained_ids, actual)94 assert ids[:len(retained_ids)] == retained_ids, (retained_ids, actual)
93 if acknowledgement:95 if acknowledgement:
94 assert operations[-1] == operation96 assert operations[-1] == operation