pantheon-opencode 1.5.0-beta.2 → 1.5.0-beta.20

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 (107) hide show
  1. package/.pantheon/code-mode/manifest.json +21 -0
  2. package/AGENTS.md +14 -63
  3. package/CHANGELOG.md +1260 -0
  4. package/README.md +162 -23
  5. package/README.pt-BR.md +104 -19
  6. package/bin/pantheon-init.mjs +178 -21
  7. package/commands/pantheon.md +1 -35
  8. package/package.json +23 -15
  9. package/plugin.json +1 -1
  10. package/pyproject.toml +62 -0
  11. package/scripts/code_mode_server.py +431 -55
  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 +12 -45
  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 +536 -164
  22. package/scripts/package-evidence.mjs +242 -0
  23. package/scripts/probe-pantheon-cost.mjs +10 -1
  24. package/scripts/release-beta-version.mjs +56 -60
  25. package/scripts/sync-artifacts.mjs +169 -0
  26. package/scripts/sync-tui.mjs +129 -64
  27. package/scripts/test-opencode-v1-v2-sandbox.sh +79 -161
  28. package/scripts/validation-policy.mjs +7 -7
  29. package/scripts/version-check.mjs +113 -108
  30. package/scripts/versioning.mjs +230 -86
  31. package/src/agents/apollo.md +1 -0
  32. package/src/agents/gaia.md +1 -0
  33. package/src/agents/mnemosyne.md +1 -1
  34. package/src/agents/zeus.md +11 -54
  35. package/src/instructions/memory-protocol.instructions.md +6 -3
  36. package/src/instructions/zeus-anti-stall.instructions.md +2 -4
  37. package/src/instructions/zeus-council-synthesis.instructions.md +3 -28
  38. package/src/instructions/zeus-timeout-retry.instructions.md +3 -28
  39. package/src/mcp/code_mode_server.py +431 -55
  40. package/src/mcp/mcp_persistence_server.py +536 -164
  41. package/src/mcp/toon_codec.py +2 -4
  42. package/src/pantheon/background-job-board.ts +47 -5
  43. package/src/pantheon/{delegation-compaction.ts → compaction-context.ts} +10 -100
  44. package/src/pantheon/cost-command.ts +309 -44
  45. package/src/pantheon/delegation-enforce.ts +59 -14
  46. package/src/pantheon/file-persistence-salvage.ts +64 -0
  47. package/src/pantheon/file-persistence.ts +194 -45
  48. package/src/pantheon/goal-loop.ts +1 -1
  49. package/src/pantheon/goal-store.ts +1 -1
  50. package/src/pantheon/idle-continuation.ts +4 -6
  51. package/src/pantheon/model-command.ts +1 -2
  52. package/src/pantheon/native-task-status.ts +139 -0
  53. package/src/pantheon/presets.d.mts +0 -20
  54. package/src/pantheon/presets.mjs +0 -64
  55. package/src/pantheon/session-guard.ts +2 -2
  56. package/src/pantheon/session-id.ts +30 -0
  57. package/src/pantheon/shared-board.ts +37 -0
  58. package/src/pantheon/task-result-guard.ts +106 -0
  59. package/src/pantheon/todo-enforcer.ts +3 -3
  60. package/src/pantheon/tool-ceiling.ts +159 -0
  61. package/src/pantheon/tool-context.ts +23 -0
  62. package/src/pantheon/v2-bridge.ts +1 -4
  63. package/src/plugin-v2.ts +8 -21
  64. package/src/plugin.ts +83 -251
  65. package/src/plugins/pantheon-hooks.ts +51 -0
  66. package/src/plugins/tui/dist/server.d.ts +1 -1
  67. package/src/plugins/tui/dist/server.d.ts.map +1 -1
  68. package/src/plugins/tui/dist/server.js +1 -1
  69. package/src/plugins/tui/dist/server.js.map +1 -1
  70. package/src/plugins/tui/dist/tui.d.ts +261 -77
  71. package/src/plugins/tui/dist/tui.d.ts.map +1 -1
  72. package/src/plugins/tui/dist/tui.js +640 -234
  73. package/src/plugins/tui/dist/tui.js.map +1 -1
  74. package/src/plugins/tui/package-lock.json +2 -2
  75. package/src/plugins/tui/package.json +2 -2
  76. package/src/plugins/tui/src/index.tsx +872 -226
  77. package/src/routing.yml +0 -16
  78. package/src/skills/context-compression/SKILL.md +1 -1
  79. package/scripts/generate-preset-docs.mjs +0 -300
  80. package/scripts/generate-prompts.sh +0 -222
  81. package/scripts/hash_verify.py +0 -192
  82. package/scripts/install/component.mjs +0 -24
  83. package/scripts/install/migrate-config.mjs +0 -302
  84. package/scripts/test-context-compression.sh +0 -169
  85. package/src/pantheon/auto-wake.ts +0 -89
  86. package/src/pantheon/chat-reminders.ts +0 -9
  87. package/src/pantheon/comment-checker.ts +0 -48
  88. package/src/pantheon/compaction-assert.ts +0 -160
  89. package/src/pantheon/cost-tracker.ts +0 -108
  90. package/src/pantheon/delegate-manager.ts +0 -669
  91. package/src/pantheon/delegation-classifier.ts +0 -307
  92. package/src/pantheon/delegation-finalize.ts +0 -374
  93. package/src/pantheon/delegation-notify.ts +0 -212
  94. package/src/pantheon/delegation-toast.ts +0 -73
  95. package/src/pantheon/delegation.ts +0 -1120
  96. package/src/pantheon/dispatch-guard.ts +0 -109
  97. package/src/pantheon/permission-eval.ts +0 -284
  98. package/src/pantheon/preemptive-compact.ts +0 -76
  99. package/src/pantheon/retry-policy.ts +0 -212
  100. package/src/pantheon/step-cap.ts +0 -110
  101. package/src/pantheon/token-opt.ts +0 -781
  102. package/src/pantheon/toon-codec.ts +0 -481
  103. package/src/pantheon/v2-events.ts +0 -131
  104. package/src/pantheon/v2-hooks.ts +0 -287
  105. package/src/pantheon/v2-tool-definitions.ts +0 -331
  106. package/src/pantheon/zeus-delegate-with-retry.ts +0 -406
  107. package/src/plugins/tui/dist/tui.tsx +0 -2605
package/CHANGELOG.md ADDED
@@ -0,0 +1,1260 @@
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.20] - 2026-09-16
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
+ ## 🐞 Fixed
27
+
28
+ - **Fixed — painel Delegations**: children com status `busy` stale (>30min sem
29
+ atualização) agora são classificadas como `completed` (não `running`). O
30
+ opencode mantém entradas `busy` no mapa de status para sessões já concluídas;
31
+ o TUI agora detecta e marca como done.
32
+ ## [v1.5.0-beta.19] - 2026-09-16
33
+
34
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
35
+ move this section to a versioned entry and reset the template below. --&gt;
36
+
37
+ ## 🆕 What's New
38
+
39
+ - **Improved — painel Delegations**: status ausente de children antigas agora é
40
+ `done` (não `running`); grace 60s para sessões recém-criadas; janela de
41
+ recência 24h (filtra histórico); ordenação newest-first; ceiling esconde
42
+ antigos.
43
+ - **Improved — animação**: spinner ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ agora tem timer
44
+ independente (80ms/frame), separado do poll de dados — fluido, não mais
45
+ "travado".
46
+ ## [v1.5.0-beta.18] - 2026-09-16
47
+
48
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
49
+ move this section to a versioned entry and reset the template below. --&gt;
50
+
51
+ ## 🐞 Fixed
52
+
53
+ - **Painel Delegations voltou a funcionar (crítico):** o canal
54
+ `session.children` da TUI chamava a API com a shape v1 (`{ path: { id } }`)
55
+ num cliente **v2** que espera `{ sessionID }`; o placeholder não era
56
+ substituído (`/session/%7BsessionID%7D/children`), o host rejeitava cada
57
+ poll (~181k erros/s) e o painel ficava vazio ("No delegations"). Corrigido
58
+ `safeSessionPath`/`buildChildrenPath` para `{ sessionID }`, removidos os
59
+ `as any` que escondiam o mismatch, + teste de regressão exato. Auditoria
60
+ confirmou que só a TUI (v2) estava errada (o `plugin.ts` usa SDK v1 de
61
+ propósito).
62
+ - **Higiene de testes:** testes que importam o plugin sem isolamento agora
63
+ fazem `chdir` para um projeto temporário antes do import — não criam mais
64
+ entradas no board real (fim dos estados fantasma em desenvolvimento).
65
+
66
+ ## [v1.5.0-beta.17] - 2026-09-15
67
+
68
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
69
+ move this section to a versioned entry and reset the template below. --&gt;
70
+
71
+ ## 🆕 What's New
72
+
73
+ - **Delegação nativa no host:** o motor `pantheon_delegate` foi removido
74
+ (~3,9k linhas) junto com as tools `pantheon_delegate`,
75
+ `pantheon_delegation_read` e `pantheon_delegation_list`; a delegação agora usa
76
+ o **`task()` nativo** do host (child sessions). 16 arquivos de teste obsoletos
77
+ removidos.
78
+ - **TUI — painel Delegations lê a sessão nativa:** o painel passa a derivar de
79
+ `session.children` + `session.status` + md (o arquivo de board deixou de ser
80
+ fonte). Mantidas as cores de status, retenção, ceiling, filtro de sessão e
81
+ guards.
82
+ - **Camada fina preservada:** `task-result-guard` (verified completion de child
83
+ vazio), `native-task-status` e guards de enforcement.
84
+
85
+ ## 🐞 Fixed
86
+
87
+ - **Read-only enforcement re-apontado para sessões nativas:** aplicado no
88
+ público via hook `chat.params` e `hashline_edit` bloqueado para `apollo`/`gaia`,
89
+ fechando o bypass aberto após a remoção do motor de delegação.
90
+ - **Docs/comentários limpos:** referências aos módulos removidos atualizadas,
91
+ incluindo nits de comentário em `tests/pantheon/tui-delegations.test.ts` e
92
+ `src/pantheon/session-id.ts`.
93
+
94
+ ## [v1.5.0-beta.16] - 2026-09-15
95
+
96
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
97
+ move this section to a versioned entry and reset the template below. --&gt;
98
+
99
+ ## 🆕 What's New
100
+
101
+ - **Modernização CI/supply-chain:** 22 actions SHA-pinadas; `gitleaks-action` v3
102
+ (fix crítico — a v2 morria com Node 20 em 2026-09-16) com CLI 8.30.1; cache
103
+ npm/pip; Dependabot; CodeQL `+python` e `codeql-config`; permissões reduzidas
104
+ no `docs.yml`; job `version-check` fundido no `validate`; `upload-artifact` v7
105
+ e `download-artifact` v8.
106
+ - **Lean:** ~17 módulos mortos removidos de `src/pantheon/`, docs/scripts
107
+ obsoletos, `teste/`/`testes/`, `Dockerfile`/`docker-compose` (de outro projeto)
108
+ e caches; ~38% dos arquivos de teste removidos/consolidados; testes mínimos
109
+ readicionados para os módulos vivos (tool-ceiling, native-probe).
110
+ - **Instructions:** deduplicação das instruções compartilhadas — contexto menor
111
+ sem perder nenhuma regra.
112
+
113
+ ## 🐞 Fixed
114
+
115
+ - **2 flakes determinísticos eliminados:** TTL do MCP persistence
116
+ (`test_ttl_expiry_real_time`) e `logger.test.mjs` deixaram de depender de
117
+ timing/carga do host.
118
+ - **Refs stale corrigidas:** referências de versão/ambiente atualizadas para
119
+ Node 22+.
120
+
121
+ ## [v1.5.0-beta.15] - 2026-09-15
122
+
123
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
124
+ move this section to a versioned entry and reset the template below. --&gt;
125
+
126
+ ## 🆕 What's New
127
+
128
+ - **Delegation `read` devolve o relatório completo:** o retorno de `read` passa a
129
+ ler o relatório integral do disco (com cap configurável e marker explícito de
130
+ truncamento) em vez do recibo resumido — o conteúdo é o mesmo tanto no caminho
131
+ nativo quanto no legado, com paridade garantida entre eles.
132
+ - **`sanitizeReceiptText` UTF-8-safe:** a sanitização de recibos deixou de corromper
133
+ caracteres multibyte; acentuação e demais codepoints UTF-8 são preservados no
134
+ caminho nativo e no legado.
135
+ - **TUI — cor de status na row inteira:** cada linha do painel Delegations passa a
136
+ ser pintada pelo estado — vermelho = falha, verde = concluído, amarelo = em
137
+ andamento — com o glyph mantido como canal redundante para acessibilidade.
138
+
139
+ ## 🐞 Fixed
140
+
141
+ - **TUI — painel Delegations só da sessão ativa:** o painel deixa de renderizar
142
+ rows cross-session/órfãs que causavam "Session not found" ao clicar; a lista
143
+ agora cobre apenas a sessão ativa, mantendo a retenção de concluídas (2 min)
144
+ e falhas (10 min).
145
+ - **Guards de estado e navegação órfã:** transições prematuras para `done` são
146
+ bloqueadas e a navegação defensiva ignora alvos órfãos, evitando seleção
147
+ inválida no painel.
148
+ - **Isolamento do board nos testes:** testes que importam o plugin real agora
149
+ isolam o BackgroundJobBoard, eliminando o fantasma "preserve this running
150
+ delegation"; o board real foi limpo.
151
+ - **Lean no core:** 17 módulos mortos de `src/pantheon/` removidos, ~38% dos
152
+ arquivos de teste removidos/consolidados e docs/scripts órfãos limpos, com
153
+ testes mínimos readicionados para os módulos vivos (tool-ceiling, native-probe).
154
+ - **Flake de TTL determinístico:** `test_ttl_expiry_real_time` deixou de competir
155
+ com a truncagem de microssegundos do SQLite — o teste agora espera o início de
156
+ um segundo limpo antes do store e usa margem sobre o TTL, eliminando o flake
157
+ dependente de carga (test-only).
158
+
159
+ ## [v1.5.0-beta.14] - 2026-09-14
160
+
161
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
162
+ move this section to a versioned entry and reset the template below. --&gt;
163
+
164
+ ## 🆕 What's New
165
+
166
+ - **Ordenação active-first:** delegações ativas aparecem antes das concluídas,
167
+ falhas e canceladas no painel TUI.
168
+ - **Overflow active:** quando há mais delegações ativas que o teto visível, o
169
+ excedente ativo permanece representado na linha de overflow.
170
+
171
+ ## 🐞 Fixed
172
+
173
+ - **Retenção visual:** concluídas permanecem visíveis por 2 min e falhas por
174
+ 10 min antes de saírem do painel; canceladas seguem a retenção configurada.
175
+
176
+ ## ⚠️ Known Issues
177
+
178
+ - **Stale running warning:** jobs em estado `running` além do limite esperado
179
+ recebem um aviso visual de stale no painel.
180
+ ## [v1.5.0-beta.13] - 2026-09-14
181
+
182
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
183
+ move this section to a versioned entry and reset the template below. --&gt;
184
+
185
+ ## 🆕 What's New
186
+
187
+ - **TUI status-only — rows simplificadas:** cada linha do painel Delegations passa
188
+ a ser `{glyph} {alias} {elapsed}` + `desc` muted — um glyph de status, uma única
189
+ identidade e o tempo decorrido, com a descrição em tom muted. São 4 glyphs
190
+ (running animado, completed, error, cancelled/retry), sem toggle
191
+ `[Sessão]`/`[Tudo]`, sem prefixos `nat:`/`pan:` e sem losango ◇/◆.
192
+ - **Header `active`/`done`/`failed`:** o cabeçalho do painel resume apenas esses
193
+ três contadores sobre a lista completa (todas as sessões), sem `nat:`/`pan:`.
194
+ - **Ceiling 8:** no máximo 8 linhas visíveis (live-first); o excedente colapsa em
195
+ uma única linha `… +N more`.
196
+ - **Board read (jobs de todas as sessões):** o painel lê o BackgroundJobBoard
197
+ (`.pantheon/board/state.json`), então jobs `pantheon_delegate` de qualquer
198
+ sessão aparecem — não só os filhos nativos da sessão focada.
199
+ - **118 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com
200
+ 118/118 passando, cobrindo rows status-only, header active/done/failed, ceiling
201
+ e board read cross-session.
202
+
203
+ ## 🐞 Fixed
204
+
205
+ - **Sanitização de dead code:** removidos helpers, tipos e estado órfãos do
206
+ painel Delegations (toggle de escopo `[Sessão]`/`[Tudo]`, prefixos curtos
207
+ `nat:`/`pan:`, glyphs por estado e paginação de arquivo morto) que sobraram do
208
+ refactor status-only.
209
+ - **Board merge preserva sessão conhecida:** um record do board com
210
+ `parentSessionID` vazio não sobrescreve mais a sessão já atribuída à linha.
211
+ ## [v1.5.0-beta.12] - 2026-09-14
212
+
213
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
214
+ move this section to a versioned entry and reset the template below. --&gt;
215
+
216
+ ## 🆕 What's New
217
+
218
+ - **TUI lê o board (4º canal):** o painel Delegations passa a ler o
219
+ BackgroundJobBoard via `readBoardState()` — jobs `pantheon_delegate` de todas
220
+ as sessões aparecem, não só os filhos nativos da sessão focada.
221
+ - **Toggle [Sessão]/[Tudo] + chips:** `[Sessão]` (default) mostra só a sessão
222
+ focada, `[Tudo]` mostra jobs de todas as sessões; chips clicáveis no header.
223
+ - **Raw `dist/tui.tsx` removido (bundle-only):** o dist passa a carregar só o
224
+ bundle compilado (`tui.js`); o fonte raw sai do pacote publicado.
225
+ - **117 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com
226
+ 117/117 passando, cobrindo board-read, split ativo/recente e toggle de escopo.
227
+ ## [v1.5.0-beta.11] - 2026-09-14
228
+
229
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
230
+ move this section to a versioned entry and reset the template below. --&gt;
231
+
232
+ ## 🆕 What's New
233
+
234
+ - **Glyphs da FSM real no painel Delegations:** cada estado do BackgroundJobBoard
235
+ tem agora um glifo Unicode geométrico próprio — `⠋` running (spinner 1s),
236
+ `⟳` retry, `⚠` stale/startup, `✓` completed, `✕` error, `−` cancelled. Forma e
237
+ cor são canais independentes: as linhas seguem legíveis sem cor e sem Nerd Font.
238
+ - **Prefixo `nat:` / `pan:` documentado:** `docs/INSTALLATION.md` passa a
239
+ descrever os prefixos curtos das linhas nativas (`nat:<agent>`) e do board
240
+ (`pan:<alias>`) e o par de glyphs ◇/◆.
241
+ - **`scripts/dev-tui.sh` (dev local sem publish):** instala, builda e registra o
242
+ caminho absoluto do repo em `.opencode/tui.json` (gitignored) com hint de
243
+ restart — sem tocar `opencode.json` e sem publicar.
244
+ - **104 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com
245
+ 104/104 passando, cobrindo glifos/marker/tone dos estados reais da FSM.
246
+
247
+ ## 🐞 Fixed
248
+
249
+ - **Doctor F.2 (`hasUsableScripts`):** a resolução do diretório code-mode agora
250
+ exige um `.py`/`.sh` regular (paridade com `_has_usable_scripts` do MCP), então
251
+ um overlay de projeto vazio não mascara mais uma instalação que traz scripts.
252
+ - **`publish:next` órfão removido:** nenhum workflow usava o script (o release
253
+ publica via `--tag beta`); removido do `package.json` para eliminar o dist-tag
254
+ `next` obsoleto da linha de publicação.
255
+ ## [v1.5.0-beta.10] - 2026-09-14
256
+
257
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
258
+ move this section to a versioned entry and reset the template below. --&gt;
259
+
260
+ ## 🆕 What's New
261
+
262
+ - **TUI delegations com prefixos curtos `nat:` / `pan:`:** cada linha do painel passa
263
+ a usar `nat:<agent>` para child nativo do `task()` (sem report no board) ou
264
+ `pan:<alias>` para linha `pantheon_delegate` (ex. `pan:apo-1`) — os prefixos curtos
265
+ liberam largura no sidebar estreito.
266
+ - **Glyph de 2 canais (◇/◆):** ◇ vazado (info/cyan) para child nativo e ◆ preenchido
267
+ (cor de estado) para linha do board — forma e cor são canais independentes, então o
268
+ split segue legível mesmo sem cor.
269
+ - **Header resumido:** `(N active · M done · nat:K pan:M)` calculado sobre a lista
270
+ completa (active + recent + archived), no lugar do antigo `(N native + M pantheon)`.
271
+ - **Elapsed em caixa fixa:** rótulo alinhado à direita em largura 8 e SEMPRE
272
+ renderizado, então um job ativo sem descrição nunca perde o timer.
273
+ - **100 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com 100/100
274
+ passando (tsc + biome OK), acima dos 93 da beta.9.
275
+
276
+ ## 🐞 Fixed
277
+
278
+ - **`appendFile` sem import (log do painel volta a escrever):** o log em arquivo do
279
+ painel parou de escrever silenciosamente porque `appendFile` era chamado sem import
280
+ (ReferenceError engolido pelo `catch` vazio); o import foi restaurado e o `catch`
281
+ agora reporta a falha (gated por echo) em vez de sumir.
282
+ - **Truncamento grapheme-safe:** descrições truncam em fronteiras de grapheme
283
+ (`Intl.Segmenter` com fallback `Array.from`) em 44 graphemes, sem cortar emoji ou
284
+ sequências ZWJ ao meio (mojibake).
285
+ - **Linhas stale-running ficam em Active:** um job stale ainda é um job vivo (estado do
286
+ backend inalterado), então não é mais arquivado — o que escondia a linha lançada.
287
+ - **Spinner/animação de 140ms → 1000ms:** o tick rápido piscava sem adicionar informação.
288
+ - **Dead code removido:** conectores de árvore (`isNestedDelegation` /
289
+ `delegationTreePrefix`) e campos `parentTaskID`/`childCount` removidos —
290
+ `session.children` só devolve filhos diretos, então nenhuma linha nested era
291
+ produzida (BACKLOG).
292
+ ## [v1.5.0-beta.9] - 2026-09-14
293
+
294
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
295
+ move this section to a versioned entry and reset the template below. -->
296
+
297
+ ## 🆕 What's New
298
+
299
+ - **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.
300
+ - **93 testes TUI delegations:** suite `tests/pantheon/tui-delegations.test.ts` com 93/93 passando (tsc + biome OK).
301
+ - **E2E beta.8 PASS (referência):** baseline E2E da beta.8 mantido como referência de estabilidade para beta.9.
302
+
303
+ ## 🐞 Fixed
304
+
305
+ - Removido diretório `testyes/` (artefato de teste).
306
+ - Truncado `hooks.log` para baseline limpo de beta.9.
307
+
308
+ ## [v1.5.0-beta.8] - 2026-09-13
309
+
310
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
311
+ move this section to a versioned entry and reset the template below. -->
312
+
313
+ ## 🐞 Fixed
314
+
315
+ - **Board persistence is corruption- and concurrency-safe:** state writes now go
316
+ through a UNIQUE temp file (per-process, per-write counter + random suffix), are
317
+ `fsync`ed, then renamed over the destination with bounded ENOENT retries, and
318
+ read-modify-write cycles on the same state path are serialized. This closes the
319
+ window where two writers could interleave and corrupt `state.json` or race the
320
+ rename.
321
+ - **Corrupt board state is quarantined and salvaged:** a malformed `state.json` is
322
+ moved aside to `<state>.corrupt-<ts>`, a clear error is logged, and every complete
323
+ record that can be parsed is salvaged and returned instead of throwing — so
324
+ delete/prune/recover callers cannot get stuck in a retry loop.
325
+ - **P1-1 — no orphan `.signal.json` on reconcile:** reconcile now deletes any
326
+ still-pending wake signal instead of re-writing it. Reconcile is an
327
+ acknowledgment, not a new terminal transition, so the finalize→reconcile cycle
328
+ no longer leaves a stale `<alias>.signal.json` with `state:"reconciled"` behind.
329
+ - **Unresolved `{sessionID}` template guard:** the TUI/runtime can hand the plugin
330
+ the unsubstituted literal `{sessionID}` (or `%7BsessionID%7D`) when no session is
331
+ focused; the plugin now refuses placeholder session ids at the delegation,
332
+ bootstrap-probe, and activity-sample boundaries instead of forwarding them to the
333
+ session API (which rejected every call).
334
+ - **Delegation lookup scoped to the calling session:** `pantheon_delegation_read`
335
+ resolves exact task IDs first (must belong to the caller's session), then alias
336
+ matches within that session (exactly one required). Cross-session and ambiguous
337
+ aliases now return explicit errors instead of the generic "Unknown delegation".
338
+
339
+
340
+ ## [v1.5.0-beta.7] - 2026-09-13
341
+
342
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
343
+ move this section to a versioned entry and reset the template below. --&gt;
344
+
345
+ ## 🆕 What's New
346
+
347
+ - **Cost CLI fallback + `PANTHEON_NODE`:** `pantheon_cost` falls back to a
348
+ read-only `node scripts/cost.mjs` subprocess when `node:sqlite` is
349
+ unavailable in the host runtime (for example under Bun). The fallback
350
+ resolves a real Node.js binary — `PANTHEON_NODE` first, then `node` on
351
+ `PATH` — probes it for `node:sqlite` support (Node.js >= 22.5), and runs it
352
+ with an argument array, never a shell. Previously the tool returned
353
+ `status: UNSUPPORTED` with no fallback.
354
+ - **Delegation engine contract (ADR-0011):** legacy `pantheon_delegate` remains
355
+ the default engine through v1.5.x; native delegation is opt-in and
356
+ experimental via `PANTHEON_DELEGATE_MODE=native` until v1.6. See
357
+ [ADR-0011](https://github.com/ils15/pantheon-opencode/pull/126) (Proposed).
358
+
359
+ ## 🐞 Fixed
360
+
361
+ - **Legacy read-only bypass on retry (P0):** a retried delegation now
362
+ re-applies read-only enforcement (the same rule as the initial child) and
363
+ registers the retry session, closing the bypass where a retried child could
364
+ write despite `read_only: true` or being a read-only agent.
365
+ - **Kill-switch scope (P0):** `PANTHEON_DELEGATION=off` now also disables the
366
+ legacy engine, not only the native manager — the legacy delegate/read/list
367
+ tools throw as documented.
368
+ - **Delegation signal leak (P1):** the legacy finalize path now deletes the
369
+ auto-wake signal file, so terminal delegations no longer leave stale
370
+ `.signal.json` artifacts behind.
371
+ - **Crash recovery is durable (P1):** `recoverRunningJobs` persists the
372
+ `error` state, marks the job `terminalUnreconciled`, and emits the terminal
373
+ signal plus notification for every reaped job instead of updating memory
374
+ only.
375
+ - **Atomic concurrency (P1):** `registerLaunch` validates
376
+ `maxConcurrentPerAgent` before any mutation, so concurrent dispatches cannot
377
+ both claim the last slot. A refused launch tears down the orphan child
378
+ session (read-only unregister plus `session.delete`) and the retry path
379
+ re-validates the same limit.
380
+ - **Legacy board hygiene (P1):** the legacy finalize path now runs
381
+ `pruneCompleted` and `enforceEntryCap`, matching the native manager and
382
+ preventing unbounded board growth.
383
+ - **Resilient V2 events:** a native child refused by the per-agent limit is
384
+ logged and skipped instead of aborting the rest of the event handler.
385
+ ## [v1.5.0-beta.6] - 2026-09-12
386
+
387
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
388
+ move this section to a versioned entry and reset the template below. --&gt;
389
+
390
+ ## 🆕 What's New
391
+
392
+ - **Delegation panel v2:** live tool activity per running delegation
393
+ (`↳ bash npm test` — what the child is doing right now), a paginated
394
+ `Archived (n)` section for terminal reports beyond the recent 8, and a
395
+ distinct `retry` state (⟳ marker, RETRYING label) instead of lumping
396
+ retries into running.
397
+
398
+ ## 🐞 Fixed
399
+
400
+ - **Stale plugin refs from old installs:** the installer now prunes
401
+ `pantheon-opencode` plugin references pointing at other installed copies of
402
+ the package (older nvm prefixes, npx cache hashes). Previously every init
403
+ accumulated refs from past installs and the oldest — without the newest
404
+ fixes — won the plugin load race, silently disabling native-task
405
+ mirroring. Third-party plugins sharing the same file names remain
406
+ protected.
407
+ - **Docs:** `@beta` dist-tag guidance on all npx commands — plain
408
+ `npx pantheon-opencode` resolves the stable release and silently downgrades
409
+ the installed TUI copy.
410
+ ## [v1.5.0-beta.5] - 2026-09-12
411
+
412
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
413
+ move this section to a versioned entry and reset the template below. --&gt;
414
+
415
+ ## 🆕 What's New
416
+
417
+ - **Native background tasks in the delegation panel:** tasks dispatched via
418
+ the native `task(background=true)` tool are now mirrored onto the shared
419
+ BackgroundJobBoard, so the TUI delegation panel tracks them while running
420
+ and the existing finalize path writes their terminal report.
421
+ - **`pantheon-opencode update`:** one command updates the global package
422
+ (beta or stable channel) and re-runs init to refresh config, venv and MCP
423
+ entries. The installer stamps the installed version and `doctor` warns when
424
+ the package is newer than the last sync.
425
+ - **Always-fresh artifacts:** the package postinstall now refreshes all
426
+ copy-only artifacts (agents, skills, AGENTS.md, commands, MCP scripts,
427
+ code-mode payload) into existing installations on every `npm install`; a CI
428
+ gate rebuilds the TUI bundle and fails if the committed `dist/` is stale.
429
+ - **More resilient installer:** preflight checks for python3/npm before any
430
+ file is written, atomic `opencode.json` writes with a `.bak` backup,
431
+ non-fatal Python runtime setup (a venv failure now omits MCP entries with a
432
+ warning instead of pointing at a broken interpreter), `--components` /
433
+ `--clean` / `--opencode-version auto` flags, unknown-flag warnings and
434
+ pt-BR/EN message auto-detection via `LANG`.
435
+ - **Roadmap zerado:** o plano ativo não tem mais itens pendentes. Sprints
436
+ nunca implementados dos planos v1.0/v1.0+ foram removidos; o contrato atual
437
+ passou a documentar o code-mode (manifest SHA-256, resolução project-first).
438
+
439
+ ## 🐞 Fixed
440
+
441
+ - **Code-mode project resolution (#112):** the MCP now resolves project code-mode
442
+ scripts before global scripts, honors `PANTHEON_PROJECT`, and fails closed on
443
+ project manifest errors; the installer sets `cwd: "."`.
444
+ - **Code-mode manifest doctor check (#113):** `doctor` validates manifest shape,
445
+ script membership, and SHA-256 hashes without regenerating the manifest.
446
+ ## [v1.5.0-beta.4] - 2026-09-11
447
+
448
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
449
+ move this section to a versioned entry and reset the template below. --&gt;
450
+
451
+ ## 🆕 What's New
452
+
453
+ - **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.
454
+
455
+ - **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.
456
+
457
+ - **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.
458
+
459
+ - **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`.
460
+
461
+ ## 🐞 Fixed
462
+
463
+ - **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.
464
+ - **npm tarball inclusion:** CHANGELOG.md is now included in the npm tarball
465
+ (added to the `files` allowlist in `package.json`).
466
+
467
+ - **Task Result Guard**: native `task()` empty results are now detected and
468
+ converted to explicit errors in the `tool.execute.after` hook. Previously,
469
+ when a provider rejected a child session (e.g. `BackendAdmissionRejected`
470
+ from free-tier admission control), the error was silently swallowed — the
471
+ child completed with empty output and the parent LLM proceeded as if the
472
+ task succeeded. The guard replaces empty `task()` output with an error
473
+ message so the parent sees a failure. (`task-result-guard.ts`)
474
+ ## [v1.5.0-beta.3] - 2026-09-10
475
+
476
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
477
+ move this section to a versioned entry and reset the template below. --&gt;
478
+
479
+ ### Changed
480
+
481
+ - **CI fail-closed:** `ci.yml` no longer falls back from `npm ci` to
482
+ `npm install`, and pytest/audit failures are no longer swallowed. The
483
+ workflow now runs lint, typecheck, `test:ts`, Python tests, Node tests and
484
+ `npm audit`/`pip-audit` as blocking gates.
485
+ - **Release authorization is dispatch-only:** `release.yml` no longer triggers
486
+ on PR labels or any `pull_request` event. Publication is
487
+ authorized only by an explicit `workflow_dispatch`; the `release_channel`
488
+ input (`stable` default, `beta`) selects the channel. Beta versions are
489
+ committed sequential `X.Y.Z-beta.N` (bumped via
490
+ `node scripts/versioning.mjs apply --beta`); no runtime version computation.
491
+ - **Sandbox gate is PASS-only:** `test-opencode-v1-v2-sandbox.sh` no longer
492
+ classifies failures as `AMBIENTAL`/`NOT_TESTED`, has no prompt retry, and
493
+ treats missing binaries/projects/probes, timeouts and auth/network/provider
494
+ failures as blocking. Exit 0 now requires an explicit PASS on every check.
495
+ - **Validation policy is PASS-only:** `doctor` exit != 0 (including legacy
496
+ exit 1 warnings), unknown or non-numeric statuses block validation;
497
+ WARN/SKIP/AMBIENTAL/NOT_TESTED never produce exit 0.
498
+ - **No npm install fallback in TUI/install paths:** `sync-tui.mjs` and the
499
+ plugin installer propagate `npm ci` failures instead of falling back to
500
+ `npm install`; `PANTHEON_ALLOW_NPM_INSTALL_FALLBACK` is not supported.
501
+ - **Lockfile-backed installs:** the root (`package.json` + `package-lock.json`)
502
+ and TUI (`src/plugins/tui/package.json` + `src/plugins/tui/package-lock.json`)
503
+ are validated independently with `npm ci --ignore-scripts`. A failure blocks
504
+ the run; there is no `npm install` fallback.
505
+ - **Release artifact identity:** each release carries one `.tgz` tarball and
506
+ the SHA-256 of that same file from validation through publication. The
507
+ tarball and release metadata are bound to the full `TARGET_SHA`; repacking is
508
+ not an equivalent artifact.
509
+ - **Intentional MCP divergence:** `scripts/memory_mcp_server.py` keeps the
510
+ lightweight `memory_*` contract while `src/mcp/memory_mcp_server.py` also
511
+ exposes the optional codemap tools. The other shared MCP copies remain
512
+ identical; this pair is not to be overwritten by synchronization.
513
+ - **Sandbox scope:** a PASS from the prepared isolated sandbox is not proof of
514
+ support for every real host or untested host configuration.
515
+
516
+ ### Breaking Changes
517
+
518
+ - Release automation requires a manual `workflow_dispatch`; labeling a PR no
519
+ longer publishes anything.
520
+ - The sandbox validator exits non-zero when environmental checks cannot run
521
+ (missing binaries, provider auth, timeouts) instead of reporting them as
522
+ non-blocking.
523
+ - `PANTHEON_ALLOW_NPM_INSTALL_FALLBACK` has no effect; `npm ci` failures now
524
+ fail the install/sync step.
525
+ ## [1.5.0] - 2026-09-01 (candidate)
526
+
527
+ ### Changed
528
+
529
+ - **MCP flat map:** the installer and config migration keep MCP servers as the
530
+ named top-level map — the `mcp.servers` wrapper is rejected by OpenCode
531
+ 1.18.18 (`Missing key mcp.servers.enabled`). Legacy wrapped entries are
532
+ unwrapped and `disabled` flags are normalized back to `enabled`.
533
+ - **Deterministic plugin installs:** the TUI plugin ships its lockfile and
534
+ installs with `npm ci --omit=dev`; failures are propagated without an
535
+ `npm install` fallback.
536
+ - **Uninstall CLI:** new `node scripts/uninstall.mjs --project|--global` with
537
+ ownership checks, `--dry-run` and `--force`.
538
+ - **OpenCode-only:** platform guides consolidated into a single OpenCode
539
+ guide; Pantheon 1.5.0 targets OpenCode exclusively.
540
+ - **OpenCode V2 plugin:** the V2 contract registers 9 orchestration tools
541
+ (`pantheon_delegate`, `pantheon_delegation_read`, `pantheon_delegation_list`,
542
+ `hashline_edit`, `pantheon_goal_create`, `pantheon_goal_get`,
543
+ `pantheon_goal_update`, `pantheon_cost`, `pantheon_model`), 4 event
544
+ subscriptions, session hooks (`prompt`, `context`) and tool hooks
545
+ (`execute.before`, `execute.after`).
546
+
547
+ ## [v1.4.3] - 2026-09-03
548
+
549
+ ### Changed
550
+
551
+ - Synchronized the 1.4.3 release version across `package.json`,
552
+ `package-lock.json`, `plugin.json`, `pyproject.toml`, and the TUI package.
553
+
554
+ ## [v1.4.2] - 2026-08-27
555
+
556
+ ### Changed
557
+ - Synchronized release metadata across project manifests.
558
+ ## [1.4.1] - 2026-08-26 (candidate)
559
+
560
+ ### Changed
561
+
562
+ - **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.
563
+ - **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.
564
+ - **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.
565
+
566
+ ### Fixed
567
+
568
+ - **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`.
569
+ - **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.
570
+ - **Chat noise:** removed the remaining transcript/reminder delivery paths for delegation completion and compaction state.
571
+
572
+ ### Tests
573
+
574
+ - Added regression coverage for delegate output validation, terminal-toast gating/deduplication, native model inheritance, and compaction context ordering.
575
+ - Updated the relevant Node/TypeScript tests and installation/model-routing checks; global-install behavior remains validated through the isolated sandbox when run.
576
+ - 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.
577
+
578
+ ## [1.4.0] - 2026-08-25
579
+
580
+ ### Added
581
+
582
+ - **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.
583
+ - **Context-window optimization:** added `tool.execute.after` output sandboxing for `read`, `grep`, `glob`, and `webfetch`, with truncation markers and lower per-session output volume.
584
+
585
+ ### Fixed
586
+
587
+ - **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.
588
+ - **Bash command portability:** normalized `python` commands to `python3` where the host does not provide a `python` executable.
589
+
590
+ ### Tests
591
+
592
+ - The release entry records the implementation and coverage reported by the session; no additional release-level test result is asserted here.
593
+
594
+ ## [1.3.7] - 2026-08-24
595
+
596
+ ### Added
597
+
598
+ - **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.
599
+ - **TUI auto-update:** postinstall synchronization and a runtime version check keep the installed TUI files current.
600
+
601
+ ### Fixed
602
+
603
+ - **Stale delegate display:** corrected stale-running entries in the TUI delegation view.
604
+ - **Orphan cleanup:** connected `finalizeIdleChildrenWithoutMd` to the periodic 30-second scan at plugin initialization.
605
+
606
+ ### Tests
607
+
608
+ - Closed issue #68 covering the TUI stale-state and auto-update fixes.
609
+
610
+ [v1.4.3]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.4.3
611
+ [1.4.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.4.0
612
+ [1.3.7]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.7
613
+ [1.3.6]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.6
614
+
615
+
616
+ ## [1.3.6] - 2026-08-22
617
+
618
+ ### Added
619
+
620
+ - **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).
621
+ - **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.
622
+ - **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`.
623
+ - **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.
624
+ - **mcp-registry.yml synced** — real tool names (`memory_store/search/recall/forget/list/stats`, `kv_*`, `execute_code_script`, `vision_*`) + `pantheon-vision` server added.
625
+ - **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.
626
+ - **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.
627
+ - **`_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.
628
+ - **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`.
629
+ - **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).
630
+ - **`_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.
631
+ - **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.
632
+ - **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.
633
+ - **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.
634
+ - **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.
635
+ - **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.
636
+
637
+ ### Fixed
638
+
639
+ - memory_search doc drift: freshness decay was documented but not implemented — now real via `decay_days`.
640
+ - scripts/ copies stale vs src/mcp/ canonical sources (missing routing project fallback, stale comments).
641
+ - .pantheon/mcp-registry.yml listed non-existent tools (memory_compress, memory_expand, list_agents) and missed pantheon-vision.
642
+
643
+
644
+ ### Tests
645
+
646
+ - The entry records the persistence, integration, and certification test coverage explicitly listed above; no aggregate release-level result was available in the source notes.
647
+
648
+
649
+ ## [1.3.6-beta] - 2026-08-21
650
+
651
+ ## 🆕 What's New
652
+
653
+ - **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).
654
+ - **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.
655
+ - **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`.
656
+ - **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.
657
+ - **mcp-registry.yml synced** — real tool names (`memory_store/search/recall/forget/list/stats`, `kv_*`, `execute_code_script`, `vision_*`) + `pantheon-vision` server added.
658
+ - **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.
659
+ - **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.
660
+ - **`_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.
661
+ - **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`.
662
+ - **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).
663
+ - **`_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.
664
+ - **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.
665
+ - **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.
666
+ - **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.
667
+ - **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.
668
+ - **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.
669
+
670
+ ## 🐞 Fixed
671
+
672
+ - memory_search doc drift: freshness decay was documented but not implemented — now real via `decay_days`.
673
+ - scripts/ copies stale vs src/mcp/ canonical sources (missing routing project fallback, stale comments).
674
+ - .pantheon/mcp-registry.yml listed non-existent tools (memory_compress, memory_expand, list_agents) and missed pantheon-vision.
675
+
676
+ ## [1.3.5] - 2026-08-21
677
+
678
+ ## 🆕 What's New
679
+
680
+ - **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).
681
+ - **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).
682
+
683
+ ## 🐞 Fixed
684
+
685
+ - **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).
686
+ - **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).
687
+ - **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).
688
+ - **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).
689
+ - **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).
690
+ - **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).
691
+
692
+ ## [v1.3.4] - 2026-08-11
693
+
694
+ ## 🆕 What's New
695
+
696
+ - **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)
697
+ - **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)
698
+ - **Post-compaction state re-assertion**: re-asserts session state after compaction so the rebuilt context reflects the live board
699
+ - **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.
700
+ - **Preemptive compaction threshold logic** (dormant/experimental): threshold-based preemptive compaction — not active by default
701
+ - **File-first logging**: `createPantheonLogger` — console echo opt-in via `PANTHEON_HOOKS_LOG=1`, everything routed to `.pantheon/logs/hooks.log` (silences TUI console pollution)
702
+ - **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.
703
+ - **README docs**: 1.3.4 compaction + delegation features documented
704
+ - **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
705
+
706
+ ## 🐞 Fixed
707
+
708
+ - **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
709
+ - **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
710
+ - **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
711
+ - **TUI console log pollution**: console output in the plugin/hooks rendered directly into the opencode TUI; now env-gated, log-file only by default
712
+
713
+ ### Tests
714
+
715
+ - 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.
716
+
717
+
718
+ ## [v1.3.3] - 2026-08-11
719
+
720
+ ## 🆕 What's New
721
+
722
+ - **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`
723
+ - **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
724
+ - **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
725
+ - **Dispatch retry-on-empty**: classifies empty results (mode 1: 0 tokens; mode 2: reasoning without text) with cap-1 automatic retry
726
+ - **Cost tracking**: JSONL ledger + `pantheon_cost` command reading opencode.db (zero-dep, node:sqlite → scripts/cost.mjs fallback)
727
+ - **Themis phase reviews** route to deepseek-v4-flash (pro reserved for final release gate); Athena stays premium (council red-line)
728
+ - **Routing config**: `background_delegation`, `todo_enforcer`, `hashline`, `full_auto` sections
729
+
730
+ ## 🐞 Fixed
731
+
732
+ - **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)
733
+ - **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)
734
+ - **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)
735
+ - **Todo enforcer invasiveness**: skips injection when native background children are active (`session.children`) and within 30s of user activity
736
+ - **Hashline**: atomic write (tmp+rename), path containment guard, documented seed separator
737
+
738
+ ## [v1.3.2] - 2026-08-09
739
+
740
+ ## 🆕 What's New
741
+
742
+ - **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.
743
+ - **Package portability**: distributed configuration no longer retains checkout-specific machine paths; managed hooks are resolved from the installed package during install/sync.
744
+ - **Doctor contract**: exit statuses now distinguish success (`0`), advisory warnings (`1`), and blocking errors (`>=2`).
745
+
746
+ ## 🐞 Fixed
747
+
748
+ - **Global installation diagnostics**: clarified the distinction between advisory doctor warnings and blocking failures.
749
+
750
+ [v1.3.2]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.2
751
+
752
+ ## [v1.3.1] - 2026-08-08
753
+
754
+ ## 🆕 What's New
755
+
756
+ - **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.
757
+ - Local validation logs are ignored via `logs/` because they are generated diagnostics, not release artifacts or source files.
758
+
759
+ ## [v1.3.0] - 2026-08-06
760
+
761
+ ## 🆕 What's New
762
+
763
+ - **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
764
+ - **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)
765
+ - **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
766
+ - **Olympians groups**: wave→Olympians naming, 10s detection window, group completion
767
+ - **Hybrid secret blocking**: high-confidence tokens blocked (throw), low-confidence advisory-only; `maskSecret()` redaction applied across hook outputs
768
+ - **Honest delegation telemetry**: `delegation_id`/`task_id`/`duration_ms` fields, `dispatched` status for background agents, JSON round-trip stop hook (no TSV corruption)
769
+ - **Bash exit-code monitoring**: `metadata.exit` → individual error notifications
770
+ - **Talos scope enforcement**: session→agent map, native permission denies, content guard
771
+ - `PANTHEON_HOOKS_LOG` opt-in with ISO timestamps per line
772
+ - Routing disambiguation (project vs system docs), refusal taxonomy, delegation cache telemetry
773
+ - Secret-scan hygiene: wildcard notation for credential references (no literal keys in versioned docs/comments)
774
+ - README: hooks testing docs + `PANTHEON_TOASTS` table with council; AGENTS.md adds "PRs always update the README" convention
775
+
776
+ ## 🐞 Fixed
777
+
778
+ - Council toast idle-flush race condition
779
+
780
+ ## [v1.2.2] - 2026-08-05
781
+
782
+ ## 🆕 What's New
783
+
784
+ - **`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)
785
+ - **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
786
+ - **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
787
+ - Dead `src/mcp/requirements-mcp-core.txt` catalog duplicate (YAGNI — the installer uses `requirements-mcp.txt`)
788
+
789
+ ## 🐞 Fixed
790
+
791
+ - **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`
792
+ - **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)
793
+ - **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)
794
+ - **Layered doctor** (#18): B.6 smoke JSON-RPC `initialize` + F venv/deps check with pinned requirements
795
+ - **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
796
+ - **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)
797
+
798
+ ## [v1.2.1] - 2026-08-03
799
+
800
+ ## 🆕 What's New
801
+
802
+ - **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
803
+ - 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)
804
+ - **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
805
+ - Canonical `pantheon-vision` MCP stdio server (`src/mcp/pantheon_vision_server.py`)
806
+ - 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)
807
+ - **Unified `release.yml`**: single workflow handles beta (PR label) + stable (main push) with version-exists check
808
+ - Secret scanning: fail-closed CI gates (gitleaks + custom scan), pre-commit hooks, secret-scan regression tests
809
+ - docs: model routing presets documented (presets, commands, env vars)
810
+ - 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
811
+ - Vision routing consolidated and legacy duplicates removed
812
+ - 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)
813
+ - install: pantheon-vision registered, `doctor.mjs` hardened
814
+ - PR template added in English; coverage artifacts gitignored
815
+ - CI workflow triggers synced with base develop; `release.yml` gained `workflow_dispatch` with `pr_number` input
816
+ - Stale release workflows (release-beta.yml / release-stable.yml leftovers) brought back by merge
817
+ - TUI todo-progress bar (redundant with native TODO + sidebar), v1.1.1
818
+ - Duplicate `scripts/scrub_secrets.py` (canonical is `scrub-secrets.py`)
819
+
820
+ ## 🐞 Fixed
821
+
822
+ - Plugin export as function for opencode 1.18.11 API (object export failed to load; hooks.config mutates config in place)
823
+ - 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
824
+ - Default vision fallbacks: mimo-v2.5 (multimodal, cheaper) then minimax-m3 (qwen3.7-plus 500 on Go gateway); silent hook logs
825
+ - `import uuid` in `mcp_persistence_server.py` (context_save NameError)
826
+ - commitlint failures + typecheck narrowing; active preset applied in config hook
827
+ - 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
828
+ - Security: hardcoded provider credentials removed, preset error logging sanitized (CodeQL), dist artifacts untracked
829
+ - install: project MCP commands point at real venv
830
+
831
+ [v1.2.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.2.1
832
+
833
+ ## [v1.2.0] - 2026-07-30
834
+
835
+ ## 🆕 What's New
836
+
837
+ - **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
838
+ - Zeus Fusion-style delegation enforced — `edit:deny`, `bash:deny`, never touches files
839
+ - 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
840
+ - **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`
841
+ - New release system: beta from PR label (release-beta.yml), stable from main push (release-stable.yml)
842
+ - docs: `RELEASE.md` — beta from PR label, stable from main push
843
+ - **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)
844
+ - Removed redundant model configs — agents inherit default deepseek-v4-flash
845
+ - Persistence docs updated for new tools and auto-purge behavior
846
+ - commitlint scopes completed; auto-release skipped when version already exists
847
+
848
+ ## 🐞 Fixed
849
+
850
+ - 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
851
+ - CI: push triggers removed — validation workflows (CI, commitlint, CodeQL, hotfix, docs) now run on `pull_request` only, eliminating perma-pending duplicate checks
852
+
853
+ [v1.2.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.2.0
854
+
855
+ ## [v1.0.0] - 2026-07-24
856
+
857
+ ## 🆕 What's New
858
+
859
+ - **OpenCode-only**: Removed all multi-platform support (Claude Code, Cursor, Windsurf, Cline, Continue.dev, VS Code Copilot). Pantheon v1.0 is exclusively for OpenCode.
860
+ - **Global installation**: `npx pantheon-opencode init` installs agents globally to `~/.config/opencode/agents/`. Optional `--project` flag for project-local install.
861
+ - **Background subagents**: Native OpenCode `task(background=true)` + `task_status()` delegation. Max 5 concurrent subagents. Requires `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true`.
862
+ - **Shared instructions**: Behavioral rules moved to `.instructions.md` files loaded via `instructions/*.instructions.md`. Eliminated duplicate rules between agents and instructions.
863
+ - **TUI sidebar plugin**: Custom sidebar showing Pantheon version, sessions, commands, agents, config, and memory stats.
864
+ - **Agent routing optimized**: Zeus routing decision tree prohibits `general`/`explore` subagent types. Each domain maps to a specialist.
865
+ - Instructions tokens reduced 10.3k → 7.5k (-18%)
866
+ - Zeus.md reduced 431 → 144 lines
867
+ - Skills reduced to 14 (from 40), with merged content
868
+ - `skills-lock.json` regenerated (40 → 14 entries)
869
+ - 6 platform-specific installers (claude, cline, continue, copilot, cursor, windsurf)
870
+ - 6 platform-specific docs files
871
+ - Legacy scripts: `pantheon-install.mjs`, `pantheon-update.mjs`
872
+ - `platform/opencode/agents/` (agents now in `src/agents/`)
873
+ - `auto-continue-template.md`
874
+ - `checkpoint-standards.instructions.md`
875
+ - Updated command list: 14 → 11 commands
876
+ - Added: `/pantheon-bg`, `/pantheon-doc`
877
+ - Removed: install, update, cancel, sketch, consolidate
878
+
879
+ [v1.0.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.0
880
+
881
+ ## [v1.1.1] - 2026-07-30
882
+
883
+ ## 🆕 What's New
884
+
885
+ - New release system — beta releases from PR labels, stable from main push (auto-release and beta-release workflows unified)
886
+ - Interactive TUI mode for installer (Fases 1+2) — redesigned sidebar with context progress bar, live session data via events + API
887
+ - Session-scoped context checkpoints in persistence (index, stats, auto-purge, `delete_namespace`); fallback chains, auto CI retry (2x), token tracking
888
+ - Slash commands consolidated from 16 to 5; redundant model configs removed (agents inherit the default model)
889
+
890
+ ## 🐞 Fixed
891
+
892
+ - Council: UUID session isolation in context checkpoints, pre-compaction state save, flash summary quality floor, agents recall `context_get(slug, 'latest')` on startup
893
+ - 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
894
+
895
+ [v1.1.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.1.1
896
+
897
+ ## [v1.1.0] - 2026-07-26
898
+
899
+ ## 🆕 What's New
900
+
901
+ - Council synthesis Fase 1+2 — Modo Desempate com Evidência + BackgroundJobBoard (#2)
902
+ - Beta release workflow added (from develop)
903
+
904
+ [v1.1.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.1.0
905
+
906
+ ## [v1.0.7] - 2026-07-26
907
+
908
+ ## 🐞 Fixed
909
+
910
+ - Installer: fixed `writeFileSync` not defined error
911
+
912
+ [v1.0.7]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.7
913
+
914
+ ## [v1.0.6] - 2026-07-26
915
+
916
+ ## 🆕 What's New
917
+
918
+ - 7 new skills (codemap, simplify, reflect, worktrees, verification-planning, loop-engineering, clonedeps) + 7 matching commands; `background_subagents` enabled by default in canonical config
919
+ - Release pipeline: quality gates, tag creation, pre-release, hotfix support
920
+ - CI simplified from 10 to 6 workflows; agent/skill restructuring — 12 redundant instructions removed, unused commands dropped, gaia archived then restored
921
+
922
+ ## 🐞 Fixed
923
+
924
+ - 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
925
+
926
+ [v1.0.6]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.6
927
+
928
+ ## [v1.0.5] - 2026-07-26
929
+
930
+ ## 🐞 Fixed
931
+
932
+ - CI auto-release with OIDC trusted publisher + npm v12 (Node 22 upgrade, clean publish)
933
+ - `doctor.mjs` paths + simplified `prepublishOnly`
934
+
935
+ [v1.0.5]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.5
936
+
937
+ ## [v1.0.2] - 2026-07-25
938
+
939
+ ## 🆕 What's New
940
+
941
+ - TUI plugin: copy logic, stale skill cleanup, `tui.json` dedup; advanced plugin with version detection and 14 commands
942
+ - Agents migrated from deprecated `tools:` to OpenCode `permission:` model; legacy multi-platform tests removed (OpenCode-only conformance); docs modernized (OpenCode-only, unified commands)
943
+
944
+ ## 🐞 Fixed
945
+
946
+ - Hardcoded version fallback replaced with package.json version; routing aligned with actual skills (vscode platform removed)
947
+
948
+ [v1.0.2]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.2
949
+
950
+ ## [v1.0.1] - 2026-07-24
951
+
952
+ ## 🆕 What's New
953
+
954
+ - Installer: unified setup flow, removed lifecycle install, fixed entry points
955
+
956
+ [v1.0.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.1
957
+
958
+ ## [v3.19.2] - 2026-07-21
959
+
960
+ ## 🆕 What's New
961
+
962
+ - `_pantheon_paths.py` — shared path resolution (`PANTHEON_HOME`, `PANTHEON_PROJECT`)
963
+ - `pantheon-persistence` MCP — KV store with SQLite FTS5, TTL, namespaces, 6 tools
964
+ - `pantheon-memory` rewritten — sqlite-vec + fastembed (ONNX, ~50MB) replaces chromadb + torch (~1.4GB)
965
+ - Hybrid semantic search: vector cosine + FTS5 BM25 via RRF fusion
966
+ - `.pantheon/mcp-registry.yml` — canonical MCP registry + auto-propagation
967
+ - Simplified installer: `install:lite` (agents only), `install:full` (everything), `install:runtime` (MCP infra)
968
+ - `scripts/install/venv.mjs` — auto .venv creation + pip install of lightweight deps
969
+ - `scripts/install/health-check.mjs` — 6 post-install validations
970
+ - `scripts/install/migrate.mjs` — upgrade path v3.10 → v3.18 → v3.19.0 → v3.19.2
971
+ - MCP servers patched for global install (no more `__file__.parent.parent`)
972
+ - **Dependencies reduced from ~1.4GB to ~50MB** — removed chromadb, sentence-transformers, torch
973
+ - `memory_mcp_server.py`: 1,344→584 lines, 14→6 tools (memory_store, memory_search, memory_recall, memory_forget, memory_list, memory_stats)
974
+ - `routing.yml`: 1,102→482 lines (-56%), deleted 22 dead handoffs, routing_matrix
975
+ - `internet-search` skill: 519→130 lines, tool-agnostic (context7/websearch/webfetch)
976
+ - Memory Protocol: shared `instructions/memory-protocol.instructions.md`, 14 agents with 2-4 line overrides
977
+ - Agent YAML frontmatter fixed across all 14 agents (broken `...` separators, skills indent)
978
+ - All platform configs updated with persistence MCP entries
979
+ - `opencode.json` generated with correct deploy paths (cwd = deploy target)
980
+ - chromadb + sentence-transformers + torch (~1.4GB dependency chain)
981
+ - `scripts/requirements-mcp-memory.txt`
982
+ - 9 duplicate instructions (now skills on-demand)
983
+ - `multi-model-routing` from prometheus (deleted skill)
984
+
985
+ ## 🐞 Fixed
986
+
987
+ - 157 dangling instruction references across 6 platforms
988
+ - YAML frontmatter in all 14 agents (broken by previous sed edits)
989
+ - OpenCode platform detection (was missing `platform/opencode/opencode.json`)
990
+
991
+ ## [v3.19.0] - 2026-07-21
992
+
993
+ ## 🆕 What's New
994
+
995
+ - 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)
996
+ - 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)
997
+ - `session_end_save` handoff in routing.yml for Mnemosyne session close trigger
998
+ - `tools.agent: true` for Apollo, Talos, and Gaia canonical agent files
999
+ - 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)
1000
+ - New skills synced: `file-prompts`, `plan-architecture`, `streaming-patterns`, `token-audit`, `wisdom-accumulation`
1001
+ - All 14 agent files updated with `## 🧠 Memory Protocol` section (both canonical `/agents/` and OpenCode `.config/opencode/agents/`)
1002
+ - Zeus now auto-stores `memory_store()` directly on agent return — no Mnemosyne middleman
1003
+ - 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)
1004
+ - README.md badges updated to v3.19.0, skills count 43→40
1005
+ - 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)
1006
+ - Always-loaded instructions: 19→10 files (~5.7K→~3K tokens/session, -47%)
1007
+ - Agent platform copies updated across 6 platforms (Claude, Cursor, Windsurf, Continue, Cline — .clinerules)
1008
+ - `routing.yml` artifact paths: `docs/memory-bank/`→`.pantheon/memory-bank/`
1009
+ - 5 orphan skills linked to agents: wisdom-accumulation→zeus, plan-architecture→athena, file-prompts+streaming-patterns→hermes, token-audit→nyx
1010
+ - `prompts/orchestrate-with-zeus`: fixed 3 instances of ATHENA→APHRODITE for frontend delegation
1011
+ - `prompts/focus.prompt.md`: stale `/memories/session/` path → `.pantheon/memory-bank/.tmp/`
1012
+ - `prompts/mirrords.prompt.md`: tool names updated to current API
1013
+ - `commands/pantheon-install.md`: stale doc ref and platform count fixed
1014
+ - `commands/pantheon-update.md`: example version bumped to 3.19.0
1015
+ - `pyproject.toml`: removed all backend/fastapi/alembic dependencies (no longer maintained)
1016
+ - `platform/forge.json`: version bumped to 3.19.0
1017
+ - `alembic/` — stale DB scaffolding (never completed)
1018
+ - `backend/` — stale FastAPI database engine (half-finished)
1019
+ - `docs/memory-bank/` — stale duplicate (should have been purged in v3.17.0)
1020
+ - `docs/TUTORIAL-PLUGIN-PT.md` — Portuguese tutorial for disabled plugin
1021
+ - `plugins-disabled/` — stale pantheon-tui-plugin
1022
+ - `release_notes.md` — lowercase, redundant with CHANGELOG
1023
+ - 4 obsolete skills: `conversational-ai-design`, `multi-model-routing`, `prompt-improver`, `prompt-injection-security`
1024
+ - `__pycache__` and `.mypy_cache` build artifacts
1025
+ - Full documentation audit: 10+ doc files cleaned, versions reconciled, stale content purged
1026
+ - Memory Persistence Protocol documented as ADR-006
1027
+ - `.config/opencode/` fully synced from canonical Pantheon (14 agents + 10 instructions)
1028
+
1029
+ ## 🐞 Fixed
1030
+
1031
+ - 33 dangling `docs/memory-bank/` references fixed across platform configs (`.claude/`, `.cursor/`, `.windsurf/`, `.continue/`, `.clinerules/`, `.github/`, `memories/`, `platform/`, `template/`, `.opencode/skills/`, `.tests/`)
1032
+ - `.pantheon/memory-bank/.tmp/` added to `.gitignore`
1033
+ - `docs/RELEASING.md` version reference — v3.8.4 → v3.19.0
1034
+ - `docs/UPGRADING.md` — removed obsolete Agora migration guide, added v3.19 Memory Protocol section
1035
+ - `docs/mcp-recommendations.md` — removed Exa MCP references (removed in v3.15.0)
1036
+ - `docs/platforms/opencode.md` — removed stale "agora" references
1037
+ - `docs/AGENT-MCP.md` — removed Exa reference
1038
+ - CHANGELOG duplicate v3.9.0 entries removed
1039
+ - `template/CLAUDE.md` — `agora`→`zeus` for council dispatch
1040
+ - `.github/instructions/auto-continue-safety-gates`: "Agora Council"→"Council"
1041
+ - `.tests/test-all.sh`: removed stale chiron.agent.md test
1042
+ - Skills count reconciled across all docs: 40
1043
+ - `docs/INDEX.md` skills count: 45→40
1044
+
1045
+ ## [v3.18.0] - 2026-07-15
1046
+
1047
+ (no changes)
1048
+
1049
+ ## [v3.17.1] - 2026-07-14
1050
+
1051
+ ## 🆕 What's New
1052
+
1053
+ - 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
1054
+ - `tests/test_code_mode_args.py`: TDD coverage for the new `args` parameter forwarding
1055
+ - `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)
1056
+ - Agent `.md` files: `context-compression` added to `skills:` frontmatter for all 5 implementation agents
1057
+ - `instructions/artifact-protocol.instructions.md`: scrub documented as automatic via MCP layer
1058
+
1059
+ ## 🐞 Fixed
1060
+
1061
+ - `execute_code_script` now forwards CLI arguments to subprocess — `compress-inline.py` is reachable via MCP (fixes argparse code 2 error)
1062
+ - 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)
1063
+ - OpenAI key regex standardized across all consumers to `sk-[A-Za-z0-9\-_]{10,}`
1064
+
1065
+ ## [v3.17.0] - 2026-07-11
1066
+
1067
+ ## 🆕 What's New
1068
+
1069
+ - Pantheon TUI Plugin overhaul: sidebar modernization, clickable commands, dynamic Python version
1070
+ - MCP Config section in TUI: list active plugins, MCP status, auto-compaction toggle
1071
+ - Memory section in TUI: show memory entries count
1072
+ - MCP templates for 6 platforms (Claude, Cline, Cursor, Windsurf, Continue, Copilot)
1073
+ - `scripts/init-pantheon-mcp.sh` — automated MCP setup
1074
+ - `docs/INSTALLATION.md` — MCP installation guide
1075
+ - `docs/MIGRATION-MEMORY-BANK.md` — migration guide for memory bank to .pantheon/
1076
+ - Memory bank moved from `docs/memory-bank/` → `.pantheon/memory-bank/` (fully local, gitignored)
1077
+ - `.pantheon/` is now the standard for all local/generated artifacts
1078
+ - OpenCode MCP format fixed: command as array + cwd
1079
+ - All platform templates updated with pantheon-code-mode MCP
1080
+ - `.mcp.json` moved from root to `platform/mcp/mcp-template.json`
1081
+ - Version synchronization: `versioning.mjs` now handles all manifests (package.json, plugin.json, pyproject.toml, forge.json)
1082
+ - Updated 65+ source files with new .pantheon/ paths
1083
+ - `docs/memory-bank/` from git history (fully purged via filter-repo)
1084
+
1085
+ ## 🐞 Fixed
1086
+
1087
+ - TUI plugin path in tui.json (was pointing to non-existent file)
1088
+ - OpenCode MCP config format (command must be array + cwd)
1089
+ - Release pipeline: version mismatch between package.json and plugin.json
1090
+ - `mcp_resources_server.py` memory-bank path resolution
1091
+
1092
+ ## [v3.16.0] - 2026-07-10
1093
+
1094
+ ## 🆕 What's New
1095
+
1096
+ - MCP Resources Support: pantheon://agents, skills, routing, deepwork, memory-bank
1097
+ - Code Mode MCP Adapter: confined script execution from .pantheon/code-mode/
1098
+ - YOLO Mode / Auto-Approve: permission tiers for trusted MCP servers
1099
+ - Reasoning Effort per Agent: high / medium / low in routing.yml + 14 agent frontmatter
1100
+ - Unified Memory MCP Server: 14 tools, ChromaDB + sentence-transformers, 79 tests
1101
+ - Knowledge graph: memory_link + memory_traverse (BFS traversal)
1102
+ - RTK-style output filters: dedup, group, truncate on memory_store
1103
+ - Freshness decay (30-day half-life) + importance boost + claim verification
1104
+ - Agent MCP Integration: all 14 agents with MCP Capabilities + routing.yml capabilities
1105
+ - Documentation: MCP.md (238l), MEMORY.md (471l), AGENT-MCP.md (197l)
1106
+ - Skills audit: 5 orphan skills deleted, quality-gate skill created
1107
+ - Platform sync: pantheon-memory added as Tier 1 MCP in install-mcp.mjs
1108
+ - docs/mcp-recommendations.md expanded to 422 lines (browser MCPs, infra MCPs, 3-7 rule)
1109
+ - memory_cleanup: 3-char minimum prefix guard
1110
+ - memory_export: restricted to ~/.pantheon/exports/ with path traversal check
1111
+ - Content size limit: 100KB max, 500 char category
1112
+
1113
+ ## 🐞 Fixed
1114
+
1115
+ - memory_sessions dead code (always returned empty results)
1116
+ - install-mcp.mjs filename: dash → underscore
1117
+ - .github/plugin/plugin.json: removed deleted streaming-patterns reference
1118
+ - memory_mcp_server.py: F821 undefined name, missing except block
1119
+
1120
+ ## [v3.15.0] - 2026-06-26
1121
+
1122
+ ## 🆕 What's New
1123
+
1124
+ - **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
1125
+ - **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
1126
+ - **Inline quick_index():** New function in `index.py` indexes subtask_summary dicts directly (no file scanning), idempotent via content_hash, auto-tags from keywords
1127
+ - **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)
1128
+ - **Background Agent Dispatch:** Pattern documented in `zeus.agent.md` and `orchestration-workflow/SKILL.md` — OpenCode v1.16.2+ background agents with auto-persist
1129
+ - **Auto-Continue Canonical Name:** "relentless" → "auto-continue" across 43 files (skills, commands, agent files, platform copies)
1130
+ - **Tools Format:** 14 agents converted from YAML array (`- tool`) to object format (`tool: true`)
1131
+ - **quick_index path fix:** Scripts now add `scripts/` (parent of vector_memory package) to sys.path instead of their own directory
1132
+ - **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/`
1133
+ - **Exa MCP Server:** `exa-mcp-server` removed from `opencode.json` (redundant with OpenCode native websearch)
1134
+ - **`vector_memory` config key:** Removed from both project and global `opencode.json` (not recognized by OpenCode v1.17.x)
1135
+ - **NOTE0010:** Pantheon v3 Roadmap — 5-phase vision from FTS5 to Plugin Architecture
1136
+ - **TASK-016:** Level 3 Implementation Plan — 24 tasks across 5 phases
1137
+ - **01-active-context.md:** Updated with deepwork v3.15 changes and Two-Tier model
1138
+
1139
+ ## 🐞 Fixed
1140
+
1141
+ - **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
1142
+
1143
+ ## [v3.14.1] - 2026-06-21
1144
+
1145
+ ## 🆕 What's New
1146
+
1147
+ - **Pantheon-Context MCP Experiment:** Removed entire `scripts/pantheon-context-mcp/` directory (server.py, scoring.py, summarizer.py, tests — 12 files, ~1,200 lines)
1148
+ - **Stale Agent References:** Stripped `pantheon-context` tool references from all 14 agent files, `.mcp.json`, `opencode.json`, `ROADMAP.md`
1149
+ - **Auto-Release CI:** Removed `.github/workflows/auto-release.yml` (triggered broken v3.14.0 release on every push to main)
1150
+ - **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
1151
+
1152
+ ## 🐞 Fixed
1153
+
1154
+ - **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)
1155
+ - **CI Release Pipeline:** Added `dry_run` input to manual release workflow, removed auto-merge from release PRs, fixed duplicate steps
1156
+
1157
+ ## [v3.14.0] - 2026-06-20
1158
+
1159
+ ## 🆕 What's New
1160
+
1161
+ - **Codebase Audit:** Comprehensive 5-agent scan — 48 issues found, all resolved
1162
+ - **Mermaid Diagrams:** 5 new diagrams — TDD Cycle (stateDiagram-v2), Artifact Lifecycle (flowchart), Council Synthesis (sequenceDiagram), Architecture (flowchart), Delegation Flow (flowchart)
1163
+ - **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
1164
+ - **Alembic Scaffolding:** `alembic.ini` with env var interpolation, async `env.py`, Mako template, models base with `AsyncAttrs` + `TimestampMixin`
1165
+ - **SQLAlchemy 2.0 Mixins:** `UUIDPrimaryKeyMixin`, `IntegerPrimaryKeyMixin`, `SoftDeleteMixin`, `ActivatableMixin`
1166
+ - **Frontend Scaffolding:** `biome.json` (1.9.4), `tsconfig.json` (strict mode, ES2022), npm scripts (test, lint, typecheck, build, dev)
1167
+ - **Docker Infrastructure:** Multi-stage Dockerfile (build + runtime, non-root), docker-compose.yml (PostgreSQL 16 + API), `.env.example`
1168
+ - **Database Standards:** Async SQLAlchemy 2.0 patterns, connection pooling, migration testing, disaster recovery + 2 Mermaid diagrams
1169
+ - **Documentation Quality:** "When NOT to Use" sections on all 7 main agents, English-only throughout, ROADMAP.md updated
1170
+
1171
+ ## 🐞 Fixed
1172
+
1173
+ - **Dead Agent Purge:** Removed ~150+ references to Echo, Chiron, Argus, Agora across 67+ files (agents, platforms, instructions, skills)
1174
+ - **Portuguese→English:** `docs/platforms/README.md` fully translated, `agents/prometheus.agent.md` mixed-language fixed
1175
+ - **QUICKSTART.md:** Removed duplicate Nyx entry in agent table
1176
+ - **`00-project.md`:** Fixed Argus in architecture diagram, corrected skill path, fixed Portuguese text
1177
+ - **Prometheus Self-Contradiction:** Fixed "MUST NOT deploy (that's @prometheus)" — copy-paste bug from Chiron merge
1178
+ - **Hephaestus Echo Dead Code:** Removed 25-line Echo section that was copy-pasted verbatim
1179
+ - **`seo-config.ts`:** Renamed to `.md` (was Markdown disguised as TypeScript)
1180
+ - **`agent-return-format.instructions.md`:** Fixed Agora reference in artifact table
1181
+ - **`skills/README.md`:** Count corrected from 37→42, stale Chiron/Echo refs updated
1182
+
1183
+ ## [v3.13.0] - 2026-06-20
1184
+
1185
+ ## 🆕 What's New
1186
+
1187
+ - **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)
1188
+ - **New prompts**: `prompts/semantic-summarize.md` for agent-pair aware semantic summarization
1189
+ - **New scripts**: `scripts/scrub-secrets.py` for security scrubbing of compressed content
1190
+ - **Missing infra**: `docs/memory-bank/_xref/_next_id.json` with full key names (decisions/entities/milestones/tasks)
1191
+ - **Safety preflight**: `can_compress()` guard prevents compression of in-progress/escalated/blocked/NEEDS_REVISION artifacts
1192
+ - **Atomic write protocol**: .tmp + fsync + rename with validation for corruption prevention
1193
+ - **14 agent `.agent.md` files** — stripped non-OpenCode frontmatter (`tools:`, `handoffs:`, `agents:`, `color:`, `hidden:`, `mcpServers:`). All agents now use only OpenCode-recognized fields
1194
+ - **Agent count unified** — all files consistently say "14 agents" (removed chiron, echo, argus from counts)
1195
+ - **`instructions/artifact-protocol.instructions.md`** — updated with ZZ artifact format, compression lifecycle, atomic write protocol, budget guardrails
1196
+ - **`instructions/memory-bank-standards.instructions.md`** — updated with compression and recovery section, cross-reference docs
1197
+ - **Context compression** — Level 1 replaced entirely by Level 2 (priority-scored summaries with downstream-aware field masks)
1198
+ - **All 7 platforms regenerated** — commands (pantheon-status, ping) and agents synced across OpenCode, Claude Code, Cursor, Windsurf, Cline, Continue, Copilot
1199
+ - **TUI Plugin** — moved to `plugins-disabled/`, removed from OpenCode config (temporary removal)
1200
+ - **`packages/tui-plugin/`** — source files removed from active tree
1201
+ - **`plugins/pantheon-tui-plugin/`** — secondary plugin source removed
1202
+ - **`platform/opencode/.opencode/package.json`** — stale TUI config removed
1203
+ - **Stale agent references** — chiron, echo, argus, agora references cleaned from 40+ files across platforms, docs, tests, commands
1204
+ - **Missing skill references** — `code-discipline`, `architecture-diagrams` removed from agent references (never existed as skills)
1205
+ - **Platform Conformance Matrix** — 6/6 plataformas passando com 0 falhas
1206
+ - **CI validate** — passing
1207
+ - **Sync Check** — passing
1208
+ - **Auto Release** — published at v3.13.0
1209
+
1210
+ ## 🐞 Fixed
1211
+
1212
+ - **CHANGELOG.md** — removed 4 duplicate v3.12.1 entries and empty v3.12.2 section
1213
+ - **Frontmatter consistency** — all 14 agents now parse cleanly with OpenCode YAML frontmatter
1214
+ - **Cross-platform agent count** — 14 everywhere (was inconsistent: some files said 18, some said 14)
1215
+ - **`.opencode/plugins/pantheon-hooks.ts`** — local OpenCode plugin que executa os 10 hooks de validação via tool.execute.before/after/event
1216
+ - **`sync-platform.sh`** — step 3.6 não synca mais TUI plugin; step 3.7 synca o pantheon-hooks.ts globalmente
1217
+ - **`.gitignore`** — `.opencode/plugins/` agora versionado; `platform/opencode/.opencode/{commands,skills}` ignorados
1218
+ - **`opencode-hooks-plugin` npm** — removido do config (nunca foi publicado como pacote npm)
1219
+ - **`@agora` redirects** — substituídos por `@zeus` em 5 platform files
1220
+ - **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
1221
+ - **Canonical skills** — referências a Chiron em agent-coordination e database-optimization atualizadas para "Model Selection" e "model tier"
1222
+ - **`tools:` field restored to all 14 canonical agents** — re-adicionado de v3.12.2 para o sync engine + conformance tests validarem toolMap keys
1223
+ - **Stale skills removed** — `relentless-mode`, `review-work` (sem fonte canônica) removidos de .clinerules/skills, platform/claude, platform/cline, platform/continue, platform/cursor
1224
+ - **Stale commands removed** — `cancel-relentless`, `token-audit` (sem fonte canônica em commands/) removidos de .clinerules/commands, .continue/commands, .cursor/commands e platform sources
1225
+ - **wisdom-accumulation cleaned from platforms** — nenhum agente referenciava o skill; removido de platform dirs via sync --clean
1226
+ - **All platforms sync:check** — 0 stale files across 7 platforms
1227
+
1228
+ ## [v3.12.0] - 2026-06
1229
+
1230
+ [compare changes](https://github.com/ils15/pantheon/compare/v3.11.0...v3.12.0)
1231
+
1232
+ ## 🆕 What's New
1233
+
1234
+ - **agents:** Add anti-stall resilience and orchestration improvements ([7a61b69](https://github.com/ils15/pantheon/commit/7a61b69))
1235
+ - **agents:** Add /pantheon-status command with version badge + agent registry ([984ec65](https://github.com/ils15/pantheon/commit/984ec65))
1236
+ - **platform:** Add Pantheon TUI sidebar plugin for OpenCode ([09253c1](https://github.com/ils15/pantheon/commit/09253c1))
1237
+ - **release:** Sync version to v3.11.0 ([1a9fb64](https://github.com/ils15/pantheon/commit/1a9fb64))
1238
+
1239
+ ## 🐞 Fixed
1240
+
1241
+ - **ci:** Sync platform files and add mcp-security skill to pass CI ([a27a245](https://github.com/ils15/pantheon/commit/a27a245))
1242
+
1243
+ ## [v3.9.0] - 2026-05-28
1244
+
1245
+ [compare changes](https://github.com/ils15/pantheon/compare/v3.8.4...v3.9.0)
1246
+
1247
+ ## 🆕 What's New
1248
+
1249
+ - Setup changelogen + git-cliff for auto-releases ([ce4ee22](https://github.com/ils15/pantheon/commit/ce4ee22))
1250
+ - Cleanup commands, fix subtask agent, add Context7 tools, improve sync script ([da6ed7c](https://github.com/ils15/pantheon/commit/da6ed7c))
1251
+
1252
+ ## 🐞 Fixed
1253
+
1254
+ - Add missing closing brace for github configuration in opencode.json ([a63c522](https://github.com/ils15/pantheon/commit/a63c522))
1255
+ - Address PR review sync and mapping feedback ([c550049](https://github.com/ils15/pantheon/commit/c550049))
1256
+ - Sync version to 3.8.4, fix versioning.mjs apply bug, add version check script ([141a6b1](https://github.com/ils15/pantheon/commit/141a6b1))
1257
+ - Add CHANGELOG entry for v3.8.4 to fix CI validate failure ([58cc0f5](https://github.com/ils15/pantheon/commit/58cc0f5))
1258
+ - **ci:** Auto-release cria PR com auto-merge ao invés de push direto pra main ([e4f78c9](https://github.com/ils15/pantheon/commit/e4f78c9))
1259
+
1260
+ [v3.19.0]: https://github.com/ils15/pantheon/compare/v3.18.0...v3.19.0