eklavya 1.48.4 → 1.49.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/README.md +2 -2
- package/dist/assets/dashboard.html +5 -3
- package/dist/cli-memory.js +11 -2
- package/dist/cli-memory.js.map +1 -1
- package/dist/dashboard.js +14 -3
- package/dist/dashboard.js.map +1 -1
- package/dist/memory/sync.js +310 -20
- package/dist/memory/sync.js.map +1 -1
- package/dist/migrations/023_sync_received.sql +34 -0
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/store.js +9 -4
- package/dist/store.js.map +1 -1
- package/package.json +1 -1
package/dist/memory/sync.js
CHANGED
|
@@ -24,6 +24,14 @@ import { deleteEntry, indexVector } from './store.js';
|
|
|
24
24
|
* not cover, such as a cloud client materialising a partial file under the real
|
|
25
25
|
* name.
|
|
26
26
|
*
|
|
27
|
+
* **Files arrive out of order.** A synced folder can deliver revision 2 before
|
|
28
|
+
* revision 1, so a reader's high-water mark is a floor -- every revision at or
|
|
29
|
+
* below it is accounted for -- and never jumps a gap. A revision applied above
|
|
30
|
+
* the floor is remembered individually (`sync_received`) until the gap fills.
|
|
31
|
+
* Some gaps never fill: a revision staged and then superseded before its file
|
|
32
|
+
* was written is gone. The writer says so in `void.json` beside its records, and
|
|
33
|
+
* the reader's floor steps over a voided revision as if it had been applied.
|
|
34
|
+
*
|
|
27
35
|
* **What crosses, and what must not.** Memory entries, their tags and their
|
|
28
36
|
* tombstones. Not attempts, not mastery, not gates, not receipts, not raw
|
|
29
37
|
* `evidence_events` (PRD SEC-02). A team that points every member at one shared
|
|
@@ -245,6 +253,7 @@ function deviceDir(target, device) {
|
|
|
245
253
|
// segment under `<target>/devices`, and a peer's directory name arrives from
|
|
246
254
|
// `readdirSync` rather than from a record, but a single assertion at the one
|
|
247
255
|
// place paths are built is cheaper than trusting both.
|
|
256
|
+
/* c8 ignore next -- both sources are already checked: `deviceId` for ours, `peerDevices` for theirs */
|
|
248
257
|
if (!DEVICE_ID.test(device))
|
|
249
258
|
throw new Error(`unsafe device id: ${JSON.stringify(device)}`);
|
|
250
259
|
return path.join(target, 'devices', device);
|
|
@@ -259,6 +268,113 @@ function writeAtomic(file, text) {
|
|
|
259
268
|
fs.writeFileSync(tmp, text, 'utf8');
|
|
260
269
|
fs.renameSync(tmp, file);
|
|
261
270
|
}
|
|
271
|
+
const RECORD_NAME = /^\d{12}\.json$/;
|
|
272
|
+
/** iCloud Drive's stand-in for a file it has evicted to save space: still there. */
|
|
273
|
+
const EVICTED_NAME = /^\.(\d{12}\.json)\.icloud$/;
|
|
274
|
+
const VOID_FILE = 'void.json';
|
|
275
|
+
/**
|
|
276
|
+
* Revisions this device handed out and will never write: no file in the
|
|
277
|
+
* target, and no record left to build one from.
|
|
278
|
+
*
|
|
279
|
+
* That happens when an entry is staged, the push is interrupted before its file
|
|
280
|
+
* lands, and the entry changes again -- the next push stages a new revision and
|
|
281
|
+
* the old one's record is overwritten. The content it carried is superseded
|
|
282
|
+
* here, so nothing is lost by declaring it; what matters is that a reader stops
|
|
283
|
+
* waiting for it. The set only grows: a revision number is never handed out
|
|
284
|
+
* twice, and a file is only ever written for a record that still exists.
|
|
285
|
+
*/
|
|
286
|
+
function abandonedRevisions(db, target, device) {
|
|
287
|
+
let names;
|
|
288
|
+
try {
|
|
289
|
+
names = fs.readdirSync(deviceDir(target, device));
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
/* c8 ignore next -- push creates the directory before this runs, unless the target vanished mid-push */
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
const present = new Set();
|
|
296
|
+
for (const n of names) {
|
|
297
|
+
const name = EVICTED_NAME.exec(n)?.[1] ?? n;
|
|
298
|
+
if (RECORD_NAME.test(name))
|
|
299
|
+
present.add(Number(name.slice(0, 12)));
|
|
300
|
+
}
|
|
301
|
+
const held = new Set(db.prepare('SELECT revision FROM sync_records WHERE device_id = ?').all(device).map((r) => r.revision));
|
|
302
|
+
const out = [];
|
|
303
|
+
for (let r = 1; r <= highWater(db, device); r += 1) {
|
|
304
|
+
if (!present.has(r) && !held.has(r))
|
|
305
|
+
out.push(r);
|
|
306
|
+
}
|
|
307
|
+
return out;
|
|
308
|
+
}
|
|
309
|
+
/** `[1, 2, 3, 7]` as `[[1, 3], [7, 7]]`: a void list stays small however old the device. */
|
|
310
|
+
function toRanges(revisions) {
|
|
311
|
+
const ranges = [];
|
|
312
|
+
for (const r of revisions) {
|
|
313
|
+
const last = ranges[ranges.length - 1];
|
|
314
|
+
if (last && last[1] === r - 1)
|
|
315
|
+
last[1] = r;
|
|
316
|
+
else
|
|
317
|
+
ranges.push([r, r]);
|
|
318
|
+
}
|
|
319
|
+
return ranges;
|
|
320
|
+
}
|
|
321
|
+
/** Publishes the void list, rewriting it only when it changed. */
|
|
322
|
+
function writeVoids(target, device, revisions) {
|
|
323
|
+
if (!revisions.length)
|
|
324
|
+
return;
|
|
325
|
+
const file = path.join(deviceDir(target, device), VOID_FILE);
|
|
326
|
+
const text = `${JSON.stringify({ v: SYNC_FORMAT_VERSION, device_id: device, revisions: toRanges(revisions) })}\n`;
|
|
327
|
+
try {
|
|
328
|
+
if (fs.readFileSync(file, 'utf8') === text)
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
// Not written yet.
|
|
333
|
+
}
|
|
334
|
+
writeAtomic(file, text);
|
|
335
|
+
}
|
|
336
|
+
/** Larger than any honest list: a void list holds ranges, not one line per record. */
|
|
337
|
+
const VOID_MAX_BYTES = 1024 * 1024;
|
|
338
|
+
/**
|
|
339
|
+
* A peer's voided revisions above `floor`, as sorted, merged ranges, or none if
|
|
340
|
+
* its list is missing, oversized or unreadable. A torn list is harmless: every
|
|
341
|
+
* revision it does name is void, and one it fails to name is only waited for a
|
|
342
|
+
* little longer. Ranges stay ranges -- a list claiming `[1, 1e12]` costs one
|
|
343
|
+
* pair, not a trillion set entries.
|
|
344
|
+
*/
|
|
345
|
+
function readVoids(target, device, floor) {
|
|
346
|
+
const file = path.join(deviceDir(target, device), VOID_FILE);
|
|
347
|
+
let parsed;
|
|
348
|
+
try {
|
|
349
|
+
if (fs.statSync(file).size > VOID_MAX_BYTES)
|
|
350
|
+
return [];
|
|
351
|
+
parsed = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return [];
|
|
355
|
+
}
|
|
356
|
+
if (parsed?.v !== SYNC_FORMAT_VERSION || parsed.device_id !== device || !Array.isArray(parsed.revisions)) {
|
|
357
|
+
return [];
|
|
358
|
+
}
|
|
359
|
+
const ranges = [];
|
|
360
|
+
for (const range of parsed.revisions) {
|
|
361
|
+
if (!Array.isArray(range) || !Number.isSafeInteger(range[0]) || !Number.isSafeInteger(range[1]))
|
|
362
|
+
continue;
|
|
363
|
+
const lo = Math.max(range[0], floor + 1);
|
|
364
|
+
if (lo <= range[1])
|
|
365
|
+
ranges.push([lo, range[1]]);
|
|
366
|
+
}
|
|
367
|
+
ranges.sort((a, b) => a[0] - b[0]);
|
|
368
|
+
const merged = [];
|
|
369
|
+
for (const [lo, hi] of ranges) {
|
|
370
|
+
const last = merged[merged.length - 1];
|
|
371
|
+
if (last && lo <= last[1] + 1)
|
|
372
|
+
last[1] = Math.max(last[1], hi);
|
|
373
|
+
else
|
|
374
|
+
merged.push([lo, hi]);
|
|
375
|
+
}
|
|
376
|
+
return merged;
|
|
377
|
+
}
|
|
262
378
|
// ---------------------------------------------------------------------------
|
|
263
379
|
// Push
|
|
264
380
|
// ---------------------------------------------------------------------------
|
|
@@ -304,8 +420,8 @@ export function push(db, config, opts = {}) {
|
|
|
304
420
|
const body = payloads.get(rec.entry_uid);
|
|
305
421
|
// A record whose payload this run did not rebuild predates the interruption
|
|
306
422
|
// that lost its file; it is rebuilt from the database below, and dropped if
|
|
307
|
-
// the entry
|
|
308
|
-
//
|
|
423
|
+
// the entry has changed since -- the peer waits on the gap until the next
|
|
424
|
+
// push re-stages the entry and the old revision is declared void.
|
|
309
425
|
const rebuilt = body ?? rebuildPayload(db, rec);
|
|
310
426
|
if (!rebuilt)
|
|
311
427
|
continue;
|
|
@@ -325,6 +441,7 @@ export function push(db, config, opts = {}) {
|
|
|
325
441
|
writeAtomic(file, `${JSON.stringify(record)}\n`);
|
|
326
442
|
written += 1;
|
|
327
443
|
}
|
|
444
|
+
writeVoids(g.target, g.device, abandonedRevisions(db, g.target, g.device));
|
|
328
445
|
return { ok: true, device_id: g.device, target: g.target, staged: staged.length, written, already };
|
|
329
446
|
}
|
|
330
447
|
function rebuildPayload(db, rec) {
|
|
@@ -399,7 +516,8 @@ function peerDevices(target, local) {
|
|
|
399
516
|
try {
|
|
400
517
|
return fs
|
|
401
518
|
.readdirSync(root, { withFileTypes: true })
|
|
402
|
-
|
|
519
|
+
// A directory whose name is not a device id was not written by Eklavya.
|
|
520
|
+
.filter((d) => d.isDirectory() && d.name !== local && DEVICE_ID.test(d.name))
|
|
403
521
|
.map((d) => d.name)
|
|
404
522
|
.sort();
|
|
405
523
|
}
|
|
@@ -411,48 +529,183 @@ function pendingRecordFiles(target, device, after) {
|
|
|
411
529
|
let names;
|
|
412
530
|
try {
|
|
413
531
|
names = fs.readdirSync(deviceDir(target, device));
|
|
532
|
+
/* c8 ignore start -- `peerDevices` just listed this directory; only a folder removed mid-pull lands here */
|
|
414
533
|
}
|
|
415
534
|
catch {
|
|
416
535
|
return [];
|
|
417
536
|
}
|
|
537
|
+
/* c8 ignore stop */
|
|
418
538
|
return names
|
|
419
|
-
.filter((n) =>
|
|
539
|
+
.filter((n) => RECORD_NAME.test(n))
|
|
420
540
|
.map((n) => ({ revision: Number(n.slice(0, 12)), file: path.join(deviceDir(target, device), n) }))
|
|
421
541
|
.filter((r) => r.revision > after)
|
|
422
542
|
.sort((a, b) => a.revision - b.revision);
|
|
423
543
|
}
|
|
544
|
+
/** Revisions from `device` applied above its floor, waiting for the gap below to fill. */
|
|
545
|
+
function receivedAbove(db, device, floor) {
|
|
546
|
+
return new Set(db.prepare('SELECT revision FROM sync_received WHERE device_id = ? AND revision > ?').all(device, floor).map((r) => r.revision));
|
|
547
|
+
}
|
|
548
|
+
/** The void range holding `revision`, by binary search over sorted, disjoint ranges. */
|
|
549
|
+
function voidAt(voids, revision) {
|
|
550
|
+
let lo = 0;
|
|
551
|
+
let hi = voids.length - 1;
|
|
552
|
+
while (lo <= hi) {
|
|
553
|
+
const mid = (lo + hi) >> 1;
|
|
554
|
+
const [a, b] = voids[mid];
|
|
555
|
+
if (revision < a)
|
|
556
|
+
hi = mid - 1;
|
|
557
|
+
else if (revision > b)
|
|
558
|
+
lo = mid + 1;
|
|
559
|
+
else
|
|
560
|
+
return voids[mid];
|
|
561
|
+
}
|
|
562
|
+
return undefined;
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Moves a peer's floor up through every revision now accounted for, forgets
|
|
566
|
+
* the individual receipts it covers, and counts what is still owed above it.
|
|
567
|
+
*
|
|
568
|
+
* Accounted for means applied, or voided by its writer with no file present: a
|
|
569
|
+
* file that exists but could not be read yet beats the writer's claim that it
|
|
570
|
+
* never will, because stepping over it would lose it for good. Everything here
|
|
571
|
+
* is arithmetic over the receipts, the unread files and the void ranges -- never
|
|
572
|
+
* a walk over revision numbers, which a stray `999999999999.json` would make a
|
|
573
|
+
* walk of a trillion steps.
|
|
574
|
+
*/
|
|
575
|
+
function advanceFloor(db, device, floor, received, unread, voids) {
|
|
576
|
+
let newest = floor;
|
|
577
|
+
for (const r of received)
|
|
578
|
+
newest = Math.max(newest, r);
|
|
579
|
+
for (const r of unread)
|
|
580
|
+
newest = Math.max(newest, r);
|
|
581
|
+
// A void past the newest revision anyone has seen cannot be owed, so it is not
|
|
582
|
+
// stepped over either: a later file would otherwise land below the floor.
|
|
583
|
+
const clamped = voids.filter(([a]) => a <= newest).map(([a, b]) => [a, Math.min(b, newest)]);
|
|
584
|
+
const blockers = [...unread].sort((a, b) => a - b);
|
|
585
|
+
let next = floor;
|
|
586
|
+
for (;;) {
|
|
587
|
+
if (received.has(next + 1)) {
|
|
588
|
+
next += 1;
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
const range = voidAt(clamped, next + 1);
|
|
592
|
+
if (!range || unread.has(next + 1))
|
|
593
|
+
break;
|
|
594
|
+
const blocker = blockers.find((u) => u > next + 1 && u <= range[1]);
|
|
595
|
+
next = blocker ? blocker - 1 : range[1];
|
|
596
|
+
}
|
|
597
|
+
// Owed = every revision in (next, newest] that is not covered, where covered
|
|
598
|
+
// is received, or void with no unread file in its place.
|
|
599
|
+
const above = (r) => r > next && r <= newest;
|
|
600
|
+
let covered = 0;
|
|
601
|
+
for (const r of received)
|
|
602
|
+
if (above(r))
|
|
603
|
+
covered += 1;
|
|
604
|
+
for (const [a, b] of clamped) {
|
|
605
|
+
const lo = Math.max(a, next + 1);
|
|
606
|
+
if (lo <= b)
|
|
607
|
+
covered += b - lo + 1;
|
|
608
|
+
}
|
|
609
|
+
for (const r of [...received, ...unread])
|
|
610
|
+
if (above(r) && voidAt(clamped, r))
|
|
611
|
+
covered -= 1;
|
|
612
|
+
const missing = newest - next - covered;
|
|
613
|
+
db.transaction(() => {
|
|
614
|
+
setHighWater(db, device, next);
|
|
615
|
+
db.prepare('DELETE FROM sync_received WHERE device_id = ? AND revision <= ?').run(device, next);
|
|
616
|
+
db.prepare('UPDATE sync_state SET outstanding = ? WHERE device_id = ?').run(missing, device);
|
|
617
|
+
})();
|
|
618
|
+
// The floor stops only at a revision that is not covered, so it is the first owed.
|
|
619
|
+
return { missing, first: missing ? next + 1 : 0 };
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* The one-time recovery for an install upgraded from a release whose pull
|
|
623
|
+
* stepped over late records: every file at or below the mark it had then is
|
|
624
|
+
* read once more. Only what is unambiguous is applied -- an entry this device
|
|
625
|
+
* has never seen, or a plain fast-forward of the version it holds. Anything that
|
|
626
|
+
* would need a person to judge is left exactly as it is, because a record read
|
|
627
|
+
* now cannot be told from one the old pull already quarantined or superseded.
|
|
628
|
+
* It runs once: the old pull stopped at an unreadable record rather than
|
|
629
|
+
* stepping over it, so nothing below its mark is still waiting to be written.
|
|
630
|
+
*/
|
|
631
|
+
function replayEarlier(db, target, device) {
|
|
632
|
+
const through = db.prepare('SELECT replay_through FROM sync_state WHERE device_id = ?').get(device)?.replay_through;
|
|
633
|
+
if (!through)
|
|
634
|
+
return { applied: 0, tombstones: 0 };
|
|
635
|
+
let applied = 0;
|
|
636
|
+
let tombstones = 0;
|
|
637
|
+
for (const { revision, file } of pendingRecordFiles(target, device, 0)) {
|
|
638
|
+
if (revision > through)
|
|
639
|
+
break;
|
|
640
|
+
const rec = readRecord(file, device, revision);
|
|
641
|
+
if (!rec)
|
|
642
|
+
continue;
|
|
643
|
+
const outcome = db.transaction(() => applyRecord(db, rec, true))();
|
|
644
|
+
if (outcome === 'applied')
|
|
645
|
+
applied += 1;
|
|
646
|
+
else if (outcome === 'tombstone') {
|
|
647
|
+
applied += 1;
|
|
648
|
+
tombstones += 1;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
db.prepare('UPDATE sync_state SET replay_through = 0 WHERE device_id = ?').run(device);
|
|
652
|
+
return { applied, tombstones };
|
|
653
|
+
}
|
|
424
654
|
/**
|
|
425
655
|
* Applies what the peers wrote, one record at a time, in revision order.
|
|
426
656
|
*
|
|
427
|
-
* Each record is applied in its own transaction together with the
|
|
428
|
-
*
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
*
|
|
432
|
-
*
|
|
657
|
+
* Each record is applied in its own transaction together with the note that it
|
|
658
|
+
* was received, so an interrupted pull leaves a consistent database and resumes
|
|
659
|
+
* without applying anything twice. Order of arrival does not matter: a record
|
|
660
|
+
* that turns up after a later one is still read, because the floor never moves
|
|
661
|
+
* past a revision that has neither been applied nor voided by its writer. An
|
|
662
|
+
* unreadable record -- most likely one still being written -- is left for the
|
|
663
|
+
* next pull, and the records after it are still applied.
|
|
433
664
|
*/
|
|
434
665
|
export function pull(db, config, opts = {}) {
|
|
435
666
|
const g = guard(db, config, opts.target);
|
|
436
667
|
if (!g.ok) {
|
|
437
|
-
return {
|
|
668
|
+
return {
|
|
669
|
+
ok: false,
|
|
670
|
+
reason: g.reason,
|
|
671
|
+
applied: 0,
|
|
672
|
+
tombstones: 0,
|
|
673
|
+
skipped: 0,
|
|
674
|
+
conflicts: 0,
|
|
675
|
+
recovered: 0,
|
|
676
|
+
stalled: [],
|
|
677
|
+
outstanding: [],
|
|
678
|
+
};
|
|
438
679
|
}
|
|
439
680
|
let applied = 0;
|
|
440
681
|
let tombstones = 0;
|
|
441
682
|
let skipped = 0;
|
|
442
683
|
let conflicts = 0;
|
|
684
|
+
let recovered = 0;
|
|
443
685
|
const stalled = [];
|
|
686
|
+
const outstanding = [];
|
|
444
687
|
for (const device of peerDevices(g.target, g.device)) {
|
|
445
|
-
|
|
688
|
+
const replay = replayEarlier(db, g.target, device);
|
|
689
|
+
recovered += replay.applied;
|
|
690
|
+
applied += replay.applied;
|
|
691
|
+
tombstones += replay.tombstones;
|
|
692
|
+
const floor = highWater(db, device);
|
|
693
|
+
const received = receivedAbove(db, device, floor);
|
|
694
|
+
const unread = new Set();
|
|
695
|
+
for (const { revision, file } of pendingRecordFiles(g.target, device, floor)) {
|
|
696
|
+
if (received.has(revision))
|
|
697
|
+
continue;
|
|
446
698
|
const rec = readRecord(file, device, revision);
|
|
447
699
|
if (!rec) {
|
|
448
|
-
|
|
449
|
-
|
|
700
|
+
unread.add(revision);
|
|
701
|
+
continue;
|
|
450
702
|
}
|
|
451
703
|
const outcome = db.transaction(() => {
|
|
452
704
|
const result = applyRecord(db, rec);
|
|
453
|
-
|
|
705
|
+
db.prepare('INSERT OR IGNORE INTO sync_received (device_id, revision) VALUES (?, ?)').run(device, revision);
|
|
454
706
|
return result;
|
|
455
707
|
})();
|
|
708
|
+
received.add(revision);
|
|
456
709
|
if (outcome === 'applied')
|
|
457
710
|
applied += 1;
|
|
458
711
|
else if (outcome === 'tombstone') {
|
|
@@ -464,8 +717,24 @@ export function pull(db, config, opts = {}) {
|
|
|
464
717
|
else
|
|
465
718
|
skipped += 1;
|
|
466
719
|
}
|
|
720
|
+
if (unread.size)
|
|
721
|
+
stalled.push(device);
|
|
722
|
+
const owed = advanceFloor(db, device, floor, received, unread, readVoids(g.target, device, floor));
|
|
723
|
+
if (owed.missing)
|
|
724
|
+
outstanding.push({ device_id: device, ...owed });
|
|
467
725
|
}
|
|
468
|
-
return {
|
|
726
|
+
return {
|
|
727
|
+
ok: true,
|
|
728
|
+
device_id: g.device,
|
|
729
|
+
target: g.target,
|
|
730
|
+
applied,
|
|
731
|
+
tombstones,
|
|
732
|
+
skipped,
|
|
733
|
+
conflicts,
|
|
734
|
+
recovered,
|
|
735
|
+
stalled,
|
|
736
|
+
outstanding,
|
|
737
|
+
};
|
|
469
738
|
}
|
|
470
739
|
/**
|
|
471
740
|
* The merge rule, and the only place a remote version reaches local state.
|
|
@@ -482,10 +751,27 @@ export function pull(db, config, opts = {}) {
|
|
|
482
751
|
* edited the same entry, which no timestamp can adjudicate: the local version
|
|
483
752
|
* stays live and the incoming one is quarantined whole, for `repairConflict`.
|
|
484
753
|
*/
|
|
485
|
-
function applyRecord(db, rec) {
|
|
754
|
+
function applyRecord(db, rec, recovering = false) {
|
|
486
755
|
const held = localRecord(db, rec.entry_uid);
|
|
487
756
|
const local = localContent(db, rec.entry_uid);
|
|
757
|
+
// A version this one already moved past, delivered late: an earlier revision
|
|
758
|
+
// from the device that wrote what is held, or the version held one replaced.
|
|
759
|
+
// Checked first, so a late arrival can neither quarantine nor rename anything.
|
|
760
|
+
if (held &&
|
|
761
|
+
((held.device_id === rec.device_id && rec.revision <= held.revision) ||
|
|
762
|
+
held.base === ref(rec.device_id, rec.revision))) {
|
|
763
|
+
return 'skipped';
|
|
764
|
+
}
|
|
765
|
+
// Recovery applies only what needs no judgement: an entry with a quarantine
|
|
766
|
+
// open is already waiting on a person, and settling it here would retire that.
|
|
767
|
+
if (recovering &&
|
|
768
|
+
db.prepare('SELECT 1 FROM sync_conflicts WHERE entry_uid = ? AND resolved_at IS NULL').get(rec.entry_uid)) {
|
|
769
|
+
return 'skipped';
|
|
770
|
+
}
|
|
488
771
|
if (local && local.hash === rec.hash) {
|
|
772
|
+
// Renaming the agreed version to an old one is not unambiguous.
|
|
773
|
+
if (recovering && held)
|
|
774
|
+
return 'skipped';
|
|
489
775
|
// The two devices reached the same content independently. Adopting the
|
|
490
776
|
// incoming version name costs nothing and lines up the next fast-forward.
|
|
491
777
|
settle(db, rec);
|
|
@@ -496,9 +782,9 @@ function applyRecord(db, rec) {
|
|
|
496
782
|
const fastForward = !dirty &&
|
|
497
783
|
(rec.base === ref(held.device_id, held.revision) ||
|
|
498
784
|
(held.device_id === rec.device_id && rec.revision > held.revision));
|
|
499
|
-
if (!dirty && held.device_id === rec.device_id && rec.revision <= held.revision)
|
|
500
|
-
return 'skipped';
|
|
501
785
|
if (!fastForward) {
|
|
786
|
+
if (recovering)
|
|
787
|
+
return 'skipped';
|
|
502
788
|
db.prepare(`INSERT INTO sync_conflicts (entry_uid, device_id, revision, base, local_ref, payload, detected_at)
|
|
503
789
|
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(rec.entry_uid, rec.device_id, rec.revision, rec.base, ref(held.device_id, held.revision), JSON.stringify(rec), nowIso());
|
|
504
790
|
return 'conflict';
|
|
@@ -507,6 +793,8 @@ function applyRecord(db, rec) {
|
|
|
507
793
|
else if (local) {
|
|
508
794
|
// No agreed version, but content here already: two independent creations
|
|
509
795
|
// under one uid. Rare enough to be suspicious, so it is not merged either.
|
|
796
|
+
if (recovering)
|
|
797
|
+
return 'skipped';
|
|
510
798
|
db.prepare(`INSERT INTO sync_conflicts (entry_uid, device_id, revision, base, local_ref, payload, detected_at)
|
|
511
799
|
VALUES (?, ?, ?, ?, 'local:unstaged', ?, ?)`).run(rec.entry_uid, rec.device_id, rec.revision, rec.base, JSON.stringify(rec), nowIso());
|
|
512
800
|
return 'conflict';
|
|
@@ -643,7 +931,9 @@ export function syncStatus(db, config, opts = {}) {
|
|
|
643
931
|
if (!target)
|
|
644
932
|
return { ...base, reason: 'no-target' };
|
|
645
933
|
const device = deviceId(db, config);
|
|
646
|
-
const peers = db
|
|
934
|
+
const peers = db
|
|
935
|
+
.prepare('SELECT device_id, last_revision, last_sync_at, outstanding FROM sync_state ORDER BY device_id')
|
|
936
|
+
.all().filter((p) => p.device_id !== device);
|
|
647
937
|
return {
|
|
648
938
|
...base,
|
|
649
939
|
device_id: device,
|
package/dist/memory/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/memory/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/memory/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
-- Out-of-order delivery for shared-folder sync.
|
|
2
|
+
--
|
|
3
|
+
-- A synced folder does not deliver files in the order they were written: a
|
|
4
|
+
-- cloud client can hand over revision 2 before revision 1. The pull used to
|
|
5
|
+
-- advance a peer's `sync_state.last_revision` to every revision it applied, so
|
|
6
|
+
-- a revision that arrived late sat below the mark and was never read -- a lost
|
|
7
|
+
-- memory, or a deletion that never propagated, with sync reporting success.
|
|
8
|
+
--
|
|
9
|
+
-- `last_revision` now means what migration 011 always said it meant for a peer:
|
|
10
|
+
-- every revision up to and including it is accounted for. It advances only over
|
|
11
|
+
-- a contiguous run of revisions that were applied, or that the writer declared
|
|
12
|
+
-- it will never write (its `void.json`). A revision applied above that floor is
|
|
13
|
+
-- remembered here instead, so a duplicate or a resumed pull skips it, and the
|
|
14
|
+
-- floor catches up -- deleting these rows -- once the gap below it fills.
|
|
15
|
+
--
|
|
16
|
+
-- Bounded by the files a peer has published above its floor; a writer on this
|
|
17
|
+
-- release voids the revisions it abandoned, so a permanent gap does not keep the
|
|
18
|
+
-- table growing.
|
|
19
|
+
CREATE TABLE IF NOT EXISTS sync_received (
|
|
20
|
+
device_id TEXT NOT NULL,
|
|
21
|
+
revision INTEGER NOT NULL,
|
|
22
|
+
PRIMARY KEY (device_id, revision)
|
|
23
|
+
) WITHOUT ROWID;
|
|
24
|
+
|
|
25
|
+
-- Revisions from this peer known to exist (a file, or a later revision seen)
|
|
26
|
+
-- that have not yet been applied: what `sync status` reports as outstanding.
|
|
27
|
+
ALTER TABLE sync_state ADD COLUMN outstanding INTEGER NOT NULL DEFAULT 0;
|
|
28
|
+
|
|
29
|
+
-- The mark each peer had when this ran: an earlier release may have stepped
|
|
30
|
+
-- over late records below it. The first pull re-reads those files once and
|
|
31
|
+
-- applies only what is unambiguous (`replayEarlier` in `src/memory/sync.ts`),
|
|
32
|
+
-- then sets this back to 0. A fresh install has no rows, so nothing to replay.
|
|
33
|
+
ALTER TABLE sync_state ADD COLUMN replay_through INTEGER NOT NULL DEFAULT 0;
|
|
34
|
+
UPDATE sync_state SET replay_through = last_revision;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eklavya",
|
|
3
3
|
"displayName": "Eklavya",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.49.0",
|
|
5
5
|
"description": "Learn while your agent works. Turns coding-agent generation time into adaptive, Socratic learning grounded in the code being written.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Ajay Kumar"
|
package/dist/store.js
CHANGED
|
@@ -661,14 +661,19 @@ export function projectLevelRow(db, repo) {
|
|
|
661
661
|
* `since` is the level's `promoted_at`: answers from the previous band are spent.
|
|
662
662
|
* Declines are excluded from both halves of the accuracy fraction -- skipping a
|
|
663
663
|
* question honestly must never cost a level, or the level becomes a reason to
|
|
664
|
-
* guess.
|
|
665
|
-
*
|
|
666
|
-
*
|
|
664
|
+
* guess. A correction (`retry_of`) is not a new answer, but it turns the miss
|
|
665
|
+
* it corrects into a pass, for both the passing count and accuracy: fixing a
|
|
666
|
+
* mistake from its explainer is learning, and accuracy that could never recover
|
|
667
|
+
* from early misses would only discourage. Distinct concepts still need a pass
|
|
668
|
+
* on the first try. A `dont_know` counts as answered but never as passed on its
|
|
669
|
+
* own, whatever grade a legacy row carries.
|
|
667
670
|
*/
|
|
668
671
|
export function levelCounts(db, repo, level, since) {
|
|
669
672
|
const row = db
|
|
670
673
|
.prepare(`SELECT
|
|
671
|
-
COALESCE(sum(CASE WHEN grade >= ? AND COALESCE(outcome, 'answered') = 'answered' THEN 1
|
|
674
|
+
COALESCE(sum(CASE WHEN grade >= ? AND COALESCE(outcome, 'answered') = 'answered' THEN 1
|
|
675
|
+
WHEN EXISTS (SELECT 1 FROM attempts fix WHERE fix.retry_of = attempts.id) THEN 1
|
|
676
|
+
ELSE 0 END), 0) AS passed,
|
|
672
677
|
count(*) AS answered,
|
|
673
678
|
count(DISTINCT CASE WHEN grade >= ? AND COALESCE(outcome, 'answered') = 'answered' THEN concept_id END) AS concepts
|
|
674
679
|
FROM attempts
|