pantheon-opencode 1.5.0-beta.1 → 1.5.0-beta.11

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 (83) hide show
  1. package/.pantheon/code-mode/manifest.json +21 -0
  2. package/CHANGELOG.md +1054 -0
  3. package/README.md +171 -16
  4. package/README.pt-BR.md +99 -13
  5. package/bin/pantheon-init.mjs +178 -21
  6. package/package.json +23 -15
  7. package/plugin.json +1 -1
  8. package/pyproject.toml +65 -0
  9. package/scripts/code_mode_server.py +431 -55
  10. package/scripts/cost.mjs +30 -14
  11. package/scripts/dev-tui.sh +48 -0
  12. package/scripts/doctor.mjs +207 -9
  13. package/scripts/install/cli-ui.mjs +17 -11
  14. package/scripts/install/config-migration.mjs +4 -6
  15. package/scripts/install/opencode.mjs +137 -35
  16. package/scripts/install/plugin.mjs +3 -33
  17. package/scripts/install/shared.mjs +43 -2
  18. package/scripts/install/strings.mjs +129 -0
  19. package/scripts/install-mcp.mjs +1 -0
  20. package/scripts/manifest-inventory.mjs +410 -0
  21. package/scripts/mcp_persistence_server.py +537 -128
  22. package/scripts/package-evidence.mjs +242 -0
  23. package/scripts/probe-context-rehydrate.mjs +240 -0
  24. package/scripts/probe-pantheon-cost.mjs +313 -0
  25. package/scripts/release-beta-version.mjs +56 -60
  26. package/scripts/sync-artifacts.mjs +169 -0
  27. package/scripts/sync-tui.mjs +121 -53
  28. package/scripts/test-opencode-v1-v2-sandbox.sh +367 -96
  29. package/scripts/validation-policy.mjs +7 -7
  30. package/scripts/version-check.mjs +113 -108
  31. package/scripts/versioning.mjs +230 -86
  32. package/src/agents/mnemosyne.md +1 -1
  33. package/src/agents/zeus.md +2 -2
  34. package/src/mcp/code_mode_server.py +431 -55
  35. package/src/mcp/mcp_persistence_server.py +537 -128
  36. package/src/pantheon/auto-wake.ts +1 -5
  37. package/src/pantheon/background-job-board.ts +43 -1
  38. package/src/pantheon/compaction-handoff.ts +304 -0
  39. package/src/pantheon/cost-command.ts +345 -62
  40. package/src/pantheon/delegate-manager.ts +390 -8
  41. package/src/pantheon/delegation-finalize.ts +32 -0
  42. package/src/pantheon/delegation.ts +235 -18
  43. package/src/pantheon/file-persistence-salvage.ts +64 -0
  44. package/src/pantheon/file-persistence.ts +194 -45
  45. package/src/pantheon/native-probe.ts +234 -0
  46. package/src/pantheon/native-task-status.ts +139 -0
  47. package/src/pantheon/provider-capabilities.ts +221 -0
  48. package/src/pantheon/provider-stream-tracker.ts +182 -0
  49. package/src/pantheon/shared-board.ts +37 -0
  50. package/src/pantheon/task-result-guard.ts +107 -0
  51. package/src/pantheon/token-opt.ts +146 -12
  52. package/src/pantheon/tool-ceiling.ts +159 -0
  53. package/src/pantheon/v2-events.ts +18 -1
  54. package/src/plugin-v2.ts +2 -14
  55. package/src/plugin.ts +28 -17
  56. package/src/plugins/pantheon-hooks.ts +51 -0
  57. package/src/plugins/tui/dist/server.d.ts +1 -1
  58. package/src/plugins/tui/dist/server.d.ts.map +1 -1
  59. package/src/plugins/tui/dist/server.js +1 -1
  60. package/src/plugins/tui/dist/server.js.map +1 -1
  61. package/src/plugins/tui/dist/tui.d.ts +137 -27
  62. package/src/plugins/tui/dist/tui.d.ts.map +1 -1
  63. package/src/plugins/tui/dist/tui.js +459 -163
  64. package/src/plugins/tui/dist/tui.js.map +1 -1
  65. package/src/plugins/tui/dist/tui.tsx +506 -103
  66. package/src/plugins/tui/package-lock.json +2 -2
  67. package/src/plugins/tui/package.json +1 -1
  68. package/src/plugins/tui/src/index.tsx +506 -103
  69. package/.pantheon/code-mode/.gitkeep +0 -0
  70. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-1.json +0 -8
  71. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-10.json +0 -8
  72. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-11.json +0 -8
  73. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-2.json +0 -8
  74. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-3.json +0 -8
  75. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-4.json +0 -8
  76. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-5.json +0 -8
  77. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-6.json +0 -8
  78. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-7.json +0 -8
  79. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-8.json +0 -8
  80. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-9.json +0 -8
  81. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/heartbeat.json +0 -8
  82. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/session.json +0 -11
  83. package/src/pantheon/delegate-task-adapter.ts +0 -444
package/CHANGELOG.md ADDED
@@ -0,0 +1,1054 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+
7
+
8
+ ## [Unreleased]
9
+
10
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
11
+ move this section to a versioned entry and reset the template below. -->
12
+
13
+ ## 🆕 What's New
14
+
15
+ ## 🐞 Fixed
16
+
17
+ ## ⚠️ Known Issues
18
+
19
+ ## ✅ Closed Issues
20
+
21
+ ## [v1.5.0-beta.11] - 2026-09-14
22
+
23
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
24
+ move this section to a versioned entry and reset the template below. --&gt;
25
+
26
+ ## 🆕 What's New
27
+
28
+ - **Glyphs da FSM real no painel Delegations:** cada estado do BackgroundJobBoard
29
+ tem agora um glifo Unicode geométrico próprio — `⠋` running (spinner 1s),
30
+ `⟳` retry, `⚠` stale/startup, `✓` completed, `✕` error, `−` cancelled. Forma e
31
+ cor são canais independentes: as linhas seguem legíveis sem cor e sem Nerd Font.
32
+ - **Prefixo `nat:` / `pan:` documentado:** `docs/INSTALLATION.md` passa a
33
+ descrever os prefixos curtos das linhas nativas (`nat:<agent>`) e do board
34
+ (`pan:<alias>`) e o par de glyphs ◇/◆.
35
+ - **`scripts/dev-tui.sh` (dev local sem publish):** instala, builda e registra o
36
+ caminho absoluto do repo em `.opencode/tui.json` (gitignored) com hint de
37
+ restart — sem tocar `opencode.json` e sem publicar.
38
+ - **104 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com
39
+ 104/104 passando, cobrindo glifos/marker/tone dos estados reais da FSM.
40
+
41
+ ## 🐞 Fixed
42
+
43
+ - **Doctor F.2 (`hasUsableScripts`):** a resolução do diretório code-mode agora
44
+ exige um `.py`/`.sh` regular (paridade com `_has_usable_scripts` do MCP), então
45
+ um overlay de projeto vazio não mascara mais uma instalação que traz scripts.
46
+ - **`publish:next` órfão removido:** nenhum workflow usava o script (o release
47
+ publica via `--tag beta`); removido do `package.json` para eliminar o dist-tag
48
+ `next` obsoleto da linha de publicação.
49
+ ## [v1.5.0-beta.10] - 2026-09-14
50
+
51
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
52
+ move this section to a versioned entry and reset the template below. --&gt;
53
+
54
+ ## 🆕 What's New
55
+
56
+ - **TUI delegations com prefixos curtos `nat:` / `pan:`:** cada linha do painel passa
57
+ a usar `nat:<agent>` para child nativo do `task()` (sem report no board) ou
58
+ `pan:<alias>` para linha `pantheon_delegate` (ex. `pan:apo-1`) — os prefixos curtos
59
+ liberam largura no sidebar estreito.
60
+ - **Glyph de 2 canais (◇/◆):** ◇ vazado (info/cyan) para child nativo e ◆ preenchido
61
+ (cor de estado) para linha do board — forma e cor são canais independentes, então o
62
+ split segue legível mesmo sem cor.
63
+ - **Header resumido:** `(N active · M done · nat:K pan:M)` calculado sobre a lista
64
+ completa (active + recent + archived), no lugar do antigo `(N native + M pantheon)`.
65
+ - **Elapsed em caixa fixa:** rótulo alinhado à direita em largura 8 e SEMPRE
66
+ renderizado, então um job ativo sem descrição nunca perde o timer.
67
+ - **100 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com 100/100
68
+ passando (tsc + biome OK), acima dos 93 da beta.9.
69
+
70
+ ## 🐞 Fixed
71
+
72
+ - **`appendFile` sem import (log do painel volta a escrever):** o log em arquivo do
73
+ painel parou de escrever silenciosamente porque `appendFile` era chamado sem import
74
+ (ReferenceError engolido pelo `catch` vazio); o import foi restaurado e o `catch`
75
+ agora reporta a falha (gated por echo) em vez de sumir.
76
+ - **Truncamento grapheme-safe:** descrições truncam em fronteiras de grapheme
77
+ (`Intl.Segmenter` com fallback `Array.from`) em 44 graphemes, sem cortar emoji ou
78
+ sequências ZWJ ao meio (mojibake).
79
+ - **Linhas stale-running ficam em Active:** um job stale ainda é um job vivo (estado do
80
+ backend inalterado), então não é mais arquivado — o que escondia a linha lançada.
81
+ - **Spinner/animação de 140ms → 1000ms:** o tick rápido piscava sem adicionar informação.
82
+ - **Dead code removido:** conectores de árvore (`isNestedDelegation` /
83
+ `delegationTreePrefix`) e campos `parentTaskID`/`childCount` removidos —
84
+ `session.children` só devolve filhos diretos, então nenhuma linha nested era
85
+ produzida (BACKLOG).
86
+ ## [v1.5.0-beta.9] - 2026-09-14
87
+
88
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
89
+ move this section to a versioned entry and reset the template below. -->
90
+
91
+ ## 🆕 What's New
92
+
93
+ - **TUI delegations nativas (gated):** painel Delegations renderiza N delegações native + M pantheon com tag [native], live task em tempo real, click navega para sessão. Implementado em `src/plugins/tui/src/index.tsx` com dist rebuildado.
94
+ - **93 testes TUI delegations:** suite `tests/pantheon/tui-delegations.test.ts` com 93/93 passando (tsc + biome OK).
95
+ - **E2E beta.8 PASS (referência):** baseline E2E da beta.8 mantido como referência de estabilidade para beta.9.
96
+
97
+ ## 🐞 Fixed
98
+
99
+ - Removido diretório `testyes/` (artefato de teste).
100
+ - Truncado `hooks.log` para baseline limpo de beta.9.
101
+
102
+ ## [v1.5.0-beta.8] - 2026-09-13
103
+
104
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
105
+ move this section to a versioned entry and reset the template below. -->
106
+
107
+ ## 🐞 Fixed
108
+
109
+ - **Board persistence is corruption- and concurrency-safe:** state writes now go
110
+ through a UNIQUE temp file (per-process, per-write counter + random suffix), are
111
+ `fsync`ed, then renamed over the destination with bounded ENOENT retries, and
112
+ read-modify-write cycles on the same state path are serialized. This closes the
113
+ window where two writers could interleave and corrupt `state.json` or race the
114
+ rename.
115
+ - **Corrupt board state is quarantined and salvaged:** a malformed `state.json` is
116
+ moved aside to `<state>.corrupt-<ts>`, a clear error is logged, and every complete
117
+ record that can be parsed is salvaged and returned instead of throwing — so
118
+ delete/prune/recover callers cannot get stuck in a retry loop.
119
+ - **P1-1 — no orphan `.signal.json` on reconcile:** reconcile now deletes any
120
+ still-pending wake signal instead of re-writing it. Reconcile is an
121
+ acknowledgment, not a new terminal transition, so the finalize→reconcile cycle
122
+ no longer leaves a stale `<alias>.signal.json` with `state:"reconciled"` behind.
123
+ - **Unresolved `{sessionID}` template guard:** the TUI/runtime can hand the plugin
124
+ the unsubstituted literal `{sessionID}` (or `%7BsessionID%7D`) when no session is
125
+ focused; the plugin now refuses placeholder session ids at the delegation,
126
+ bootstrap-probe, and activity-sample boundaries instead of forwarding them to the
127
+ session API (which rejected every call).
128
+ - **Delegation lookup scoped to the calling session:** `pantheon_delegation_read`
129
+ resolves exact task IDs first (must belong to the caller's session), then alias
130
+ matches within that session (exactly one required). Cross-session and ambiguous
131
+ aliases now return explicit errors instead of the generic "Unknown delegation".
132
+
133
+
134
+ ## [v1.5.0-beta.7] - 2026-09-13
135
+
136
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
137
+ move this section to a versioned entry and reset the template below. --&gt;
138
+
139
+ ## 🆕 What's New
140
+
141
+ - **Cost CLI fallback + `PANTHEON_NODE`:** `pantheon_cost` falls back to a
142
+ read-only `node scripts/cost.mjs` subprocess when `node:sqlite` is
143
+ unavailable in the host runtime (for example under Bun). The fallback
144
+ resolves a real Node.js binary — `PANTHEON_NODE` first, then `node` on
145
+ `PATH` — probes it for `node:sqlite` support (Node.js >= 22.5), and runs it
146
+ with an argument array, never a shell. Previously the tool returned
147
+ `status: UNSUPPORTED` with no fallback.
148
+ - **Delegation engine contract (ADR-0011):** legacy `pantheon_delegate` remains
149
+ the default engine through v1.5.x; native delegation is opt-in and
150
+ experimental via `PANTHEON_DELEGATE_MODE=native` until v1.6. See
151
+ [ADR-0011](https://github.com/ils15/pantheon-opencode/pull/126) (Proposed).
152
+
153
+ ## 🐞 Fixed
154
+
155
+ - **Legacy read-only bypass on retry (P0):** a retried delegation now
156
+ re-applies read-only enforcement (the same rule as the initial child) and
157
+ registers the retry session, closing the bypass where a retried child could
158
+ write despite `read_only: true` or being a read-only agent.
159
+ - **Kill-switch scope (P0):** `PANTHEON_DELEGATION=off` now also disables the
160
+ legacy engine, not only the native manager — the legacy delegate/read/list
161
+ tools throw as documented.
162
+ - **Delegation signal leak (P1):** the legacy finalize path now deletes the
163
+ auto-wake signal file, so terminal delegations no longer leave stale
164
+ `.signal.json` artifacts behind.
165
+ - **Crash recovery is durable (P1):** `recoverRunningJobs` persists the
166
+ `error` state, marks the job `terminalUnreconciled`, and emits the terminal
167
+ signal plus notification for every reaped job instead of updating memory
168
+ only.
169
+ - **Atomic concurrency (P1):** `registerLaunch` validates
170
+ `maxConcurrentPerAgent` before any mutation, so concurrent dispatches cannot
171
+ both claim the last slot. A refused launch tears down the orphan child
172
+ session (read-only unregister plus `session.delete`) and the retry path
173
+ re-validates the same limit.
174
+ - **Legacy board hygiene (P1):** the legacy finalize path now runs
175
+ `pruneCompleted` and `enforceEntryCap`, matching the native manager and
176
+ preventing unbounded board growth.
177
+ - **Resilient V2 events:** a native child refused by the per-agent limit is
178
+ logged and skipped instead of aborting the rest of the event handler.
179
+ ## [v1.5.0-beta.6] - 2026-09-12
180
+
181
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
182
+ move this section to a versioned entry and reset the template below. --&gt;
183
+
184
+ ## 🆕 What's New
185
+
186
+ - **Delegation panel v2:** live tool activity per running delegation
187
+ (`↳ bash npm test` — what the child is doing right now), a paginated
188
+ `Archived (n)` section for terminal reports beyond the recent 8, and a
189
+ distinct `retry` state (⟳ marker, RETRYING label) instead of lumping
190
+ retries into running.
191
+
192
+ ## 🐞 Fixed
193
+
194
+ - **Stale plugin refs from old installs:** the installer now prunes
195
+ `pantheon-opencode` plugin references pointing at other installed copies of
196
+ the package (older nvm prefixes, npx cache hashes). Previously every init
197
+ accumulated refs from past installs and the oldest — without the newest
198
+ fixes — won the plugin load race, silently disabling native-task
199
+ mirroring. Third-party plugins sharing the same file names remain
200
+ protected.
201
+ - **Docs:** `@beta` dist-tag guidance on all npx commands — plain
202
+ `npx pantheon-opencode` resolves the stable release and silently downgrades
203
+ the installed TUI copy.
204
+ ## [v1.5.0-beta.5] - 2026-09-12
205
+
206
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
207
+ move this section to a versioned entry and reset the template below. --&gt;
208
+
209
+ ## 🆕 What's New
210
+
211
+ - **Native background tasks in the delegation panel:** tasks dispatched via
212
+ the native `task(background=true)` tool are now mirrored onto the shared
213
+ BackgroundJobBoard, so the TUI delegation panel tracks them while running
214
+ and the existing finalize path writes their terminal report.
215
+ - **`pantheon-opencode update`:** one command updates the global package
216
+ (beta or stable channel) and re-runs init to refresh config, venv and MCP
217
+ entries. The installer stamps the installed version and `doctor` warns when
218
+ the package is newer than the last sync.
219
+ - **Always-fresh artifacts:** the package postinstall now refreshes all
220
+ copy-only artifacts (agents, skills, AGENTS.md, commands, MCP scripts,
221
+ code-mode payload) into existing installations on every `npm install`; a CI
222
+ gate rebuilds the TUI bundle and fails if the committed `dist/` is stale.
223
+ - **More resilient installer:** preflight checks for python3/npm before any
224
+ file is written, atomic `opencode.json` writes with a `.bak` backup,
225
+ non-fatal Python runtime setup (a venv failure now omits MCP entries with a
226
+ warning instead of pointing at a broken interpreter), `--components` /
227
+ `--clean` / `--opencode-version auto` flags, unknown-flag warnings and
228
+ pt-BR/EN message auto-detection via `LANG`.
229
+ - **Roadmap zerado:** o plano ativo não tem mais itens pendentes. Sprints
230
+ nunca implementados dos planos v1.0/v1.0+ foram removidos; o contrato atual
231
+ passou a documentar o code-mode (manifest SHA-256, resolução project-first).
232
+
233
+ ## 🐞 Fixed
234
+
235
+ - **Code-mode project resolution (#112):** the MCP now resolves project code-mode
236
+ scripts before global scripts, honors `PANTHEON_PROJECT`, and fails closed on
237
+ project manifest errors; the installer sets `cwd: "."`.
238
+ - **Code-mode manifest doctor check (#113):** `doctor` validates manifest shape,
239
+ script membership, and SHA-256 hashes without regenerating the manifest.
240
+ ## [v1.5.0-beta.4] - 2026-09-11
241
+
242
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
243
+ move this section to a versioned entry and reset the template below. --&gt;
244
+
245
+ ## 🆕 What's New
246
+
247
+ - **Native delegation contract (B3-05):** adds the nine-code `NativeTaskStatus` contract, a session-lazy cached capability probe, atomic board registration for native children, strict `PANTHEON_DELEGATE_MODE=native` without fallback/failover/retry, and status in delegation receipts.
248
+
249
+ - **Cost backend (B3-06):** `pantheon_cost` now uses a single read-only `node:sqlite` backend; the CLI fallback was removed. The common contract reports `UNSUPPORTED` when `node:sqlite` is unavailable and `CORRUPT_DATA`/`UNAVAILABLE` with diagnostic details on stderr; includes a sandbox probe.
250
+
251
+ - **Tool ceiling (B3-07):** C9/tool ceiling is fed only by real host data from `message.updated` plus `config.providers()`; lexical fallback is removed. Hosts without the capability report `UNSUPPORTED`, malformed data reports `CORRUPT_DATA`, and malformed events are guarded defensively.
252
+
253
+ - **Code-mode explicit installation (B3-08):** `pantheon-code-mode` no longer executes scripts implicitly. A script runs only when listed in `.pantheon/code-mode/manifest.json` with a matching SHA-256; the installer seeds the manifest for bundled scripts and a new `approve_code_script` tool opts in or refreshes a script. Missing manifest reports `INVALID_STATE`, unlisted scripts `CONFLICT`, and hash mismatches `CORRUPT_DATA`.
254
+
255
+ ## 🐞 Fixed
256
+
257
+ - **ECIGLOBAL fix (sync-tui):** `npm install -g` no longer fails with ECIGLOBAL — `scripts/sync-tui.mjs` now sanitizes `npm_config_*` global-context vars (case-insensitive) from the nested `npm ci` environment.
258
+ - **npm tarball inclusion:** CHANGELOG.md is now included in the npm tarball
259
+ (added to the `files` allowlist in `package.json`).
260
+
261
+ - **Task Result Guard**: native `task()` empty results are now detected and
262
+ converted to explicit errors in the `tool.execute.after` hook. Previously,
263
+ when a provider rejected a child session (e.g. `BackendAdmissionRejected`
264
+ from free-tier admission control), the error was silently swallowed — the
265
+ child completed with empty output and the parent LLM proceeded as if the
266
+ task succeeded. The guard replaces empty `task()` output with an error
267
+ message so the parent sees a failure. (`task-result-guard.ts`)
268
+ ## [v1.5.0-beta.3] - 2026-09-10
269
+
270
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
271
+ move this section to a versioned entry and reset the template below. --&gt;
272
+
273
+ ### Changed
274
+
275
+ - **CI fail-closed:** `ci.yml` no longer falls back from `npm ci` to
276
+ `npm install`, and pytest/audit failures are no longer swallowed. The
277
+ workflow now runs lint, typecheck, `test:ts`, Python tests, Node tests and
278
+ `npm audit`/`pip-audit` as blocking gates.
279
+ - **Release authorization is dispatch-only:** `release.yml` no longer triggers
280
+ on PR labels or any `pull_request` event. Publication is
281
+ authorized only by an explicit `workflow_dispatch`; the `release_channel`
282
+ input (`stable` default, `beta`) selects the channel. Beta versions are
283
+ committed sequential `X.Y.Z-beta.N` (bumped via
284
+ `node scripts/versioning.mjs apply --beta`); no runtime version computation.
285
+ - **Sandbox gate is PASS-only:** `test-opencode-v1-v2-sandbox.sh` no longer
286
+ classifies failures as `AMBIENTAL`/`NOT_TESTED`, has no prompt retry, and
287
+ treats missing binaries/projects/probes, timeouts and auth/network/provider
288
+ failures as blocking. Exit 0 now requires an explicit PASS on every check.
289
+ - **Validation policy is PASS-only:** `doctor` exit != 0 (including legacy
290
+ exit 1 warnings), unknown or non-numeric statuses block validation;
291
+ WARN/SKIP/AMBIENTAL/NOT_TESTED never produce exit 0.
292
+ - **No npm install fallback in TUI/install paths:** `sync-tui.mjs` and the
293
+ plugin installer propagate `npm ci` failures instead of falling back to
294
+ `npm install`; `PANTHEON_ALLOW_NPM_INSTALL_FALLBACK` is not supported.
295
+ - **Lockfile-backed installs:** the root (`package.json` + `package-lock.json`)
296
+ and TUI (`src/plugins/tui/package.json` + `src/plugins/tui/package-lock.json`)
297
+ are validated independently with `npm ci --ignore-scripts`. A failure blocks
298
+ the run; there is no `npm install` fallback.
299
+ - **Release artifact identity:** each release carries one `.tgz` tarball and
300
+ the SHA-256 of that same file from validation through publication. The
301
+ tarball and release metadata are bound to the full `TARGET_SHA`; repacking is
302
+ not an equivalent artifact.
303
+ - **Intentional MCP divergence:** `scripts/memory_mcp_server.py` keeps the
304
+ lightweight `memory_*` contract while `src/mcp/memory_mcp_server.py` also
305
+ exposes the optional codemap tools. The other shared MCP copies remain
306
+ identical; this pair is not to be overwritten by synchronization.
307
+ - **Sandbox scope:** a PASS from the prepared isolated sandbox is not proof of
308
+ support for every real host or untested host configuration.
309
+
310
+ ### Breaking Changes
311
+
312
+ - Release automation requires a manual `workflow_dispatch`; labeling a PR no
313
+ longer publishes anything.
314
+ - The sandbox validator exits non-zero when environmental checks cannot run
315
+ (missing binaries, provider auth, timeouts) instead of reporting them as
316
+ non-blocking.
317
+ - `PANTHEON_ALLOW_NPM_INSTALL_FALLBACK` has no effect; `npm ci` failures now
318
+ fail the install/sync step.
319
+ ## [1.5.0] - 2026-09-01 (candidate)
320
+
321
+ ### Changed
322
+
323
+ - **MCP flat map:** the installer and config migration keep MCP servers as the
324
+ named top-level map — the `mcp.servers` wrapper is rejected by OpenCode
325
+ 1.18.18 (`Missing key mcp.servers.enabled`). Legacy wrapped entries are
326
+ unwrapped and `disabled` flags are normalized back to `enabled`.
327
+ - **Deterministic plugin installs:** the TUI plugin ships its lockfile and
328
+ installs with `npm ci --omit=dev`; failures are propagated without an
329
+ `npm install` fallback.
330
+ - **Uninstall CLI:** new `node scripts/uninstall.mjs --project|--global` with
331
+ ownership checks, `--dry-run` and `--force`.
332
+ - **OpenCode-only:** platform guides consolidated into a single OpenCode
333
+ guide; Pantheon 1.5.0 targets OpenCode exclusively.
334
+ - **OpenCode V2 plugin:** the V2 contract registers 9 orchestration tools
335
+ (`pantheon_delegate`, `pantheon_delegation_read`, `pantheon_delegation_list`,
336
+ `hashline_edit`, `pantheon_goal_create`, `pantheon_goal_get`,
337
+ `pantheon_goal_update`, `pantheon_cost`, `pantheon_model`), 4 event
338
+ subscriptions, session hooks (`prompt`, `context`) and tool hooks
339
+ (`execute.before`, `execute.after`).
340
+
341
+ ## [v1.4.3] - 2026-09-03
342
+
343
+ ### Changed
344
+
345
+ - Synchronized the 1.4.3 release version across `package.json`,
346
+ `package-lock.json`, `plugin.json`, `pyproject.toml`, and the TUI package.
347
+
348
+ ## [v1.4.2] - 2026-08-27
349
+
350
+ ### Changed
351
+ - Synchronized release metadata across project manifests.
352
+ ## [1.4.1] - 2026-08-26 (candidate)
353
+
354
+ ### Changed
355
+
356
+ - **Delegation output:** removed the legacy delegate echo path. Terminal visibility now uses the board, list/read tools, file-only audit logs, and TUI toasts; chat transcript delivery remains disabled.
357
+ - **Model inheritance:** child sessions no longer receive a hardcoded `model` or `small_model`. Only an explicitly active routing profile (or an explicit delegate model) supplies an override; otherwise OpenCode inherits the parent model.
358
+ - **Compaction carry-forward:** context is written through `output.context` during `experimental.session.compacting`, before `session.compacted` runs, preserving the correct lifecycle order without chat injection.
359
+
360
+ ### Fixed
361
+
362
+ - **Empty child output:** a child marked completed without assistant or tool output now becomes an explicit error: `Child session produced no assistant or tool output`.
363
+ - **Terminal toast delivery:** toast delivery is resilient to missing or failing TUI clients, is gated by `PANTHEON_TOASTS`, and deduplicates repeated terminal events for the same delegation.
364
+ - **Chat noise:** removed the remaining transcript/reminder delivery paths for delegation completion and compaction state.
365
+
366
+ ### Tests
367
+
368
+ - Added regression coverage for delegate output validation, terminal-toast gating/deduplication, native model inheritance, and compaction context ordering.
369
+ - Updated the relevant Node/TypeScript tests and installation/model-routing checks; global-install behavior remains validated through the isolated sandbox when run.
370
+ - Release verification caveat: `npm test` reported 240 passing tests and 1 environmental failure (`fork: Resource temporarily unavailable`); rerun on a host with sufficient process resources before treating the candidate as fully verified.
371
+
372
+ ## [1.4.0] - 2026-08-25
373
+
374
+ ### Added
375
+
376
+ - **Codebase knowledge graph:** added the `pantheon-memory` codemap module with code entities, relations, file hashes, FTS5 search, and `code_index`, `code_query`, and `code_neighbors` tools for Python and TypeScript codebases.
377
+ - **Context-window optimization:** added `tool.execute.after` output sandboxing for `read`, `grep`, `glob`, and `webfetch`, with truncation markers and lower per-session output volume.
378
+
379
+ ### Fixed
380
+
381
+ - **Installed TUI version display:** version detection now checks the installed TUI package before the development-tree package, fixing null versions in global installs and the sandbox.
382
+ - **Bash command portability:** normalized `python` commands to `python3` where the host does not provide a `python` executable.
383
+
384
+ ### Tests
385
+
386
+ - The release entry records the implementation and coverage reported by the session; no additional release-level test result is asserted here.
387
+
388
+ ## [1.3.7] - 2026-08-24
389
+
390
+ ### Added
391
+
392
+ - **Stale-running detector:** the job board warns about entries running for more than 30 minutes without activity, and the Markdown parser rejects synthetic `running` states.
393
+ - **TUI auto-update:** postinstall synchronization and a runtime version check keep the installed TUI files current.
394
+
395
+ ### Fixed
396
+
397
+ - **Stale delegate display:** corrected stale-running entries in the TUI delegation view.
398
+ - **Orphan cleanup:** connected `finalizeIdleChildrenWithoutMd` to the periodic 30-second scan at plugin initialization.
399
+
400
+ ### Tests
401
+
402
+ - Closed issue #68 covering the TUI stale-state and auto-update fixes.
403
+
404
+ [v1.4.3]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.4.3
405
+ [1.4.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.4.0
406
+ [1.3.7]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.7
407
+ [1.3.6]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.6
408
+
409
+
410
+ ## [1.3.6] - 2026-08-22
411
+
412
+ ### Added
413
+
414
+ - **Recency decay in `memory_search` (src/mcp/memory_mcp_server.py)** — new `decay_days` param (default `None`, backward compatible) applies a freshness half-life `2^(-days_since_created/decay_days)` to RRF-fused scores, so older memories rank lower when enabled. `_rrf_fuse` accepts an optional `created_at_map`; tool description and docs updated (docs/MEMORY.md, docs/MCP.md, docs/mcp-tools.md).
415
+ - **Themis Comment Checker (src/agents/themis.md)** — Layer 1 review now flags generated code that is indistinguishable from human-written: excessive/obvious comments (`// increment i`, `# set x to 5`), commented-out dead code, and boilerplate headers.
416
+ - **Doc drift fixes** — MEMORY.md/MCP.md/mcp-tools.md now describe the real sqlite-vec + fastembed implementation (6 tools) instead of the stale ChromaDB 14-tool design; freshness decay documented as opt-in via `decay_days`.
417
+ - **scripts/ resynced with src/mcp/** — `mcp_resources_server.py` (routing project fallback), `code_mode_server.py` (comment drift), `memory_mcp_server.py`, `mcp_persistence_server.py`, `_pantheon_paths.py` regenerated from canonical source; tests now point at `src.mcp.*` so they exercise canonical code.
418
+ - **mcp-registry.yml synced** — real tool names (`memory_store/search/recall/forget/list/stats`, `kv_*`, `execute_code_script`, `vision_*`) + `pantheon-vision` server added.
419
+ - **Persistence MCP server test suite (tests/test_mcp_persistence_server.py)** — 32 tests covering kv_store/kv_get (incl. TTL expiry), kv_list, kv_search (FTS5), kv_delete, kv_delete_namespace, purge_expired (dry_run + deletelog), context_save/get/list/stats (latest pointer, session isolation) and namespace/scope isolation — the only previously untested MCP server now has full coverage.
420
+ - **CRITICAL TTL expiry fix (src/mcp/mcp_persistence_server.py)** — ISO `expires_at` timestamps (with `T` separator) compared lexicographically against SQLite's space-separated `datetime('now')` were ALWAYS greater on the same date, so TTL entries never expired (kv_get never returned None, purge_expired never purged, the 4h checkpoint TTL never fired). All 9 comparison sites now normalize via `datetime(expires_at)` — restoring the crash-recovery checkpoint path.
421
+ - **`_resolve_db_path` fix (src/mcp/mcp_persistence_server.py)** — with an explicit `--project-db`, deletelog writes and db_size stats pointed at the repo's real project.db instead of the actual DB path; the resolved path is now tracked at init.
422
+ - **Code-mode script metadata (src/mcp/code_mode_server.py)** — optional comment-style YAML frontmatter (`# ---` delimiters) on scripts: `description`, `timeout` (per-script override, seconds), `allowed_args` (arg allowlist). Exposed via `pantheon://code-mode/scripts/{name}` and the new `json_output=true` structured result (stdout/stderr/exit_code/duration_ms/timed_out/metadata). Malformed/missing frontmatter fails open. Documented in `.pantheon/code-mode/README.md`.
423
+ - **Per-script timeout override (src/mcp/code_mode_server.py)** — frontmatter `timeout` overrides the 30s default in the subprocess `wait_for`; kill-on-timeout preserved (tested: `timeout: 2` script killed at ~2s).
424
+ - **`_parse_iso_ts` UTC fix (src/mcp/memory_mcp_server.py)** — legacy naive timestamps from `DEFAULT (datetime('now'))` (`YYYY-MM-DD HH:MM:SS`, no TZ) are now assumed UTC instead of local timezone before `.timestamp()`, keeping freshness decay correct.
425
+ - **StepCapTracker permanent-per-process documented (src/pantheon/step-cap.ts)** — counters accumulate for the process lifetime and are intentionally not reset on success/session end; `reset()` remains a tested utility. Documented in routing.yml + README.
426
+ - **High-level R1 integration tests (tests/pantheon/zeus-delegate-with-retry.test.ts)** — `zeusDelegateWithRetry` with retryPolicy/cooldown: policy-driven retry-then-success (empty → 1 retry → recovered content), 0-retry escalate, and cooldown skip.
427
+ - **R4 per-agent step caps (src/pantheon/step-cap.ts + src/routing.yml)** — every routed agent gets a `max_steps` budget (explore 25, reviewer 25, oracle 15, hermes 40, zeus 60, …); at the cap the delegation is forced to summarize-and-stop via `buildStopInstruction`/`cappedSummary`; counters are permanent-per-process by design.
428
+ - **O5 permission.task globs (src/pantheon/permission-globs.ts)** — allow/deny glob rules controlling which subagents may be delegated; deny rules remove the target from Zeus's task tool entirely (`delegation-enforce`), with matching filtering in finalize and the agent-list description.
429
+ - **plugin-eval certification suite (.pantheon/code-mode/)** — `eval-static.py` (structural checks: frontmatter/secrets/file refs), `eval-llm-judge.py` (LLM quality layer), `eval-monte-carlo.py` (simulated-run reliability, exits 1 below 75%), `eval-run.py` (orchestrator emitting one report JSON; below-threshold layers still score), plus `eval_store` persistence and `pantheon://eval` resources exposing latest certification scores.
430
+
431
+ ### Fixed
432
+
433
+ - memory_search doc drift: freshness decay was documented but not implemented — now real via `decay_days`.
434
+ - scripts/ copies stale vs src/mcp/ canonical sources (missing routing project fallback, stale comments).
435
+ - .pantheon/mcp-registry.yml listed non-existent tools (memory_compress, memory_expand, list_agents) and missed pantheon-vision.
436
+
437
+
438
+ ### Tests
439
+
440
+ - The entry records the persistence, integration, and certification test coverage explicitly listed above; no aggregate release-level result was available in the source notes.
441
+
442
+
443
+ ## [1.3.6-beta] - 2026-08-21
444
+
445
+ ## 🆕 What's New
446
+
447
+ - **Recency decay in `memory_search` (src/mcp/memory_mcp_server.py)** — new `decay_days` param (default `None`, backward compatible) applies a freshness half-life `2^(-days_since_created/decay_days)` to RRF-fused scores, so older memories rank lower when enabled. `_rrf_fuse` accepts an optional `created_at_map`; tool description and docs updated (docs/MEMORY.md, docs/MCP.md, docs/mcp-tools.md).
448
+ - **Themis Comment Checker (src/agents/themis.md)** — Layer 1 review now flags generated code that is indistinguishable from human-written: excessive/obvious comments (`// increment i`, `# set x to 5`), commented-out dead code, and boilerplate headers.
449
+ - **Doc drift fixes** — MEMORY.md/MCP.md/mcp-tools.md now describe the real sqlite-vec + fastembed implementation (6 tools) instead of the stale ChromaDB 14-tool design; freshness decay documented as opt-in via `decay_days`.
450
+ - **scripts/ resynced with src/mcp/** — `mcp_resources_server.py` (routing project fallback), `code_mode_server.py` (comment drift), `memory_mcp_server.py`, `mcp_persistence_server.py`, `_pantheon_paths.py` regenerated from canonical source; tests now point at `src.mcp.*` so they exercise canonical code.
451
+ - **mcp-registry.yml synced** — real tool names (`memory_store/search/recall/forget/list/stats`, `kv_*`, `execute_code_script`, `vision_*`) + `pantheon-vision` server added.
452
+ - **Persistence MCP server test suite (tests/test_mcp_persistence_server.py)** — 32 tests covering kv_store/kv_get (incl. TTL expiry), kv_list, kv_search (FTS5), kv_delete, kv_delete_namespace, purge_expired (dry_run + deletelog), context_save/get/list/stats (latest pointer, session isolation) and namespace/scope isolation — the only previously untested MCP server now has full coverage.
453
+ - **CRITICAL TTL expiry fix (src/mcp/mcp_persistence_server.py)** — ISO `expires_at` timestamps (with `T` separator) compared lexicographically against SQLite's space-separated `datetime('now')` were ALWAYS greater on the same date, so TTL entries never expired (kv_get never returned None, purge_expired never purged, the 4h checkpoint TTL never fired). All 9 comparison sites now normalize via `datetime(expires_at)` — restoring the crash-recovery checkpoint path.
454
+ - **`_resolve_db_path` fix (src/mcp/mcp_persistence_server.py)** — with an explicit `--project-db`, deletelog writes and db_size stats pointed at the repo's real project.db instead of the actual DB path; the resolved path is now tracked at init.
455
+ - **Code-mode script metadata (src/mcp/code_mode_server.py)** — optional comment-style YAML frontmatter (`# ---` delimiters) on scripts: `description`, `timeout` (per-script override, seconds), `allowed_args` (arg allowlist). Exposed via `pantheon://code-mode/scripts/{name}` and the new `json_output=true` structured result (stdout/stderr/exit_code/duration_ms/timed_out/metadata). Malformed/missing frontmatter fails open. Documented in `.pantheon/code-mode/README.md`.
456
+ - **Per-script timeout override (src/mcp/code_mode_server.py)** — frontmatter `timeout` overrides the 30s default in the subprocess `wait_for`; kill-on-timeout preserved (tested: `timeout: 2` script killed at ~2s).
457
+ - **`_parse_iso_ts` UTC fix (src/mcp/memory_mcp_server.py)** — legacy naive timestamps from `DEFAULT (datetime('now'))` (`YYYY-MM-DD HH:MM:SS`, no TZ) are now assumed UTC instead of local timezone before `.timestamp()`, keeping freshness decay correct.
458
+ - **StepCapTracker permanent-per-process documented (src/pantheon/step-cap.ts)** — counters accumulate for the process lifetime and are intentionally not reset on success/session end; `reset()` remains a tested utility. Documented in routing.yml + README.
459
+ - **High-level R1 integration tests (tests/pantheon/zeus-delegate-with-retry.test.ts)** — `zeusDelegateWithRetry` with retryPolicy/cooldown: policy-driven retry-then-success (empty → 1 retry → recovered content), 0-retry escalate, and cooldown skip.
460
+ - **R4 per-agent step caps (src/pantheon/step-cap.ts + src/routing.yml)** — every routed agent gets a `max_steps` budget (explore 25, reviewer 25, oracle 15, hermes 40, zeus 60, …); at the cap the delegation is forced to summarize-and-stop via `buildStopInstruction`/`cappedSummary`; counters are permanent-per-process by design.
461
+ - **O5 permission.task globs (src/pantheon/permission-globs.ts)** — allow/deny glob rules controlling which subagents may be delegated; deny rules remove the target from Zeus's task tool entirely (`delegation-enforce`), with matching filtering in finalize and the agent-list description.
462
+ - **plugin-eval certification suite (.pantheon/code-mode/)** — `eval-static.py` (structural checks: frontmatter/secrets/file refs), `eval-llm-judge.py` (LLM quality layer), `eval-monte-carlo.py` (simulated-run reliability, exits 1 below 75%), `eval-run.py` (orchestrator emitting one report JSON; below-threshold layers still score), plus `eval_store` persistence and `pantheon://eval` resources exposing latest certification scores.
463
+
464
+ ## 🐞 Fixed
465
+
466
+ - memory_search doc drift: freshness decay was documented but not implemented — now real via `decay_days`.
467
+ - scripts/ copies stale vs src/mcp/ canonical sources (missing routing project fallback, stale comments).
468
+ - .pantheon/mcp-registry.yml listed non-existent tools (memory_compress, memory_expand, list_agents) and missed pantheon-vision.
469
+
470
+ ## [1.3.5] - 2026-08-21
471
+
472
+ ## 🆕 What's New
473
+
474
+ - **PT patterns para delegação (routing.yml)** — adiciona 5 padrões PT (`procure`/`busque`/`encontre`/`localize`/`pesquise`) ao `intent_gate` research → apollo, corrigindo detecção de intenção para prompts em português (PR #61).
475
+ - **Zeus read guard (delegation-enforce.ts + plugin.ts)** — `ZEUS_READ_DENY_PATTERNS` bloqueia `src`/`tests`/`scripts`/`glob`/`grep` por Zeus via `tool.execute.before` (primeiro guard da cadeia); `ALLOWED_PATHS` libera `.md` e `.pantheon/memories`; 10 casos de teste em `tests/pantheon/delegation-enforce.test.ts`; `apollo.md`/`gaia.md` com `visible:false` e `tools.task:false` para depth-1 (PR #61).
476
+
477
+ ## 🐞 Fixed
478
+
479
+ - **session-guard + retry helper (session-guard.ts + zeus-delegate-with-retry.ts)** — guard de `session_id` e helper `zeusDelegateWithRetry` com retry/backoff para delegações; `goal-loop.ts`/`todo-enforcer.ts`/`todo-preserve.ts`/`delegation.ts` ajustados (PR #61).
480
+ - **validate doctor filter (scripts/doctor.mjs)** — `isValidAgentFile` verifica frontmatter YAML (`name`/`description`/`mode`) para filtrar `README.md` e docs não-agente de `getCanonicalAgentNames`/`deriveInstalledAgentFiles`; evita contagem espúria no `doctor` (PR #61).
481
+ - **README move (src/agents → docs/agents)** — move `README.md` para fora de `src/agents` para evitar agente espúrio; `docs/agents/README.md` criado (PR #61).
482
+ - **TUI GC aliasless (src/plugins/tui)** — GC de delegações live sem alias para evitar estado `delegating` preso; `src/plugins/tui/src/index.tsx` + `dist/` atualizados (PR #61).
483
+ - **routing fallback opencode-go (src/pantheon/presets.mjs + routing.yml)** — fallback do preset default para `opencode-go` quando API key do provider ausente; `resolveChildModel` com fallback para `opencode/deepseek-v4-flash-free` (PR #61).
484
+ - **install README guard (scripts/install/*)** — `shared.mjs`/`opencode.mjs`/`agents-md.mjs` impedem cópia de `README.md` para diretório de agentes; `package.json` ajustado (PR #61).
485
+
486
+ ## [v1.3.4] - 2026-08-11
487
+
488
+ ## 🆕 What's New
489
+
490
+ - **Compaction summary V2** (preservation directive + mission/todo/delegation sections): `buildCompactionContext` is now async and accepts goal/todo sources — `PANTHEON_COMPACTION_DIRECTIVE` prefix section (emitted before any other section, skipped on totally-empty state), `<mission_context>` with active goals (id/objective/status), `<todo_context>` with pending (not completed/cancelled) todos; delegation blocks byte-for-byte unchanged; failing/disabled sources are skipped fail-open (logged to hooks.log)
491
+ - **Post-compaction todo preservation**: TodoPreserver captures the session's todo list on `experimental.session.compacting`, activates the snapshot on `session.compacted`, and rewrites the first post-compaction `todowrite` with the exact pre-compaction list — additive + fail-open (every step degrades to a logged warn, never throws in a hook)
492
+ - **Post-compaction state re-assertion**: re-asserts session state after compaction so the rebuilt context reflects the live board
493
+ - **Historical (superseded) agentModels wiring from routing.yml**: the old release wired `options.agentModels` from the first preset. Current behavior requires an explicitly active profile and omits child models otherwise.
494
+ - **Preemptive compaction threshold logic** (dormant/experimental): threshold-based preemptive compaction — not active by default
495
+ - **File-first logging**: `createPantheonLogger` — console echo opt-in via `PANTHEON_HOOKS_LOG=1`, everything routed to `.pantheon/logs/hooks.log` (silences TUI console pollution)
496
+ - **Historical (superseded by 1.5.0):** the 1.3.4 TUI delegation panel described every report-less child as native `task()` work with a `[task]` tag. Current behavior keeps child origin unclassified unless explicit provenance is available.
497
+ - **README docs**: 1.3.4 compaction + delegation features documented
498
+ - **Zero chat-notification policy**: removed the `chat.message` injection channel for delegation signals — completion visibility lives in the board `[unread]` marker, `pantheon_delegation_read`, TUI toasts and compaction carry-forward, never in the chat transcript
499
+
500
+ ## 🐞 Fixed
501
+
502
+ - **Delegate dispatch with missing provider API key** (P1): `resolveChildModel` never checked whether the resolved model's provider had a configured API key — a child dispatched to a keyless provider (e.g. gpt-5.6-luna/opencode-go) died instantly with `AI_LoadAPIKeyError`. Auto-resolved models (agentModels/preset) whose provider key is missing now fall back to `opencode/deepseek-v4-flash-free`; explicit caller models are respected (warned); when nothing is usable the tool returns a clear error TEXT and registers NO job on the board
503
+ - **delegations.log typing**: `task_id` was always `""` (now omitted when empty) and `duration_ms` was logged as a STRING (now parsed to a number, null when unset), breaking downstream aggregation
504
+ - **Idle-flush log duplication**: `flushIdleReminders` echoed the reminder body joined with `" | "` while chat.message delivery echoed the same body with `"\n"` — the identical line appeared twice; idle-flush is now an audit summary (count + aggregated line count), content logged exactly once at chat-reminder delivery
505
+ - **TUI console log pollution**: console output in the plugin/hooks rendered directly into the opencode TUI; now env-gated, log-file only by default
506
+
507
+ ### Tests
508
+
509
+ - No aggregate test result was recorded in the original 1.3.4 release notes; the factual test counts that were documented remain attached to their individual changes above.
510
+
511
+
512
+ ## [v1.3.3] - 2026-08-11
513
+
514
+ ## 🆕 What's New
515
+
516
+ - **Todo continuation enforcer**: auto-continues sessions with incomplete todos on `session.idle` (4 guards: board-running, in-flight, exponential cooldown, max-failures cap) + kill-switch `PANTHEON_TODO_ENFORCER=off`
517
+ - **Hashline hash-anchored edits**: `hashline_edit` tool with sha256-truncated line tags, additive read enhancer, validate-before-write with `>>>` mismatch hints + Did-you-mean suggestions; blocked in read-only sessions
518
+ - **Full-auto goal loop** (opt-in `full_auto.enabled: false`): `pantheon_goal_create/update/get` tools, atomic GoalStore, priority idle dispatcher (goal suppresses enforcer), max 25 continuations
519
+ - **Dispatch retry-on-empty**: classifies empty results (mode 1: 0 tokens; mode 2: reasoning without text) with cap-1 automatic retry
520
+ - **Cost tracking**: JSONL ledger + `pantheon_cost` command reading opencode.db (zero-dep, node:sqlite → scripts/cost.mjs fallback)
521
+ - **Themis phase reviews** route to deepseek-v4-flash (pro reserved for final release gate); Athena stays premium (council red-line)
522
+ - **Routing config**: `background_delegation`, `todo_enforcer`, `hashline`, `full_auto` sections
523
+
524
+ ## 🐞 Fixed
525
+
526
+ - **Delegation killer**: chat.message hook injected reminders with empty messageID on the subagent promptAsync path — opencode schema rejected it, killing every background delegation in ~20ms (found by live E2E smoke)
527
+ - **Delegation child model routing**: child sessions now inherit the routed model (explicit arg → routing.yml agent entry → active preset) instead of falling back to the key-gated default (E2E: AI_LoadAPIKeyError without an active preset)
528
+ - **Installer `resolveInstalledPlugin`** mapped only `src/plugins/*` — `src/plugin.ts` resolved to the dev path, breaking global installs on non-dev machines and leaking the dev path (release-blocking)
529
+ - **Todo enforcer invasiveness**: skips injection when native background children are active (`session.children`) and within 30s of user activity
530
+ - **Hashline**: atomic write (tmp+rename), path containment guard, documented seed separator
531
+
532
+ ## [v1.3.2] - 2026-08-09
533
+
534
+ ## 🆕 What's New
535
+
536
+ - **Sandbox validation**: added the `sandbox` doctor profile and regression coverage for npm tarball contents, installed hook resolution, doctor status handling, MCP runtime smoke checks, and related CLI/install contracts.
537
+ - **Package portability**: distributed configuration no longer retains checkout-specific machine paths; managed hooks are resolved from the installed package during install/sync.
538
+ - **Doctor contract**: exit statuses now distinguish success (`0`), advisory warnings (`1`), and blocking errors (`>=2`).
539
+
540
+ ## 🐞 Fixed
541
+
542
+ - **Global installation diagnostics**: clarified the distinction between advisory doctor warnings and blocking failures.
543
+
544
+ [v1.3.2]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.2
545
+
546
+ ## [v1.3.1] - 2026-08-08
547
+
548
+ ## 🆕 What's New
549
+
550
+ - **Release validation coverage**: hook-runner spawn/timeout/SIGKILL handling with process-group cleanup; scanner fixtures that avoid accidental false positives; doctor `global`, `lite`, and `sandbox` profiles with explicit PASS/WARN/ERROR/SKIP statuses; `run-test.sh` exit semantics; and sandbox validation coverage.
551
+ - Local validation logs are ignored via `logs/` because they are generated diagnostics, not release artifacts or source files.
552
+
553
+ ## [v1.3.0] - 2026-08-06
554
+
555
+ ## 🆕 What's New
556
+
557
+ - **Non-invasive TUI notifications**: hook failures no longer write to `console.error` (TUI pollution) — non-zero exits route to three non-TUI channels: deduped TUI toast (`client.tui.showToast`), structured `client.app.log` entry (service `pantheon-hooks`), and `.pantheon/logs/hooks.log` file append; `PANTHEON_HOOKS_LOG=1` opt-in preserved, routed to log channels only
558
+ - **Delegation lifecycle toasts**: 🚀 `<agent> em execução` / ✅ `<agent> concluiu` with anti-spam (2000ms rate limiter + 3-agents-in-6s aggregation into a single summary toast)
559
+ - **PANTHEON_TOASTS gate**: `off|errors|delegations|all` (default `delegations`), read once at plugin load; gates TUI display only, log channels always write; council toasts included in the default set
560
+ - **Olympians groups**: wave→Olympians naming, 10s detection window, group completion
561
+ - **Hybrid secret blocking**: high-confidence tokens blocked (throw), low-confidence advisory-only; `maskSecret()` redaction applied across hook outputs
562
+ - **Honest delegation telemetry**: `delegation_id`/`task_id`/`duration_ms` fields, `dispatched` status for background agents, JSON round-trip stop hook (no TSV corruption)
563
+ - **Bash exit-code monitoring**: `metadata.exit` → individual error notifications
564
+ - **Talos scope enforcement**: session→agent map, native permission denies, content guard
565
+ - `PANTHEON_HOOKS_LOG` opt-in with ISO timestamps per line
566
+ - Routing disambiguation (project vs system docs), refusal taxonomy, delegation cache telemetry
567
+ - Secret-scan hygiene: wildcard notation for credential references (no literal keys in versioned docs/comments)
568
+ - README: hooks testing docs + `PANTHEON_TOASTS` table with council; AGENTS.md adds "PRs always update the README" convention
569
+
570
+ ## 🐞 Fixed
571
+
572
+ - Council toast idle-flush race condition
573
+
574
+ ## [v1.2.2] - 2026-08-05
575
+
576
+ ## 🆕 What's New
577
+
578
+ - **`pantheon prune`** (#22): legacy cleanup command — XDG-aware config resolution, `--dry-run` default (list only), `--apply` removes stale `opencode.json.bak*` backups (age threshold), `--apply --remove-dirs` for legacy dirs with dead configs; old global `pantheon` installs are suggested for manual `npm uninstall -g pantheon`, never removed (npm-managed)
579
+ - **Release pipeline standardization** (PR #28): single source of truth for version in `scripts/versioning.mjs` (sem-tag aware); CHANGELOG repair (normalized broken `[5.0.0]` heading → `[1.0.0]`, stripped `[v` prefixes across 3.x history, added `[Unreleased]`); `release.yml` redesigned with idempotent gates (skips publish when version already exists); new `scripts/changelog-extract.mjs` and `scripts/version-check.mjs` (+ test suites) so release bodies use real changelog sections; commitlint extended to cover pushes; pre-commit gate added; `cliff.toml` (git-cliff) removed; `docs/RELEASING.md` added; ADR-0007
580
+ - **Test wiring + install docs** (PR #31): `test:security` extended with `test_doctor_layers`; Node test suite wired via `npm run test:node` (`node --test tests/*.mjs` — prune, hook-runner, plugin-log-policy, install/vision contracts, changelog/version checks) into CI; global-install sandbox documented in AGENTS.md / INSTALLATION.md
581
+ - Dead `src/mcp/requirements-mcp-core.txt` catalog duplicate (YAGNI — the installer uses `requirements-mcp.txt`)
582
+
583
+ ## 🐞 Fixed
584
+
585
+ - **Reliable global install** (PR #26): hooks plugin recreated (`pantheon-hooks.ts` + `hook-runner.ts` with stdin JSON protocol, version-proof); MCP install made hermetic (absolute paths); packaging fix (`files[]` += `src/plugins/**`, `scripts/hooks/**`, self-reference removed, pinned `@opencode-ai/plugin` 1.18.11); `import uuid` hotfix in `scripts/mcp_persistence_server.py`
586
+ - **Installer/plugin packaging paths** (PR #31): hooks plugin registered via `resolveInstalledPlugin` so the config points at the INSTALLED package path, never the developer's absolute path (#30); TUI registered with absolute dist path in `tui.json` (#32 — relative path caused NpmInstallFailedError); TUI reads its installed package version via `import.meta.url` (works from any cwd)
587
+ - **Idempotent init** (#19): `subagent_depth` merged into the always-run config merge — run #1 already produces the final config (previously only the SECOND init added it); honest re-run stats (`routing.yml` no longer counted as created every run)
588
+ - **Layered doctor** (#18): B.6 smoke JSON-RPC `initialize` + F venv/deps check with pinned requirements
589
+ - **Pinned MCP dependencies** (#21): exact pins in `src/mcp/requirements-*.txt` (`mcp==1.29.0`, `fastmcp==3.4.6`, `pyyaml==6.0.3`, `sqlite-vec==0.1.9`, `fastembed==0.8.0`, `httpx==0.28.1`) — reproducible venv installs
590
+ - **Silent hooks by default**: audit hooks no longer echo to the console on success (`PANTHEON_HOOKS_LOG=1` re-enables the debug echo; log FILES `sessions.log`/`delegations.log` continue to be written)
591
+
592
+ ## [v1.2.1] - 2026-08-03
593
+
594
+ ## 🆕 What's New
595
+
596
+ - **Model routing presets + interactive picker**: 4 presets (go-deepseek, go-premium, go-fast, go-free), zero-mutation default (injects only when `active-preset.json` exists), `set-tier` CLI in `bin/pantheon-init.mjs` with API-key fail-fast, interactive picker in `scripts/install/model-picker.mjs` (atomic write + .bak), `validate-routing.mjs` preset validation, packaging fix so `src/pantheon/**` ships in the tarball
597
+ - 4 new provider families — go-claude (Anthropic), go-openai, go-olympus, go-muses presets + `CAPABILITY_TABLE` (+11 entries: glm-5.1/5.2, kimi-k2.6, qwen3.7-max/plus, minimax-m2.7/m2.5, bare deepseek-v4-pro/flash, big-pickle, nemotron-3-ultra-free, north-mini-code-free)
598
+ - **Vision routing**: per-turn multimodal fallback for image turns (`vision:` key per preset, `chat.message` hook), later evolved to native gateway vision (mimo-v2.5) with MCP-tool fallback, image-history normalization, description cache (sha256, TTL 30min) + intent-calibrated prompts, temp-image dedup/LRU
599
+ - Canonical `pantheon-vision` MCP stdio server (`src/mcp/pantheon_vision_server.py`)
600
+ - TUI: vendored todo-progress + usage-bar (v1.1.0, MIT attribution), active model preset shown in sidebar (30s refresh), OpenCode Go/Zen usage quota tracking (5h/7d/1m dollar windows, `[opencodego]` toml config)
601
+ - **Unified `release.yml`**: single workflow handles beta (PR label) + stable (main push) with version-exists check
602
+ - Secret scanning: fail-closed CI gates (gitleaks + custom scan), pre-commit hooks, secret-scan regression tests
603
+ - docs: model routing presets documented (presets, commands, env vars)
604
+ - Preset lineup refactored 8 → 6: go-deepseek routed via OpenCode Zen, go-fast via OpenCode Go, olympus/muses renamed go-premium/go-free — all presets now via OpenCode/Anthropic/OpenAI providers, `PANTHEON_DEEPSEEK_API_KEY` removed
605
+ - Vision routing consolidated and legacy duplicates removed
606
+ - commitlint: CodeQL auto-fix ignore pattern, body-max-line-length disabled, `security` type allowed, plugin/vision/presets/hooks scopes added; tsconfig dropped path aliases (+ `opencode.d.ts` ambient types)
607
+ - install: pantheon-vision registered, `doctor.mjs` hardened
608
+ - PR template added in English; coverage artifacts gitignored
609
+ - CI workflow triggers synced with base develop; `release.yml` gained `workflow_dispatch` with `pr_number` input
610
+ - Stale release workflows (release-beta.yml / release-stable.yml leftovers) brought back by merge
611
+ - TUI todo-progress bar (redundant with native TODO + sidebar), v1.1.1
612
+ - Duplicate `scripts/scrub_secrets.py` (canonical is `scrub-secrets.py`)
613
+
614
+ ## 🐞 Fixed
615
+
616
+ - Plugin export as function for opencode 1.18.11 API (object export failed to load; hooks.config mutates config in place)
617
+ - Vision pipeline: plugin boot failure (legacy loader), MCP tool ID (`pantheon_vision_vision_describe`), gateway 401 (provider prefix stripped from model ID), temp-file race (age-guarded cleanup, dir never removed), image stripping at source (deepseek-v4-flash declared image-capable), gateway-aware qwen interception, MCP availability verified, refcounted shared temp images, file URLs decoded via `fileURLToPath`, temp image permissions restricted
618
+ - Default vision fallbacks: mimo-v2.5 (multimodal, cheaper) then minimax-m3 (qwen3.7-plus 500 on Go gateway); silent hook logs
619
+ - `import uuid` in `mcp_persistence_server.py` (context_save NameError)
620
+ - commitlint failures + typecheck narrowing; active preset applied in config hook
621
+ - CI: `workflow_dispatch` treated as stable release; empty env block removed; `NODE_AUTH_TOKEN` restored (OIDC Trusted Publisher not configured on npm); `github_pat_` self-match in secret scan; fast-uri upgraded to patched version
622
+ - Security: hardcoded provider credentials removed, preset error logging sanitized (CodeQL), dist artifacts untracked
623
+ - install: project MCP commands point at real venv
624
+
625
+ [v1.2.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.2.1
626
+
627
+ ## [v1.2.0] - 2026-07-30
628
+
629
+ ## 🆕 What's New
630
+
631
+ - **Fallback chains + auto CI retry**: per-agent fallback chains (hermes→talos→athena, apollo→athena→hermes, etc.), CI retry 1 → 2 with exponential backoff + fallback agent, token tracking in `subtask_summary`, `fallback_chains` section in routing.yml
632
+ - Zeus Fusion-style delegation enforced — `edit:deny`, `bash:deny`, never touches files
633
+ - Persistence performance: index on (namespace, expires_at) — O(n)→O(log n) TTL queries, `kv_stats` tool, opportunistic auto-purge (>500 entries), FTS soft-delete trigger (fixes phantom results), `re.escape()` query safety, `kv_delete_namespace` bulk cleanup
634
+ - **Context checkpoint tools**: `context_save`, `context_get`, `context_list`, `context_stats` — session-scoped state in `checkpoint:{slug}` namespace, auto-TTL 4h, replaces file-based `checkpoint_session.py`
635
+ - New release system: beta from PR label (release-beta.yml), stable from main push (release-stable.yml)
636
+ - docs: `RELEASE.md` — beta from PR label, stable from main push
637
+ - **Slash commands consolidated 16 → 5** — kept `/pantheon`, `/audit`, `/deepwork`, `/optimize`, `/consolidate`; deleted 11 (cancel, focus, forget, install, reflect, remember, search, sketch, status, update, verify) with Apollo audit verifying alternative coverage (ADR-006)
638
+ - Removed redundant model configs — agents inherit default deepseek-v4-flash
639
+ - Persistence docs updated for new tools and auto-purge behavior
640
+ - commitlint scopes completed; auto-release skipped when version already exists
641
+
642
+ ## 🐞 Fixed
643
+
644
+ - Council fixes: UUID session isolation in context checkpoints, pre-compaction state save trigger, flash summary quality floor (<10 chars → fallback to Zeus), agents recall `context_get(slug, 'latest')` on startup
645
+ - CI: push triggers removed — validation workflows (CI, commitlint, CodeQL, hotfix, docs) now run on `pull_request` only, eliminating perma-pending duplicate checks
646
+
647
+ [v1.2.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.2.0
648
+
649
+ ## [v1.0.0] - 2026-07-24
650
+
651
+ ## 🆕 What's New
652
+
653
+ - **OpenCode-only**: Removed all multi-platform support (Claude Code, Cursor, Windsurf, Cline, Continue.dev, VS Code Copilot). Pantheon v1.0 is exclusively for OpenCode.
654
+ - **Global installation**: `npx pantheon-opencode init` installs agents globally to `~/.config/opencode/agents/`. Optional `--project` flag for project-local install.
655
+ - **Background subagents**: Native OpenCode `task(background=true)` + `task_status()` delegation. Max 5 concurrent subagents. Requires `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true`.
656
+ - **Shared instructions**: Behavioral rules moved to `.instructions.md` files loaded via `instructions/*.instructions.md`. Eliminated duplicate rules between agents and instructions.
657
+ - **TUI sidebar plugin**: Custom sidebar showing Pantheon version, sessions, commands, agents, config, and memory stats.
658
+ - **Agent routing optimized**: Zeus routing decision tree prohibits `general`/`explore` subagent types. Each domain maps to a specialist.
659
+ - Instructions tokens reduced 10.3k → 7.5k (-18%)
660
+ - Zeus.md reduced 431 → 144 lines
661
+ - Skills reduced to 14 (from 40), with merged content
662
+ - `skills-lock.json` regenerated (40 → 14 entries)
663
+ - 6 platform-specific installers (claude, cline, continue, copilot, cursor, windsurf)
664
+ - 6 platform-specific docs files
665
+ - Legacy scripts: `pantheon-install.mjs`, `pantheon-update.mjs`
666
+ - `platform/opencode/agents/` (agents now in `src/agents/`)
667
+ - `auto-continue-template.md`
668
+ - `checkpoint-standards.instructions.md`
669
+ - Updated command list: 14 → 11 commands
670
+ - Added: `/pantheon-bg`, `/pantheon-doc`
671
+ - Removed: install, update, cancel, sketch, consolidate
672
+
673
+ [v1.0.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.0
674
+
675
+ ## [v1.1.1] - 2026-07-30
676
+
677
+ ## 🆕 What's New
678
+
679
+ - New release system — beta releases from PR labels, stable from main push (auto-release and beta-release workflows unified)
680
+ - Interactive TUI mode for installer (Fases 1+2) — redesigned sidebar with context progress bar, live session data via events + API
681
+ - Session-scoped context checkpoints in persistence (index, stats, auto-purge, `delete_namespace`); fallback chains, auto CI retry (2x), token tracking
682
+ - Slash commands consolidated from 16 to 5; redundant model configs removed (agents inherit the default model)
683
+
684
+ ## 🐞 Fixed
685
+
686
+ - Council: UUID session isolation in context checkpoints, pre-compaction state save, flash summary quality floor, agents recall `context_get(slug, 'latest')` on startup
687
+ - TUI plugin/CI: OpenCode crash from missing plugin deps, version detection with git fallback, commitlint scopes, workflow YAML/MCP path repairs; `datetime.UTC` → `timezone.utc` for Python < 3.11
688
+
689
+ [v1.1.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.1.1
690
+
691
+ ## [v1.1.0] - 2026-07-26
692
+
693
+ ## 🆕 What's New
694
+
695
+ - Council synthesis Fase 1+2 — Modo Desempate com Evidência + BackgroundJobBoard (#2)
696
+ - Beta release workflow added (from develop)
697
+
698
+ [v1.1.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.1.0
699
+
700
+ ## [v1.0.7] - 2026-07-26
701
+
702
+ ## 🐞 Fixed
703
+
704
+ - Installer: fixed `writeFileSync` not defined error
705
+
706
+ [v1.0.7]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.7
707
+
708
+ ## [v1.0.6] - 2026-07-26
709
+
710
+ ## 🆕 What's New
711
+
712
+ - 7 new skills (codemap, simplify, reflect, worktrees, verification-planning, loop-engineering, clonedeps) + 7 matching commands; `background_subagents` enabled by default in canonical config
713
+ - Release pipeline: quality gates, tag creation, pre-release, hotfix support
714
+ - CI simplified from 10 to 6 workflows; agent/skill restructuring — 12 redundant instructions removed, unused commands dropped, gaia archived then restored
715
+
716
+ ## 🐞 Fixed
717
+
718
+ - CI/commitlint config (YAML syntax, header-max-length, ignores function, scopes); 45 stale references cleaned across 18 files; invalid `opencode.json` fields removed; installer copies `routing.yml`; YAML frontmatter regenerated for 9 agents
719
+
720
+ [v1.0.6]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.6
721
+
722
+ ## [v1.0.5] - 2026-07-26
723
+
724
+ ## 🐞 Fixed
725
+
726
+ - CI auto-release with OIDC trusted publisher + npm v12 (Node 22 upgrade, clean publish)
727
+ - `doctor.mjs` paths + simplified `prepublishOnly`
728
+
729
+ [v1.0.5]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.5
730
+
731
+ ## [v1.0.2] - 2026-07-25
732
+
733
+ ## 🆕 What's New
734
+
735
+ - TUI plugin: copy logic, stale skill cleanup, `tui.json` dedup; advanced plugin with version detection and 14 commands
736
+ - Agents migrated from deprecated `tools:` to OpenCode `permission:` model; legacy multi-platform tests removed (OpenCode-only conformance); docs modernized (OpenCode-only, unified commands)
737
+
738
+ ## 🐞 Fixed
739
+
740
+ - Hardcoded version fallback replaced with package.json version; routing aligned with actual skills (vscode platform removed)
741
+
742
+ [v1.0.2]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.2
743
+
744
+ ## [v1.0.1] - 2026-07-24
745
+
746
+ ## 🆕 What's New
747
+
748
+ - Installer: unified setup flow, removed lifecycle install, fixed entry points
749
+
750
+ [v1.0.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.1
751
+
752
+ ## [v3.19.2] - 2026-07-21
753
+
754
+ ## 🆕 What's New
755
+
756
+ - `_pantheon_paths.py` — shared path resolution (`PANTHEON_HOME`, `PANTHEON_PROJECT`)
757
+ - `pantheon-persistence` MCP — KV store with SQLite FTS5, TTL, namespaces, 6 tools
758
+ - `pantheon-memory` rewritten — sqlite-vec + fastembed (ONNX, ~50MB) replaces chromadb + torch (~1.4GB)
759
+ - Hybrid semantic search: vector cosine + FTS5 BM25 via RRF fusion
760
+ - `.pantheon/mcp-registry.yml` — canonical MCP registry + auto-propagation
761
+ - Simplified installer: `install:lite` (agents only), `install:full` (everything), `install:runtime` (MCP infra)
762
+ - `scripts/install/venv.mjs` — auto .venv creation + pip install of lightweight deps
763
+ - `scripts/install/health-check.mjs` — 6 post-install validations
764
+ - `scripts/install/migrate.mjs` — upgrade path v3.10 → v3.18 → v3.19.0 → v3.19.2
765
+ - MCP servers patched for global install (no more `__file__.parent.parent`)
766
+ - **Dependencies reduced from ~1.4GB to ~50MB** — removed chromadb, sentence-transformers, torch
767
+ - `memory_mcp_server.py`: 1,344→584 lines, 14→6 tools (memory_store, memory_search, memory_recall, memory_forget, memory_list, memory_stats)
768
+ - `routing.yml`: 1,102→482 lines (-56%), deleted 22 dead handoffs, routing_matrix
769
+ - `internet-search` skill: 519→130 lines, tool-agnostic (context7/websearch/webfetch)
770
+ - Memory Protocol: shared `instructions/memory-protocol.instructions.md`, 14 agents with 2-4 line overrides
771
+ - Agent YAML frontmatter fixed across all 14 agents (broken `...` separators, skills indent)
772
+ - All platform configs updated with persistence MCP entries
773
+ - `opencode.json` generated with correct deploy paths (cwd = deploy target)
774
+ - chromadb + sentence-transformers + torch (~1.4GB dependency chain)
775
+ - `scripts/requirements-mcp-memory.txt`
776
+ - 9 duplicate instructions (now skills on-demand)
777
+ - `multi-model-routing` from prometheus (deleted skill)
778
+
779
+ ## 🐞 Fixed
780
+
781
+ - 157 dangling instruction references across 6 platforms
782
+ - YAML frontmatter in all 14 agents (broken by previous sed edits)
783
+ - OpenCode platform detection (was missing `platform/opencode/opencode.json`)
784
+
785
+ ## [v3.19.0] - 2026-07-21
786
+
787
+ ## 🆕 What's New
788
+
789
+ - Memory Persistence Protocol (ADR-006) — agents now have mandatory `memory_recall()` pre-work (top_k=3, skip if score<0.3) and `memory_store()` post-work (2 lines max, importance 0.4-0.9)
790
+ - Session-end auto-save script (`.pantheon/code-mode/session-end-save.py`) — exports Vector DB entries with importance ≥0.4 at session close (ChromaDB direct read + client-side filtering)
791
+ - `session_end_save` handoff in routing.yml for Mnemosyne session close trigger
792
+ - `tools.agent: true` for Apollo, Talos, and Gaia canonical agent files
793
+ - Recall Conflict Protocol (ADR-006 v1.1) — 5 rules for when recalled memory conflicts with current action (log, prefer freshness, escalate ADRs, score threshold, audit trail)
794
+ - New skills synced: `file-prompts`, `plan-architecture`, `streaming-patterns`, `token-audit`, `wisdom-accumulation`
795
+ - All 14 agent files updated with `## 🧠 Memory Protocol` section (both canonical `/agents/` and OpenCode `.config/opencode/agents/`)
796
+ - Zeus now auto-stores `memory_store()` directly on agent return — no Mnemosyne middleman
797
+ - Steps optimization in opencode.json: zeus(25→35), aphrodite(25→30), hermes(20→25), themis(20→25), demeter(20→25), mnemosyne(10→8), iris(15→10), nyx(15→12), athena(15→12)
798
+ - README.md badges updated to v3.19.0, skills count 43→40
799
+ - 9 duplicate instructions deleted — now only skills on-demand (tdd-standards, code-quality-checks, code-review-standards, database-standards, artifact-protocol, mcp-security, memory-bank-standards, infra-standards, auto-continue-safety-gates)
800
+ - Always-loaded instructions: 19→10 files (~5.7K→~3K tokens/session, -47%)
801
+ - Agent platform copies updated across 6 platforms (Claude, Cursor, Windsurf, Continue, Cline — .clinerules)
802
+ - `routing.yml` artifact paths: `docs/memory-bank/`→`.pantheon/memory-bank/`
803
+ - 5 orphan skills linked to agents: wisdom-accumulation→zeus, plan-architecture→athena, file-prompts+streaming-patterns→hermes, token-audit→nyx
804
+ - `prompts/orchestrate-with-zeus`: fixed 3 instances of ATHENA→APHRODITE for frontend delegation
805
+ - `prompts/focus.prompt.md`: stale `/memories/session/` path → `.pantheon/memory-bank/.tmp/`
806
+ - `prompts/mirrords.prompt.md`: tool names updated to current API
807
+ - `commands/pantheon-install.md`: stale doc ref and platform count fixed
808
+ - `commands/pantheon-update.md`: example version bumped to 3.19.0
809
+ - `pyproject.toml`: removed all backend/fastapi/alembic dependencies (no longer maintained)
810
+ - `platform/forge.json`: version bumped to 3.19.0
811
+ - `alembic/` — stale DB scaffolding (never completed)
812
+ - `backend/` — stale FastAPI database engine (half-finished)
813
+ - `docs/memory-bank/` — stale duplicate (should have been purged in v3.17.0)
814
+ - `docs/TUTORIAL-PLUGIN-PT.md` — Portuguese tutorial for disabled plugin
815
+ - `plugins-disabled/` — stale pantheon-tui-plugin
816
+ - `release_notes.md` — lowercase, redundant with CHANGELOG
817
+ - 4 obsolete skills: `conversational-ai-design`, `multi-model-routing`, `prompt-improver`, `prompt-injection-security`
818
+ - `__pycache__` and `.mypy_cache` build artifacts
819
+ - Full documentation audit: 10+ doc files cleaned, versions reconciled, stale content purged
820
+ - Memory Persistence Protocol documented as ADR-006
821
+ - `.config/opencode/` fully synced from canonical Pantheon (14 agents + 10 instructions)
822
+
823
+ ## 🐞 Fixed
824
+
825
+ - 33 dangling `docs/memory-bank/` references fixed across platform configs (`.claude/`, `.cursor/`, `.windsurf/`, `.continue/`, `.clinerules/`, `.github/`, `memories/`, `platform/`, `template/`, `.opencode/skills/`, `.tests/`)
826
+ - `.pantheon/memory-bank/.tmp/` added to `.gitignore`
827
+ - `docs/RELEASING.md` version reference — v3.8.4 → v3.19.0
828
+ - `docs/UPGRADING.md` — removed obsolete Agora migration guide, added v3.19 Memory Protocol section
829
+ - `docs/mcp-recommendations.md` — removed Exa MCP references (removed in v3.15.0)
830
+ - `docs/platforms/opencode.md` — removed stale "agora" references
831
+ - `docs/AGENT-MCP.md` — removed Exa reference
832
+ - CHANGELOG duplicate v3.9.0 entries removed
833
+ - `template/CLAUDE.md` — `agora`→`zeus` for council dispatch
834
+ - `.github/instructions/auto-continue-safety-gates`: "Agora Council"→"Council"
835
+ - `.tests/test-all.sh`: removed stale chiron.agent.md test
836
+ - Skills count reconciled across all docs: 40
837
+ - `docs/INDEX.md` skills count: 45→40
838
+
839
+ ## [v3.18.0] - 2026-07-15
840
+
841
+ (no changes)
842
+
843
+ ## [v3.17.1] - 2026-07-14
844
+
845
+ ## 🆕 What's New
846
+
847
+ - Inline compression triggers (C8/C9/C11): implementation agents (Hermes, Aphrodite, Demeter, Hephaestus, Prometheus) now declare `context-compression` skill and have a concise `## Inline Compression` section covering CRITICAL/HIGH subtask summaries, pre-delegation large blocks, and phase boundaries/handoffs
848
+ - `tests/test_code_mode_args.py`: TDD coverage for the new `args` parameter forwarding
849
+ - `context-compression` SKILL.md: real C8–C11 trigger definitions added; redundant C10 noted as OpenCode-native cross-reference; L1/L3 contradiction resolved (L1 = inline compress via MCP, L2 = batch promotion at gates)
850
+ - Agent `.md` files: `context-compression` added to `skills:` frontmatter for all 5 implementation agents
851
+ - `instructions/artifact-protocol.instructions.md`: scrub documented as automatic via MCP layer
852
+
853
+ ## 🐞 Fixed
854
+
855
+ - `execute_code_script` now forwards CLI arguments to subprocess — `compress-inline.py` is reachable via MCP (fixes argparse code 2 error)
856
+ - Unified scrubber: 3 divergent implementations consolidated into single canonical `scripts/scrub-secrets.py`, imported by both `memory_mcp_server.py` and `compress-inline.py` via `importlib` (hyphenated filename cannot be statically imported)
857
+ - OpenAI key regex standardized across all consumers to `sk-[A-Za-z0-9\-_]{10,}`
858
+
859
+ ## [v3.17.0] - 2026-07-11
860
+
861
+ ## 🆕 What's New
862
+
863
+ - Pantheon TUI Plugin overhaul: sidebar modernization, clickable commands, dynamic Python version
864
+ - MCP Config section in TUI: list active plugins, MCP status, auto-compaction toggle
865
+ - Memory section in TUI: show memory entries count
866
+ - MCP templates for 6 platforms (Claude, Cline, Cursor, Windsurf, Continue, Copilot)
867
+ - `scripts/init-pantheon-mcp.sh` — automated MCP setup
868
+ - `docs/INSTALLATION.md` — MCP installation guide
869
+ - `docs/MIGRATION-MEMORY-BANK.md` — migration guide for memory bank to .pantheon/
870
+ - Memory bank moved from `docs/memory-bank/` → `.pantheon/memory-bank/` (fully local, gitignored)
871
+ - `.pantheon/` is now the standard for all local/generated artifacts
872
+ - OpenCode MCP format fixed: command as array + cwd
873
+ - All platform templates updated with pantheon-code-mode MCP
874
+ - `.mcp.json` moved from root to `platform/mcp/mcp-template.json`
875
+ - Version synchronization: `versioning.mjs` now handles all manifests (package.json, plugin.json, pyproject.toml, forge.json)
876
+ - Updated 65+ source files with new .pantheon/ paths
877
+ - `docs/memory-bank/` from git history (fully purged via filter-repo)
878
+
879
+ ## 🐞 Fixed
880
+
881
+ - TUI plugin path in tui.json (was pointing to non-existent file)
882
+ - OpenCode MCP config format (command must be array + cwd)
883
+ - Release pipeline: version mismatch between package.json and plugin.json
884
+ - `mcp_resources_server.py` memory-bank path resolution
885
+
886
+ ## [v3.16.0] - 2026-07-10
887
+
888
+ ## 🆕 What's New
889
+
890
+ - MCP Resources Support: pantheon://agents, skills, routing, deepwork, memory-bank
891
+ - Code Mode MCP Adapter: confined script execution from .pantheon/code-mode/
892
+ - YOLO Mode / Auto-Approve: permission tiers for trusted MCP servers
893
+ - Reasoning Effort per Agent: high / medium / low in routing.yml + 14 agent frontmatter
894
+ - Unified Memory MCP Server: 14 tools, ChromaDB + sentence-transformers, 79 tests
895
+ - Knowledge graph: memory_link + memory_traverse (BFS traversal)
896
+ - RTK-style output filters: dedup, group, truncate on memory_store
897
+ - Freshness decay (30-day half-life) + importance boost + claim verification
898
+ - Agent MCP Integration: all 14 agents with MCP Capabilities + routing.yml capabilities
899
+ - Documentation: MCP.md (238l), MEMORY.md (471l), AGENT-MCP.md (197l)
900
+ - Skills audit: 5 orphan skills deleted, quality-gate skill created
901
+ - Platform sync: pantheon-memory added as Tier 1 MCP in install-mcp.mjs
902
+ - docs/mcp-recommendations.md expanded to 422 lines (browser MCPs, infra MCPs, 3-7 rule)
903
+ - memory_cleanup: 3-char minimum prefix guard
904
+ - memory_export: restricted to ~/.pantheon/exports/ with path traversal check
905
+ - Content size limit: 100KB max, 500 char category
906
+
907
+ ## 🐞 Fixed
908
+
909
+ - memory_sessions dead code (always returned empty results)
910
+ - install-mcp.mjs filename: dash → underscore
911
+ - .github/plugin/plugin.json: removed deleted streaming-patterns reference
912
+ - memory_mcp_server.py: F821 undefined name, missing except block
913
+
914
+ ## [v3.15.0] - 2026-06-26
915
+
916
+ ## 🆕 What's New
917
+
918
+ - **Level 3 Vector Memory:** 5 scripts (`schema.py`, `index.py`, `query.py`, `rebuild.py`, `cli.py`) with dual indexing (FTS5 + optional sqlite-vec embeddings), 8/8 tests passing, 120 entries indexed from memory bank
919
+ - **Two-Tier Persistence Model:** Tier 1 auto-index (`quick_index()`) saves background agent results instantly into Vector Memory; Tier 2 full compression (ZZ artifact + memory bank update) only on Themis APPROVED
920
+ - **Inline quick_index():** New function in `index.py` indexes subtask_summary dicts directly (no file scanning), idempotent via content_hash, auto-tags from keywords
921
+ - **Context Compression Trigger:** Section in `zeus.agent.md` with test script `scripts/test-context-compression.sh` — validates all 5 checks (prerequisites, mocks, structure, secrets, output)
922
+ - **Background Agent Dispatch:** Pattern documented in `zeus.agent.md` and `orchestration-workflow/SKILL.md` — OpenCode v1.16.2+ background agents with auto-persist
923
+ - **Auto-Continue Canonical Name:** "relentless" → "auto-continue" across 43 files (skills, commands, agent files, platform copies)
924
+ - **Tools Format:** 14 agents converted from YAML array (`- tool`) to object format (`tool: true`)
925
+ - **quick_index path fix:** Scripts now add `scripts/` (parent of vector_memory package) to sys.path instead of their own directory
926
+ - **Platform Skill Directories:** 211 stale skill files removed from 6 platform dirs (`.clinerules/skills/`, `.claude/skills/`, `.cursor/skills/`, `.windsurf/skills/`, `.continue/skills/`, `platform/*/`) — OpenCode v1.16.0+ discovers skills natively from `~/.config/opencode/skills/`
927
+ - **Exa MCP Server:** `exa-mcp-server` removed from `opencode.json` (redundant with OpenCode native websearch)
928
+ - **`vector_memory` config key:** Removed from both project and global `opencode.json` (not recognized by OpenCode v1.17.x)
929
+ - **NOTE0010:** Pantheon v3 Roadmap — 5-phase vision from FTS5 to Plugin Architecture
930
+ - **TASK-016:** Level 3 Implementation Plan — 24 tasks across 5 phases
931
+ - **01-active-context.md:** Updated with deepwork v3.15 changes and Two-Tier model
932
+
933
+ ## 🐞 Fixed
934
+
935
+ - **Import Path in Vector Memory Scripts:** `sys.path` now correctly points to parent of `vector_memory/` package, enabling both direct execution and `python -m` usage
936
+
937
+ ## [v3.14.1] - 2026-06-21
938
+
939
+ ## 🆕 What's New
940
+
941
+ - **Pantheon-Context MCP Experiment:** Removed entire `scripts/pantheon-context-mcp/` directory (server.py, scoring.py, summarizer.py, tests — 12 files, ~1,200 lines)
942
+ - **Stale Agent References:** Stripped `pantheon-context` tool references from all 14 agent files, `.mcp.json`, `opencode.json`, `ROADMAP.md`
943
+ - **Auto-Release CI:** Removed `.github/workflows/auto-release.yml` (triggered broken v3.14.0 release on every push to main)
944
+ - **TUI Sidebar Plugin:** Rewrote from flat file to npm-style directory (`plugins/pantheon-tui/` with `index.tsx`, `package.json`, `dist/tui.tsx`). New features: real context usage bar (color thresholds 70%/90%), collapsible command guide (16 `/pantheon` commands), manual compress button, Python version display, collapsible agent registry
945
+
946
+ ## 🐞 Fixed
947
+
948
+ - **Install Script:** `scripts/install/opencode.mjs` now correctly copies npm-style plugin directory and registers in `tui.json` (not `opencode.json` — TUI plugins use separate registration)
949
+ - **CI Release Pipeline:** Added `dry_run` input to manual release workflow, removed auto-merge from release PRs, fixed duplicate steps
950
+
951
+ ## [v3.14.0] - 2026-06-20
952
+
953
+ ## 🆕 What's New
954
+
955
+ - **Codebase Audit:** Comprehensive 5-agent scan — 48 issues found, all resolved
956
+ - **Mermaid Diagrams:** 5 new diagrams — TDD Cycle (stateDiagram-v2), Artifact Lifecycle (flowchart), Council Synthesis (sequenceDiagram), Architecture (flowchart), Delegation Flow (flowchart)
957
+ - **Python Infrastructure:** Added `[build-system]`, project deps (FastAPI 0.110+, SQLAlchemy 2.0+, Alembic 1.13+, Pydantic 2.7+), ruff expanded to 11 rule groups, coverage (`fail_under=80`), mypy strict
958
+ - **Alembic Scaffolding:** `alembic.ini` with env var interpolation, async `env.py`, Mako template, models base with `AsyncAttrs` + `TimestampMixin`
959
+ - **SQLAlchemy 2.0 Mixins:** `UUIDPrimaryKeyMixin`, `IntegerPrimaryKeyMixin`, `SoftDeleteMixin`, `ActivatableMixin`
960
+ - **Frontend Scaffolding:** `biome.json` (1.9.4), `tsconfig.json` (strict mode, ES2022), npm scripts (test, lint, typecheck, build, dev)
961
+ - **Docker Infrastructure:** Multi-stage Dockerfile (build + runtime, non-root), docker-compose.yml (PostgreSQL 16 + API), `.env.example`
962
+ - **Database Standards:** Async SQLAlchemy 2.0 patterns, connection pooling, migration testing, disaster recovery + 2 Mermaid diagrams
963
+ - **Documentation Quality:** "When NOT to Use" sections on all 7 main agents, English-only throughout, ROADMAP.md updated
964
+
965
+ ## 🐞 Fixed
966
+
967
+ - **Dead Agent Purge:** Removed ~150+ references to Echo, Chiron, Argus, Agora across 67+ files (agents, platforms, instructions, skills)
968
+ - **Portuguese→English:** `docs/platforms/README.md` fully translated, `agents/prometheus.agent.md` mixed-language fixed
969
+ - **QUICKSTART.md:** Removed duplicate Nyx entry in agent table
970
+ - **`00-project.md`:** Fixed Argus in architecture diagram, corrected skill path, fixed Portuguese text
971
+ - **Prometheus Self-Contradiction:** Fixed "MUST NOT deploy (that's @prometheus)" — copy-paste bug from Chiron merge
972
+ - **Hephaestus Echo Dead Code:** Removed 25-line Echo section that was copy-pasted verbatim
973
+ - **`seo-config.ts`:** Renamed to `.md` (was Markdown disguised as TypeScript)
974
+ - **`agent-return-format.instructions.md`:** Fixed Agora reference in artifact table
975
+ - **`skills/README.md`:** Count corrected from 37→42, stale Chiron/Echo refs updated
976
+
977
+ ## [v3.13.0] - 2026-06-20
978
+
979
+ ## 🆕 What's New
980
+
981
+ - **Level 2 Context Compression** — priority scoring engine (5 deterministic dimensions: Impact, Risk, Novelty, Blockers, Downstream relevance), semantic summarization templates per agent-pair, budget allocation (100-line cap, priority-greedy), cross-reference mechanism (D/E/M/C IDs with auto-generated `_xref/index.md`), ZZ artifact format for phase-to-phase context injection, `context-compression` skill (Level 2)
982
+ - **New prompts**: `prompts/semantic-summarize.md` for agent-pair aware semantic summarization
983
+ - **New scripts**: `scripts/scrub-secrets.py` for security scrubbing of compressed content
984
+ - **Missing infra**: `docs/memory-bank/_xref/_next_id.json` with full key names (decisions/entities/milestones/tasks)
985
+ - **Safety preflight**: `can_compress()` guard prevents compression of in-progress/escalated/blocked/NEEDS_REVISION artifacts
986
+ - **Atomic write protocol**: .tmp + fsync + rename with validation for corruption prevention
987
+ - **14 agent `.agent.md` files** — stripped non-OpenCode frontmatter (`tools:`, `handoffs:`, `agents:`, `color:`, `hidden:`, `mcpServers:`). All agents now use only OpenCode-recognized fields
988
+ - **Agent count unified** — all files consistently say "14 agents" (removed chiron, echo, argus from counts)
989
+ - **`instructions/artifact-protocol.instructions.md`** — updated with ZZ artifact format, compression lifecycle, atomic write protocol, budget guardrails
990
+ - **`instructions/memory-bank-standards.instructions.md`** — updated with compression and recovery section, cross-reference docs
991
+ - **Context compression** — Level 1 replaced entirely by Level 2 (priority-scored summaries with downstream-aware field masks)
992
+ - **All 7 platforms regenerated** — commands (pantheon-status, ping) and agents synced across OpenCode, Claude Code, Cursor, Windsurf, Cline, Continue, Copilot
993
+ - **TUI Plugin** — moved to `plugins-disabled/`, removed from OpenCode config (temporary removal)
994
+ - **`packages/tui-plugin/`** — source files removed from active tree
995
+ - **`plugins/pantheon-tui-plugin/`** — secondary plugin source removed
996
+ - **`platform/opencode/.opencode/package.json`** — stale TUI config removed
997
+ - **Stale agent references** — chiron, echo, argus, agora references cleaned from 40+ files across platforms, docs, tests, commands
998
+ - **Missing skill references** — `code-discipline`, `architecture-diagrams` removed from agent references (never existed as skills)
999
+ - **Platform Conformance Matrix** — 6/6 plataformas passando com 0 falhas
1000
+ - **CI validate** — passing
1001
+ - **Sync Check** — passing
1002
+ - **Auto Release** — published at v3.13.0
1003
+
1004
+ ## 🐞 Fixed
1005
+
1006
+ - **CHANGELOG.md** — removed 4 duplicate v3.12.1 entries and empty v3.12.2 section
1007
+ - **Frontmatter consistency** — all 14 agents now parse cleanly with OpenCode YAML frontmatter
1008
+ - **Cross-platform agent count** — 14 everywhere (was inconsistent: some files said 18, some said 14)
1009
+ - **`.opencode/plugins/pantheon-hooks.ts`** — local OpenCode plugin que executa os 10 hooks de validação via tool.execute.before/after/event
1010
+ - **`sync-platform.sh`** — step 3.6 não synca mais TUI plugin; step 3.7 synca o pantheon-hooks.ts globalmente
1011
+ - **`.gitignore`** — `.opencode/plugins/` agora versionado; `platform/opencode/.opencode/{commands,skills}` ignorados
1012
+ - **`opencode-hooks-plugin` npm** — removido do config (nunca foi publicado como pacote npm)
1013
+ - **`@agora` redirects** — substituídos por `@zeus` em 5 platform files
1014
+ - **Stale docs references** — Chiron, Echo removidos de README.md, QUICKSTART.md, platforms docs; TUI marcado como desativado; hooks docs atualizados de `.github/hooks/` para `scripts/hooks/`; skill count corrigido para 42
1015
+ - **Canonical skills** — referências a Chiron em agent-coordination e database-optimization atualizadas para "Model Selection" e "model tier"
1016
+ - **`tools:` field restored to all 14 canonical agents** — re-adicionado de v3.12.2 para o sync engine + conformance tests validarem toolMap keys
1017
+ - **Stale skills removed** — `relentless-mode`, `review-work` (sem fonte canônica) removidos de .clinerules/skills, platform/claude, platform/cline, platform/continue, platform/cursor
1018
+ - **Stale commands removed** — `cancel-relentless`, `token-audit` (sem fonte canônica em commands/) removidos de .clinerules/commands, .continue/commands, .cursor/commands e platform sources
1019
+ - **wisdom-accumulation cleaned from platforms** — nenhum agente referenciava o skill; removido de platform dirs via sync --clean
1020
+ - **All platforms sync:check** — 0 stale files across 7 platforms
1021
+
1022
+ ## [v3.12.0] - 2026-06
1023
+
1024
+ [compare changes](https://github.com/ils15/pantheon/compare/v3.11.0...v3.12.0)
1025
+
1026
+ ## 🆕 What's New
1027
+
1028
+ - **agents:** Add anti-stall resilience and orchestration improvements ([7a61b69](https://github.com/ils15/pantheon/commit/7a61b69))
1029
+ - **agents:** Add /pantheon-status command with version badge + agent registry ([984ec65](https://github.com/ils15/pantheon/commit/984ec65))
1030
+ - **platform:** Add Pantheon TUI sidebar plugin for OpenCode ([09253c1](https://github.com/ils15/pantheon/commit/09253c1))
1031
+ - **release:** Sync version to v3.11.0 ([1a9fb64](https://github.com/ils15/pantheon/commit/1a9fb64))
1032
+
1033
+ ## 🐞 Fixed
1034
+
1035
+ - **ci:** Sync platform files and add mcp-security skill to pass CI ([a27a245](https://github.com/ils15/pantheon/commit/a27a245))
1036
+
1037
+ ## [v3.9.0] - 2026-05-28
1038
+
1039
+ [compare changes](https://github.com/ils15/pantheon/compare/v3.8.4...v3.9.0)
1040
+
1041
+ ## 🆕 What's New
1042
+
1043
+ - Setup changelogen + git-cliff for auto-releases ([ce4ee22](https://github.com/ils15/pantheon/commit/ce4ee22))
1044
+ - Cleanup commands, fix subtask agent, add Context7 tools, improve sync script ([da6ed7c](https://github.com/ils15/pantheon/commit/da6ed7c))
1045
+
1046
+ ## 🐞 Fixed
1047
+
1048
+ - Add missing closing brace for github configuration in opencode.json ([a63c522](https://github.com/ils15/pantheon/commit/a63c522))
1049
+ - Address PR review sync and mapping feedback ([c550049](https://github.com/ils15/pantheon/commit/c550049))
1050
+ - Sync version to 3.8.4, fix versioning.mjs apply bug, add version check script ([141a6b1](https://github.com/ils15/pantheon/commit/141a6b1))
1051
+ - Add CHANGELOG entry for v3.8.4 to fix CI validate failure ([58cc0f5](https://github.com/ils15/pantheon/commit/58cc0f5))
1052
+ - **ci:** Auto-release cria PR com auto-merge ao invés de push direto pra main ([e4f78c9](https://github.com/ils15/pantheon/commit/e4f78c9))
1053
+
1054
+ [v3.19.0]: https://github.com/ils15/pantheon/compare/v3.18.0...v3.19.0