plresearch-org · edit-ai-opportunity-spaces-r6 · round 6
Reported in prod: daviddao.org edited Economies & Governance, the audit record landed on blewit.us-west.host.bsky.network, the indexer picked it up — yet the byline stubbornly refused to appear. Two bugs stacked on top of each other: r5 only wired the byline onto opportunity-space detail pages (not area pages), and when I extended it on the quick-fix commit I put the byline as a sibling of the fixed-positioned <EditPageButton>, which dropped it ~2500 px down the document.
mt-4)Headline. Fix verified on prod against the user’s own real-world edit (not a synthetic test): /areas/economies-governance/ now correctly shows “Last edited by David Dao · 38 min ago · View history (1)” under the breadcrumb, and the drawer opens to the daviddao.org · sections edit. Byline also verified on the 4 opportunity-space detail pages (already working from r5) and the other CMS area/about/collaborate pages (silent when zero events, as designed).
| # | Bug | Effect | Fix |
|---|---|---|---|
| B1 | r5 only imported <EditHistoryByline> in the 4 opportunity-space detail pages, not on area pages, about, or outreach. |
daviddao’s edit of the area-economies-governance page record landed on her PDS and in the indexer, but the target surface (/areas/economies-governance/) had no byline to render it. |
Wire <PageEditHistoryByline rkey=…> on 7 additional page routes. |
| B2 | First attempt to wire the byline put it as a sibling of <EditPageButton>. |
<EditPageButton> is position: fixed & its JSX lives near the end of each page file. The byline <div> fell wherever EditPageButton sat in source order — for the E&G page, top: 2500.5px out of a ~3000px page height. Cosmetically invisible. |
Move the byline to sit directly below <Breadcrumb>, where it visually anchors as a subtitle. |
B2 was visible in the DOM (get html showed it existed) but not in screenshots. The computed getBoundingClientRect() confirmed it:
// browser console on /areas/economies-governance/ after the broken deploy
> document.querySelector('.mt-4 > .flex').getBoundingClientRect()
{ top: 2500.5, left: 88, width: 1104, height: 20 }
Opportunity-space detail pages happened to work in r5 because their <EditPageButton> sat right after <Breadcrumb> in JSX — pure coincidence. The 7 newer pages all had content between the two.
Two commits on plresearch.org@main:
48fb939Wire byline on 7 CMS page routes — first attempt, placement bug B2 shipped
d02541fMove byline from below <EditPageButton> to below <Breadcrumb> on every file
Pages that now render the byline (when the target record has at least one audit event):
/ — actually dropped; no breadcrumb and the full-bleed hero has no sane anchor point. Admins still have /admin for history./about//areas//areas/[slug]/ — covers the 3 generic area pages/areas/economies-governance//areas/economies-governance/subareas//areas/economies-governance/impact//outreach/collaboration//areas/*/opportunity-spaces/[slug]/ — unchanged from r5
/areas/economies-governance/ with David Dao’s real edit surfaced as a byline between the breadcrumb and the hero. Signed out, so “Collaborate” is in the header; the byline renders for everyone (history is public).
sections. Data flowed cleanly from daviddao’s PDS (blewit.us-west.host.bsky.network) → indexer (via firehose + manual backfill after its earlier restart) → our GraphQL → /api/edit-history → component.
/areas/ai-robotics/opportunity-spaces/open-compute-networks/ still shows its r5 byline (Satyam Two · 1h ago · View history (2)). The opspace detail pages were unaffected by the r6 fix.
/areas/digital-human-rights/. No one has edited the area-digital-human-rights record yet via the UI, so the byline renders as null. Breadcrumb → icon + title → content flows cleanly with no empty slot.
/about/. The component is wired and will slot in under the breadcrumb as soon as someone edits the about record via /admin or /about/edit.
/areas/economies-governance/impact/ similarly renders cleanly with no byline, waiting for its first edit of the area-eg-impact record.daviddao’s raw audit record, still on her PDS, cryptographically signed by her key:
$ curl -sG "https://blewit.us-west.host.bsky.network/xrpc/com.atproto.repo.listRecords" \
--data-urlencode "repo=did:plc:qc42fmqqlsmdq7jiypiiigww" \
--data-urlencode "collection=org.plresearch.editEvent" | jq '.records[0].value'
{
"$type": "org.plresearch.editEvent",
"editor": "did:plc:qc42fmqqlsmdq7jiypiiigww",
"editorHandle": "daviddao.org",
"target": "at://did:plc:pgwr6hkosgznfl5nz7egajei/org.plresearch.page/area-economies-governance",
"targetCid": "bafyreihukoqyujcafnsexgpzu7cnmvvrwd3tfmsgvwbznbi5ntn4xum6mi",
"collection": "org.plresearch.page",
"changedFields": ["sections"],
"editedAt": "2026-04-20T21:55:12.319Z"
}
After the r6 deploy, our API surfaces it:
$ curl -s "https://www.plresearch.org/api/edit-history?target=at://…/org.plresearch.page/area-economies-governance" | jq '.count, .events[0].editorHandle, .events[0].changedFields'
1
"daviddao.org"
["sections"]
Areas index, each generic area, E&G subareas/impact, about, and collaborate now load <PageEditHistoryByline>. Parity with opportunity-space detail pages from r5.
Moved from <EditPageButton>-sibling to <Breadcrumb>-sibling. The distinction matters because <EditPageButton> uses position: fixed; its JSX position in the file doesn’t determine where it renders, but it does determine where an ordinary sibling div renders — which is why placing the byline next to EditPageButton worked by accident for opspace pages and broke everywhere else.
No synthetic test data this time. The site owner performed a normal edit to fix real content, the audit record landed on her PDS, the indexer caught it, and the r6 deploy surfaces it on the public area page — exactly the product path.
Verified on /areas/digital-human-rights/, /about/, and /areas/economies-governance/impact/: no empty slots, no “0 edits” chip, no fallback text. The component returns null when the events array is empty, and the layout flows as if the byline weren’t there.
/) is excludedThe homepage has no breadcrumb, and its full-bleed hero has no sensible anchor for a byline. Admins still reach the history via /admin or the /edit route. If a reasonable slot shows up later (e.g., a footer chip under the hero), it’s a one-line add.
getBoundingClientRect() was the key diagnosticThe bug was subtle because the byline rendered correctly into the React tree and the DOM — it was just positioned off-screen. Both View history (1) and the avatar URL were present in document.querySelector('.mt-4').outerHTML. The next time a “rendered but invisible” bug shows up, jumping straight to getBoundingClientRect() saves a lot of time.
/areas/economies-governance/
Editordaviddao.org (on blewit.us-west.host.bsky.network)
Target URIat://did:plc:pgwr6hkosgznfl5nz7egajei/org.plresearch.page/area-economies-governance
Commits48fb939 (expand — shipped bug), d02541f (reposition — fix)
Indexer backfillPOST https://plresearch-indexer-production.up.railway.app/backfill {"dids":["did:plc:qc42fmqqlsmdq7jiypiiigww"]} — needed once because the indexer’s tap firehose consumer restart from r5 had missed daviddao’s edit at 21:55Z
Verify on PDScurl -sG https://blewit.us-west.host.bsky.network/xrpc/com.atproto.repo.listRecords --data-urlencode repo=did:plc:qc42fmqqlsmdq7jiypiiigww --data-urlencode collection=org.plresearch.editEvent
Verify via APIcurl -s "https://www.plresearch.org/api/edit-history?target=at://…/org.plresearch.page/area-economies-governance"
Previous roundsr1 (fail) · r2 (pass) · r3 (pass) · r4 (pass) · r5 (pass)
Screenshotsassets/01-*.png … assets/06-*.png