v1.0.0
[1.0.0] - 2026-05-18
First stable release. Same engine that's been running in production daily, with a final pre-launch polish pass on top of the 0.3.0r26 line.
Added (1.0.0)
- Single-chunk cron delivery (
src/telegram.js,src/cron.js): cron reports now post as one Telegram message instead of being shredded into ~900-char fragments.send()/sendLong()accept a{ style: 'single' | 'layered' }override; cron paths forcesingle. User-driven/talkreplies still use the layered chunker. - IR anti-hallucination pass (
src/narrative-ir.js): duty-section tail now carries an explicit deep-retrieval trigger ("if a fact isn't in this packet, dig — don't invent") plus an anti-fabrication hard rule. Reduces low-confidence completions when the pool covers a topic but the L0/L1 layers are thin. - Top-N force-full precision (
src/agent-runtime.js): the top-7 dynamic pool nodes by score now render atprecision='full'regardless of token budget. Cap raised from the legacy 5-slot heuristic.POOL_TOP_N_FORCE_FULLenv override (default 7). - RESTART_TOUCH pulse hint (
src/behavior-logger.js,src/pulse-handlers.js,src/main.js,electron/main.js): fifth pulse marker joins DEBRIEF / TASK_TOUCH / COGNITIVE_TOUCH / ANCHOR_TOUCH. The agent can request an in-place engine restart via this marker; the Electron launcher catches the exit signal and respawns without dropping session state. library_read_logtable (scripts/mimir-js/diary.js): records every library read with a 24h KNN-dedup window. Surfaces as a digest for the consolidation re-sweep loop.
Changed (1.0.0)
- Consolidation cosine threshold lowered 0.70 → 0.65 (
engine.cjsCONSOLIDATION_COSINE_THRESHOLD). Catches more fusion candidates at the cost of more judge calls; offset by the auto-supersede + type-gate paths. - Reconsolidate batch threshold raised 0.85 → 0.92 (
scripts/mimir-js/reconsolidate.jsSUPERSEDE_THRESHOLD) plus aSUPERSEDE_BLOCKED_TYPESgate. The pure-cosine batch path no longer bypasses the judge's TIMELINE_MERGE classification for borderline pairs — true verdicts route through the periodic re-sweep instead. - Lever B re-sweep added to
engine.cjs_consolidationResweep(): every 6h, re-scan recent active nodes through the full judge. Kill-switchENGINE_CONSOLIDATION_RESWEEP=0.
Added (r26)
/statuspayload surfaces mechanism toggles:rumination_enabledandnovelty_gate_enablednow read out ofgetStatus()alongsidesaandleiden, so dashboards can pull mechanism state from one endpoint without polling/rumination/statusand/hebb/statusseparately./configGET/POST still authoritative for runtime flips.
Fixed (r26)
edges.valid_fromnow defaults to current epoch-ms on INSERT (schema.sql). Bi-temporal reads filter onvalid_from, and main-arch installs got the default expression viamigrate_phase1c; OSS shipped without it, so rows from any INSERT path that didn't explicitly stampvalid_fromwould land NULL and silently fall out of the time-window filter. NewDEFAULT (CAST((julianday('now')-2440587.5)*86400000 AS INTEGER))matches main-arch behavior.
Added (r25)
- Predictive priming ported to
mimir-js/sa.js(Python parity:SIGNAL_HISTORY_SIZE=20,PRIMING_STRENGTH=0.08,PRIMING_DECAY=0.97). After every/signalinjection, currentA_fastis snapshotted into a per-instance signal history. Each tick predicts the next-likely activation pattern via cosine-similarity-weighted average of "what came after past signals like this one" and pre-warms those nodes through the same 3-channel fusion weights as the forward pass. Already-active nodes are damped 10× to push priming outward into unexplored space. Kill-switch:MIMIR_PRIMING=0. Default-ON. - Reverse propagation ported to
mimir-js/sa.js(Python parity:REVERSE_PROPAGATION_SCALE=0.15,DIRECTED_EDGE_TYPES= supports/extends/exemplifies/contains/depends_on/enables/causes/inspires/supersedes). Per-channel reverse CSR matrices built alongside forward CSR during_buildState(); each tick adds a fusion-weighted backward diffusion pass so activation flows effect→cause along directed edges (abductive reasoning substrate). Kill-switch:MIMIR_REVERSE_PROP=0. Default-ON. - Novelty gate ported to
mimir-js/hebb.js(Python parity:NOVELTY_GATE_THRESHOLD=0.3,NOVELTY_EMA_ALPHA=0.1,EMA_MAX_SIZE=3000). LTP (+0.02) now only fires when|coact − EMA|exceeds the threshold — strengthening surprising co-activations and skipping over well-predicted ones. EMA dict prunes at 3000 entries (drop ≤0.01 noise floor, then keep top half by EMA value). Kill-switch:MIMIR_NOVELTY_GATE=0. Default-ON. - Rumination ported as
mimir-js/rumination.js(Python parity:rumination_interval_s=120,rumination_strength=0.35,rumination_n_nodes=12, idle ≥60s). When the daemon goes idle, pick a Leiden zone weighted 70% by meanA_slow(recent cognitive afterglow) + 30% by zone size; re-inject0.35energy into the top 12 nodes byweight · (1 + log(1+access_count)). Mirrors the brain's default-mode network. Kill-switch:MIMIR_RUMINATION=0. Default-ON. Routes:POST /rumination/run,GET /rumination/status. /configGET and POST now expose four mechanism toggles (rumination_enabled,novelty_gate_enabled,reverse_propagation_enabled,priming_enabled) for runtime control without restart. Env-var kill-switches remain the durable off-switch.
Fixed (r25)
- Identity bootstrap on standalone boots:
src/main.jsnow scaffoldsidentity/,identity/tasks.json(default{"tasks":[]}),identity/COGNITIVE_STATE.md,engine-inbox/, andlibrary/on every launch (idempotent). Previously only the Electron path (electron/main.js) did this, sonode src/main.jscould hit ENOENT inside Anamnesis writes if those files were missing from the repo. DefensivemkdirSync({recursive:true})guard also added tosession-debrief.js#backupAndWrite()so any other write path lands the parent directory beforewriteFileSync.
Changed (r24)
- Sponsor verification is now permanent on first success. The dashboard previously re-queried the Worker every 7 days and would re-show the support banner if the cache aged out. Now, once a sponsor (recurring or one-time) verifies once, the banner stays dismissed permanently. Cancellations on the recurring path still propagate through the GitHub Sponsors webhook → CF Worker → engine.
Fixed (r22)
engine.cjs_validEdgeEndpointsSqledges:0 regression: helper defaultededgeAliasto'', producing baresource/targetin EXISTS subqueries. Since thenodestable has its ownsourcecolumn (text: diary/knowledge/inbox), SQLite's subquery scoping resolvedsourceto the innernodes.sourceinstead of the outeredges.source— makingEXISTSalways false and silently zeroing every edge-counting path (dashboard stats,conn_countwrites, etc.). Default now'edges'; all five callsites use bareFROM edges, so the fix flows through.- ANCHOR_TOUCH pulse marker leaking into user-visible text:
dashboard.jsPULSE_MARKER_REplus two inline strip regexes and bothtelegram.jssend-path replacers covered onlyTASK_TOUCH|COGNITIVE_TOUCH|DEBRIEF. ANCHOR_TOUCH (added later) now included in all five strip sites. logs/anamnesis-parse-failures/unbounded growth: parse-failure dumps now cap to the 50 most recent files; older entries unlink on write.
Added
- First public OSS release scaffolding
- Anamnesis auto-archive (
session-debrief.js): tasks with statuscompleted/expired/failedthat have sat ≥7 days move toidentity/tasks-archive.json. Triple safety gate — status whitelist, parseable timestamp, 7-day dwell —in_progress/pending/blocked/suspended/code-ready/code-doneare never touched. On archive write failure, all tasks remain in the active list. - Cognitive-state auto-roll (
session-debrief.js): whenidentity/COGNITIVE_STATE.mdexceeds 64 KB, a full snapshot is appended tocognitive-state-archive.mdand the active file is trimmed to H1 + the last ~32 KB. - Default
memory-hygienecron at0 4 * * *ships ON: nightly star-map hygiene (supersedes / dormant / weak-edge / noise / fusion / stale / gardener) + system health check via/api/doctor+ event-timeline detection + inbox review. Users can disable in the Dashboard Cron Editor. - Dashboard Tour Step 6 ("Cron Editor") now explains the default-on memory-hygiene cron and why to keep it enabled.
Changed
LICENSEnow ships verbatim AGPL-3.0 textCONTRIBUTING.mdrewritten to match the actualnpmscripts and runtime layout- Identity templates updated to drop stale provider/transport references