Skip to content

server: POST /lora-adapters/snapshot writes a mind's shadow to an immutable GGUF between steps, and /learn reports the shadow's committed step - #86

Open
joelteply wants to merge 1 commit into
cormac/per-mind-shadowfrom
cormac/shadow-snapshot
Open

joelteply wants to merge 1 commit into
cormac/per-mind-shadowfrom
cormac/shadow-snapshot

Conversation

@joelteply

Copy link
Copy Markdown

What a shadow learned on a serving context lived only in memory: a restart
lost it, and nothing could hand it to a gene trial (continuum S4 (d), card
76b05d2a; ONE-RESIDENT-MODEL §9.2 "Snapshot").

  • POST /lora-adapters/snapshot {id, name}: on the server loop, between
    steps (never a half-applied update), the adapter's current weights are
    written beside the name and renamed into place inside --train-dir
    (confine_out, the load route's rule). An existing name is refused: a
    snapshot is immutable. The reply carries the path, bytes and the steps
    the shadow had committed.
  • /learn's outcome carries step: the shadow's committed optimizer steps
    after this one (each shadow counted on its own; unload forgets it), the
    commit the core's cursor stands on.
  • learn-every-format.py --snapshot: two steps (step 1, 2), a snapshot at
    steps 2, a second snapshot of that name refused, and the snapshot loaded
    under a new id shows the forward loss the shadow showed at its third
    step (2.526167, both), so the file is the trained weights. Qwen2.5-0.5B,
    IntelMac CPU, fresh server.

Co-Authored-By: Claude Opus 5.5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE

…utable GGUF between steps, and /learn reports the shadow's committed step

What a shadow learned on a serving context lived only in memory: a restart
lost it, and nothing could hand it to a gene trial (continuum S4 (d), card
76b05d2a; ONE-RESIDENT-MODEL §9.2 "Snapshot").

- POST /lora-adapters/snapshot {id, name}: on the server loop, between
  steps (never a half-applied update), the adapter's current weights are
  written beside the name and renamed into place inside --train-dir
  (confine_out, the load route's rule). An existing name is refused: a
  snapshot is immutable. The reply carries the path, bytes and the steps
  the shadow had committed.
- /learn's outcome carries step: the shadow's committed optimizer steps
  after this one (each shadow counted on its own; unload forgets it), the
  commit the core's cursor stands on.
- learn-every-format.py --snapshot: two steps (step 1, 2), a snapshot at
  steps 2, a second snapshot of that name refused, and the snapshot loaded
  under a new id shows the forward loss the shadow showed at its third
  step (2.526167, both), so the file is the trained weights. Qwen2.5-0.5B,
  IntelMac CPU, fresh server.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE
@joelteply
joelteply changed the base branch from master to cormac/per-mind-shadow November 1, 2026 07:36
@github-actions github-actions Bot added the server label Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant