This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Summary
AI summaryAttendant can now re-score partial responses and perform one bounded extra observe() retry with extracted hints.
Full changelog
Bundle 8 — M6 sub-turn reasoning loop
Final bundle in the M-series backlog. The Attendant can now re-score its own partial assistant response on a mid-turn attend and fire one bounded extra observe() retry with broadened hints harvested from the partial text. This is A3's refinement pattern re-applied on response progress rather than initial-pass emptiness — the "most agentic" sub-turn loop from the memo.
New
planSubTurnLoop(pure helper insrc/staff/subTurnLoop.ts) — five gates (phase, partial presence, length, budget, novelty), extracts novel tokens + type/id hints from the partial, proposes them for a widening retry, bounded to one extra observe() call. Pure, deterministic, fully unit-testable.AttendInput.partialResponse— new field on mid-turn attend carrying the in-progress assistant response.AttendResult.subTurnLoopPlan— echoed on all three return paths (post-response closeout, memory_not_needed, main success) so hosts can safely destructure on every attend response.
How it works
- Mid-turn attend arrives with
partialResponseset. - Baseline retrieval runs as usual.
planSubTurnLoopinspects the partial text, diffs its tokens against the baseline (latest message + original hints), and extracts any noveltype/identity patterns.- If any novel signal is found, the Attendant fires ONE extra
observe()call with the UNION ofallObserveEntityHintsand the proposed hints — same preservation fix as B6's refinement retry so specific host-supplied hints are not dropped. - Net-new facts are merged into the response; outcome flips from
attempted_empty→attempted_addedwhen the retry surfaces new facts.
Tests
- 26 new unit tests in
tests/staff/run_b8_subturn_loop_tests.tscovering all gates, token/hint extraction, budget caps, dedup, stopword filtering, entity-shaped baseline decomposition, and plan shape invariants. - Registered as
npm run test:b8-subturn-loop. - Regression gate green across b5-b8, mid-turn-attend, a4, b4, tool-call-retrieval, m2, user-operating-rules, compliance, file-change-recall, artifact-capture, b2, mock-failure-modes, mock.
Files
src/staff/subTurnLoop.ts(new)tests/staff/run_b8_subturn_loop_tests.ts(new)src/attendant/AttendantInstance.ts(3 return paths + AttendInput/AttendResult fields)package.json(+test:b8-subturn-loopscript, version bump)clients/typescript/package.json,clients/python/pyproject.toml,clients/python/iranti.py,src/api/server.ts(version bump)
Backlog status
This closes the M-series backlog (B1-B8). Full sequence shipped: B1 attendant agency, B2 mock classifier, B3 host contracts, B4 skip/drift, B5 objective + auto-checkpoint, B6 refinement + tool plan, B7 reasoning budget + council mode, B8 sub-turn loop.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About nfemmanuel/iranti
Persistent shared memory for AI coding agents. Stores facts as `entity/key/value` triples with hybrid semantic search, task checkpoints, and conflict resolution — shared across Claude Code, Codex CLI, and GitHub Copilot.
Related context
Related tools
Beta — feedback welcome: [email protected]