AI-generated reports for the obot portfolio, following the
gsm.roadmap artifacts pattern:
one folder per report, containing a self-contained index.html (plus any assets)
and a README.md recording provenance, sources, and assumptions. The site deploy
workflow publishes this folder as-is.
The reports below were migrated from the archived obot-claw hub (July 2026). New reports land here under the same contract; see the design doc for requirement #7.
The news feed's description line is what decides whether a row is worth opening. It comes from the artifact's own page head, written when the artifact is written:
<title>What the page is called</title>
<meta name="description" content="What this page contains, and why you would open it.">
Put it directly after <title>. One line, 40β260 characters, and it must clear the
plain-English bar (@jwildfire, 2026-08-15):
node scripts/check_artifact_descriptions.mjs verifies every artifact, and the deploy
runs it before publishing: a page with no description fails the build. If one ever
reaches the site it renders as a loud β NO DESCRIPTION strip rather than a plausible
sentence β a fallback that reads as intentional is how the old one survived six weeks.
@jwildfire, 2026-08-16: "I really don't like the randomly bolded sentences in the middle of paragraphs. Call things out in modals if they're super important, but no more random inline bold." He reads these pages fast, often on a phone. Bold applied to a quarter of a page emphasises nothing, and the skim it was meant to help is the thing it destroys.
.callout, .card or .verdict on the current pages), it holds at 390px,
and it follows the page's light/dark handling. A bolded lead sentence inside a callout is
the callout doing its job twice.Recommendation:, Sources.).The full rule, with the sweep that established it, is in
decisions/README.md and
requirement #198.
| Report | Date | Status |
|---|---|---|
gsm.qtl report_qtl.yaml β upstream audit |
2026-07-29 | Current β an upstream audit of gsm.qtl's QTL report module, triggered by running it in demo-301 and by @jwildfire's pushback on a first pass that got the diagnosis wrong ("Not seeing these in production use"). Every claim re-executed from a clean R session against gsm.qtl's own bundled inputs rather than the demo study's: four defects confirmed, one withdrawn. Ranked β the compreas fill tests is.na() only while every dataset in the ecosystem uses "", so the QTL0002 discontinuation listing shows 78 rows where 8 is correct while the same page's headline metric says 14 (silent wrong result); an unqualified pull halts the workflow at step 9 under both shipped drivers; the SUBJ/STUDCOMP join drops invid and the render dies; the report is silently written to tempdir(). Underneath all four: the module is run by no test, example or vignette, yet ships byte-identical to studies via gsm.library. The withdrawn claim is kept on the page with the reason it failed. Written as draft issues with copy-pasteable repros, verbatim console output and rendered before/after screenshots β nothing filed against Gilead-BioStats; drafts in obot.agent PR #62 |
| Overview & domain dashboards β design | 2026-07-28 | Current β the second design pass of the day on goal #79, directed after #134 shipped: what the top-level pages show. Three mockups β Study Overview built around what changed since the snapshot you last reviewed (a review-period control scoping the page, a new/persisting/resolved change ledger, flag tiles and the real enrolment curve), RBQM with the riskiest-sites table @jwildfire asked for beside a funnel plot because 110 of 143 sites score exactly zero and the top five includes sites with two and three participants, and Safety as three options with a recommendation. Three components to settle once (change chip, suppression rule, review state) and eight questions, all answered the same evening. Two findings surfaced rather than buried: the site risk score silently divides by 114 instead of 178 because two 32-weight KRIs are all-NA, and snapshot-over-snapshot trends are blocked by og_run stamping every snapshot with today's date. Grounded in ~20 products surveyed and the primary regulatory texts read in full; every number is real demo-301 data, every screen is a mockup |
| The app β design record | 2026-07-28 | Current β the design pass behind goal #79 (the safetyGraphics replacement, open.gismo arc), in two halves: Part 1 puts three shell/navigation directions on the table β A Monitor, B Gallery, C Study site β recommends C's frame with B's gallery and A's tiles, and works the two surfaces @jwildfire picked (the chart-viewing workflow, and snapshots / the demo study) plus the provenance chip that traces a number back to its snapshot, data version, package pins and pipeline run; Part 2 states the data & config framework under it β workr pipelines, config-as-code in a forkable study repo, Project Snapshots as the only data interface, a Domain as a config entry rather than code β with a real / aspirational / inconsistent inventory read from source. Sixteen open decisions (D-APP0β7, D-FW1β8). Every screen is a static mockup and the DEMO-301 study is fabricated. Direction approved in session and built as #134 (demo-301 v0); GitHub-role context on #34 |
| open.csr β the change request nobody tracks | 2026-07-27 | Current β roadmap research for goal #112, two parts from a four-lane research fan-out: Part 1 deep-dives 18 CSR-automation and review products on the TLF change-request seam (none tracks a request as an object; none re-flags prose when a table's numbers change; new competitor Clymbr Hub is assembling the TLF side; cards 0.8.0 shipped the ARD diff primitive; ARS verified to have no lifecycle model) and Part 2 proposes the display change-request framework β CR-as-versioned-artifact, review tier proven by the computed ARD diff (the SAP/shell asymmetry made mechanical), version-vs-fork rules, drafts watermarked in the PR preview, dual sign-off (biostatistician signs the ARD diff, writer signs the binding impact report) β with five shippable increments and five open questions (D-CR1β5) at @jwildfire's review gate |
| open.csr text-block editor β live protocol | 2026-07-26 | Current β the editing surface shipped by open.csr#9 (part B of #113, reader β editor), demonstrated by running it: the repository's own gate module (text-core.js), diff writer (editor-core.js), a real 84-row CDISCPILOT01 ARD and two prose blocks are inlined into the page, so both editors are live and a twelve-step protocol drives them β type a number by hand and the numeric-fidelity gate fails it in the sentence; bind the same number and it passes. Each step declares what it expects and then checks itself (12/12 against bb58906). Covers the four ways a binding goes wrong, scale/digits qualifiers, the patch (hunks offset past the frontmatter, so no browser edit can touch approval state) and the multi-block patch bar |
| safety.viz v1.5.0 β annotated demo | 2026-07-25 | Current β visual companion to the release plan for #114 item R1: what v1.5.0 adds, feature by feature, as four annotated walkthroughs β participant profile and its v2 rail plus adverse-event domain (sv#105, sv#112), migration Sankey + ALT waterfall (sv#97), the eDISH follow-ups (sv#110) and pre-filled axis limits (sv#108). Four short screen captures (draggable Hy's-Law cut-lines, profile click-through, Sankey β composite hand-off, waterfall hover) plus annotated stills, all taken with Playwright against the live dev site β the build this release promotes β with numbered steps into each demo. The profile captures were re-taken late on 2026-07-25 against the rail, after sv#112 merged and removed the dock |
| Audit view redesign β three ways to clear the queue | 2026-07-25 | Current β design prototypes for #109, driven by the real nightly ledger (33 findings, 22 rules): three working compact views β A Ledger (one table, rule bands, detail in place), B Rail (masterβdetail), C Sweep (rule-first batch). The queue drops from 9.3 screens to 2.0 and from 125 px to 31 px per finding; β/β per row and per rule, collapsible search/sort/filter sidebar, staged decisions that print the repository_dispatch body instead of sending it. Decided the same day: Option B ships, dispatch stays per click, D3βD7 to the recommendation (rule-band reject confirms above 3, activity log as a fold under the table, rule reference kept, run status as a row pill plus one panel); PR #110 unblocked |
| Dashboard chat β working prototype | 2026-07-25 | Parked 2026-07-26 (backlog) β evidence for #77: a file-based per-session inbox delivered by a Stop hook (working sessions) or a persistent Monitor (idle sessions), with the transcript JSONL tailed as the reply stream and a loopback-only local server hosting the live page; both lanes verified end to end (0.9 s idle, next turn boundary while working); decisions D1βD6 awaiting @jwildfire; companion to design #77 and obot.agent PR #50 |
| Platform gap analysis β what the other safety platforms ship that we don't | 2026-07-25 | Current β external-landscape survey: 13 safety-monitoring / clinical-review platforms plus 2 reference catalogues, 63 capabilities scored against the portfolio (17 have, 7 filed, 37 missing or partial). Headline: the chart migration is nearly complete and ahead of the field on abnormal-baseline DILI, but 0 of 10 review-workflow capabilities exist here β review state, change-since-last-review, annotation, issue tracking, alerting. 12 ranked requirement proposals, deduplicated against the goal atlas (defers to its C3βC8, A3, A6, A7); nothing filed |
| The Goal Atlas β first sweep of the roadmap against the goal layer | 2026-07-24 | Current β first full issue sweep after the goal layer shipped (#53/#71): 182 issues, only 29 of 74 open ones reachable from a goal, 45 unclaimed including 20 requirements; four rollup visualizations, three proposed new goals (workbench / one-product / evidence) with rosters, nine proposed relinks, and 32 candidate requirements across the four goals; all proposals awaiting @jwildfire β nothing filed or linked |
| Participant profile v2 β where the profile lives | 2026-07-24 | Current β interactive UX mockup for #75: the profile in a right-hand rail, the four surfacing options switchable live against the real chart + profile modules, expand-to-full-screen, and the AE summary / AE timeline tracks on the lab chart's study-day axis; decisions D1βD9 awaiting @jwildfire; companion to design #75 |
| Participant profile β one drill-down module for every safety.viz chart | 2026-07-22 | Current β triggered by collaborator feedback on the composite view's missing eDISH-style click drill-down; four surfacing options (A dock / B drawer / C view / D host-composed) with a recommended hybrid + cohort stepper; decisions D1βD4 awaiting @jwildfire; relates to sv#87/#88/#53/#91 and hub #43 |
| obot portfolio β executive overview | 2026-07-21 | Current β accomplishments to date, status across 7 workstreams, next steps (this week + AugβSept), gaps G1βG7, and the roadmap.html diagnosis behind generator v1.8.0; feeds hub #31. Direction update same night (banner in report): stage model set β Stage 2 = safety.viz fully shipped, Stage 3 = autonomy goals (charts + safetyGraphics-replacement app), Phase 4 = Sept talk prep; decisions on #10/#18/#34 |
| FDA ST&F β static display strategy | 2026-07-21 | Current β full inventory of the 60 tables / 22 figures in guide v2.0; 15 figures unserved in open-source R, 12 with a shipped safety.viz twin; architecture + phasing recommended, decisions D1βD4 awaiting @jwildfire; input to hub #9 (P005) |
| Safety graphics β improvement requirements & feasibility | 2026-07-17 | Current β 5 colleague ideas scoped; all 4 sources reviewed; Initiative 01 (hep composite, sv#67) + Initiative 03 (QT Phase 1, hub #36 / sv#68) building; renal ties #35 |
| nepExplorer β safety.viz β migration assessment | 2026-07-15 | Current β GO (phased); decisions D1βD3 awaiting @jwildfire; input to hub #29 / #33 |
| Hep-explorer β upstream backlog & a clinical-guide section | 2026-07-12 | Current β proposal awaiting @jwildfire (A/B/C decisions); companion to safety.viz PR #44 |
| open.gismo v1.0 β design & roadmap | 2026-07-12 | Current β decisions D1βD6 awaiting @jwildfire; companion to open.gismo PR #1 |
| Roadmap usage audit β the public story lags reality | 2026-07-11 | Current β tier-1 corrections awaiting @jwildfire |
| safety.viz homepage β five layout directions | 2026-07-11 | Current β awaiting @jwildfire's pick (safety.viz#29) |
| safety.agent harness proposal (#17/#18) | 2026-07-04 | Current |
| Autonomous PM/Development framework report (10 chapters) | 2026-06-06 β 06-11 | Current β flagship; Chapter 10 covers the Claude Code migration |
| Autonomy audit and refactor development framework | 2026-06-05 | Current |
| PM agent and portfolio framework review | 2026-06-06 | Current |
| Subagent failure deep dive | 2026-06-06 | Current |
| Work-session supervision acceptance evidence | 2026-06-06 | Current |
| P009 supervised runner user summary | 2026-06-08 | Current |
| Framework options v4 β Paperclip evaluation | 2026-06-07 | Superseded by the framework report |
| Framework options v3 | 2026-06-07 | Superseded by v4 |
| Framework options v2 | 2026-06-06 | Superseded by v3 |
| Framework options v1 | 2026-06-06 | Superseded by v2 |
Superseded versions are retained deliberately (design decision D3) β the memory philosophy favors preserving the decision trail.
decisions/ holds the pages an autonomous session writes when it hits a call
it cannot make β situation, options with what each costs and forecloses, a plain
recommendation, and what unblocks on each choice. One folder per decision, dated. These and
release-candidate PRs are the only two things @jwildfire reviews, per the
release-candidate framework;
the contract is documented in decisions/README.md.
sessions/ holds the frozen per-session operational records produced at
wrapup by the session hub (requirement #24).
It follows its own flat contract β one self-contained HTML file per working session,
named by the diary slug β documented in sessions/README.md.
reports/<kebab-name-with-date>/ with a self-contained index.html.README.md: how it was generated, sources, assumptions, LLM disclaimer.