instar 0.28.35 → 0.28.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dashboard/index.html +40 -30
  2. package/dist/commands/server.d.ts.map +1 -1
  3. package/dist/commands/server.js +105 -46
  4. package/dist/commands/server.js.map +1 -1
  5. package/dist/core/CoherenceGate.d.ts +7 -0
  6. package/dist/core/CoherenceGate.d.ts.map +1 -1
  7. package/dist/core/CoherenceGate.js +7 -6
  8. package/dist/core/CoherenceGate.js.map +1 -1
  9. package/dist/core/CoherenceReviewer.d.ts +20 -5
  10. package/dist/core/CoherenceReviewer.d.ts.map +1 -1
  11. package/dist/core/CoherenceReviewer.js +36 -6
  12. package/dist/core/CoherenceReviewer.js.map +1 -1
  13. package/dist/core/PostUpdateMigrator.d.ts +0 -14
  14. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  15. package/dist/core/PostUpdateMigrator.js +2 -123
  16. package/dist/core/PostUpdateMigrator.js.map +1 -1
  17. package/dist/core/SessionManager.d.ts +9 -0
  18. package/dist/core/SessionManager.d.ts.map +1 -1
  19. package/dist/core/SessionManager.js +18 -0
  20. package/dist/core/SessionManager.js.map +1 -1
  21. package/dist/monitoring/CompactionSentinel.d.ts +143 -0
  22. package/dist/monitoring/CompactionSentinel.d.ts.map +1 -0
  23. package/dist/monitoring/CompactionSentinel.js +262 -0
  24. package/dist/monitoring/CompactionSentinel.js.map +1 -0
  25. package/dist/monitoring/PresenceProxy.d.ts +0 -40
  26. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  27. package/dist/monitoring/PresenceProxy.js +4 -156
  28. package/dist/monitoring/PresenceProxy.js.map +1 -1
  29. package/dist/monitoring/PromptGate.d.ts.map +1 -1
  30. package/dist/monitoring/PromptGate.js +0 -75
  31. package/dist/monitoring/PromptGate.js.map +1 -1
  32. package/dist/threadline/adapters/RESTServer.d.ts +7 -1
  33. package/dist/threadline/adapters/RESTServer.d.ts.map +1 -1
  34. package/dist/threadline/adapters/RESTServer.js +62 -1
  35. package/dist/threadline/adapters/RESTServer.js.map +1 -1
  36. package/dist/threadline/relay/OfflineQueue.js +1 -1
  37. package/dist/threadline/relay/OfflineQueue.js.map +1 -1
  38. package/package.json +1 -1
  39. package/scripts/check-upgrade-guide.js +9 -115
  40. package/scripts/collect-metrics.py +25 -120
  41. package/scripts/upgrade-guide-validator.mjs +221 -0
  42. package/src/data/builtin-manifest.json +18 -18
  43. package/upgrades/0.28.36.md +40 -0
  44. package/upgrades/0.28.37.md +69 -0
  45. package/upgrades/0.28.38.md +41 -0
  46. package/upgrades/0.28.39.md +29 -0
  47. package/upgrades/0.28.40.md +32 -0
  48. package/upgrades/0.28.41.md +41 -0
  49. package/upgrades/NEXT.md +18 -0
  50. package/upgrades/0.28.10.md +0 -19
  51. package/upgrades/0.28.11.md +0 -19
  52. package/upgrades/0.28.13.md +0 -11
  53. package/upgrades/0.28.15.md +0 -11
  54. package/upgrades/0.28.18.md +0 -12
  55. package/upgrades/0.28.20.md +0 -19
  56. package/upgrades/0.28.21.md +0 -23
  57. package/upgrades/0.28.22.md +0 -23
  58. package/upgrades/0.28.23.md +0 -19
  59. package/upgrades/0.28.24.md +0 -18
  60. package/upgrades/0.28.25.md +0 -21
  61. package/upgrades/0.28.26.md +0 -20
  62. package/upgrades/0.28.27.md +0 -20
  63. package/upgrades/0.28.28.md +0 -20
  64. package/upgrades/0.28.30.md +0 -25
  65. package/upgrades/0.28.31.md +0 -38
  66. package/upgrades/0.28.32.md +0 -22
  67. package/upgrades/0.28.33.md +0 -22
  68. package/upgrades/0.28.35.md +0 -37
  69. package/upgrades/0.28.5.md +0 -17
  70. package/upgrades/0.28.7.md +0 -24
  71. package/upgrades/0.28.8.md +0 -21
@@ -1,19 +0,0 @@
1
- # Upgrade Guide — v0.28.10
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- Job gate checks now retry up to 3 times with a 5-second delay between attempts before recording a skip. Previously, a single gate failure (e.g., health check returning non-zero during a brief server restart) would immediately skip the job. This caused guardian jobs scheduled at minute 0 to consistently miss their windows when the server restarts hourly at the same time.
8
-
9
- The existing `scheduleRetry` mechanism (1min, 5min, 15min escalating retries) remains as a second layer, but the in-gate retry handles the most common case: a health endpoint that's unavailable for a few seconds during restart.
10
-
11
- ## What to Tell Your User
12
-
13
- - **More reliable scheduled jobs**: "Jobs that depend on health checks are now more resilient to brief server restart windows. If you've noticed guardian or monitoring jobs being skipped, they should start running consistently now."
14
-
15
- ## Summary of New Capabilities
16
-
17
- | Capability | How to Use |
18
- |-----------|-----------|
19
- | Gate retry on transient failure | Automatic — no configuration needed |
@@ -1,19 +0,0 @@
1
- # Upgrade Guide — v0.28.11
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- The GET /context endpoint now includes the `contextDir` path in its response, making it possible for agents to verify that the server is looking in the same directory where their context files live. This helps diagnose the "0 bytes for all segments" issue that occurs when there's a path mismatch between the server's configured state directory and where hooks/sessions create context files.
8
-
9
- Response format changed from an array of segments to `{ contextDir: string, segments: [...] }`.
10
-
11
- ## What to Tell Your User
12
-
13
- - **Better context diagnostics**: "If your context segments ever show as empty despite files being on disk, the context endpoint now shows the exact directory path the server is checking. This makes it easy to spot path mismatches."
14
-
15
- ## Summary of New Capabilities
16
-
17
- | Capability | How to Use |
18
- |-----------|-----------|
19
- | Context directory path in response | GET /context now returns contextDir alongside segments |
@@ -1,11 +0,0 @@
1
- ## What Changed
2
-
3
- - **Prerequisites installer now auto-installs Homebrew on macOS.** Previously, on a fresh Mac without Homebrew, the installer would bail out and tell the user to install Homebrew manually. Now it offers to install Homebrew non-interactively using the official install script, then proceeds to install tmux via `brew install tmux`.
4
-
5
- ## What to Tell Your User
6
-
7
- Nothing — this is a seamless improvement to the setup experience. Users on fresh Macs will now be prompted to install Homebrew automatically instead of being told to do it themselves.
8
-
9
- ## Summary of New Capabilities
10
-
11
- - `npx instar` on a fresh macOS machine now handles the full dependency chain: Homebrew -> tmux -> Claude CLI, all with interactive prompts and no manual steps required.
@@ -1,11 +0,0 @@
1
- ## What Changed
2
-
3
- - **Fixed Homebrew installer failing on admin accounts.** The previous version used NONINTERACTIVE mode which prevented the sudo password prompt, causing installation to fail even on admin accounts with a misleading "needs to be an Administrator" error. Now stdio is inherited so the user can enter their password when prompted. Timeout also increased to 10 minutes to accommodate Xcode Command Line Tools installation.
4
-
5
- ## What to Tell Your User
6
-
7
- Nothing — this is a fix to the setup experience. Installing on a fresh Mac will now correctly prompt for the password instead of failing silently.
8
-
9
- ## Summary of New Capabilities
10
-
11
- No new capabilities — bug fix to Homebrew auto-install from 0.28.13.
@@ -1,12 +0,0 @@
1
- ## What Changed
2
-
3
- - **GitHub CLI is now a real prerequisite.** Previously the setup wizard only emitted a soft warning when gh was missing, then continued without it — silently disabling cloud-backed agent discovery, GitHub backup sync, CI status checks, and PR/issue management. GitHub CLI is now part of the prerequisites check alongside Node.js, tmux, and Claude CLI, with auto-install support via Homebrew on macOS and apt on Linux. If Homebrew is missing on macOS, the wizard offers to install Homebrew first (same flow as the existing tmux path).
4
-
5
- ## What to Tell Your User
6
-
7
- If you're on a fresh machine, the setup wizard will now offer to install GitHub CLI automatically. After install, I can help you sign in to GitHub so I can sync state across machines and discover any other agents you've set up. Without GitHub CLI, I still work locally but can't back things up to GitHub or find your other agents.
8
-
9
- ## Summary of New Capabilities
10
-
11
- - GitHub CLI added as a fourth prerequisite with auto-install on macOS (Homebrew) and Linux (apt)
12
- - Two-step install flow: if Homebrew is missing on macOS, wizard offers to install it before installing GitHub CLI
@@ -1,19 +0,0 @@
1
- # Upgrade Guide — vNEXT
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- - **Setup wizard now offers GitHub sign-in BEFORE asking for an agent name.** Previously, when GitHub CLI was installed but not authenticated (or when the discovery scan ran without GitHub access), the wizard silently moved on to "what should we call your agent?" — even if the user already had agents backed up to GitHub from another machine. Users were creating duplicates instead of restoring. The Entry Point B branches in `setup-wizard/SKILL.md` for `gh_status="auth-needed"` and `gh_status="unavailable"` are now MANDATORY blocking steps with imperative language.
8
- - **GitHub Device-Code Auth Flow documented.** Running `gh auth login --web --git-protocol https` synchronously inside Claude Code's Bash tool blocks on the device-code prompt and the user sees a frozen command with no instructions. The skill now instructs the agent to: run gh auth in the background, poll its output for the device code and URL, present them to the user conversationally, then poll `gh auth status` until the user completes the sign-in. Same flow is referenced from Phase 4 (cloud backup) so there's one canonical pattern.
9
-
10
- ## What to Tell Your User
11
-
12
- If you're setting up a fresh machine and you've used Instar before, the wizard will now offer to sign you in to GitHub first so I can find any agents you've backed up — instead of creating a duplicate. The sign-in itself is also smoother: I'll show you the code to enter at github.com/login/device right in our chat instead of leaving you staring at a stuck terminal.
13
-
14
- ## Summary of New Capabilities
15
-
16
- | Capability | How to Use |
17
- |-----------|-----------|
18
- | Mandatory pre-name GitHub auth offer | Automatic during setup wizard |
19
- | Background device-code auth flow | Automatic during setup wizard |
@@ -1,23 +0,0 @@
1
- # Upgrade Guide — v0.28.21
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- - **Threadline delivery honesty**: `/messages/relay-agent` now awaits `ThreadlineRouter` and returns the real outcome (`spawned`, `resumed`, `injected`, `queued`, `error`) instead of always saying `delivered:true`. The `threadline_send` MCP tool surfaces the actual status to callers.
8
- - **First-contact messages no longer dropped**: `ThreadlineRouter` mints a UUID threadId for messages without one, routing them through `spawnNewThread` instead of silently returning `{handled:false}`.
9
- - **Fingerprint-based identity**: Reply waiters rekeyed by threadId (prevents same-name agent collisions). Self-guard compares fingerprints. Ambiguous targets (multiple agents sharing a name) now fail loudly with a fingerprint-qualifier hint.
10
- - **Live-session injection**: `ThreadlineRouter` tries `MessageDelivery.deliverToSession` (tmux send-keys) before falling back to spawn/resume — messages can reach already-running sessions without spawning a new process.
11
-
12
- ## What to Tell Your User
13
-
14
- Agent-to-agent messaging (threadline) has been fixed. Messages between agents now actually reach the recipient's active session, first-contact messages work, and agents with the same name on different machines no longer collide.
15
-
16
- ## Summary of New Capabilities
17
-
18
- | Capability | How to Use |
19
- |-----------|-----------|
20
- | Honest delivery status | `threadline_send` now reports `spawned` / `resumed` / `injected` / `queued` instead of always `delivered` |
21
- | First-contact messaging | Just send — no threadId needed on first message, one is minted automatically |
22
- | Same-name agent disambiguation | Use `name:fpPrefix` format (e.g., `luna:ab12cd34`) when multiple agents share a name |
23
- | Live-session injection | Automatic — messages try injection into running sessions before spawning new ones |
@@ -1,23 +0,0 @@
1
- # Upgrade Guide — v0.28.22
2
-
3
- <!-- bump: patch -->
4
- <!-- Valid values: patch, minor, major -->
5
- <!-- patch = bug fixes, refactors, test additions, doc updates -->
6
- <!-- minor = new features, new APIs, new capabilities (backwards-compatible) -->
7
- <!-- major = breaking changes to existing APIs or behavior -->
8
-
9
- ## What Changed
10
-
11
- - Replaced all `execSync` calls in server startup (better-sqlite3 auto-rebuild) with shell-free `execFileSync` using npm's CLI JS directly. Fixes "spawnSync /bin/sh ENOENT" failures in minimal/containerized environments.
12
- - Added `findNpmCli()` helper that locates npm's entry point without requiring a shell.
13
- - Affects `ensureSqliteBindings()` preflight and TopicMemory auto-rebuild fallback.
14
-
15
- ## What to Tell Your User
16
-
17
- - **Better startup reliability**: "Agents running in Docker or minimal Linux environments should no longer see SemanticMemory or TopicMemory degradation at startup. The native module rebuild now works without requiring a system shell."
18
-
19
- ## Summary of New Capabilities
20
-
21
- | Capability | How to Use |
22
- |-----------|-----------|
23
- | Shell-free native module rebuild | Automatic — no user action needed |
@@ -1,19 +0,0 @@
1
- # Upgrade Guide — v0.28.23
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- - Replaced all shell-dependent npm calls in server startup (better-sqlite3 auto-rebuild) with shell-free alternatives using npm's CLI JS directly via Node.js. Fixes "spawnSync /bin/sh ENOENT" failures in minimal/containerized environments.
8
- - Added findNpmCli helper that locates npm's entry point without requiring a shell.
9
- - Affects ensureSqliteBindings preflight and TopicMemory auto-rebuild fallback.
10
-
11
- ## What to Tell Your User
12
-
13
- - **Better startup reliability**: "Agents running in Docker or minimal Linux environments should no longer see memory system degradation at startup. The native module rebuild now works without requiring a system shell."
14
-
15
- ## Summary of New Capabilities
16
-
17
- | Capability | How to Use |
18
- |-----------|-----------|
19
- | Shell-free native module rebuild | Automatic — no user action needed |
@@ -1,18 +0,0 @@
1
- # Upgrade Guide — v0.28.24
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- - The /semantic/export-memory endpoint no longer overwrites MEMORY.md when SemanticMemory has 0 entities. Previously, an empty export would destroy manually-curated memory content. Now skips the write and returns existing file metadata with a skipped flag.
8
- - MemoryExporter.write() guards against empty-entity overwrites at the class level.
9
-
10
- ## What to Tell Your User
11
-
12
- - **Memory file protection**: "Your MEMORY.md is now safe from accidental overwrites. If the knowledge graph hasn't been populated yet, the export will leave your existing memory file untouched instead of replacing it with an empty template."
13
-
14
- ## Summary of New Capabilities
15
-
16
- | Capability | How to Use |
17
- |-----------|-----------|
18
- | Empty-export guard | Automatic — no user action needed |
@@ -1,21 +0,0 @@
1
- # Upgrade Guide — v0.28.25
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- - Fixed dashboard apiFetch to properly pass method, headers, and body options to fetch. Feature toggles and autonomy profile changes now persist instead of silently failing as GET requests.
8
- - Fixed degradation-digest job gate and skill to read from the correct file path (.instar/degradations.json instead of .instar/state/degradation-events.json). The job can now actually run.
9
- - Fixed MemoryExporter to not overwrite existing MEMORY.md when SemanticMemory has 0 entities.
10
-
11
- ## What to Tell Your User
12
-
13
- - **Dashboard feature toggles work now**: "Feature toggles and autonomy profile changes in the dashboard now actually save. Previously they appeared to toggle but silently reverted."
14
- - **Degradation monitoring active**: "The degradation digest job can now run properly. It was blocked by a wrong file path since it was created."
15
-
16
- ## Summary of New Capabilities
17
-
18
- | Capability | How to Use |
19
- |-----------|-----------|
20
- | Working dashboard toggles | Toggle features in the dashboard Features tab |
21
- | Degradation digest job | Automatic — runs every 4 hours when degradation events exist |
@@ -1,20 +0,0 @@
1
- # Upgrade Guide — v0.28.26
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- Fixed a false-positive detection bug in OrphanProcessReaper where any process with "claude" as a substring in its file path (e.g., cloudflared running from a `/demiclaude/` directory) was incorrectly classified as a Claude Code process. The reaper now uses regex word-boundary matching to identify actual Claude CLI binaries, and the server's own tmux session is protected from being killed during orphan cleanup.
8
-
9
- Previously, on agents whose project name contained "claude" (like "demiclaude"), the reaper would kill cloudflared every hour, taking down the server tmux session as collateral damage and causing progressive restart drift.
10
-
11
- ## What to Tell Your User
12
-
13
- - **Stability fix**: "The background process monitor was accidentally killing my own server every hour because of a name collision. That's fixed now — no more mysterious restarts."
14
-
15
- ## Summary of New Capabilities
16
-
17
- | Capability | How to Use |
18
- |-----------|-----------|
19
- | Improved orphan process detection | Automatic — no action needed |
20
- | Server session kill protection | Automatic — server tmux session can no longer be killed by the orphan reaper |
@@ -1,20 +0,0 @@
1
- # Upgrade Guide — v0.28.27
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- Fixed a false-positive detection bug in OrphanProcessReaper where any process with "claude" as a substring in its file path (e.g., cloudflared running from a directory whose name contains "claude") was incorrectly classified as a Claude Code process. The reaper now uses regex word-boundary matching to identify actual Claude CLI binaries, and the server's own tmux session is protected from being killed during orphan cleanup.
8
-
9
- Previously, on agents whose project name contained "claude", the reaper would kill cloudflared every hour, taking down the server tmux session as collateral damage and causing progressive restart drift.
10
-
11
- ## What to Tell Your User
12
-
13
- - **Stability fix**: "The background process monitor was accidentally killing my own server every hour because of a name collision. That's fixed now — no more mysterious restarts or time drift."
14
-
15
- ## Summary of New Capabilities
16
-
17
- | Capability | How to Use |
18
- |-----------|-----------|
19
- | Improved orphan process detection | Automatic — no action needed |
20
- | Server session kill protection | Automatic — server tmux session can no longer be killed by the orphan reaper |
@@ -1,20 +0,0 @@
1
- # Upgrade Guide — v0.28.28
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- Fixed a false-positive detection bug in OrphanProcessReaper where any process with "claude" as a substring in its file path (e.g., cloudflared running from a directory whose name contains "claude") was incorrectly classified as a Claude Code process. The reaper now uses regex word-boundary matching to identify actual Claude CLI binaries, and the server's own tmux session is protected from being killed during orphan cleanup.
8
-
9
- Previously, on agents whose project name contained "claude", the reaper would kill cloudflared every hour, taking down the server tmux session as collateral damage and causing progressive restart drift.
10
-
11
- ## What to Tell Your User
12
-
13
- - **Stability fix**: "The background process monitor was accidentally killing my own server every hour because of a name collision. That's fixed now — no more mysterious restarts or time drift."
14
-
15
- ## Summary of New Capabilities
16
-
17
- | Capability | How to Use |
18
- |-----------|-----------|
19
- | Improved orphan process detection | Automatic — no action needed |
20
- | Server session kill protection | Automatic — server tmux session can no longer be killed by the orphan reaper |
@@ -1,25 +0,0 @@
1
- # Upgrade Guide — v0.28.30
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- The health endpoint's systemReview section now includes a failedProbes array with per-probe details (probeId, name, tier, error, remediation) so agents can drill into failures without a second API call. A detailsUrl field points to /system-reviews/latest for the full report.
8
-
9
- Two new aliases were added for discoverability:
10
- - GET /health/probes — returns all probe results (pass and fail) with timestamps, stats, and skipped list.
11
- - GET /system-review (singular) — alias for /system-reviews/latest, matching the natural URL shape agents try first.
12
-
13
- Previously when the health endpoint reported 3 of 16 probes failed, there was no way to see WHICH probes failed from the health response itself. Agents had to know the exact plural endpoint name to drill in. This closes that gap — failures are now self-describing at the top-level health call, and the common URL shapes agents naturally try now work.
14
-
15
- ## What to Tell Your User
16
-
17
- - **Clearer health drill-down**: "When I check my own system health and see failures, I can now immediately see which checks failed and what to do about them — no more guessing."
18
-
19
- ## Summary of New Capabilities
20
-
21
- | Capability | How to Use |
22
- |-----------|-----------|
23
- | Per-probe failure details in health | GET /health then read systemReview.failedProbes |
24
- | Full probe list (pass and fail) | GET /health/probes |
25
- | Latest review alias | GET /system-review |
@@ -1,38 +0,0 @@
1
- # Upgrade Guide — v0.28.31
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- Scheduler skip events now report the actual gating reason instead of always saying "quota".
8
-
9
- When a job is blocked from spawning, the scheduler runs `canRunJob(priority)`. Previously this callback returned a bare `boolean`, so when it returned `false` the scheduler unconditionally logged `Job "X" skipped (quota)` and recorded reason `quota` in the SkipLedger — even when the real cause was memory pressure or another gate stacked on top of quota.
10
-
11
- Now the callback may return either a boolean (legacy behavior) or a richer `CanRunJobResult`:
12
-
13
- ```ts
14
- interface CanRunJobResult {
15
- allowed: boolean;
16
- reason?: SkipReason; // 'quota' | 'memory-pressure' | 'gate' | ...
17
- detail?: string; // human-readable context
18
- }
19
- ```
20
-
21
- The server's memory gate wrapper (`src/commands/server.ts` ~line 4097) now returns the rich form, surfacing `memory-pressure` plus the underlying `memCheck.reason` (e.g. `"elevated (79.9%)"`). The scheduler logs this verbatim, records it in the SkipLedger as `memory-pressure`, and includes `gateReason` / `gateDetail` in the `job_skipped` event metadata.
22
-
23
- A new `'memory-pressure'` value was added to the `SkipReason` union.
24
-
25
- This fixes a long-standing diagnostic confusion where 31+ jobs would appear "skipped (quota)" in logs while `/quota` reported normal — because the actual cause was memory pressure on a 16GB machine sitting at 79% baseline usage.
26
-
27
- Backwards compatible: any existing `canRunJob` wrapper that returns a plain boolean continues to work and still records reason `quota`.
28
-
29
- ## What to Tell Your User
30
-
31
- - **Clearer skip reasons**: "When I can't start a job, I'll now tell you exactly why — memory pressure versus quota versus a gate check — instead of always blaming quota. That should make it much faster to figure out why scheduled work isn't running."
32
-
33
- ## Summary of New Capabilities
34
-
35
- | Capability | How to Use |
36
- |-----------|-----------|
37
- | Memory-pressure skip reason | Automatic — appears in skip ledger and `job_skipped` events |
38
- | Rich `CanRunJobResult` from gate callbacks | Return `{ allowed, reason, detail }` from custom `canRunJob` wrappers |
@@ -1,22 +0,0 @@
1
- # Upgrade Guide — v0.28.32
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- - **Threadline `getThreadHistory` now returns real messages.** The MCP stdio entry point previously hard-coded an empty `ThreadHistoryResult`, so agents could never read any Threadline conversation content — only metadata. The tool now queries the local agent server's `GET /messages/thread/:threadId` endpoint, normalizes the returned `MessageEnvelope` list into `ThreadHistoryMessage` shape (id, from, body, timestamp, threadId), applies the requested `limit` (trailing window of most-recent messages) and optional `before` timestamp filter, and reports an accurate `totalCount` / `hasMore`. Fails soft to an empty result on any transport or server error so a stopped agent server doesn't surface as an MCP error.
8
- - Feedback cluster: `cluster-threadline-history-returns-empty-getthreadhistory-is-stubbed`.
9
- - **Built-in job gates self-heal stale port references.** When the configured server port no longer matched the port baked into an existing `jobs.json` entry, built-in job `gate` and `execute.value` commands kept their old `localhost:NNNN` references. Health-gated jobs like `state-integrity-check`, `guardian-pulse`, `session-continuity-check`, and `memory-export` would fail their gate forever and silently skip every run. `refreshJobs` now scans built-in jobs (matched by slug against `getDefaultJobs`) and rewrites stale `localhost:OTHERPORT/` references to the configured port. User-defined jobs are left untouched. Fallback default port was also normalized from 4321 to 4040 to match the rest of the codebase.
10
- - Feedback cluster: `cluster-job-gate-commands-hardcoded-to-port-4040-ignoring-configured`.
11
-
12
- ## What to Tell Your User
13
-
14
- - **Conversation history now works:** "I can finally read back the messages other agents have sent me — before this release I could see that a conversation existed but not what anyone actually said."
15
- - **Health checks start working again after a port change:** "If you ever moved the agent to a different port, some of my background health checks were quietly skipping every run because they were still looking at the old port. They'll fix themselves on the next refresh and start running normally again."
16
-
17
- ## Summary of New Capabilities
18
-
19
- | Capability | How to Use |
20
- |-----------|-----------|
21
- | Read Threadline conversation history | `threadline_history` MCP tool now returns actual message content |
22
- | Self-healing job gates | Built-in jobs whose gate or execute commands reference a stale port get rewritten on refresh |
@@ -1,22 +0,0 @@
1
- # Upgrade Guide — v0.28.33
2
-
3
- <!-- bump: patch -->
4
- <!-- Valid values: patch, minor, major -->
5
- <!-- patch = bug fixes, refactors, test additions, doc updates -->
6
- <!-- minor = new features, new APIs, new capabilities (backwards-compatible) -->
7
- <!-- major = breaking changes to existing APIs or behavior -->
8
-
9
- ## What Changed
10
-
11
- - **Built-in job gate/execute commands now self-heal on refresh.** Generalizes the v0.28.32 port-repair fix. `refreshJobs` now syncs the entire `gate` field and `execute.type`/`execute.value` fields of built-in jobs (matched by slug) to the current source-of-truth defaults from `getDefaultJobs(port)`. User-tunable fields (`enabled`, `schedule`, `priority`, `model`, `telegramNotify`, etc.) are left untouched. This closes a class of bugs where existing installs' `jobs.json` keeps old gate/execute logic after a source update, causing built-in jobs to silently skip forever. The motivating case: `degradation-digest` had an old gate that checked `.instar/state/degradation-events.json` (always empty), while the current source checks `.instar/degradations.json` (the real file) — leaving 11 unreported degradations undetected for ~2 weeks. Contract change: built-in `gate`/`execute` are implementation details that track the codebase. To customize, fork under a different slug.
12
- - Feedback cluster: `cluster-degradation-digest-gate-checks-wrong-file-job-never-runs`.
13
-
14
- ## What to Tell Your User
15
-
16
- - **Background health checks self-heal after upgrades:** "A few of my background checks were quietly looking at outdated places after past upgrades and never running. They'll fix themselves automatically. One that was supposed to surface system warnings to you had been dark for about two weeks — it'll start working again."
17
-
18
- ## Summary of New Capabilities
19
-
20
- | Capability | How to Use |
21
- |-----------|-----------|
22
- | Self-healing built-in job gate/execute | Automatic on refresh — built-in jobs whose gate or execute commands drifted from source defaults are resynced |
@@ -1,37 +0,0 @@
1
- # Upgrade Guide — v0.28.35
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- **Telegram polling diagnostics + transient 401 retry.**
8
-
9
- Previously, `TelegramAdapter.poll()` set `this.polling = false` permanently on
10
- ANY 401 response — including transient auth blips — with no retry and no signal
11
- to the probe layer. Health probes reported "polling not active" with no WHY,
12
- and operators had to dig through logs to discover whether the token was actually
13
- revoked or had just hiccuped.
14
-
15
- This release adds:
16
- - **Single 30s retry on first 401** before declaring fatal. Genuine token
17
- revocation still stops polling; transient 401s recover automatically.
18
- - **Diagnostic state on the adapter**: `lastError`, `consecutivePollErrors`,
19
- `fatalReason` (`'401' | 'network' | null`), `stoppedAt`. Exposed via
20
- `TelegramAdapter.getStatus()`.
21
- - **MessagingProbe** now surfaces these fields. The `instar.messaging.connected`
22
- probe description includes the fatal reason or last error, and remediation
23
- steps for a 401 now point operators at @BotFather rather than generic advice.
24
-
25
- Reset of all diagnostic fields happens in `start()` so re-starts begin clean.
26
-
27
- ## What to Tell Your User
28
-
29
- - **Better visibility when Telegram messaging stops**: "If my Telegram connection ever drops, I can now tell you exactly why instead of just saying it's down."
30
- - **Resilience to brief auth hiccups**: "A momentary blip in the Telegram service won't permanently knock me offline anymore — I'll retry once before giving up."
31
-
32
- ## Summary of New Capabilities
33
-
34
- | Capability | How to Use |
35
- |-----------|-----------|
36
- | Telegram polling diagnostics | Automatic — visible in health probe output |
37
- | Transient 401 retry | Automatic — single 30s retry before declaring fatal |
@@ -1,17 +0,0 @@
1
- # Upgrade Guide — v0.28.5
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- - **Topic cleanup no longer closes explicitly-configured topics**: The startup topic cleanup was closing forum topics for on-alert and silent jobs even when those topics were explicitly configured in jobs.json or shared with other active jobs. Now only dynamically-created topic mappings are cleaned up, and only if no other job references the same topic.
8
-
9
- ## What to Tell Your User
10
-
11
- - **"Your Telegram forum topics should stay open now"**: If your user noticed that certain Telegram topics kept getting closed after server restarts, that should be resolved. The system was incorrectly treating explicitly-configured topics as stale.
12
-
13
- ## Summary of New Capabilities
14
-
15
- | Capability | How to Use |
16
- |-----------|-----------|
17
- | Safe topic cleanup | Automatic — explicitly-configured topics are preserved on restart |
@@ -1,24 +0,0 @@
1
- # Upgrade Guide — v0.28.7
2
-
3
- <!-- bump: patch -->
4
- <!-- Valid values: patch, minor, major -->
5
- <!-- patch = bug fixes, refactors, test additions, doc updates -->
6
- <!-- minor = new features, new APIs, new capabilities (backwards-compatible) -->
7
- <!-- major = breaking changes to existing APIs or behavior -->
8
-
9
- ## What Changed
10
-
11
- Added `PATCH /config` endpoint that all FeatureDefinition enable/disable actions reference. Previously, toggling features from the dashboard (evolution, threadline, publishing, tunnel, etc.) returned 404 because the endpoint didn't exist. The new endpoint deep-merges the request body into config.json with an allowlist of safe config keys, and updates runtime config.
12
-
13
- Also includes CI test fixes from previous commits (trust wiring, quota tracking, config validation, job scheduler edge cases).
14
-
15
- ## What to Tell Your User
16
-
17
- - **Dashboard feature toggles now work**: "You can now enable/disable features from the dashboard — the toggle buttons actually persist your choice."
18
-
19
- ## Summary of New Capabilities
20
-
21
- | Capability | How to Use |
22
- |-----------|-----------|
23
- | Config patch API | `PATCH /config` with JSON body — dashboard uses this automatically |
24
- | Feature toggle persistence | Toggle features on/off from dashboard, changes persist to config.json |
@@ -1,21 +0,0 @@
1
- # Upgrade Guide — v0.28.8
2
-
3
- <!-- bump: patch -->
4
-
5
- ## What Changed
6
-
7
- Fixed a bug where `loadConfig()` silently dropped many optional config fields — including `safety`, `evolution`, `agentAutonomy`, `externalOperations`, `autonomyProfile`, `notifications`, `responseReview`, `inputGuard`, `dashboard`, and `moltbridge`. These fields were defined in `InstarConfig` and written to `config.json` by subsystems like `AutonomyProfileManager.applyProfileToConfig()`, but were never read back because `loadConfig()` constructed its return object with only explicitly listed properties.
8
-
9
- The fix spreads `fileConfig` as the base object before applying explicit overrides, so all config fields pass through while preserving existing defaults and transformations.
10
-
11
- **Impact**: If you had manually set `safety.level` in your config or changed autonomy profile settings, those overrides were being silently ignored — the system always fell back to profile defaults. After this update, your config file settings will be respected.
12
-
13
- ## What to Tell Your User
14
-
15
- - **Config settings now fully respected**: "If you've customized safety levels, autonomy settings, or other advanced configuration, those settings are now properly loaded. Previously they could be silently ignored — that's fixed now."
16
-
17
- ## Summary of New Capabilities
18
-
19
- | Capability | How to Use |
20
- |-----------|-----------|
21
- | Config passthrough fix | Automatic — all config.json fields now properly loaded |