diff --git a/.claude/skills/changelog/watermark b/.claude/skills/changelog/watermark
index 18490e3e9..709921b48 100644
--- a/.claude/skills/changelog/watermark
+++ b/.claude/skills/changelog/watermark
@@ -1 +1 @@
-4a370879539c0943eb229be642753f81cf2a71ed
+aa8ff368df36fc17a0799cd8b09297f85457aaa2
diff --git a/docs/changelog/2026-03-15.mdx b/docs/changelog/2026-03-15.mdx
index c2efa7d81..3453b9578 100644
--- a/docs/changelog/2026-03-15.mdx
+++ b/docs/changelog/2026-03-15.mdx
@@ -35,16 +35,23 @@ fabro ps -a # all runs including completed
**`[feature_flags]` renamed to `[features]`.** If your `fabro.toml` uses `[feature_flags]`, rename the section to `[features]`.
+
+**Retros are now experimental and disabled by default.** If you use retros, enable them explicitly with `retros = true` under `[features]` in your `fabro.toml`.
+
+
## More
- Added `fabro asset list` to view run artifacts and `fabro asset cp` to copy them locally with optional `--tree` directory structure
- Added `fabro rm` command to remove runs by ID with sandbox cleanup
+- Added `--direction` (`-d`) flag to `fabro graph` for overriding layout direction (`lr` or `tb`)
- Added `-p` short alias for `--pretty` in `fabro logs`
- Added progress spinner during `run --preflight`
+- Added `auto_merge = true` in `[pull_request]` config to enable GitHub auto-merge on created PRs, with configurable `merge_strategy` (squash/merge/rebase)
+- `fabro init` now generates `[pull_request]` with `enabled = true` and `draft = true` by default
- Added `selection="random"` node attribute for weighted-random edge selection in workflow graphs
- GitHub App installation tokens are now automatically injected into sandboxes as `GITHUB_TOKEN`
- Workflow PRs now open as ready-for-review by default (control with `[pull_request] draft = false`)
@@ -55,11 +62,13 @@ fabro ps -a # all runs including completed
+- Command output in stage preambles now truncated to the last 25-50 lines, reducing token waste from verbose build logs
- Asset collection now enforces a 100-file limit and excludes `.venv`, `venv`, `.cache`, `.tox`, `.pytest_cache`, `.mypy_cache`, and `dist` directories
- Unified dry-run behavior across all handler types — wait and human-in-the-loop nodes now properly simulate without side effects
+- Fixed sub-agent file writes not being tracked in the API backend, causing downstream stages to receive incomplete file lists
- Fixed `--dry-run` executing command/script nodes instead of simulating them
- Fixed `--dry-run` pushing branches to remote
- Fixed `--goal-file` not expanding `~` to the home directory
diff --git a/docs/changelog/2026-03-16.mdx b/docs/changelog/2026-03-16.mdx
new file mode 100644
index 000000000..584b7e3fd
--- /dev/null
+++ b/docs/changelog/2026-03-16.mdx
@@ -0,0 +1,15 @@
+---
+title: "Stream retry resilience"
+date: "2026-03-16"
+---
+
+## Graceful recovery from dropped LLM streams
+
+When an LLM provider drops a stream mid-response — common under high concurrency with OpenAI — Fabro now retries the same turn up to 3 times instead of failing the entire agent session. Conversation history is preserved across retries, and any partial assistant output from the interrupted stream is replayed so the model can continue where it left off. Previously, a dropped stream would kill the stage and restart from scratch, losing all progress in the current turn.
+
+## More
+
+
+- Added `install.md` for AI-agent-driven installation (Claude Code, Codex, etc.), with platform detection, binary download, and PATH setup
+- Installer now skips shell config modification in non-interactive mode, printing the manual PATH export instead
+
diff --git a/docs/docs.json b/docs/docs.json
index fb2cdba18..973d5e51b 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -272,6 +272,7 @@
"group": "March 2026",
"icon": "clock-rotate-left",
"pages": [
+ "changelog/2026-03-16",
"changelog/2026-03-15",
"changelog/2026-03-14",
"changelog/2026-03-13",