Design: migrate the obot-claw hub into obot.roadmap as the project's memory

Requirement jwildfire/obot.roadmap#7 · 2026-07-02 · Decisions D1–D4 resolved — pending final sign-off
Drafted by Claude Code using Fable 5; reviewed by @jwildfire. Decisions D1–D4 resolved by @jwildfire on 2026-07-02 (all recommendations accepted). HTML design-doc format per obot-claw#59.

1. Context and goals

From May to June 2026 the obot-claw hub served as the portfolio's public memory: a nightly AI-written diary, homepage metrics, a "🙋 Jeremy ToDo" queue, per-project rollups, and long-form AI-generated reports — most notably the ten-chapter autonomous-agent-framework report whose Chapter 10 documents the migration to interactive Claude Code sessions. The hub was archived in July 2026 and its metrics frozen at the final nightly briefing (2026-06-11).

obot.roadmap inherited the requirement lifecycle but not the memory. This design makes obot.roadmap the single durable home for both: the roadmap workflow stays GitHub-native (issues, project board, PRs), and the hub's narrative surfaces are rebuilt as a lightweight static site published from this repo. Guiding principles:

2. Architecture and directory layout

obot.roadmap/
├── README.md                     # workflow docs (existing; History section links to the site)
├── AGENTS.md                     # agent conventions (existing; gains diary + site conventions)
├── site/                         # hand-authored static pages + assets
│   ├── index.html                #   homepage (§3.1)
│   └── assets/styles.css         #   shared stylesheet
├── diary/                        # markdown diary entries — source of truth (§3.4)
│   ├── README.md                 #   cadence + format conventions
│   └── 2026-05-11.md … (32 migrated entries, then new per-session entries)
├── reports/                      # artifacts framework, gsm.roadmap pattern (§3.5)
│   ├── README.md                 #   index of reports with status (current / superseded)
│   └── <report-name>/            #   one folder per report: index.html + README.md provenance
├── requirements/                 # existing: design/ + dataspec/
├── scripts/
│   ├── build_dashboard.py        # metrics + Jeremy queue → dashboard.html (§3.2)
│   ├── build_roadmap.mjs         # requirement status → roadmap.html (§3.3)
│   └── render_diary.mjs          # diary/*.md → site diary pages (§3.4)
└── .github/workflows/
    └── deploy-site.yml           # assembles + deploys the Pages artifact (§6)

The deploy workflow assembles a _site/ artifact from site/, reports/, and the rendered diary, runs the dashboard and roadmap generators, and publishes via actions/deploy-pages — the same pattern as gsm.roadmap's deploy-requirements-report.yml. Because generators run at deploy time, generated pages are never committed and the repo history stays clean.

3. Components

3.1 Homepage — site/index.html

A short, hand-maintained page for a first-time visitor: what the portfolio is (safety-graphics modernization, the repo table from README), how work happens (requirement lifecycle, agent-driven sessions), and four prominent links — Dashboard, Roadmap, Diary, Reports. It carries a brief history note pointing at the archived hub. Content is adapted from the hub's index.md; the hub's frozen metrics block (267 commits / 18 merged PRs / 11,855 lines / 2 releases, scope obot-claw) moves to the dashboard as a labeled historical baseline.

3.2 Dashboard — generated dashboard.html

Successor to the hub's nightly metrics plus ToDo queue, generated by scripts/build_dashboard.py (adapted from the hub's update_metrics.py). Two panels, with the Jeremy queue first because it is the dashboard's reason to exist:

PanelContentSource
🙋 Jeremy queue Every open item across the portfolio waiting on @jwildfire, one line each with a direct link: issues assigned to him, PRs where his review is requested, and Requirement issues sitting at a sign-off gate (project Status = Design awaiting 👍, or Review). gh search issues/prs (assignee / review-requested) + Project 1 Status field via GraphQL, scoped to the portfolio repos listed in README.
Key metrics Open requirements by lifecycle stage; open PRs across portfolio repos; commits and merged PRs in the trailing 30 days; diary recency (date of last entry). The frozen obot-claw baseline is shown as a separate, clearly labeled historical row. GitHub REST via gh api, scope jwildfire/* portfolio repos.

The hub computed lines-of-code by cloning every repo; that is dropped — it was the most expensive metric and the least actionable. Metrics are recomputed from scratch on each deploy, so no state is stored between runs.

3.3 Roadmap view — generated roadmap.html

A requirement-status table generated by scripts/build_roadmap.mjs (successor to the hub's generate-roadmap.mjs, informed by gsm.roadmap's requirements prototype report): one row per Requirement issue with title, topic labels, milestone, project Status, linked design doc, and sub-issue progress. Grouped by lifecycle stage, closed requirements collapsed at the bottom. Data comes from the requirement-labeled issues in this repo joined with Project 1 Status values via GraphQL. Legacy P00x projects appear only through their disposition (§5) — the roadmap renders current requirements, not historical projects.

3.4 Diary — diary/*.md, rendered to the site

The hub's 32 daily briefings (2026-05-11 → 2026-06-11) migrate verbatim into diary/ with Jekyll front matter stripped and a one-line provenance header added ("Migrated from the archived obot-claw hub"). New entries continue the same file convention (diary/YYYY-MM-DD.md) and roughly the hub's section format — work completed, issues/PRs touched, blockers, items for Jeremy — but the cadence changes from nightly-automated to per working session: the agent wraps up any substantive session by writing or appending to that day's entry (per D2, resolved). render_diary.mjs converts the markdown to HTML at deploy time with a shared template, producing a dated index plus one page per entry, so the diary reads on the site exactly as it did on the hub while staying plain markdown in the repo.

3.5 Artifacts framework — reports/

Modeled directly on gsm.roadmap's reports/: one folder per report containing a self-contained index.html (plus any assets/CSV exports) and a README.md recording how the report was generated, its sources and assumptions, and an LLM-assistance disclaimer. reports/README.md indexes all reports with a status column (current / superseded by X). Future AI-generated reports (audits, deep dives, framework proposals) land here under the same contract. The site deploy publishes the folder as-is; the flagship migration is the ten-chapter autonomous-agent-framework report.

4. Migration inventory and provenance

Every migrated artifact gets a provenance note (origin path, frozen date, "archived repo remains the historical record"). Internal hub links are rewritten to their new locations or to the archived repo where the target is not migrated.

Hub sourceDestinationTreatment
index.mdsite/index.html + dashboard baseline row Rewritten (content basis, not a copy); frozen metrics become the historical baseline; the static ToDo list is superseded by the live Jeremy queue.
daily/ (32 entries)diary/ Verbatim; front matter stripped; provenance header added.
reports/autonomous-agent-framework/ (10 chapters, index, styles) reports/autonomous-agent-framework/ Verbatim; add provenance README; flagship artifact.
Standalone HTML reports (autonomy-audit, pm-portfolio-framework, subagent-failure-deep-dive, work-session-supervision-acceptance, p009-supervised-runner-user-summary, framework-options v1–v4) reports/<name>/index.html Verbatim, one folder each; options v1–v3 marked superseded by v4 and the ten-chapter report in the reports index (per D3, resolved).
scripts/update_metrics.py, generate-roadmap.mjs scripts/build_dashboard.py, scripts/build_roadmap.mjs Adapted (new scope, new data sources), not copied.
Other scripts (work_session.py, run_codex_cycle.py, p009_runner_action.py, portfolio_audit.py, check_hub_sync.py) — (not migrated) Retired runner/supervision mechanics; remain readable in the archive.
docs/ (codex-cycle-contract, openclaw-runner-actions, runner-status-dashboard, work-session-supervision) — (not migrated) Contracts for retired runtimes; linked from the framework report's provenance README.
agents.md, autonomy.md, projects.md, roadmap.md, projects/, _layouts/, _config.yml, assets/ — (not migrated) Superseded by AGENTS.md, the roadmap view, and the new site scaffold.
Closed P00x project/requirement issuesDisposition table, §5 Converted, recorded as historical, or flagged for decision.

5. Legacy P00x disposition

The hub tracked six projects (P004–P009); four have "Project" issues in the archived tracker, two existed only on the homepage rollup. Conversion target: active work becomes Requirement issues here; completed or superseded work is recorded as history, with its lessons preserved in the migrated reports.

Legacy projectDispositionDetail
P004 SafetyGraphics renderer modernization (#16) Already migrated Lives on as Requirements #1 (safety.viz) and #2 (Safety Histogram pilot); later renderers get requirements as the migration sequences them.
P005 gsm.safety static charts from FDA report (homepage only) Convert New backlog Requirement, label safety — static ggplot safety displays aligned to FDA ST&F guidance, referencing gsm.safety issues #27/#28 and PR #29 as prior art.
P006 R/Pharma 2026 AI keynote (homepage only) Convert (per D1) New backlog Requirement, label ai — HTML-first keynote deck on open-source safety tooling and agentic engineering, continuing RPharma2026-AIKeynote PR #1.
P007 autonomy framework (#17) Historical Superseded by the Claude Code migration (framework report, Chapter 10). The forward automation thread continues in Requirement #3 (obot GitHub App).
P008 Paperclip orchestration pilot (#30) Historical Evaluated and retired; lessons preserved in framework report Chapters 4, 5, and 8.
P009 supervised Codex runner (#36) Historical Proven and closed; lessons preserved in the framework report and the P009 user summary report.

6. Automation

.github/workflows/deploy-site.yml, one workflow, mirroring gsm.roadmap's Pages deploy:

Diary writing stays a session-agent responsibility (an AGENTS.md convention added at implementation), not a scheduled job — the hub's nightly automation ended with the hub, and an empty day should produce no entry rather than a machine-generated filler.

7. Decisions

All four decisions were put to @jwildfire on 2026-07-02; each recommendation was accepted as-is.

D1 — P006 keynote scope. Convert the R/Pharma 2026 keynote to a backlog Requirement here, or track it only in its own repo?
Resolved: backlog Requirement here — the roadmap shows everything competing for Jeremy's portfolio time, and the keynote draws on this work.
D2 — Diary cadence. One entry per working session (merged into a daily file), or a weekly rollup?
Resolved: per working session — matches how work actually happens now and keeps entries factual; a weekly rollup can be layered on later if the diary gets noisy.
D3 — Options-report retention. Migrate all four framework-options versions, or only v4 plus the ten-chapter report?
Resolved: migrate all, marked superseded in the reports index — cheap to keep, and the memory philosophy favors preserving the decision trail.
D4 — Dashboard refresh cadence. Daily cron vs. weekdays-only vs. dispatch-only.
Resolved: daily — the queue is the page Jeremy checks, and a stale queue is worse than no queue.

8. Out of scope

9. Task preview

To be filed as Tasks on #7 after design sign-off; listed here to show intended decomposition. All in jwildfire/obot.roadmap.

  1. Scaffold site/ (homepage + stylesheet) and deploy-site.yml; enable GitHub Pages.
  2. Migrate the diary archive; add render_diary.mjs and diary/README.md cadence conventions.
  3. Migrate reports (framework report + standalones) with provenance READMEs and the indexed reports/README.md.
  4. Implement build_dashboard.py (metrics + Jeremy queue).
  5. Implement build_roadmap.mjs (requirement status view).
  6. File P00x conversion issues per §5 (P005 requirement; P006 per D1).
  7. Update README (History, site links) and AGENTS.md (diary convention; align the design-doc convention to {issue_number}_design.(md|html) per obot-claw#59).