Commit 20196db
omc-kernel: content-addressed code DAG keyed by canonical hash
A standalone CLI that maintains a file-system content-addressed
store at ~/.omc/kernel/store/<canonical_hash_hex>.omc. Every OMC
fn has a 64-bit canonical-hash identity (whitespace-stripped,
comments removed, parameter binding normalized), and the store is
keyed on that.
Subcommands:
ingest DIR walk DIR, extract every fn, store one entry per
canonical hash; sidecar JSON carries substrate
metadata (attractor, dist, fn name, origin file)
fetch HASH retrieve stored source by canonical hash (hex)
stat HASH pretty-print substrate metadata
ls list stored entries + fn names
sign FILE emit substrate-signed wire message for OMC source
(codec format: sampled_tokens + content_hash)
verify read wire msg from stdin, recover content via
store lookup; defends against store tampering by
recomputing canonical hash and comparing
demo end-to-end alpha-rename invariant recovery
End-to-end proof (in this commit):
$ omc-kernel ingest examples/lib/ → 206 fns, 184 unique
$ cat > /tmp/x.omc <<<"fn commit(handle) { ... handle ... }"
$ omc-kernel sign /tmp/x.omc | omc-kernel verify
→ STORE HIT — recovered "fn commit(conn) { ... conn ... }"
Sender used `handle`, store has `conn` — same canonical address.
Alpha-rename + whitespace + comment invariance is intrinsic to
the addressing; no shared key, no certificate authority.
Substrate metadata sidecar (~/.omc/kernel/store/<hash>.json) gives
O(1) `stat` without re-canonicalizing. OMC_KERNEL_ROOT env
overrides the store location.
Honest limits documented in docs/omc_kernel.md:
- No daemon yet (CLI-level only)
- No peer-to-peer discovery (single-node)
- No outgoing-edge graph (Merkle DAG edges are a one-pass
extension)
- No GC, no on-disk compression
Each is a separable extension that doesn't require redesigning
the address scheme.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent 0d4ceb9 commit 20196db
5 files changed
Lines changed: 577 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
39 | 41 | | |
40 | 42 | | |
41 | 43 | | |
| |||
264 | 266 | | |
265 | 267 | | |
266 | 268 | | |
267 | | - | |
| 269 | + | |
268 | 270 | | |
269 | 271 | | |
270 | 272 | | |
| |||
354 | 356 | | |
355 | 357 | | |
356 | 358 | | |
| 359 | + | |
357 | 360 | | |
358 | 361 | | |
359 | 362 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
31 | 38 | | |
32 | 39 | | |
33 | 40 | | |
| |||
40 | 47 | | |
41 | 48 | | |
42 | 49 | | |
| 50 | + | |
43 | 51 | | |
44 | 52 | | |
45 | 53 | | |
| |||
0 commit comments