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:
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.
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.
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:
| Panel | Content | Source |
|---|---|---|
| 🙋 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.
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.
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.
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.
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 source | Destination | Treatment |
|---|---|---|
index.md | site/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 issues | Disposition table, §5 | Converted, recorded as historical, or flagged for decision. |
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 project | Disposition | Detail |
|---|---|---|
| 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. |
.github/workflows/deploy-site.yml, one workflow, mirroring gsm.roadmap's Pages deploy:
main touching site/,
diary/, reports/, or scripts/; a daily cron so the
dashboard and roadmap stay fresh without commits (per D4, resolved); and
workflow_dispatch.build_dashboard.py,
build_roadmap.mjs, render_diary.mjs into _site/ →
copy site/ and reports/ in → validate key pages exist →
upload-pages-artifact → deploy-pages.contents: read, pages: write,
id-token: write. The Jeremy-queue search needs only public-repo read access via
the default token.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.
All four decisions were put to @jwildfire on 2026-07-02; each recommendation was accepted as-is.
backlog Requirement here, or track it only in its own repo?
obot-claw repos — they stay read-only reference.To be filed as Tasks on #7
after design sign-off; listed here to show intended decomposition. All in
jwildfire/obot.roadmap.
site/ (homepage + stylesheet) and deploy-site.yml; enable
GitHub Pages.render_diary.mjs and diary/README.md
cadence conventions.reports/README.md.build_dashboard.py (metrics + Jeremy queue).build_roadmap.mjs (requirement status view).{issue_number}_design.(md|html) per obot-claw#59).