Operator: Andrew. Written 2026-10-29 23:50 Sydney. Supersedes Experiment_001_checkpoint_8.md (same content plus session narrative; kept, never overwritten). Earlier checkpoints _7 to _2 and Experiment_001_checkpoint.md also kept. Status: recorder 1.3.0 (Experiment 002 prefill injection) built and delivered, tested only against a scripted stand-in server, not yet run on the real 4B. No experiment has run since checkpoint 7. Resume: paste this file into a fresh conversation and attach NaturalRecorder_v1.3.0.zip, Exp000_queries_v1.0.0.zip, Hotwords_v2.1.0.zip, Memstore_Clone_v1.0.16.zip. For the experiment definitions, the 000/001 results and risks 1 to 40, use Experiment_001_checkpoint_7.md (risks 1-13 in _2, 14-21 in _3, 22-24 in _5, 25-29 in _6, 30-40 in _7; this file adds 42 to 47). Newest file wins. Terms: LLM1 = Qwen3-4B (chat model). LLM2 = second module / second 4B copy on 8082. RAG = hotwords.py pseudo. Pool = top 50 candidates at one step. Prefill = tokens placed at the start of the assistant's turn. Greedy = always take the most likely token (same prompt, same reply).
NaturalRecorder_v1.3.0.zip → NaturalRecorder/ (natural_recorder.py, NATURAL_RECORDER_MANUAL.md, both 1.3.0). New run options:
| Option | Meaning |
|---|---|
--inject-top N |
Inject the N hottest terms retrieved for the query (needs --hotwords or --inject-terms-file). |
--hotwords PATH, --hotwords-python PYTHON |
hotwords.py and its interpreter (Clone: python3.6). Runs pseudo --file - --format json once per query. HOTWORDS_DB picks the store. |
--inject-source rag|query|both |
rag (default) = related terms from stored arrays; query = the query's own array; both. |
--inject-terms-file PATH |
Ranked terms, one per line; with --inject-top N the first N. |
--inject-text TEXT |
Literal text (the "ceiling"). Not combinable with the term options. |
--inject-frame TEMPLATE |
Wrap terms, e.g. "On the Clone, regarding {terms}:" (needs {terms}). Default: bare list. |
--inject-step N |
0 (default) = very start of the reply; N = forced after N model tokens. |
Saved in qNNN_rNN.json under inject: applied/reason, terms, terms_available, source, frame, retrieval, text, ids, tokens, applied_at_step, natural (the model's own pool at the injection point: first injected token's id, text, rank and probability in the top 50 or null, natural top 5), reply_text_with_inject, reply_with_inject_sha256. reply_text/reply_sha256 = the model's own tokens only (comparable with a natural run). Steps file holds only the model's chosen steps.
Unrequested changes (listed at delivery): injected text tokenized with special tags off; an injected run's replies kept out of pairs.jsonl (queries only; risk 36); a reply that cannot be injected (no terms retrieved, or it ended before the step) runs natural and says why.
Stand-in tests passed: natural run unchanged; hotwords top 2 at step 0; terms file at step 3; literal text; frame; no-terms case; reply-ended-first case; four usage errors. In the test store the retrieved terms were runs, centos, end-of-life ("runs" is filler: risk 35). Not run on the Clone's Python 3.6. Release card: all rules done or not needed.
python3.6 (has SQLite).hotwords_store_stage.py still stores every chat in hotwords.db; switching it off (enabled=no in stages.control) is the operator's decision, not yet made.hotwords.py pseudo --format json gives query_terms, rag_terms (weighted), rag_arrays, fuzzy_matches. Fuzzy: plain words of 5+ letters only; never words with digits or under 5 letters.--repeat 3 --max-steps 600, then 20) is still not done; the claim rests on the 8080/8082 comparison and the repeated Q3 runs.--force-path, not built).--force-path.hotwords.py top --words into --inject-terms-file), unrelated to the query; and add a few of the operator's own off-the-likely-path queries beside the plain ones.relate block matching the reply's words to the hot terms by spelling key (appears or not, first step). 1.4.0 = compare command, --force-path, vocab command, corrected word-start flag.vocab command: dump every id with its piece and flags (leading space, letters, digits, special, partial multi-byte) via /detokenize (about 152,000 calls, run once, kept as a file). Shows how fact words and names split, gives a tokenizer-aware word-start flag (risk 28), tests the multi-byte theory for the "no candidates" fault, and may give an outside rarity reference from id order (believed true for Qwen, unverified). No-code first look: curl -s http://127.0.0.1:8080/tokenize -d '{"content":" CentOS 6.10 end-of-life MAOIs SSRIs","with_pieces":true}'.hotwords.py: manual nudge TERM +0.3 in a side table applied only in pseudo (second ladder lever: the order of the same retrieved terms); event log, heat table frozen and recorded per run; reinforcement only from the operator's approvals and corrections. Pinned names = importance set by the operator, applied as a gain only when the name or an alias matches the query, with aliases and the relation attached.pseudo test on Q3 (HOTWORDS_DB=/root/memstore/hw_test.db, only the approved entries); switch off the store stage; wait for the video job; run 1.3.0 on Python 3.6 (probe, then one natural Q3 run to confirm nothing changed).--inject-top 1, 3, 6, 10 (bare list), then the framed variant, the --inject-text ceiling and the global-top control; then Q4, Q5; controls Q1, Q9; compare with A and B. Pass: after only subject-level terms are injected, the model supplies connected facts unaided (Q3: 6.10, end-of-life, limits, no pkill) and stays fluent. Fail: generic drift, loss of fluency, or a fluent wrong answer.memstore.py inject WORDS --limit); conditions C and D; hotwords.py on the Clone's Python versions.nudge/pinned-names command, the prior-art search, embeddings (after the Q3 test).hotwords.py has no remove.Claude: [Month DD, YYYY, HH:MM:SS AM/PM] (casual), real Sydney time from code run immediately before each reply.pkill/kill on services. Never rename his scripts or files. Deployment timing is his call.@version/@date; manual with version history; version shown once at start; zip with a dotted, never-reused version; xmllint --noout on XML; list unrequested changes BEFORE making them; end with a release card (legacy zipper only for SMF package zips)._N, never reused (next is _10). Prefers short conversations and a fresh chat per chapter. Transcript PDFs match claude.ai's print style, are checked visually, and take a new numbered name each time.