Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,12 @@ extra (`pip install -e ".[delegate]"`). Four tools:

These are the first three slices of a [scatter-gather roadmap](https://github.com/Jason-Vaughan/TangleBrain/issues/39):
the orchestrator routes a sub-task to any configured backend (by id or capability) and fans batches
out concurrently. Still ahead: an explicit synthesis/reduce step and orchestration-tree observability
(which also adds the deferred non-local delegate metering).
out concurrently. The **reduce step is deliberately not TangleBrain's** — the orchestrator synthesises
the `delegate_many` results itself (it holds the original task context that makes for good synthesis),
and offloads the stitch with an ordinary `delegate(task=…)` call when the reduction is mechanical and
large. No dedicated reducer tool: the existing primitives cover it, and frontier-side synthesis is the
better default until usage proves otherwise. Still ahead: orchestration-tree observability (which also
adds the deferred non-local delegate metering) — whose data would tell us if a reducer ever earns code.

### Measurement — per-task records (`measurement.py`)

Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Internal

- **Documented the synthesis/reduce pattern (scatter-gather roadmap #39, slice 4).** README +
ARCHITECTURE now spell out that the orchestrator synthesises `delegate_many` results itself (it
holds the original task context), and offloads a *mechanical* stitch with an ordinary
`delegate(task=…)` call — so no dedicated reducer tool ships. Documentation of existing behaviour;
no code change. The reduce step stays the orchestrator's by design until observability data (a later
slice) shows a TB-side reducer would earn its keep.

## [0.13.0] - 2026-06-18

### Added
Expand Down
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,16 @@ observability is on the [scatter-gather roadmap](https://github.com/Jason-Vaugha
Any non-local target is opt-in and your responsibility under that provider's terms — see
[DISCLAIMER.md](DISCLAIMER.md).

**Synthesising fan-out results.** The full pattern is decompose → fan out (`delegate_many`) →
**reduce** → answer. TangleBrain ships the dispatch primitives but deliberately does *not* own the
reduce step: the orchestrator gets the results array back and combines it itself, because it holds
the original task context that makes for good synthesis — something a fresh reduce backend lacks. If
the reduction is instead **mechanical and large** (concatenating generated files, merging many
summaries into one list — where the original intent doesn't matter), offload that stitch too with a
normal `delegate(prompt="Combine these results: …", task="summarization")` call, keeping the heavy
formatting off your frontier budget. No separate "reduce" tool is needed — the existing `delegate`
covers it.

It needs the optional `mcp` dependency:

```sh
Expand Down
Loading