Chapter 10: Claude Code migration

Updated: 2026-07-01 · How the portfolio moved from the OpenClaw/Codex autonomous-agent stack to interactive Claude Code sessions under the gsm ecosystem's agent conventions.

Decision: retire the autonomous OpenClaw/Codex/Paperclip control-plane work (P007, P008, P009) and develop the safety-chart portfolio (P004, P005) in interactive Claude Code sessions, using the gsm.agent development conventions and a lean adaptation of the gsm.roadmap requirement lifecycle (adopted in #51).

What happened

The autonomous pipeline stalled in the second week of June. The OpenClaw CLI gateway failed with a sandbox EPERM before the Development cron could launch, and the same sandbox had long blocked local Chromium (the Mach-port error that forced all browser evidence through GitHub Actions). Nightly briefings stopped on June 12 — the last automated commit this Hub received from the old stack.

On June 12 the work restarted in an interactive Claude Code session, which produced the P004/P005 modernization plan and immediately cleared the oldest blocker: the full Playwright suite ran locally, 10/10 in about five seconds. The first merged artifact of the new workflow followed on June 24 — the safety-histogram dead-code cleanup (safety-histogram#3), verified by a byte-identical rebuilt bundle and local browser evidence.

On July 1 the migration was made explicit with four decisions, and the obot-era backlog was reconciled against them.

The four decisions

QuestionDecision
Where does requirement tracking live?In this Hub, publicly — restructured to follow the gsm.roadmap requirement lifecycle (Business Requirement + Overview at creation, then Data Requirement and Design; implementation as cross-repo sub-issues). Adopted in #51 / PR #52.
Where does the consolidated renderer library live?A new standalone safety.viz repo — a gsm.viz-style Chart.js v4 + esbuild library with Vitest and Playwright, seeded from the Safety Histogram rewrite (safety-histogram#1), consumed by gsm.safety htmlwidget bindings the way gsm.kri consumes gsm.viz.
What happens to the obot-era backlog?The three June decision drafts were posted (P004 standard adopted on safety-agent#4; Safety Histogram sequencing on safety-agent#6; the testing-agent GitHub App closed as superseded on safety-agent#7), and the agent-infrastructure projects P007, P008, and P009 closed as superseded.
How is the tooling wired?Workspace-only: a dedicated parent folder holds the working repos as siblings with gsm.agent cloned as .github/, per its README. No machine-global agent configuration.

What carries over from the obot framework

PracticeWhere it lives now
Requirement matrices as the spec source (886 harvested rows across 9 renderers).safety-agent remains the matrix index; each renderer's matrix is copied into safety.viz as it migrates.
Requirement IDs in test names and evidence-typed statuses.Vitest/Playwright suites in safety.viz, per the standard adopted on safety-agent#4.
Durable PR/issue evidence feeding this Hub.Unchanged — Requirement issues, sub-issues, and PR evidence drive the generated roadmap.
No autonomous merges; Jeremy gates every merge and close.Enforced twice over: the gsm.agent approval conventions, and the Claude Code permission layer, which allows drafting, commenting, and pushing but denies merge/close commands to the agent.
GxP language rules ("do not present screening approximations as validated statistical procedures").Verbatim in the adopted standard.

What is retired

Why this works now

Chapters 1–9 of this report are a record of engineering around one constraint: an unattended agent needs scaffolding to be trusted — schedulers, heartbeats, watchdogs, ledgers, bounded write paths. An interactive session dissolves most of that constraint. The human is present at every gate, the sandbox restriction that blocked browser evidence does not apply, and the remaining discipline — specs as matrices, traceable tests, durable evidence, gated merges — turns out to be exactly the part worth keeping. The gsm ecosystem had already converged on the same conclusion, so the portfolio now runs on its shared conventions instead of a bespoke stack.

Status after the migration

ProjectState
P004 — SafetyGraphics renderer modernizationActive. Safety Histogram pilot landing next: merge PR #1 to a new dev branch per the #6 decisions, then scaffold safety.viz and extract the histogram as its first module. New Requirement issues follow the adopted lifecycle.
P005 — Static safety displays (FDA ST&F)Starting. Display inventory → Requirement issue → ggplot2 + workr YAML + pkgdown per display in gsm.safety.
P007 / P008 / P009 — agent infrastructureClosed as superseded by this migration.