Fase 3 brief: sequential fan-out orchestrator over N portfolio projects,
reusing the single-project run_project seam. Four operator design decisions
locked via interview: isolate execution-state per project but SHARE one
VerdictStore (ExpeL accumulates across the portfolio); sequential (concurrency
= documented extension point); fixed config-list topology (resolves plan §12
open decision); list-of-RunResult + thin aggregate output. 0 research topics
(all internal; MAF concurrency already spiked in Fase 1 + de-scoped).
brief-reviewer (opus) → PROCEED on first iteration, all 6 dimensions pass
(completeness 5, consistency 4, testability 4, scope 5, research 5, memory 5).
Folded in its PROCEED-level refinements before finalize: per-project docs_dir
MUST be config-driven or SC1 breaks; SC7 given a concrete parametrised-test
assertion; SC5 baseline made relative (current+new, not a guessed 103); SC3
detach encodable as an automatic guard; SC4 fixture must yield overlapping
features; new synthetic project flagged AI-authored (user-not-domain-expert).
Validator: valid, 0 warnings. phase_signals: plan/execute/review = high/opus.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019any9zfGNNwWJPX5Zq2QRz
Remediation review of scope 6ef4efc..01c3f0d (high-effort, both reviewers).
Two independent reviewers (brief-conformance + code-correctness) each returned
zero findings after verifying the load-bearing detach criterion against the
actual code and the installed MAF source — explicitly refusing to treat the
green suite (103 passed / 3 skipped, offline) as evidence. All 7 actionable
original findings (2 BLOCKER + 5 MAJOR) confirmed RESOLVED:
F1 debate→generation (test_g), F2/F5/F8 BudgetMiddleware (test_h +
test_budget.py:70; conftest re-base verified necessary vs _clients.py:214-231),
F7 retrieval-tool exposure (spy tests). Coordinator verdict: ALLOW.
Standing items (not findings): F9 MINOR deferred, SC9 real-profile coverage,
retrieval-exposed-not-invoked, strict_usage fail-closed untested offline.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019any9zfGNNwWJPX5Zq2QRz
Independent post-hoc review (high-effort) of the Fase 2 vertical slice
(scope 9973d9f..308b553, 32 files). Two independent reviewers converged,
ground-truth-verified against source:
- F1 BLOCKER (run.py:124): maker-checker debate output discarded; the
validated proposal comes from a separate generate_via_llm call.
- F2 BLOCKER (budget.py:81): BudgetMiddleware defined+tested but never
wired onto the debate; the NFR short-circuit path is absent.
- F7/F3/F4/F8/F5 MAJOR, F9 MINOR.
The slice's three load-bearing seams are built + unit-tested but not
connected by the orchestrator; the green e2e suite asserts proposal
shape only. Fase 2 not closed — awaits operator decision.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fif1r1En5W542HbZV88yMH
Fase 2 started. Brief for the MVP vertical slice (one synthetic project
end-to-end on MAF 1.9.0: debate -> blocking validator -> two-layer HITL +
provenance -> ExpeL learning) produced via /trekbrief from documented intent
(incremental-plan §Fase 2 + capability-map §1/§5 + Fase 1 findings), not live
Q&A per the project operating model. framing=preserve; phase_signals=high/opus.
Brief-reviewer gate passed 6/6 (all dimensions 5; verdict PROCEED_WITH_RISKS)
after 2 iterations: iter 1 flagged a no-op token-accounting criterion and a
false-positive on research-field order; 3 derivable refinements applied
(retargeted the UsageDetails assertion, added Open Questions for the concrete
local model + Foundry deployment names, added a topic-count note). Validator
green (0 errors/warnings).
3 research topics identified (gaps the capability-map did not resolve): native
HITL in MAF workflows, local_folder via MCPStdioTool + citation provenance, and
a real local-profile chat client (spikes used only FakeChatClient). Manual path:
stopped at the brief as a gated checkpoint; research must run before /trekplan.
.gitignore: ignore generated .html annotation + progress.json render-derivatives
under .claude/projects/ (the .md sources stay tracked).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fif1r1En5W542HbZV88yMH
Two independent grounded passes (installed-source introspection + official MS
Learn via MCP) produce a per-need adopt/keep decision table for using MAF
features well in Fase 2, instead of reinventing them.
Headline: Microsoft's Workflows "State Isolation" page documents verbatim the
exact footgun Spike B(b) found today — a reused Workflow accumulates agent
threads across runs; the fix is a fresh-instance-per-run factory. Our
fresh_workflow() IS the official pattern.
Key verdicts: ADOPT real UsageDetails token counts + a budget ChatMiddleware +
native builder round caps + GA @tool/MCP + observability; KEEP the hand-rolled
structural VerdictStore and inline validator (MAF memory/eval are the wrong
shape); ROLL a tiny role->deployment map (declarative is preview/not installed).
Corrections recorded: CLAUDE.md "Magentic experimental" stands at doc-level (no
code gate); Spike D extend_instructions is two-arg (source_id, instructions).
Skills answer: method-as-Skill yes (MAF consumes SKILL.md natively, experimental);
MAF-docs-mirror Skill no (rots vs live MCP); the digest lives in this map.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fif1r1En5W542HbZV88yMH
Independent post-hoc review (brief-conformance + code-correctness) of the
de-risk spikes against brief.md. Round 1 verdict was BLOCK (Spike B(b) fan-out
was a tautological counter); after remediation commit a2dff21 both reviewers
return 0 findings. Code-correctness reviewer verified the fan-out bleed fix
against MAF internals (AgentExecutor._session reuse + InMemoryHistoryProvider +
SessionContext.get_messages). Verdict: ALLOW. Fase 1 is clear to close.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fif1r1En5W542HbZV88yMH
/trekreview flagged the Spike B(b) fan-out experiment as BROKEN_SUCCESS_CRITERION
(BLOCKER): it asserted a per-client call_count reached 3 on a reused instance vs
1 on a fresh one — a tautology true for any un-reset mutable counter, independent
of MAF, that never exercised the real G2/B7 shared-Workflow state-corruption
footgun. It was a false-confirm of a de-risk assumption.
Rebuilt to observe genuine MAF thread state via the messages each participant
RECEIVES (new FakeChatClient.received_texts seam):
- shared_instance_conversation_bleed: a reused built ConcurrentBuilder Workflow
accumulates the conversation across .run() calls — run N's participants receive
runs 0..N-1's prompts/replies (measured [[p0],[p0,p1],[p0,p1,p2]], strictly
monotonic) => genuine cross-run contamination.
- fresh_instance_conversation_isolation: a fresh instance per run gives each a
clean thread => each participant sees only its own project ([[p0],[p1],[p2]]).
Assumption now CONFIRMED with a meaningful observable. findings-b.md gains a
Method note recording why it was rebuilt; README rows updated.
Also fixes the MINOR: a_groupchat.run_live now mkdirs the findings dir before
write_text so a post-disposal run does not lose the measured result.
Gate green: ruff check + format, mypy src, pytest 48 passed / 1 skipped.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fif1r1En5W542HbZV88yMH