@galaxy-stack/ai-coder-core 0.3.0-alpha.9 → 0.3.1

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 (144) hide show
  1. package/CHANGELOG.d/2026-09-19-advisory-guard-policy.md +1 -1
  2. package/CHANGELOG.d/2026-09-26-binary-review-pipe-guidance-finalization-test.md +14 -0
  3. package/CHANGELOG.d/2026-09-26-cache-capability-and-mcp-reconnect.md +16 -0
  4. package/CHANGELOG.d/2026-09-26-cache-hit-harness.md +13 -0
  5. package/CHANGELOG.d/2026-09-26-cache-hit-rate-and-inhistory-option.md +12 -0
  6. package/CHANGELOG.d/2026-09-26-cumulative-cache-hit.md +13 -0
  7. package/CHANGELOG.d/2026-09-26-finalization-prefix-and-verified-inhistory.md +12 -0
  8. package/CHANGELOG.d/2026-09-26-generated-state-and-churn-guard.md +16 -0
  9. package/CHANGELOG.d/2026-09-26-mcp-reconnect-fixture.md +11 -0
  10. package/CHANGELOG.d/2026-09-26-memory-hybrid-semantic-consolidation.md +16 -0
  11. package/CHANGELOG.d/2026-09-26-memory-recall-benchmark.md +12 -0
  12. package/CHANGELOG.d/2026-09-26-ollama-cache-usage.md +14 -0
  13. package/CHANGELOG.d/2026-09-26-ollama-embeddings-provider.md +13 -0
  14. package/CHANGELOG.d/2026-09-26-rerecord-live-fixture.md +6 -0
  15. package/CHANGELOG.d/2026-09-26-skill-index-signing.md +11 -0
  16. package/CHANGELOG.d/2026-09-26-skill-version-and-marketplace.md +14 -0
  17. package/CHANGELOG.d/2026-09-27-workspace-derived-build-output.md +16 -0
  18. package/CHANGELOG.d/2026-09-28-advisory-lenh-check-va-server.md +26 -0
  19. package/CHANGELOG.d/2026-09-28-clamp-tham-so-vuot-cap.md +20 -0
  20. package/CHANGELOG.d/2026-09-28-digest-context-item.md +16 -0
  21. package/CHANGELOG.d/2026-09-28-gate-bo-qua-path-da-xoa.md +20 -0
  22. package/CHANGELOG.d/2026-09-28-ngan-sach-luot-finalization.md +20 -0
  23. package/CHANGELOG.d/2026-09-28-scope-cua-project-validate.md +22 -0
  24. package/CHANGELOG.d/2026-09-28-staleness-theo-pham-vi.md +22 -0
  25. package/CHANGELOG.d/2026-09-28-thong-bao-guard-dependency.md +24 -0
  26. package/CHANGELOG.d/2026-09-28-thu-tu-mandatory-state-cache.md +20 -0
  27. package/CHANGELOG.d/2026-09-29-advisory-doc-source-node-modules-bang-shell.md +24 -0
  28. package/CHANGELOG.d/2026-09-29-retry-khi-model-dung-vi-output-length.md +21 -0
  29. package/CHANGELOG.d/README.md +3 -0
  30. package/CHANGELOG.md +78 -1
  31. package/README.md +10 -10
  32. package/dist/adapters/node/config/manual-provider-config.d.ts +3 -0
  33. package/dist/adapters/node/config/manual-provider-config.d.ts.map +1 -1
  34. package/dist/adapters/node/config/manual-provider-config.js +4 -0
  35. package/dist/adapters/node/config/manual-provider-config.js.map +1 -1
  36. package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts.map +1 -1
  37. package/dist/adapters/node/host/node-workspace-evidence-verifier.js +8 -13
  38. package/dist/adapters/node/host/node-workspace-evidence-verifier.js.map +1 -1
  39. package/dist/adapters/node/host/node-workspace-port.d.ts +1 -1
  40. package/dist/adapters/node/host/node-workspace-port.d.ts.map +1 -1
  41. package/dist/adapters/node/host/node-workspace-port.js +47 -4
  42. package/dist/adapters/node/host/node-workspace-port.js.map +1 -1
  43. package/dist/adapters/node/host/node-workspace-snapshot.d.ts.map +1 -1
  44. package/dist/adapters/node/host/node-workspace-snapshot.js +60 -4
  45. package/dist/adapters/node/host/node-workspace-snapshot.js.map +1 -1
  46. package/dist/adapters/node/host/project-tools.d.ts.map +1 -1
  47. package/dist/adapters/node/host/project-tools.js +8 -1
  48. package/dist/adapters/node/host/project-tools.js.map +1 -1
  49. package/dist/adapters/node/host/workspace-generated-state.d.ts +8 -0
  50. package/dist/adapters/node/host/workspace-generated-state.d.ts.map +1 -0
  51. package/dist/adapters/node/host/workspace-generated-state.js +8 -0
  52. package/dist/adapters/node/host/workspace-generated-state.js.map +1 -0
  53. package/dist/adapters/node/mcp/mcp-client.d.ts +7 -2
  54. package/dist/adapters/node/mcp/mcp-client.d.ts.map +1 -1
  55. package/dist/adapters/node/mcp/mcp-client.js +41 -6
  56. package/dist/adapters/node/mcp/mcp-client.js.map +1 -1
  57. package/dist/adapters/node/memory/ollama-embeddings.d.ts +26 -0
  58. package/dist/adapters/node/memory/ollama-embeddings.d.ts.map +1 -0
  59. package/dist/adapters/node/memory/ollama-embeddings.js +98 -0
  60. package/dist/adapters/node/memory/ollama-embeddings.js.map +1 -0
  61. package/dist/adapters/node/memory/sqlite-memory.d.ts +16 -3
  62. package/dist/adapters/node/memory/sqlite-memory.d.ts.map +1 -1
  63. package/dist/adapters/node/memory/sqlite-memory.js +138 -16
  64. package/dist/adapters/node/memory/sqlite-memory.js.map +1 -1
  65. package/dist/adapters/node/provider/ollama-chat-stream.d.ts.map +1 -1
  66. package/dist/adapters/node/provider/ollama-chat-stream.js +4 -0
  67. package/dist/adapters/node/provider/ollama-chat-stream.js.map +1 -1
  68. package/dist/adapters/node/provider/ollama-coding-model.d.ts +16 -2
  69. package/dist/adapters/node/provider/ollama-coding-model.d.ts.map +1 -1
  70. package/dist/adapters/node/provider/ollama-coding-model.js +18 -0
  71. package/dist/adapters/node/provider/ollama-coding-model.js.map +1 -1
  72. package/dist/adapters/node/skills/directory-skills.d.ts.map +1 -1
  73. package/dist/adapters/node/skills/directory-skills.js +16 -1
  74. package/dist/adapters/node/skills/directory-skills.js.map +1 -1
  75. package/dist/adapters/node/skills/skill-marketplace.d.ts +71 -0
  76. package/dist/adapters/node/skills/skill-marketplace.d.ts.map +1 -0
  77. package/dist/adapters/node/skills/skill-marketplace.js +259 -0
  78. package/dist/adapters/node/skills/skill-marketplace.js.map +1 -0
  79. package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -1
  80. package/dist/adapters/node/tools/tool-executor.js +36 -15
  81. package/dist/adapters/node/tools/tool-executor.js.map +1 -1
  82. package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -1
  83. package/dist/adapters/node/tools/workspace-review.js +51 -12
  84. package/dist/adapters/node/tools/workspace-review.js.map +1 -1
  85. package/dist/agent/index.d.ts +17 -0
  86. package/dist/agent/index.d.ts.map +1 -1
  87. package/dist/agent/index.js.map +1 -1
  88. package/dist/context/checkpoint.js +1 -1
  89. package/dist/context/checkpoint.js.map +1 -1
  90. package/dist/context/context-manager.d.ts +27 -1
  91. package/dist/context/context-manager.d.ts.map +1 -1
  92. package/dist/context/context-manager.js +54 -7
  93. package/dist/context/context-manager.js.map +1 -1
  94. package/dist/context/context-profile.d.ts.map +1 -1
  95. package/dist/context/context-profile.js +6 -2
  96. package/dist/context/context-profile.js.map +1 -1
  97. package/dist/context/token-ledger.d.ts +9 -0
  98. package/dist/context/token-ledger.d.ts.map +1 -1
  99. package/dist/context/token-ledger.js +8 -0
  100. package/dist/context/token-ledger.js.map +1 -1
  101. package/dist/ports/capability-port.d.ts +8 -0
  102. package/dist/ports/capability-port.d.ts.map +1 -1
  103. package/dist/ports/workspace-port.d.ts +2 -1
  104. package/dist/ports/workspace-port.d.ts.map +1 -1
  105. package/dist/prompt/prompt-assembler.d.ts +1 -1
  106. package/dist/prompt/prompt-assembler.d.ts.map +1 -1
  107. package/dist/prompt/prompt-assembler.js +12 -4
  108. package/dist/prompt/prompt-assembler.js.map +1 -1
  109. package/dist/runtime/completion-gate.d.ts +1 -0
  110. package/dist/runtime/completion-gate.d.ts.map +1 -1
  111. package/dist/runtime/completion-gate.js +54 -11
  112. package/dist/runtime/completion-gate.js.map +1 -1
  113. package/dist/runtime/run-controller.d.ts +6 -0
  114. package/dist/runtime/run-controller.d.ts.map +1 -1
  115. package/dist/runtime/run-controller.js +146 -14
  116. package/dist/runtime/run-controller.js.map +1 -1
  117. package/dist/runtime/runtime-error.d.ts +1 -1
  118. package/dist/runtime/runtime-error.d.ts.map +1 -1
  119. package/dist/runtime/runtime-error.js.map +1 -1
  120. package/dist/runtime/runtime-types.d.ts +10 -0
  121. package/dist/runtime/runtime-types.d.ts.map +1 -1
  122. package/dist/runtime/workspace-generated-path.d.ts +26 -0
  123. package/dist/runtime/workspace-generated-path.d.ts.map +1 -0
  124. package/dist/runtime/workspace-generated-path.js +61 -0
  125. package/dist/runtime/workspace-generated-path.js.map +1 -0
  126. package/dist/tools/command-shape.d.ts +11 -0
  127. package/dist/tools/command-shape.d.ts.map +1 -0
  128. package/dist/tools/command-shape.js +76 -0
  129. package/dist/tools/command-shape.js.map +1 -0
  130. package/dist/tools/json-schema.d.ts +13 -0
  131. package/dist/tools/json-schema.d.ts.map +1 -1
  132. package/dist/tools/json-schema.js +45 -0
  133. package/dist/tools/json-schema.js.map +1 -1
  134. package/dist/tools/tool-registry.js +2 -2
  135. package/dist/tools/tool-registry.js.map +1 -1
  136. package/dist/tools/validation-scope.d.ts +14 -0
  137. package/dist/tools/validation-scope.d.ts.map +1 -0
  138. package/dist/tools/validation-scope.js +16 -0
  139. package/dist/tools/validation-scope.js.map +1 -0
  140. package/docs/ARCHITECTURE.md +1 -1
  141. package/docs/CACHE_HIT.md +109 -0
  142. package/docs/GALAXY_AGENT_PLATFORM_TODO.md +11 -2
  143. package/docs/SKILL_MARKETPLACE.md +59 -0
  144. package/package.json +1 -1
@@ -4,7 +4,7 @@
4
4
 
5
5
  - `AiCoderRunBudget.noProgressPolicy`: `advisory` (mặc định) và `strict`.
6
6
  - `AiCoderRunBudget.observationNudgeThresholds` (mặc định `[3, 5, 8]`, theo
7
- tư tưởng repeat-tool-reminder của DeepSeek Harness): các mốc nhắc advisory
7
+ tư tưởng repeat-tool-reminder của DSH gốc): các mốc nhắc advisory
8
8
  cho observation đọc-only; block chỉ xảy ra sau mốc cuối.
9
9
  - Checkpoint lưu `noProgress.policy` và `noProgress.observationNudgeThresholds`;
10
10
  resume với cấu hình khác bị từ chối `CHECKPOINT_INCOMPATIBLE`, checkpoint cũ
@@ -0,0 +1,14 @@
1
+ # 2026-09-26 — Binary review không chặn, pipe guidance, test finalization
2
+
3
+ Vùng: adapters/tools, prompt, runtime/test
4
+
5
+ ## Sau
6
+ - `NodeWorkspaceReviewExecutor`: file **nhị phân/quá lớn** (không đọc được text ổn định) được review **theo hash** với `textReviewed: false` và `opaquePaths` disclosure, thay vì throw `WORKSPACE_REVIEW_FAILED`. `diff_review` evidence vẫn được cấp (hash bao gồm hash file). Entry đặc biệt (symlink/other) và thay đổi đồng thời vẫn fail-closed.
7
+ - Prompt `editing-command-policy` 2.2.0 (prompt `ai-coder-single/2.8.0`): cấm pipe khi cần exit code (`| tail/head/cat/grep` che mã thoát), dùng `validate_project`.
8
+ - Test deterministic `cache-hit.test.ts`: finalization append-only giữ prefix (>95%) còn projection thì sập (<50%).
9
+
10
+ ## Bối cảnh
11
+ - Run GymFlow: `review_changes` fail trên `hero.png` ở turn ~31 rồi lại pass ở turn ~40 (không nhất quán), và model từng đọc sai exit code do pipe.
12
+
13
+ ## Test hồi quy
14
+ - `test/workspace-review.test.ts` (binary), `test/cache-hit.test.ts` (finalization), `test/dist-smoke.mjs` (prompt version).
@@ -0,0 +1,16 @@
1
+ # 2026-09-26 — Cache capability và MCP reconnect
2
+
3
+ Vùng: runtime/prompt/adapters
4
+
5
+ ## Trước
6
+ - Không có cách để route khai báo prefix cache hay cách cập nhật system prompt; runtime luôn ghi đè node 0 khi prompt đổi (lazy activation) → mất prefix cache.
7
+ - MCP client không reconnect khi transport lỗi giữa run.
8
+
9
+ ## Sau
10
+ - `ModelCapabilities` thêm `promptCache` và `systemPromptUpdate` (tùy chọn, mặc định coi như in-place).
11
+ - `AiCoderContextManager.replaceSystemPrompt(..., mode)` hỗ trợ `in-history`: append system prompt mới sau history (giữ head byte-stable) khi route khai báo `in-history`; `in-place` giữ hành vi cũ và dọn các node in-history. `addItem` dedup theo content.
12
+ - Ollama adapter khai báo `promptCache: "unknown"`, `systemPromptUpdate: "unknown"` (không tự nhận hỗ trợ).
13
+ - `McpAgentClient` reconnect sau lỗi transport và retry **chỉ** tool read-only; mutation giữ unknown outcome.
14
+
15
+ ## Test hồi quy
16
+ - `test/cache-prompt.test.ts`: in-history append + dedup; in-place rewrite + dọn node in-history.
@@ -0,0 +1,13 @@
1
+ # 2026-09-26 — Cache-hit (prefix reuse) harness
2
+
3
+ Vùng: runtime/prompt
4
+
5
+ ## Sau
6
+ - `test/cache-hit.test.ts` mô phỏng prefix cache bằng token hoá request và đo **tỷ lệ tái dùng prefix** khi prompt đổi giữa run:
7
+ - `in-history` (append system prompt sau history) giữ prefix cũ → reuse cao (>90%);
8
+ - `in-place` (ghi đè node 0) → reuse sụp (<50%).
9
+ - Assert ledger ghi `cachedInput` từ `prompt_cache_hit_tokens`/`cached_tokens`.
10
+ - Đây là công cụ đo deterministic cho H-full; không cần provider.
11
+
12
+ ## Test hồi quy
13
+ - `test/cache-hit.test.ts` (2 case); chạy trong `npm run verify`.
@@ -0,0 +1,12 @@
1
+ # 2026-09-26 — Cache hit rate, token_ledger event, và systemPromptUpdate option
2
+
3
+ Vùng: runtime/context/adapters
4
+
5
+ ## Sau
6
+ - `AiCoderTokenLedgerEntry` thêm `cacheHitRate`; log `trace.token_ledger` giờ có số này.
7
+ - Runtime phát event `token_ledger` (`actualInput/cachedInput/cacheHitRate/outputTokens/turn`) để host hiển thị live.
8
+ - `OllamaCodingModel` nhận option `systemPromptUpdate` (`in-place|in-history|unknown`, mặc định unknown).
9
+ - `docs/CACHE_HIT.md`: cách đo, baseline Ollama, và quy trình kiểm chứng template trước khi bật in-history (kết quả gemma3: đọc system message mới nhất).
10
+
11
+ ## Test hồi quy
12
+ - `test/cache-hit.test.ts`: cacheHitRate, capability in-history của adapter.
@@ -0,0 +1,13 @@
1
+ # 2026-09-26 — Cache hit luỹ kế
2
+
3
+ Vùng: context/runtime
4
+
5
+ ## Sau
6
+ - `AiCoderTokenLedgerEntry` thêm `cumulativeActualInput`, `cumulativeCachedInput`, `cumulativeCacheHitRate`.
7
+ - Event `token_ledger` mang thêm `cumulativeCacheHitRate` để host hiển thị số kiểu phiên (như DSH), tách khỏi per-turn.
8
+
9
+ ## Lý do
10
+ - Per-turn `cacheHitRate` dao động mạnh khi context phình/đổi prefix; số luỹ kế phản ánh tỷ lệ prefix tái dùng của cả phiên.
11
+
12
+ ## Test hồi quy
13
+ - `test/cache-hit.test.ts`: cộng dồn qua 2 lượt (200 actual / 120 cached → 0.6).
@@ -0,0 +1,12 @@
1
+ # 2026-09-26 — Finalization tool-free, allowlist in-history, cache accounting
2
+
3
+ Vùng: runtime/adapters/context
4
+
5
+ ## Sau
6
+ - Lượt finalization vẫn **tool-free** + project context (host conformance): lượt cuối không gửi tool definitions và không dispatch tool call. (Thử nghiệm giữ tools để tối ưu cache đã bị revert vì vi phạm conformance.)
7
+ - `OllamaCodingModel` map `promptCache: "supported"` (Ollama báo `prompt_eval_cached_count`).
8
+ - `verifiedSystemPromptUpdate(model)`: mặc định `in-history` cho model đã probe template (`gemma3*`, `deepseek-v4.1-flash*`); còn lại in-place. Option `systemPromptUpdate` luôn thắng.
9
+ - Token ledger thêm `cachedInput`, `cacheHitRate` và luỹ kế phiên (`cumulativeCacheHitRate`); map `prompt_eval_cached_count` → `cachedInputTokens`.
10
+
11
+ ## Test hồi quy
12
+ - `test/cache-hit.test.ts`: allowlist verified/unverified, capability override, cumulative ledger.
@@ -0,0 +1,16 @@
1
+ # 2026-09-26 — Generated-state evidence boundary
2
+
3
+ Vùng: runtime/host
4
+
5
+ ## Trước
6
+ - Snapshotter coi `dist/`, `coverage/`, build output là durable writes, trong khi evidence verifier bỏ qua chúng. Hai chính sách lệch nhau khiến completion gate đòi validation/diff review cho build output, fingerprint đổi mỗi lần typecheck → run lặp build→xoá→validate tới `maxTurns`.
7
+
8
+ ## Sau
9
+ - Policy generated-state **runtime-neutral** (`src/runtime/workspace-generated-path.ts`; adapter `workspace-generated-state.ts` re-export).
10
+ - **Snapshotter** vẫn báo build output (`dist`, `build`, `coverage`, `out`) là **durable host effect** để `run_command` chứng minh mutation nó tạo; chỉ caches/`node_modules`/`*.tsbuildinfo`/`.DS_Store`/`.eslintcache` là derived. Evidence verifier luôn verify active files kể cả trong ignored dir.
11
+ - **Runtime** lọc generated path khỏi **authored evidence** (`session.evidence.writes`) và khỏi `durableAuthoredProgress`: build output không reset no-progress budget cũng không đòi validation/write evidence.
12
+ - Prompt `tool-policy` 2.3.0 (prompt `ai-coder-single/2.8.0`): load first-party skill trước; không pipe khi cần exit code.
13
+
14
+ ## Test hồi quy
15
+ - `test/workspace-generated-state.test.ts`: predicate + snapshot durable/derived + fingerprint.
16
+ - `test/dist-smoke.mjs` cập nhật prompt version.
@@ -0,0 +1,11 @@
1
+ # 2026-09-26 — Failure-injection test cho MCP reconnect
2
+
3
+ Vùng: adapters/mcp
4
+
5
+ ## Sau
6
+ - Thêm fixture `test/mcp-crash-fixture.mjs` (tự `process.exit` giữa call) và `test/mcp-reconnect.test.ts`:
7
+ - tool read-only được reconnect + retry và thành công;
8
+ - tool mutating **không** bị retry ngầm, nhưng kết nối được phục hồi cho call sau.
9
+
10
+ ## Test hồi quy
11
+ - `npx tsx --test test/mcp-reconnect.test.ts` (2 case).
@@ -0,0 +1,16 @@
1
+ # 2026-09-26 — Memory hybrid ranking, semantic port và consolidation
2
+
3
+ Vùng: adapters/memory
4
+
5
+ ## Trước
6
+ - `search` chỉ sắp theo bm25 + updated_at; không có semantic, không có consolidation; vector/embedding không tồn tại.
7
+
8
+ ## Sau
9
+ - Xếp hạng hybrid: lexical (FTS5 bm25) + **optional** semantic cosine + recency (half-life 14 ngày) + trust, trên cùng một candidate pool.
10
+ - `AgentEmbeddingPort` (tùy chọn, capability-gated): host cấp provider thì lưu vector `Float32` vào `memory_embeddings(model, dims, vector)`; không có provider thì giữ lexical + recency. Vector được dọn bằng trigger khi xoá memory.
11
+ - Không có lexical hit mà có embedding → fallback về recent active để rank semantic.
12
+ - `consolidate({ keepSupersededRevisions })`: prune revision đã superseded + xoá orphan embedding; port có method tùy chọn.
13
+ - CLI thêm `blackhole memory consolidate`.
14
+
15
+ ## Test hồi quy
16
+ - `test/memory-hybrid.test.ts`: trust tie-break, semantic không cần lexical hit, prune superseded, embedding bị xoá khi forget.
@@ -0,0 +1,12 @@
1
+ # 2026-09-26 — Memory recall benchmark
2
+
3
+ Vùng: adapters/memory (test)
4
+
5
+ ## Sau
6
+ - Bộ nhãn dùng chung `test/helpers/recall-set.ts`: 8 note tiếng Việt + 8 truy vấn paraphrase/cross-lingual, cùng embedder giả deterministic.
7
+ - `test/memory-recall.test.ts` (offline): so recall@1/@3 lexical vs hybrid+semantic; kết quả đo `lexical@1=0% @3=13%` vs `semantic@1=100% @3=100%`.
8
+ - `test/embedding-live.test.ts` (env-gated) chạy cùng bộ nhãn với model thật; live `bge-m3` cho `lexical@1=0% @3=13%` vs `semantic@1=88% @3=100%`.
9
+
10
+ ## Test hồi quy
11
+ - Offline: `test/memory-recall.test.ts`.
12
+ - Live: `GALAXY_LIVE_EMBEDDINGS=1 GALAXY_EMBEDDING_MODEL=bge-m3 GALAXY_EMBEDDING_BASE_URL=http://127.0.0.1:11434 npx tsx --test test/embedding-live.test.ts`.
@@ -0,0 +1,14 @@
1
+ # 2026-09-26 — Ollama báo cache; adapter map vào token ledger
2
+
3
+ Vùng: adapters/provider
4
+
5
+ ## Trước
6
+ - Bộ chuẩn hoá Ollama chỉ đọc `prompt_eval_count`/`eval_count`, bỏ qua cache; tài liệu nội bộ cho rằng Ollama không báo cache-hit.
7
+
8
+ ## Sau
9
+ - Ollama >= 0.34 báo cache prefix: native `/api/chat` trả `prompt_eval_cached_count`, `/v1` trả `prompt_tokens_details.cached_tokens` (đã đo trực tiếp với `gemma3:latest`: 24/29 cached).
10
+ - `ollama-chat-stream.ts` map `prompt_eval_cached_count` → `cachedInputTokens` trong usage; `token-ledger` đã có `cachedInput` nên log `trace.token_ledger` giờ hiển thị số cache-hit.
11
+ - ⇒ Cache-hit của H-full **đo được live với Ollama, miễn phí**, không cần adapter DeepSeek-official.
12
+
13
+ ## Test hồi quy
14
+ - `test/cache-hit.test.ts`: map `prompt_eval_cached_count` + ledger `cachedInput`.
@@ -0,0 +1,13 @@
1
+ # 2026-09-26 — Ollama embedding provider
2
+
3
+ Vùng: adapters/memory/config
4
+
5
+ ## Sau
6
+ - `adapters/node/memory/ollama-embeddings.ts`: `OllamaEmbeddings` gọi `/api/embed`, batch ≤64, response bounded 4 MiB, timeout, kiểm tra vector hợp lệ; **không gửi credential tới endpoint localhost**.
7
+ - `ResolvedOllamaConnection` thêm optional `embeddingModel`/`embeddingBaseUrl` đọc từ cùng entry manual.
8
+ - `test/ollama-embeddings.test.ts` (fake fetch): batch, credential localhost vs remote, response lỗi.
9
+ - `test/embedding-live.test.ts` (skip mặc định, bật bằng `GALAXY_LIVE_EMBEDDINGS=1`): semantic recall cho paraphrase tiếng Việt và cross-lingual; đã chạy live với `bge-m3`.
10
+
11
+ ## Test hồi quy
12
+ - Deterministic: `test/ollama-embeddings.test.ts`.
13
+ - Live: `GALAXY_LIVE_EMBEDDINGS=1 GALAXY_EMBEDDING_MODEL=bge-m3 GALAXY_EMBEDDING_BASE_URL=http://127.0.0.1:11434 npx tsx --test test/embedding-live.test.ts`.
@@ -0,0 +1,6 @@
1
+ # 2026-09-26 — Re-record live replay fixture
2
+
3
+ Vùng: testing
4
+
5
+ ## Sau
6
+ - `testing/live/recordings/01-write-and-validate.json` được re-record với prompt `ai-coder-single/2.8.0` (contract + recorded bodies). Fixture cũ ghi `2.6.0` nên `recorded-session-replay` báo "Re-record the fixture".
@@ -0,0 +1,11 @@
1
+ # 2026-09-26 — Ký số skill index (Ed25519 trust)
2
+
3
+ Vùng: adapters/skills
4
+
5
+ ## Sau
6
+ - Index nhận `signature` (base64 Ed25519) trên canonical JSON (key sắp xếp, bỏ `signature`).
7
+ - `SkillMarketplace` nhận `publicKey` (PEM); khi có key thì index **bắt buộc** chữ ký hợp lệ, sai/thiếu bị từ chối (fail-closed). Không key → unsigned chấp nhận.
8
+ - Export `stableSkillIndexJson`, `signSkillIndex`, `verifySkillIndexSignature`; script publisher `scripts/sign-skill-index.mjs`.
9
+
10
+ ## Test hồi quy
11
+ - `test/skill-marketplace.test.ts`: ký hợp lệ cài được; tamper/thiếu chữ ký/sai key đều bị từ chối.
@@ -0,0 +1,14 @@
1
+ # 2026-09-26 — Skill versioning và marketplace
2
+
3
+ Vùng: adapters/skills
4
+
5
+ ## Trước
6
+ - Skill chỉ có name/description; không version, không cài/update; không có registry.
7
+
8
+ ## Sau
9
+ - Frontmatter nhận thêm `version` (semver) và `tags`; `SkillDescriptor` expose `version`/`tags`. Sai định dạng bị từ chối.
10
+ - `SkillMarketplace`: index JSON (schemaVersion 1) từ **path hoặc HTTP(S) URL**; resolve semver (`*`, exact, `^`, `~`); tải nội dung (bounded), **verify sha256**, ghi atomic mode 0600 ngoài workspace; `search/install/update/remove/listInstalled`; chặn downgrade ngầm và path traversal.
11
+ - Vì core là typed ports, marketplace không tự chạy; host cấu hình index.
12
+
13
+ ## Test hồi quy
14
+ - `test/skill-marketplace.test.ts`: install/resolve/update/remove, idempotent, verify sha256 (tamper reject), discoverable qua `DirectorySkills`.
@@ -0,0 +1,16 @@
1
+ # 2026-09-27 — Build output là derived, manifest workspace
2
+
3
+ Vùng: runtime/host
4
+
5
+ ## Sau
6
+ - Snapshotter dùng `isGeneratedWorkspacePath(segments)` nên `dist/`, `build/`,
7
+ `coverage/` và `*.tsbuildinfo` được xếp `derived` thay vì `durable write`.
8
+ Validation/diff-review không còn stale khi build sinh lại output — trước đây
9
+ gate lặp tới `maxTurns`.
10
+ - Hợp nhất derived dirs từ `.gitignore` (pattern thư mục) và từ
11
+ `.galaxy/workspace.json` — manifest agent cập nhật khi dự án mở rộng.
12
+ `.galaxy/` là generated state nên ghi manifest không void validation.
13
+ - Prompt nhắc ghi `.galaxy/workspace.json` sau khi validation sinh build output.
14
+
15
+ ## Test hồi quy
16
+ - `npm run verify` (core) + `npm test` galaxy-code (90/90).
@@ -0,0 +1,26 @@
1
+ # 2026-09-28 — Advisory khi lệnh shell trùng check dự án hoặc chạy server
2
+
3
+ Vùng: tools/prompt
4
+
5
+ ## Trước
6
+ - Model chạy `bun test`/`tsc --noEmit` bằng shell song song với `validate_project`
7
+ — tốn lượt mà **không** sinh completion evidence (3 lần trong một bước E2E).
8
+ - Model tự bật dev server để "chứng minh" dự án chạy được (xem mục 1 của journal).
9
+
10
+ ## Sau
11
+ - `command.run` trả advisory khi lệnh là check **toàn dự án** hoặc khi lệnh giống
12
+ server/watch. Advisory của check nói **đúng call cần gọi**, suy ra từ chính lệnh:
13
+ `cd gymflow-backend && bunx tsc --noEmit` ⇒
14
+ `validate_project {"path":"gymflow-backend","checks":["typecheck"]}` (đường dẫn lấy
15
+ từ `cd` trong lệnh, nếu không có thì lấy `cwd` của tool call); nhận cả dạng
16
+ runner `bunx`/`npx`/`pnpx`/`exec`/`dlx`.
17
+ - Lệnh nhắm một file (`bun test src/x.spec.ts`) **không** bị nhắc, vì
18
+ `validate_project` không diễn đạt được; package reference (`vite@latest`) và
19
+ đường dẫn (`assets/vite.svg`) không bị coi là server.
20
+ - Prompt `editing-command-policy` v2.3.0: server nền không phải supervision cũng
21
+ không phải evidence; xoá file probe trước khi validate; không probe API bằng
22
+ `bun -e`/`node -e`.
23
+
24
+ ## Test hồi quy
25
+ - `test/command-shape.test.ts`.
26
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục 7, 8, 9.
@@ -0,0 +1,20 @@
1
+ # 2026-09-28 — Clamp tham số vượt cap thay vì từ chối tool call
2
+
3
+ Vùng: tools/adapter
4
+
5
+ ## Trước
6
+ - `run_command` với `timeoutMs` > 600000 trả `INVALID_TOOL_ARGUMENTS`
7
+ (`$.timeoutMs lớn hơn maximum=600000.`): cả lệnh không chạy, mất một lượt model,
8
+ dù host luôn tự chặn ở 10 phút.
9
+
10
+ ## Sau
11
+ - `clampAiCoderJsonSchemaNumbers` kéo số vượt `maximum` về đúng cap, đi đệ quy
12
+ theo `properties`/`items`/`$ref`, và nối ghi chú
13
+ `Arguments clamped to host limits: …` vào summary trả cho model.
14
+ - Giá trị dưới `minimum`, sai kiểu và mọi vi phạm khác vẫn fail như cũ.
15
+ - Kèm sửa test `contracts.test.ts` còn đọc `input.precondition.kind` sau khi
16
+ precondition thành optional — lỗi này làm `npm run typecheck` (và CI) đỏ ở HEAD.
17
+
18
+ ## Test hồi quy
19
+ - `test/json-schema-clamp.test.ts` (5 case), `npm run verify`.
20
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục 2 và 3.
@@ -0,0 +1,16 @@
1
+ # 2026-09-28 — Fingerprint từng context item mỗi lượt (chẩn đoán cache)
2
+
3
+ Vùng: context/diagnostics
4
+
5
+ ## Trước
6
+ - `context_diagnostic` chỉ có tổng token theo nhóm; khi cache hit thấp không thể
7
+ biết block nào đổi đã reset prefix cache.
8
+
9
+ ## Sau
10
+ - Mỗi lượt ghi thêm `itemDigests` (index, id, kind, tokens, hash theo đúng thứ tự
11
+ gửi, tối đa 24 item) và `toolHash`/`toolTokens` của block tool. Diff hai lượt
12
+ liên tiếp là ra item phá cache — chính cách tìm ra mục 6 của journal.
13
+ - Chỉ thêm dữ liệu chẩn đoán; không đổi cách chọn context hay nội dung prompt.
14
+
15
+ ## Test hồi quy
16
+ - `npm run verify`; dùng thực tế trong E2E 2026-09-28.
@@ -0,0 +1,20 @@
1
+ # 2026-09-28 — Gate không đòi validation cho path đã bị xoá
2
+
3
+ Vùng: runtime/completion-gate
4
+
5
+ ## Trước
6
+ - Mọi write trong evidence đều bị đòi validation sau nó, kể cả khi path **đã bị xoá**
7
+ trong cùng run. Một bước E2E viết file probe `.e2e-sale-check.ts` để chạy thử
8
+ luồng bán gói rồi xoá đi, và vẫn nhận 2 mục
9
+ `WRITE_NOT_VALIDATED: .e2e-sale-check.ts` ⇒ phải validate lại vô ích.
10
+
11
+ ## Sau
12
+ - `removedPaths` = các path có `afterHash === null` (đã xoá); write tới path đó
13
+ (hoặc chính write xoá) **không** còn đòi validation. Kiểm tra
14
+ `WRITE_EVIDENCE_INVALID` vẫn áp dụng cho mọi write như cũ.
15
+ - Không nới lỏng gì khác: write còn tồn tại vẫn phải có validation sau nó.
16
+
17
+ ## Test hồi quy
18
+ - `test/completion-gate-scope.test.ts`: "a path written and then removed does not
19
+ demand validation".
20
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục 11.
@@ -0,0 +1,20 @@
1
+ # 2026-09-28 — Hết ngân sách lượt thì finalize một lượt trước khi fail
2
+
3
+ Vùng: runtime
4
+
5
+ ## Trước
6
+ - Chạm `maxTurns` là ném `MAX_TURNS` ngay, kể cả khi evidence đã đủ: một bước E2E
7
+ fail với `reached maxTurns=48` ngay sau khi tool cuối trả "Project validation
8
+ passed" (11 validation pass, 21 mutation, hai call cuối là review → validate).
9
+ - CLI không có cách nâng trần, deadline host còn bị hard-code 15 phút.
10
+
11
+ ## Sau
12
+ - Hết lượt ⇒ cấp **đúng một lượt finalization không tool** để model báo cáo trạng
13
+ thái đã có; completion gate vẫn là bên quyết định; hết lượt lần hai mới fail
14
+ `MAX_TURNS`. Có trace `policy_decision: budget_finalization_turn`.
15
+ - CLI thêm `--max-turns <n>` và `--run-minutes <n>`; budget controller được canh
16
+ thẳng với deadline host.
17
+
18
+ ## Test hồi quy
19
+ - `npm run verify` (core) + `npm run check` (galaxy-code, test parse flag).
20
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục 5.
@@ -0,0 +1,22 @@
1
+ # 2026-09-28 — project.validate ghi đúng phạm vi theo project path
2
+
3
+ Vùng: tools/executor
4
+
5
+ ## Trước
6
+ - Mọi validation sinh từ `project.validate` đều được ghi `scope: "workspace"`,
7
+ kể cả khi check chạy trong một subproject (`path: "frontend"`), và không kèm
8
+ `paths`. Hệ quả: gate coi nó bao phủ cả workspace nên **một write ở package
9
+ khác** cũng void (đo được: sửa `backend/` làm stale `lint:frontend` và
10
+ `build:frontend`, buộc validate lại toàn bộ — mất nguyên một vòng).
11
+ - Vì `paths` luôn rỗng, quy tắc staleness theo phạm vi ở gate không có tác dụng
12
+ với evidence thật.
13
+
14
+ ## Sau
15
+ - `validationScopeForProjectPath(projectPath)`: `"."`/`""` ⇒ `scope: "workspace"`
16
+ (vẫn nghiêm ngặt như cũ); subproject ⇒ `scope: "paths"`, `paths: [<path đã
17
+ chuẩn hoá>]`.
18
+ - Gate nhờ đó chỉ vô hiệu validation khi chính subproject đó bị sửa.
19
+
20
+ ## Test hồi quy
21
+ - `test/validation-scope.test.ts` + `test/completion-gate-scope.test.ts`.
22
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục 4 (bổ sung).
@@ -0,0 +1,22 @@
1
+ # 2026-09-28 — Validation chỉ stale theo phạm vi nó bao phủ
2
+
3
+ Vùng: runtime/completion-gate
4
+
5
+ ## Trước
6
+ - Gate so fingerprint **toàn workspace**, nên viết `README.md` hay sửa package
7
+ khác cũng void **mọi** validation ⇒ bắt validate lại (một ngày chạy: 21
8
+ write-sau-validation, 5 lần chặn `WORKSPACE_EVIDENCE_STALE`, 340 mục
9
+ `WRITE_NOT_VALIDATED`).
10
+
11
+ ## Sau
12
+ - Validation chỉ bị void khi có **write trong phạm vi nó bao phủ** sau nó.
13
+ - Write tài liệu (`.md/.mdx/.txt`, `docs/`, LICENSE/CHANGELOG) không đòi và
14
+ không void validation.
15
+ - Nếu fingerprint workspace lệch mà **không hoạt động nào giải thích được** (thay
16
+ đổi ngoài luồng) thì mọi validation vẫn bị void; scope `workspace` vẫn nghiêm
17
+ ngặt như cũ.
18
+
19
+ ## Test hồi quy
20
+ - `test/completion-gate-scope.test.ts` (6 case) + test staleness cũ trong
21
+ `test/runtime.test.ts`.
22
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục 4.
@@ -0,0 +1,24 @@
1
+ # 2026-09-28 — Lỗi guard dependency nói rõ đường đọc được phép
2
+
3
+ Vùng: host/workspace-port
4
+
5
+ ## Trước
6
+ - `readText` trong `node_modules` đã cho phép `package.json`, `README.md`,
7
+ `*.d.ts` (đúng như orbit-mcp docs mô tả: "đọc .d.ts và package.json trong
8
+ node_modules (được phép) — KHÔNG grep cả cây"), nhưng `searchText`/`searchPaths`
9
+ bị chặn bằng message chung *"không đọc source thư viện bằng file tools"*.
10
+ - Hệ quả đo được: model thử lại grep/glob 8 lần trong chiến dịch E2E — đây là mã
11
+ lỗi tool **nhiều nhất**, mỗi lần mất một lượt, vì message không nói rằng đọc
12
+ thẳng một file `.d.ts` là hợp lệ.
13
+
14
+ ## Sau
15
+ - `dependencySearchError` cho search/glob: nói rõ grep/glob cả cây không được phép
16
+ **và** `read_file` trên `package.json`/`README.md`/`*.d.ts` trong node_modules
17
+ thì hợp lệ; suggestedAction trỏ về MCP tools/skill docs.
18
+ - Không nới quyền đọc source: `.js`/`.mjs`/`.cjs` vẫn bị chặn như cũ.
19
+
20
+ ## Test hồi quy
21
+ - `test/workspace-generated-state.test.ts`: "dependency trees allow ground-truth
22
+ reads but refuse search and glob".
23
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục "không phải lỗi" (guard
24
+ node_modules) — nay có hướng dẫn đúng trong message.
@@ -0,0 +1,20 @@
1
+ # 2026-09-28 — Đặt run state đổi-mỗi-lượt ra sau prefix ổn định (cache)
2
+
3
+ Vùng: context/runtime
4
+
5
+ ## Trước
6
+ - `runtime-mandatory-state` (turn budget, editedFiles, phase, nextAction — viết
7
+ lại mỗi lượt) nằm ở thứ tự mặc định của checkpoint, ngay sau system prompt.
8
+ - Đo trên E2E: item này **đổi đầu tiên trên 38/40 lượt**, `cachedInput` kẹt ở
9
+ 10.752 token suốt 17 lượt dù context tăng tới 60–90k ⇒ cache hit 40%, 1,42M
10
+ token bị tính lại.
11
+
12
+ ## Sau
13
+ - Block đó mang `physicalOrder` muộn (sau history, ngay trước message của lượt
14
+ mới) nên toàn bộ prefix ổn định (policy, goal, checkpoint, files, tools, history)
15
+ vẫn cache được; đo lại: 40% → 61% toàn run, bước 1 từ 10% → 59–73%.
16
+
17
+ ## Test hồi quy
18
+ - `test/context.test.ts`: "the mutable mandatory state is ordered after the stable
19
+ prefix".
20
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md mục 6.
@@ -0,0 +1,24 @@
1
+ # 2026-09-29 — Advisory khi đọc source node_modules bằng shell
2
+
3
+ Vùng: tools/adapter
4
+
5
+ ## Trước
6
+ - Guard của host chặn `read_file`/`search_text` trong `node_modules`, nhưng **lệnh
7
+ shell thì không**: bước `s09-security` của E2E đã chạy
8
+ `cd backend/node_modules/@galaxy-stack/orbit-security/dist && cat …` để đọc source
9
+ thư viện — tốn context vào phần không phải tài liệu, đúng thứ guard sinh ra để tránh.
10
+
11
+ ## Sau
12
+ - `dependencyShellReadAdvisory(command)`: khi lệnh vừa có trình đọc
13
+ (`cat|bat|head|tail|less|more|sed|awk|grep|rg|strings`) vừa trỏ vào `node_modules/`,
14
+ `command.run` trả advisory nói rõ: đọc source thư viện qua shell cũng tốn như qua file
15
+ tools; hãy đọc một `package.json`/`README.md`/`*.d.ts` cụ thể (được phép) hoặc dùng
16
+ MCP knowledge + skill.
17
+ - Không chặn: đọc file workspace, `ls` thư mục dependency hay lệnh không có trình đọc
18
+ vẫn im lặng.
19
+
20
+ ## Test hồi quy
21
+ - `test/command-shape.test.ts`: "reading library source through the shell is called
22
+ out, a declaration read is not".
23
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md — mục "Quan sát chính sách" và
24
+ phần "Xác minh release".
@@ -0,0 +1,21 @@
1
+ # 2026-09-29 — Dừng vì trần output ('length') là lỗi tạm thời, không phải fail run
2
+
3
+ Vùng: runtime
4
+
5
+ ## Trước
6
+ - Khi model dừng với `stopReason: 'length'` (đốt hết ngân sách output, thường là cho
7
+ hidden thinking, trước khi gọi tool hay trả lời), runtime ném
8
+ `INVALID_MODEL_STREAM` **không retryable** ⇒ cả run fail. Đo được: bước
9
+ `s22-seed-50` của E2E chết ở trạng thái `planning` với
10
+ `Model stopped with non-final reason 'length'.`, 0 lần retry.
11
+
12
+ ## Sau
13
+ - `length` được phân loại là `CodingProviderError("MALFORMED_STREAM", …, retryable: true,
14
+ retryMode: "without_thinking")` ⇒ vòng retry có sẵn của runtime thử lại **đúng context
15
+ đã kiểm chứng** với hidden thinking tắt, trong ngân sách `maxModelRetries`; thông báo
16
+ ghi rõ số tool call và số ký tự content đã phát trước khi hết ngân sách.
17
+ - `unknown` vẫn fail như cũ (có thể là lỗi stream thật).
18
+
19
+ ## Test hồi quy
20
+ - `test/runtime.test.ts`: "an output-limit stop retries the verified context with
21
+ thinking disabled".
@@ -14,3 +14,6 @@ live.
14
14
 
15
15
  CHANGELOG.md (file công khai trên npm/GitHub) viết tiếng Anh; fragment ở đây là
16
16
  ghi chú làm việc nội bộ, viết tiếng Việt cũng được.
17
+
18
+ Khi mục `[0.3.0]` được gom, các fragment **được giữ lại** thay vì xoá, vì mục
19
+ CHANGELOG trỏ link tới từng fragment; chỉ xoá khi mục tương ứng cũng bỏ link.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,83 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
  Times are recorded in Asia/Ho_Chi_Minh (+07:00). Per-fix fragments are filed in
8
8
  [CHANGELOG.d](CHANGELOG.d/README.md) and compiled here at release time.
9
9
 
10
+ ## [0.3.1] - 2026-09-29 05:25 +07:00
11
+
12
+ ### Fixed
13
+
14
+ - Advisory khi đọc source node_modules bằng shell. See [CHANGELOG.d fragment](CHANGELOG.d/2026-09-29-advisory-doc-source-node-modules-bang-shell.md).
15
+ - Dừng vì trần output ('length') là lỗi tạm thời, không phải fail run. See [CHANGELOG.d fragment](CHANGELOG.d/2026-09-29-retry-khi-model-dung-vi-output-length.md).
16
+
17
+ ## [0.3.0] - 2026-09-28 23:10 +07:00
18
+
19
+ First verified stable line: the 25-prompt end-to-end flow completes with this
20
+ runtime. The failure journal that drove the changes below lives in
21
+ `galaxy-code/docs/TEST_FAILURE_ANALYSIS.md`.
22
+
23
+ ### Changed
24
+
25
+ - Prompt-cache layout: the mutable run state moved after the stable prefix, so a turn
26
+ re-bills only its tail (measured run-wide 40% → 61%, per step 10% → 59–87%).
27
+ - `project.validate` records the scope it really covered, so a check in one package
28
+ is no longer invalidated by a write in a sibling package.
29
+ - The completion gate is scope-aware: documentation writes need no validation, a path
30
+ written and then removed needs none either, and untracked workspace drift still
31
+ voids every validation.
32
+ - Reaching the turn budget grants one tool-free finalization turn instead of failing a
33
+ run whose evidence is already satisfied; `maxTurns` and the host deadline are
34
+ configurable through the CLI.
35
+ - Arguments above a schema cap are clamped and reported rather than rejected; a
36
+ shell-run project check and a long-running server answer with an advisory that names
37
+ the exact `validate_project` call; a refused dependency search names the read that
38
+ is allowed.
39
+ - `context_diagnostic` fingerprints every context item and the tool block each turn —
40
+ that is how the cache regression above was found.
41
+
42
+ <details>
43
+ <summary>Per-fix trail: 39 fragments (2026-09-19 … 2026-09-28)</summary>
44
+
45
+ - Advisory guard policy cho observation (2026-09-19 00:15 +07:00) (core). [fragment](CHANGELOG.d/2026-09-19-advisory-guard-policy.md)
46
+ - Sửa parser citation bị nhiễu Markdown (2026-09-19 11:55 +07:00) (core). [fragment](CHANGELOG.d/2026-09-19-research-citation-parsing.md)
47
+ - Lưu evidence khi citation bị từ chối (2026-09-19 23:15 +07:00) (core). [fragment](CHANGELOG.d/2026-09-19-research-rejection-evidence.md)
48
+ - Node test reporter ghi nhật ký (2026-09-18 23:45 +07:00) (core). [fragment](CHANGELOG.d/2026-09-19-test-journal-reporter.md)
49
+ - Remediation cho RESEARCH_EVIDENCE_MISSING (2026-09-21 02:20 +07:00) (core). [fragment](CHANGELOG.d/2026-09-21-evidence-missing-remediation.md)
50
+ - Nudge nhận diện bằng arguments hash (2026-09-21 00:55 +07:00) (core). [fragment](CHANGELOG.d/2026-09-21-observation-nudge-context.md)
51
+ - Retry delay theo scenario budget + deadline-aware skip (2026-09-22 07:25 +07:00) (core). [fragment](CHANGELOG.d/2026-09-22-model-retry-budget.md)
52
+ - Recovery turn trước no-progress pause (2026-09-22 01:07 +07:00) (core). [fragment](CHANGELOG.d/2026-09-22-no-progress-recovery-turn.md)
53
+ - Agent platform foundation (core). [fragment](CHANGELOG.d/2026-09-23-agent-platform.md)
54
+ - # 0.3.0-alpha.7 — 2026-09-23 07:00 +07:00 (core). [fragment](CHANGELOG.d/2026-09-23-conservative-output-reserve.md)
55
+ - Request-scoped approvals and scratch workspace review (core). [fragment](CHANGELOG.d/2026-09-24-approval-workspace-review.md)
56
+ - Incremental Ollama streaming (core). [fragment](CHANGELOG.d/2026-09-24-incremental-ollama.md)
57
+ - Tail-anchored tool output bounding (core). [fragment](CHANGELOG.d/2026-09-25-tail-anchored-bounding.md)
58
+ - Binary review không chặn, pipe guidance, test finalization (adapters/tools, prompt, runtime/test). [fragment](CHANGELOG.d/2026-09-26-binary-review-pipe-guidance-finalization-test.md)
59
+ - Cache capability và MCP reconnect (runtime/prompt/adapters). [fragment](CHANGELOG.d/2026-09-26-cache-capability-and-mcp-reconnect.md)
60
+ - Cache-hit (prefix reuse) harness (runtime/prompt). [fragment](CHANGELOG.d/2026-09-26-cache-hit-harness.md)
61
+ - Cache hit rate, token_ledger event, và systemPromptUpdate option (runtime/context/adapters). [fragment](CHANGELOG.d/2026-09-26-cache-hit-rate-and-inhistory-option.md)
62
+ - Cache hit luỹ kế (context/runtime). [fragment](CHANGELOG.d/2026-09-26-cumulative-cache-hit.md)
63
+ - Default model: deepseek-v4.1-flash:cloud (core). [fragment](CHANGELOG.d/2026-09-26-default-model-deepseek.md)
64
+ - Finalization tool-free, allowlist in-history, cache accounting (runtime/adapters/context). [fragment](CHANGELOG.d/2026-09-26-finalization-prefix-and-verified-inhistory.md)
65
+ - Generated-state evidence boundary (runtime/host). [fragment](CHANGELOG.d/2026-09-26-generated-state-and-churn-guard.md)
66
+ - Failure-injection test cho MCP reconnect (adapters/mcp). [fragment](CHANGELOG.d/2026-09-26-mcp-reconnect-fixture.md)
67
+ - Memory hybrid ranking, semantic port và consolidation (adapters/memory). [fragment](CHANGELOG.d/2026-09-26-memory-hybrid-semantic-consolidation.md)
68
+ - Memory recall benchmark (adapters/memory (test)). [fragment](CHANGELOG.d/2026-09-26-memory-recall-benchmark.md)
69
+ - Ollama báo cache; adapter map vào token ledger (adapters/provider). [fragment](CHANGELOG.d/2026-09-26-ollama-cache-usage.md)
70
+ - Ollama embedding provider (adapters/memory/config). [fragment](CHANGELOG.d/2026-09-26-ollama-embeddings-provider.md)
71
+ - Re-record live replay fixture (testing). [fragment](CHANGELOG.d/2026-09-26-rerecord-live-fixture.md)
72
+ - Ký số skill index (Ed25519 trust) (adapters/skills). [fragment](CHANGELOG.d/2026-09-26-skill-index-signing.md)
73
+ - Skill versioning và marketplace (adapters/skills). [fragment](CHANGELOG.d/2026-09-26-skill-version-and-marketplace.md)
74
+ - Build output là derived, manifest workspace (runtime/host). [fragment](CHANGELOG.d/2026-09-27-workspace-derived-build-output.md)
75
+ - Advisory khi lệnh shell trùng check dự án hoặc chạy server (tools/prompt). [fragment](CHANGELOG.d/2026-09-28-advisory-lenh-check-va-server.md)
76
+ - Clamp tham số vượt cap thay vì từ chối tool call (tools/adapter). [fragment](CHANGELOG.d/2026-09-28-clamp-tham-so-vuot-cap.md)
77
+ - Fingerprint từng context item mỗi lượt (chẩn đoán cache) (context/diagnostics). [fragment](CHANGELOG.d/2026-09-28-digest-context-item.md)
78
+ - Gate không đòi validation cho path đã bị xoá (runtime/completion-gate). [fragment](CHANGELOG.d/2026-09-28-gate-bo-qua-path-da-xoa.md)
79
+ - Hết ngân sách lượt thì finalize một lượt trước khi fail (runtime). [fragment](CHANGELOG.d/2026-09-28-ngan-sach-luot-finalization.md)
80
+ - project.validate ghi đúng phạm vi theo project path (tools/executor). [fragment](CHANGELOG.d/2026-09-28-scope-cua-project-validate.md)
81
+ - Validation chỉ stale theo phạm vi nó bao phủ (runtime/completion-gate). [fragment](CHANGELOG.d/2026-09-28-staleness-theo-pham-vi.md)
82
+ - Lỗi guard dependency nói rõ đường đọc được phép (host/workspace-port). [fragment](CHANGELOG.d/2026-09-28-thong-bao-guard-dependency.md)
83
+ - Đặt run state đổi-mỗi-lượt ra sau prefix ổn định (cache) (context/runtime). [fragment](CHANGELOG.d/2026-09-28-thu-tu-mandatory-state-cache.md)
84
+
85
+ </details>
86
+
10
87
  ## [0.3.0-alpha.7] - 2026-09-23 07:00 +07:00
11
88
 
12
89
  ### Fixed
@@ -88,7 +165,7 @@ this version; the internal working versions `0.2.0`–`0.2.2` were never publish
88
165
  - Configurable observation guard policy:
89
166
  - `AiCoderRunBudget.noProgressPolicy`: `advisory` (default) and `strict`.
90
167
  - `AiCoderRunBudget.observationNudgeThresholds` (default `[3, 5, 8]`,
91
- following the DeepSeek Harness `repeat-tool-reminder` design): escalating
168
+ following the upstream DSH `repeat-tool-reminder` design): escalating
92
169
  trusted nudges for repeated read-only observations; blocking only after the
93
170
  final threshold. Advisory nudges no longer count toward
94
171
  `maxNoProgressEpisodes`; the `strict` policy preserves the older