Releases: CONSTELLATION-ENGINE/constellation-engine
Releases · CONSTELLATION-ENGINE/constellation-engine
v1.0.3
Hotfix release containing four code/mechanism fixes since v1.0.2.
Fixed
- Resolver canary no longer auto-starts on boot; synthetic canary telemetry is explicit diagnostic-only and the sample star map demotes existing canary noise.
- Mímir JS pool applies query-aware relevance scoring so query-relevant nodes rise during first-stage pool scoring.
- Restart resume handoff carries interrupted-turn progress context to reduce post-restart repetition loops.
- Consolidation apply paths are transaction-safe for multi-step fuse/supersede updates.
v1.0.2 — Codex OAuth + packaged startup hotfix
Constellation Engine v1.0.2
Hotfix release for Codex-compatible providers, optional Codex OAuth setup, semantic anchor embeddings, and packaged launcher polish.
Added
- Optional Codex OAuth provider path in first-run setup for users who have installed Codex CLI and run
codex login. - Local-only Codex shim on
127.0.0.1:3457; Constellation never reads or stores Codex OAuth tokens.
Fixed
- Packaged Codex shim cold-start now uses Electron's bundled Node runtime instead of assuming a system
nodecommand exists. - Configured Codex shim host/port are passed into the child process, so custom
baseUrlports no longer fall back to3457. - Codex-compatible provider budget defaults are raised to avoid Claude-era budget warnings on OpenAI-compatible usage reporting.
- Star-map dense retrieval now has optional
semantic_anchor/embedding_text_versionsupport plus dry-run audit/backfill tools. - Electron launcher now focuses whichever window is open, including the onboarding wizard, and packages canonical icon assets.
Artifacts
- Windows x64 installer
- Linux x64 AppImage
- macOS arm64 zip
v1.0.1 — vec0 + mimir_actions + self_act hotfix
Hotfix release. Three silent-failure bugs surfaced by a 20-round research-cron sweep (Opus, 2026-05-19) that took the post-1.0.0 codebase as fixed input and walked the cognitive pipeline end-to-end looking for orphan producers / consumers.
Fixed
- vec0 lookup column rename (
engine.cjs): consolidation's per-candidate embedding pull usedWHERE rowid = ?on the sqlite-vec virtual table, butvec0exposes the primary key asid, notrowid. The SELECT returned nothing, leaving the consolidation judge embedding-blind on every pair. Fix:WHERE id = ?. mimir_actionstable now actually populated (src/dashboard.js): the autonomy picker's success branch wrote tomimir_outreach_auditbut never wrote the canonical row tomimir_actions. Consumer side (Critic gate, demotion-sweep, persona caps, outreach review queue) was reading from an always-empty table — silently no-op'd in production. Added the missing INSERT with try/catch + action guard + meta sanitization.self_actconsolidation policy (engine.cjsALLOWED_OPS_BY_TYPE): Mímir-emittedself_actnodes had no entry in the policy map, so the type gate rejected them before reaching the judge. Added'self_act': ['FUSE', 'TIMELINE_MERGE', 'INDEPENDENT']so they participate in consolidation like any other autonomous-source type.
Notes
- No schema migration; no env-var changes; no API changes.
- Dashboard bundle rebuilt to bake the
mimir_actionsINSERT into the obfuscated dist (the build-platform.sh[1.5/6]overlay step picks up the new bundle). - electron-updater will offer 1.0.1 as a drop-in update for 1.0.0 installs once the release is published.
Downloads
- Windows:
Constellation Setup 1.0.1.exe - macOS (Apple Silicon):
Constellation-1.0.1-arm64-mac.zip - Linux:
Constellation-1.0.1.AppImage
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