# Ralph Progress Log

## Codebase Patterns
<!-- Add reusable patterns discovered during implementation -->
- Full design + exact code/tests live in docs/superpowers/plans/2026-06-09-structural-conflict-elimination.md — READ the matching Phase/Task before implementing a story.
- TDD is mandatory: write the failing test first, watch it fail, then implement.
- Quality gate per story: named test passes + `uv run ruff check claw_forge/ tests/` clean + touched-module suite green. Coverage gate is 90% branch (CI).
- Use `uv run` for all python tooling; never activate the venv.
- Phase C sandbox work: NEVER re-enable SDK SandboxSettings / touch the nested-sandbox wiring (macOS forbids nested sandbox-exec). Default the fence OFF.

---

Started: new run — structural-conflict-elimination

## 2026-06-09 - US-001 (Phase A: boundary-aware core concurrency)
- Replaced the `any_core_running` blanket single-flight block in
  claw_forge/state/scheduler.py:get_ready_tasks with a footprint-overlap
  `_core_blocked` filter. Core tasks with disjoint touches_files now run in
  parallel; overlapping (or footprintless-vs-running-core) still serialize.
- Added TestBoundaryAwareCore (5 tests) to tests/test_scheduler.py.
- Files: claw_forge/state/scheduler.py, tests/test_scheduler.py.
- **Learnings:**
  - The pre-existing TestSchedulerCoreSingleFlight tests use *footprintless*
    core tasks (touches_files=[]), so they remain valid under the new rule
    (footprintless core ↔ running core → still blocked). No test edits needed.
  - The new filter keys off ALL running tasks (not just core), so a core
    candidate overlapping a running *plugin* task is now correctly blocked —
    the old code only inspected running core tasks.
  - Branch ralph/structural-conflict-elimination created off main.
---
