46e5620f89
Phase 1+2 of the native-harness working-memory sprint. All per-task state is process RAM only (dies with the task, same lifecycle as MemoryIndex) — no disk, consistent with the agent's encrypted-transmission / nothing-saved posture. Phase 1 — _WorkSet dataclass holds what the loop kept re-deriving: sandbox cwd/shell, files written/read, a failure ledger (cmd -> exit+category), and the last good command. Discovered cwd/shell carry across tasks in-process via self._sbx_known (RAM fallback grounding). _render_workset re-surfaces this into the repair-turn system prompt so it survives context pruning without a NOTES.md on disk. Folds the old reads_seen set into wset.files_read. Phase 2 — semantic stuck/loop detection via _action_signature (run_shell keys on the command, write_file on path+content-hash so real edits aren't repeats, read_file on path). Aborts honestly when an action fails >=2x verbatim (model ignoring REPAIR_STANCE) or the same (action,outcome) repeats >=3x, instead of burning the turn cap re-running a dead action. Verified fix-and-retry does not false-trip. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>