Finish M2 — subject model + cybermark addresses
state (verified)
The whole mechanism already exists:
~self/~now/…/~worldlower to axis reads (rs/lower Sym match, hardcoded 2/6/14/…/255)#pathaddresses lower to[17 [path-atom [0 255]]]— scry over~worldscry_worldwalks[[key val] … 0], matches key == path- hemera hash is real (opcode 15);
string_to_atom = hemera::hash(s)[..8](private in lower)
gaps
Subject::minimal()is allAtom(0)→~self→ 0,~worldempty- the world-key hash (
string_to_atom) is private to the lowerer → nothing else can build matching~worldkeys - no
~worldbuilder, no populated subject
work
- rune-subject (+hemera dep):
pub fn path_atom(s) -> u64— the canonical address→world-key hash (hemera)pub fn world(entries: &[(&str, Noun)]) -> Noun— build[[key val] … 0], key = path_atomSubject::standalone()— real-ish: self = neuron atom, here = home, now/world host-filled- keep
minimal()(zeros) for pure tests
- rune-lower (+rune-subject dep):
string_to_atom→rune_subject::path_atom(one source of truth for the key)- hardcoded slot axes →
rune_subject::axis::{SELF,NOW,…}(kills magic numbers)
- cli: a
subject()helper —standalone()with~now= real unix time; used by eval / run / repl instead ofminimal() - tests:
- rune-interp integration: build subject with
world([("cyber/truth", 42)]), parse+lower+eval#cyber/truth→ 42 (scry threading, the completion signal) - cli integration:
rune eval '~self'→ non-zero neuron - rune-subject unit: path_atom stable, world layout
- rune-interp integration: build subject with
completion signal
rune eval '~self' returns a neuron atom; #cyber/truth scry-resolves through a
populated ~world. Then update PLAN.md M2 + CHANGELOG.