@amalgm/shell 0.1.41 → 0.1.42

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/PURPOSE.md CHANGED
@@ -243,6 +243,9 @@ shell only assembles.
243
243
  verified from the immutable cache before its rows or reveal are trusted.
244
244
  Staging beside the destination makes the reveal an atomic rename on every
245
245
  supported filesystem.
246
+ Register reuses identity at the same native address. Device and inode may
247
+ rescue a move only when the prior address is gone; a different address
248
+ that is still present is a collision or hard link, never the same entity.
246
249
  The refreshed references and their parent container's derived membership
247
250
  version enter machine SQLite in one transaction, so the authoritative
248
251
  install is already internally consistent before Watch opens it.
@@ -335,6 +338,27 @@ shell only assembles.
335
338
  changes after the cutoff remain inside the blind interval that startup
336
339
  catch-up is required to close.
337
340
 
341
+ 42. **Record commits evidence before Watch settles.** The host reconciles a
342
+ Watch generation against one last-verified detection notebook, writes the
343
+ exact portable Detect proposals into the existing cloud outbox, and
344
+ advances that notebook in the same SQLite transaction. The materialized
345
+ `entities` table contains only ground present on this machine; the notebook
346
+ may retain the UUID and last verified evidence for missing ground so an
347
+ external disappearance cannot invent a delete or a replacement identity.
348
+ Repository boundaries own the portable changes of their enclosed children:
349
+ gaining `.git` records one Card + Checkpoint transition, while losing it
350
+ recaptures those children through their newly selected file rails. Watch
351
+ settles only after this transaction is durable and never interprets any of
352
+ these meanings itself.
353
+
354
+ 43. **One Detect job proves one finite Watch generation.** A scheduled pass or
355
+ explicit flush observes and settles only the generations it froze before
356
+ reading truth. A ring received during that read remains pending and owns a
357
+ later debounced pass; no caller waits for the operating system to become
358
+ globally silent. This keeps duplicate or continuous native callbacks from
359
+ making an otherwise complete Record operation unbounded without dropping
360
+ any suspicion.
361
+
338
362
  ## Relationship to amalgm-engine
339
363
 
340
364
  Stage 1 cut the bricks out of the engine. Stage 2 proves them here, composed.
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The one host seam between Node filesystem evidence and Live's portable
3
+ * Detect laws. This file owns no watcher, scanner, database, or transport.
4
+ * It only binds already-observed ground to durable UUIDs and asks Live to
5
+ * plan the exact Watch generation that Record may accept.
6
+ */
7
+ import { type CloudEntityRecord, type DetectionBatchPlan, type EntityType, type ReplayInstruction, type SuspicionSnapshot } from "@amalgm/live";
8
+ export interface IdentityRow {
9
+ readonly uuid: string;
10
+ readonly type: EntityType;
11
+ readonly relativePath: string;
12
+ readonly deviceNumber: number;
13
+ readonly inode: number;
14
+ }
15
+ export interface IdentityEntry {
16
+ /** Stable only for this observation; never leaves the host. */
17
+ readonly key: string;
18
+ readonly type: EntityType;
19
+ readonly relativePath: string;
20
+ readonly deviceNumber: number;
21
+ readonly inode: number;
22
+ /** A deliberate Register/Add boundary already owns this UUID. */
23
+ readonly fixedUUID?: string;
24
+ }
25
+ /**
26
+ * Resolve one observation against the last notebook. Directories claim by
27
+ * unique physical continuity first; files and links claim their address
28
+ * first, then unique physical continuity rescues a move. Equal bytes are not
29
+ * an input and therefore can never create identity.
30
+ */
31
+ export declare function reconcileGroundUUIDs(rows: readonly IdentityRow[], entries: readonly IdentityEntry[]): ReadonlyMap<string, string>;
32
+ export interface DetectedGroundRow {
33
+ readonly record: CloudEntityRecord;
34
+ readonly relativePath: string;
35
+ readonly replay?: ReplayInstruction;
36
+ }
37
+ /**
38
+ * Turn one real Watch observation and its settled before/after graph into the
39
+ * portable Detect plan. Ordinary descendants owned by a repository do not
40
+ * publish independent records; the nearest repository's Card + Checkpoint
41
+ * proposal owns them.
42
+ */
43
+ export declare function planGroundDetection(input: {
44
+ readonly rootId: string;
45
+ readonly suspicion: SuspicionSnapshot;
46
+ readonly before: readonly CloudEntityRecord[];
47
+ readonly after: readonly DetectedGroundRow[];
48
+ }): DetectionBatchPlan;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * The one host seam between Node filesystem evidence and Live's portable
3
+ * Detect laws. This file owns no watcher, scanner, database, or transport.
4
+ * It only binds already-observed ground to durable UUIDs and asks Live to
5
+ * plan the exact Watch generation that Record may accept.
6
+ */
7
+ import { CONTAINERS, detectionBatch, diffDirState, enclosedByRepositoryAncestor, matchByInode, planDetectionBatch, } from "@amalgm/live";
8
+ /**
9
+ * Resolve one observation against the last notebook. Directories claim by
10
+ * unique physical continuity first; files and links claim their address
11
+ * first, then unique physical continuity rescues a move. Equal bytes are not
12
+ * an input and therefore can never create identity.
13
+ */
14
+ export function reconcileGroundUUIDs(rows, entries) {
15
+ const resolved = new Map();
16
+ const claimed = new Set();
17
+ const claim = (entry, uuid) => {
18
+ if (resolved.has(entry.key))
19
+ throw new Error(`detection entry ${entry.key} claimed twice`);
20
+ if (claimed.has(uuid))
21
+ throw new Error(`detection UUID ${uuid} claimed twice`);
22
+ resolved.set(entry.key, uuid);
23
+ claimed.add(uuid);
24
+ };
25
+ for (const entry of entries) {
26
+ if (entry.fixedUUID)
27
+ claim(entry, entry.fixedUUID);
28
+ }
29
+ const availableRows = () => rows.filter((row) => !claimed.has(row.uuid));
30
+ const availableEntries = () => entries.filter((entry) => !resolved.has(entry.key));
31
+ const directoryRows = availableRows().filter((row) => CONTAINERS.has(row.type));
32
+ const directoryEntries = availableEntries().filter((entry) => CONTAINERS.has(entry.type));
33
+ const directoryEntryByPath = new Map(directoryEntries.map((entry) => [entry.relativePath, entry]));
34
+ const directories = diffDirState(directoryRows.map((row) => ({
35
+ dirId: row.uuid,
36
+ relPath: row.relativePath,
37
+ device: row.deviceNumber,
38
+ inode: row.inode,
39
+ })), directoryEntries.map((entry) => ({
40
+ entry,
41
+ relPath: entry.relativePath,
42
+ device: entry.deviceNumber,
43
+ inode: entry.inode,
44
+ })));
45
+ for (const match of [...directories.renames, ...directories.retags]) {
46
+ const entry = directoryEntryByPath.get(match.entry.relPath);
47
+ if (!entry)
48
+ throw new Error(`detection directory ${match.entry.relPath} disappeared from its observation`);
49
+ claim(entry, match.row.dirId);
50
+ }
51
+ const rowsByPath = new Map(availableRows().map((row) => [row.relativePath, row]));
52
+ for (const entry of availableEntries().filter((candidate) => !CONTAINERS.has(candidate.type))) {
53
+ const row = rowsByPath.get(entry.relativePath);
54
+ if (row)
55
+ claim(entry, row.uuid);
56
+ }
57
+ const physicalRows = availableRows().filter((row) => !CONTAINERS.has(row.type));
58
+ const physicalEntries = availableEntries().filter((entry) => !CONTAINERS.has(entry.type));
59
+ for (const match of matchByInode(physicalRows.map((row) => ({
60
+ row,
61
+ device: row.deviceNumber,
62
+ inode: row.inode,
63
+ })), physicalEntries.map((entry) => ({
64
+ entry,
65
+ device: entry.deviceNumber,
66
+ inode: entry.inode,
67
+ })))) {
68
+ claim(match.entry.entry, match.row.row.uuid);
69
+ }
70
+ return resolved;
71
+ }
72
+ const hasRepositoryAncestor = (record, records) => {
73
+ const byUuid = new Map(records.map((candidate) => [candidate.uuid, candidate]));
74
+ return enclosedByRepositoryAncestor(record, (uuid) => byUuid.get(uuid));
75
+ };
76
+ /**
77
+ * Turn one real Watch observation and its settled before/after graph into the
78
+ * portable Detect plan. Ordinary descendants owned by a repository do not
79
+ * publish independent records; the nearest repository's Card + Checkpoint
80
+ * proposal owns them.
81
+ */
82
+ export function planGroundDetection(input) {
83
+ const batch = detectionBatch(input.rootId, input.suspicion);
84
+ const beforeByUuid = new Map(input.before.map((record) => [record.uuid, record]));
85
+ const afterRecords = input.after.map((row) => row.record);
86
+ const afterByUuid = new Map(input.after.map((row) => [row.record.uuid, row]));
87
+ const transitions = [];
88
+ for (const uuid of new Set([...beforeByUuid.keys(), ...afterByUuid.keys()])) {
89
+ const base = beforeByUuid.get(uuid) ?? null;
90
+ const current = afterByUuid.get(uuid) ?? null;
91
+ const baseEnclosed = base ? hasRepositoryAncestor(base, input.before) : false;
92
+ const resultEnclosed = current ? hasRepositoryAncestor(current.record, afterRecords) : false;
93
+ const repositoryBoundary = base?.type === "repo.git" || current?.record.type === "repo.git";
94
+ if (!repositoryBoundary
95
+ && ((current === null && baseEnclosed)
96
+ || (current !== null && resultEnclosed)))
97
+ continue;
98
+ if (current === null) {
99
+ transitions.push({ truth: "absent", base });
100
+ continue;
101
+ }
102
+ transitions.push({
103
+ truth: "present",
104
+ relPath: current.relativePath,
105
+ base,
106
+ result: current.record,
107
+ replay: current.replay ?? { kind: "structure" },
108
+ });
109
+ }
110
+ try {
111
+ return planDetectionBatch(batch, transitions);
112
+ }
113
+ catch (error) {
114
+ const message = error instanceof Error ? error.message : String(error);
115
+ const candidates = transitions.slice(0, 8).map((transition) => transition.truth === "present"
116
+ ? `${transition.result.uuid}:${transition.result.type}:${transition.result.payloadVersion ?? "none"}`
117
+ : `${transition.base?.uuid ?? "none"}:absent`).join(",");
118
+ const remainder = transitions.length > 8 ? `,+${transitions.length - 8} more` : "";
119
+ throw new Error(`Detect plan for ${input.rootId} failed (${candidates}${remainder}): ${message}`);
120
+ }
121
+ }
122
+ //# sourceMappingURL=detection-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection-host.js","sourceRoot":"","sources":["../src/detection-host.ts"],"names":[],"mappings":"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"}
@@ -42,4 +42,12 @@ export declare function ensureWorkspaceReference(input: {
42
42
  };
43
43
  export declare function pathExists(path: string): boolean;
44
44
  export declare function pathWithin(root: string, candidate: string): boolean;
45
+ export interface KnownRegistrationIdentity {
46
+ readonly uuid: string;
47
+ readonly absolutePath: string;
48
+ }
49
+ /** Physical identity rescues a moved registration only after its prior
50
+ * address is gone. A still-present different address is a collision or hard
51
+ * link, never permission to give new ground an existing UUID. */
52
+ export declare function selectKnownRegistrationId(requestedPath: string, candidates: readonly KnownRegistrationIdentity[]): string | null;
45
53
  export declare function referenceWorkspaceId(referencePath: string, bindingDir: string): string | null;
@@ -145,6 +145,21 @@ export function pathWithin(root, candidate) {
145
145
  const rel = relative(resolve(root), resolve(candidate));
146
146
  return rel === "" || (rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel));
147
147
  }
148
+ /** Physical identity rescues a moved registration only after its prior
149
+ * address is gone. A still-present different address is a collision or hard
150
+ * link, never permission to give new ground an existing UUID. */
151
+ export function selectKnownRegistrationId(requestedPath, candidates) {
152
+ const eligible = candidates.filter((candidate) => (sameNativePath(candidate.absolutePath, requestedPath)
153
+ || !pathExists(candidate.absolutePath)));
154
+ const ids = [...new Set(eligible.map(({ uuid }) => uuid))];
155
+ if (ids.length > 1) {
156
+ throw new Error(`entity graph has ambiguous identity for ${requestedPath}`);
157
+ }
158
+ return ids[0] ?? null;
159
+ }
160
+ function sameNativePath(left, right) {
161
+ return pathWithin(left, right) && pathWithin(right, left);
162
+ }
148
163
  export function referenceWorkspaceId(referencePath, bindingDir) {
149
164
  try {
150
165
  const target = resolve(dirname(referencePath), readlinkSync(referencePath));
@@ -1 +1 @@
1
- {"version":3,"file":"files-register-host.js","sourceRoot":"","sources":["../src/files-register-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files-register-host.js","sourceRoot":"","sources":["../src/files-register-host.ts"],"names":[],"mappings":"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"}
@@ -100,8 +100,9 @@ export declare class UserGroundHost {
100
100
  readonly cloudHead: string;
101
101
  readonly watch: WatchCoverageEvidence;
102
102
  }>;
103
- /** Make every observed filesystem change durable in SQLite, immutable
104
- * content storage, and the official cloud head before returning. */
103
+ /** Prove one finite observation boundary in SQLite, immutable content
104
+ * storage, and the official cloud head. Rings received during that proof
105
+ * remain pending and already own their next debounced Detect pass. */
105
106
  flush(): Promise<void>;
106
107
  private syncNow;
107
108
  private flushObservedChanges;