Skip to content

Impact Dashboard - #29

Closed
lksbrssr wants to merge 37 commits into
protocol:mainfrom
lksbrssr:lukas/impact-dashboard
Closed

Impact Dashboard#29
lksbrssr wants to merge 37 commits into
protocol:mainfrom
lksbrssr:lukas/impact-dashboard

Conversation

@lksbrssr

@lksbrssr lksbrssr commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

Cross-focus-area impact dashboard at /impact, built around a two-axis model: 🔵 our hand (the work we control with partners — the PL toolkit) and ⚫ the field (the change in the world, which moves with or without us). A "Our methodology" jump link in the hero takes first-time readers straight to the explainer.

What it does

  • Two axes, never one score. 🔵 our hand (PL blue) = our contribution to field progress (inputs · activities · outputs, the six-role toolkit); ⚫ the field (black) = did it happen (outcome) & did it matter (impact).
  • Cards show the field meter + role tags, and a green live signal (with a generic footnote) for points that have live data.
  • Detail view is a two-column methodology breakdown ("Progress against Inflection Point"); the six roles live in a pop-out modal; "Measuring / Our methodology" ties the logic-model chain to the A/B/C questions.

Notes

@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

Someone is attempting to deploy a commit to the gainforest Team on Vercel.

A member of the Team first needs to authorize it.

@lksbrssr
lksbrssr marked this pull request as draft June 29, 2026 14:10
@lksbrssr
lksbrssr force-pushed the lukas/impact-dashboard branch from 5980f67 to 6aa15ee Compare June 30, 2026 10:42
@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
plrd.org Ready Ready Preview Aug 3, 2026 1:02pm

Request Review

@lksbrssr

lksbrssr commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator Author

📸 Updated — simplified methodology

Removed the inputs→impact boxes; the methodology is now just the three evenly-spaced questions.

Our methodology (A "What difference are we making?" · B "Did the inflection point happen?" · C "Did reaching the inflection point matter?")
methodology

Detail card keeps the short questions; A reworded to "How is PL making a difference?"
modal

@lksbrssr

lksbrssr commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Folded in the market-signal work + restructured the detail modal

Merged the crowd-forecast / prediction-market work (previously the standalone #45) into this PR so it all lives in one place, and applied the review notes on the detail modal.

Detail modal — now a single column, three stacked sections:

  • The field — card title, progress meter, then Outcome and Impact moved directly under the title. Dropped the "Did it happen?" / "Did it matter?" questions and the A/B/C badges.
  • Our hand — "How PL is making a difference" with each PL contribution category (role) as a header + description, replacing the Inputs / Activities / Outputs split.
  • Live signal — live outputs + crowd forecast, incl. money at stake (market volume).

Also renamed the Permission → Policy PL role (methodology + modal).

restructured impact modal

Closing #45; everything is now stacked here.

@lksbrssr

lksbrssr commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Detail modal — round 2 of review tweaks

  • The field: Outcome and Impact now sit above the progress bar, and the whole field section is wrapped in a subtle grey card so it reads as one group.
  • Clear separation between the three sections — a divider + spacing before Our hand and again before Live signal.
  • Our hand: PL interventions are pills again (Connection / Capital / Policy …), each showing its definition on hover. Underneath, an "In practice" block shows that point's actual activities and examples (instead of repeating the generic role definitions).

restructured impact modal — the field

(The screenshot shows the reordered field section; Our hand pills + "In practice" and the separated Live signal follow below in the same modal.)

@lksbrssr

lksbrssr commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

Updated the inflection-point detail modal per feedback: The field, Our hand, and Live signal now each sit on their own separated grey card against the white modal backdrop, stacked and left-aligned. Live signal is now a titled card (keeping the pulsing green globe) that holds the live-output box, crowd forecast, and the See the latest … insights link. (Screenshots shared with reviewer.)

lksbrssr pushed a commit to lksbrssr/plresearch.org that referenced this pull request Jul 6, 2026
Integrated into the /impact dashboard (stacked on PR protocol#29, not amending it):
- src/lib/market-signals.ts — maps each inflection point to its closest
  market, choosing Polymarket vs Kalshi per match quality, with a liquidity
  fallback. Public Gamma + Kalshi APIs, hourly ISR.
- ImpactDashboard: crowd read on the FIELD axis (card + modal), platform
  badge, fallback tag, gap state; never conflated with PL contribution.
- impact/page.tsx: resolveAllSignals() alongside existing live outputs.

For discussion only.
@lksbrssr
lksbrssr force-pushed the lukas/impact-dashboard branch from ddb4dc2 to 41c5506 Compare July 6, 2026 19:25
@lksbrssr
lksbrssr force-pushed the lukas/impact-dashboard branch from 5a6dc42 to 651cbb1 Compare July 6, 2026 20:05
Populate contribution.outputs on the six capital inflection points with
concrete PL-network ventures as examples of the Capital instrument (the
HAND/contribution axis — not field progress):

- Comms that can't be switched off: Fluence, Huddle01
- Personhood without the state: Tools for Humanity (World), SpruceID, Privy
- Provenance as default for truth: EQTY Lab
- Agents on open rails: Fluence, Spheron, Expanso, Impossible Cloud, Lava, Fleek
- Public goods financeable: + Molecule
- Capital paid on verified outcomes: + WeatherXM

Unverified funding relationships are hedged inline pending confirmation.
- Remove the 'funding relationship to be confirmed' qualifiers from the
  identity / provenance / comms outputs.
- Add a TEAM_LINKS registry (team name -> website) and a Linkify renderer
  so each mentioned venture in the 'In practice' activities/outputs lines
  links to its own site. Links open in a new tab (target=_blank,
  rel=noopener noreferrer), consistent with the live-evidence links.
…rthcoming areas

- Shared HOW_TO_READ contract constant in inflection-points.ts
- "How to read this" button above the card grid opens an overlay with the
  statement + the field / our hand / live-signal legend (3b)
- Same statement as a left-ruled pull-quote in the methodology section (3a)
- Explicit forthcoming flag on focus areas: AI & Robotics tab now reads
  "Soon" instead of "0", and its empty state leads with a "Coming Soon"
  pill and "Not zero, just not yet" copy
lksbrssr added 2 commits July 7, 2026 13:53
Statement still lives in the "How to read this" overlay button; the
inline callout looked out of place in the methodology section.
- Add Metaculus as a third signal platform (reputation-weighted community
  forecasts). Token-gated API via METACULUS_API_TOKEN with graceful fallback
  to just linking the question when no token/live price is available.
- Memory retrieval in simulation (WBE): gap -> proxy, mapped to Metaculus
  Q372 "brain emulation as first route to human-level AI".
- Agents run on open rails: drop the "open-weights best model by Dec 31"
  market (about the weights, not the infra) and map to the Polymarket
  "US removes public access to a major AI model in 2026" market as a
  contrarian/headwind signal for open, permissionless rails.
…le government

- Neural distillation: map to Metaculus Q372 (brain emulation as first route
  to human-level AI) as a neural-data-to-AI proxy.
- Memory retrieval in simulation: map to Metaculus Q2813 (date of first human
  whole-brain emulation). Add date-question support to the Metaculus fetcher:
  unscale the community CDF to a median year and show it as the headline
  reading (e.g. "~2068") instead of a probability.
- Programmable government in production: gap again — drop the shared World
  market, which now lives only on "Personhood without the state in the loop".
@lksbrssr lksbrssr changed the title Add cross-focus-area impact dashboard (/impact) Impact Dashboard Jul 8, 2026
lksbrssr pushed a commit that referenced this pull request Aug 3, 2026
Drop the /impact-v2 toggle so PR 98 carries only the field-velocity dashboard;
#29's inflection-point design stays on its own branch/preview. Remove the v1
ImpactDashboard/MeasuringQuestions and the /impact-v2 route.

Rework the page:
- Hero: drop the 'inflection points got demoted' genesis; name inflection
  points as one marker of field velocity; frame the method as the meta-research
  design of 'how we do field acceleration'.
- Field velocity section (was 'Field acceleration, focus area by focus area'):
  horizontal sticky tabs (release at methodology), Our hand on the left, field
  velocity + live crowd signal on the right; inflection-point sensors removed.
- Methodology: name the interventions first, then field velocity as the result;
  drop the three questions, the 'toolkit checked against history' framing, the
  Mokyr/condition tags, the releases/what-changed/co-funder boxes; toolkit modal
  now shows the description only.
- Add the five velocity-measurement methods (performance curves, latency
  compression, idea vintage, revealed commitments, markets).
- Strip visible TODO(lukas) draft markers from published copy.

Applied the Lukas editing style throughout (no em-dashes, plain verbs, no
significance inflation).
lksbrssr pushed a commit that referenced this pull request Aug 3, 2026
…as modals

Field velocity section:
- Drop the talent/capital/tool-cost/cadence basket and the 'Our hand' box.
- Bring back PR #29's inflection-point cards (four boxes, two rows) with their
  live signals and detail modals.
- Add one wide field-velocity box that previews the five velocity instruments
  with an accelerating/decelerating/flat/n-a indicator and opens a modal with
  the fuller descriptions. Readings default to n/a until sources are wired.

Methodology:
- Rename 'The interventions' to 'PL R&D interventions'; drop the draft-pending note.
- Add a downward divider between the toolkit and the velocity block.
- Rename 'The difference they make' to 'Observed field velocity'.
- Make the five velocity metrics clickable modals.
- Reword the metric descriptions as plain explanations of what each instrument
  is; strip named attributions (Wright, METR, Stevenson & Kording, etc.).

Restore live-output fetch (Simocracy/GainForest/Glow) for the inflection cards.
lksbrssr pushed a commit that referenced this pull request Aug 3, 2026
…ogether

- Restore the vertical focus-area tabs from PR #29 (left column with counts),
  replacing the horizontal sticky bar; content sits on the right.
- Methodology: add an 'Our hand' eyebrow (blue) above 'PL R&D interventions'
  and a 'The field' eyebrow above the velocity block; shorten 'Observed field
  velocity' to 'Observed velocity'.
- Inflection cards/modal: relabel 'How PL is making a difference' to 'PL R&D
  interventions' so the velocity and methodology sections read as one system.
lksbrssr added a commit that referenced this pull request Aug 3, 2026
… (#98)

* Add cross-focus-area impact dashboard

Adds /impact — a public, filterable dashboard that tracks PL R&D's
impact via the twelve pre-registered inflection points, one set per
focus area.

What it does:
- Filterable by focus area (vertical tab rail); a user always lands in
  one area rather than seeing all twelve at once.
- Each inflection point is a card with a Defined -> Emerging -> Reached
  -> Scaling field-progress meter and a PL-role tag (Substrate /
  Originator / Funder & convener). Clicking opens a detail modal.
- The modal traces Q1 (did it happen — the pre-registered threshold),
  Q2 (did it matter — the cascade), and Q3 (did our work make it
  happen) as Inputs -> Activities -> Outputs.
- Field progress and PL contribution are kept on separate axes and
  never collapsed into one score: a point can be reached with little PL
  involvement and that is still a win for the field.
- For the two Economies & Governance points with live data, the modal
  pulls live OUTPUTS from the same sources as the FA2 live dashboard
  (GainForest, Glow, Simocracy) — labelled strictly as Q3 contribution
  evidence, never as Q1 progress. Fetched server-side with 60s ISR and
  graceful fallback.
- A "Measuring impact" explainer covers the logic model and the three
  questions.
- Adds an "Impact" item to the main nav.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Refine impact dashboard copy and logic-model alignment

- Inflection section intro: drop the "pre-registering keeps us honest /
  reading not an argument" tail; "pre-registered" -> "defined" threshold.
- Cards: remove the redundant "Defined" status pill (the field meter
  already shows stage); rename the teaser label "Signal it happened" ->
  "Inflection point".
- Detail modal: tag Q1 with "Impact" and Q2 with "Outcome" so all three
  questions share the logic-model row layout used by Q3's Inputs /
  Activities / Outputs.
- Measuring impact: move the "each inflection point instantiates this
  chain" note above the logic-model strip; style the strip labels as
  grey uppercase to match the detail cards.
- Three-questions explainer: surface each question's logic-model
  stage(s) — Impact, Outcomes, and Inputs/Activities/Outputs — to tie
  the section back to the cards.
- Hoist LOGIC_MODEL into lib/inflection-points so the strip, the
  explainer, and the modal share one vocabulary.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(impact): multi-role PL pills + bottleneck-based role taxonomy

Replace the single contributionLevel (substrate/originator/funder-convener)
with an array of PL roles named by the bottleneck each releases:
Infrastructure, Legibility, Connection, Capital, Translation, Permission.
Cards now render one pill per role; the Measuring-impact Q3 tab lists all
six roles and its copy reflects 'one or more' instruments.

* fix(impact): drop per-role descriptions from detail modal

The role pill descriptions in the inflection-point modal duplicated the
'Measuring impact' Q3 explainer. Keep the role pills (with hover titles)
but remove the description list so the explanation lives in one place.

* fix(impact): swap Q1/Q2 (Q1=did it matter/impact, Q2=did it happen/outcome) + self-contained role tooltips

- Q1 is now 'Did it matter?' (impact) and Q2 'Did it happen?' (outcome),
  consistent across the inflection-point detail modal and the Measuring-
  impact tabs (and doc comments / live-evidence notes).
- Role pills now carry a label + description tooltip matching the
  Measuring-impact Q3 role explainer.

* fix(impact): real hover tooltip on PL role pills

Native title was unreliable; replace with a scoped CSS tooltip
(group/role) that shows the role's label + description on hover, pulled
from the same ROLE_META used by the Measuring-impact Q3 section.

* impact(redesign): two-axis color tokens + role/logic-model copy

Add FIELD_COLOR (teal) / HAND_COLOR (violet) tokens; update ROLE_META
and LOGIC_MODEL copy to the mockup wording.

* impact(redesign): cards use THE FIELD / OUR HAND split + live signal

Drop focus-area color coding (neutral icons). Card now shows a teal
'field' axis (meter + did it happen & matter) and a violet 'our hand'
axis (role pills + did our work help), plus a LIVE SIGNAL block for
points with live outputs. Modal recolored/reordered to A (our hand) /
B, C (the field).

* impact(redesign): measuring A/B/C cards + color-coded chain + toolkit section

Measuring-impact section: color-code the logic-model chain by axis,
dot legend (not tick-boxes), and three always-visible A/B/C question
cards. Extract the six PL roles into a separate 'toolkit' section.

* impact(redesign): review pass

- Swap axis colors: field = purple, our hand = PL blue (#1982F4); teal removed
- Live signal now a pulsing green dot; 'Live outputs' -> 'Live signal'
- Cards: 'Detail' affordance (subtle top-right, not a full row); 'Methodology' removed
- Detail modal: wider + two-column (our hand | the field) with full-width live signal;
  remove repeated status badge and the field explainer; 'the signal' -> 'the inflection point';
  'Did our work help?' -> 'Is our work making a difference?'
- AI & Robotics empty state: 'inflection points' instead of 'pre-registered bets'

* impact: fold in redesign + detail/measuring refinements

- Detail modal: inputs/activities/outputs are now headers over their text
  (aligned with the field side); rename 'Field progress' to 'Progress
  against Inflection Point'; drop 'The only axis we control' subheading.
- Generic 'Live signal' footnote on cards + detail that carry live data.
- Mark communication / provenance / public-goods / verified-outcomes as
  Emerging (early-signal).
- Measuring: remove the dot legend (already conveyed in the subheader).

* impact: methodology jump link, black field color, roles-as-modal, copy

- Hero: add 'Our methodology' scroll link (landing-page style); rename
  the section to 'Our methodology' with a #methodology anchor.
- Field axis color -> black (drop purple); hand stays PL blue, live green.
- Methodology block: A card is wide with role pills + a subtle
  'See the roles we play' link opening a pop-out roles modal; B/C narrow.
  Remove the standalone toolkit section.
- Copy: 'Is our work making a difference?' -> 'Our contribution to field
  progress'; A axis line -> 'The axis we control with our partners'.

* impact: simplify methodology to three questions

- Remove the inputs->impact logic-model boxes; keep just the three
  evenly-spaced question cards.
- Measuring copy: A 'What difference are we making?', B 'Did the
  inflection point happen?', C 'Did reaching the inflection point matter?'
- Detail modal keeps short B/C; A reworded to 'How is PL making a
  difference?' (card hint too).

* impact: make the whole 'What difference are we making?' card clickable

Card A is now a button that opens the roles modal (like the inflection
detail cards), with 'See the roles we play' as a subtle hover affordance
instead of the only click target.

* impact: link detail cards to focus-area insights + measuring copy

- Detail card bottom band now spans full width: live-signal metrics
  (when present) plus a 'See the latest <focus area> insights' link.
- Deep-link: /insights?area=<slug> pre-selects that focus-area filter
  (InsightsExplorer takes an initialArea; page reads searchParams).
- Measuring copy: A 'Did PL's work make a difference?', B 'Were the
  inflection points reached?'.

* prototype(impact): crowd-forecast signals on inflection points

Integrated into the /impact dashboard (stacked on PR #29, not amending it):
- src/lib/market-signals.ts — maps each inflection point to its closest
  market, choosing Polymarket vs Kalshi per match quality, with a liquidity
  fallback. Public Gamma + Kalshi APIs, hourly ISR.
- ImpactDashboard: crowd read on the FIELD axis (card + modal), platform
  badge, fallback tag, gap state; never conflated with PL contribution.
- impact/page.tsx: resolveAllSignals() alongside existing live outputs.

For discussion only.

* impact: move crowd forecast into the horizontal Live-signal band

Per review: the crowd read now sits inside the modal's full-width Live
signal bar (alongside PL-backed live outputs) instead of under
'Impact — the cascade' in the field column. Gap points show a separate
crowd-forecast note. Field-vs-contribution caveat preserved.

* feat(impact): show market volume (money at stake) in Live signal band

Thread per-market USD volume through MarketSignal (Polymarket volumeNum;
Kalshi dollar_volume, falling back to contract count) and render a compact
'$15k at stake' chip next to the crowd probability in the modal's Live
signal band.

* feat(impact): restructure detail modal + fold in market signals

Per review, simplify the inflection-point detail modal into a single column
with three stacked sections:
- The field: card title, progress meter, Outcome and Impact (moved up under
  the title; drop the 'Did it happen?' / 'Did it matter?' questions and A/B/C
  badges).
- Our hand: 'How PL is making a difference' with each PL contribution category
  (role) as a header + description, replacing the Inputs/Activities/Outputs
  split.
- Live signal: unchanged (live outputs + crowd forecast with money at stake).

Also rename the 'Permission' PL role to 'Policy' (methodology + modal). This
commit sits on top of the crowd-forecast + volume work so it all lands in the
/impact dashboard PR.

* refactor(impact): reorder field, separate sections, restore PL role pills

- The field: move Outcome and Impact above the progress bar; wrap the whole
  field section in a subtle grey card for clear visual grouping.
- Add clear separation (top border + spacing) before Our hand and Live signal.
- Our hand: restore PL interventions as pills with the definition on hover
  (RoleChips), and show the point's actual activities / examples underneath
  ('In practice') instead of the generic role definitions.

* impact: put Our hand & Live signal on grey cards like The field

Match The field's grey card treatment for Our hand and the Live-signal
band so all three detail sections sit on separated grey cards against
the white modal backdrop, stacked and left-aligned. Live signal is now a
titled card (keeping the pulsing green globe) that holds the live-output
box, crowd forecast, and the 'See the latest ... insights' link.

* impact: hide live-signal detail in preview; add Provenance signals

Preview cards no longer render the crowd-forecast odds or live-output
metrics inline — they just show a small pulsing 'Live signal' marker so
there's a reason to open the card. The full crowd forecast, live metrics,
and evidence links stay in the detail modal.

Also make liveEvidence a list so a point can carry multiple real-world
signals, and add two to 'Provenance becomes the default for truth':
Starling Lab's content-authenticity displays and Wikipedia-on-IPFS during
Turkey's block.

* impact: move Turkey Wikipedia-on-IPFS signal to 'Communication that cannot be switched off'

The censorship-shutdown example fits the resilient-comms inflection point,
not provenance. Provenance keeps the Starling Lab authenticity signal.

* impact: make two-axis accents dark-mode legible

The 'field' axis used a hard black (#131316) via inline styles, so in dark
mode the field labels, the progress-bar fill, the active focus-area tab
icon, and the B/C badges all went black-on-black. Route FIELD_COLOR /
HAND_COLOR (plus new FIELD_INK and FIELD_TRACK) through theme-aware CSS
variables that flip in dark mode: the field ink becomes light, the badge
fill flips with dark ink, and the progress track darkens. Light mode is
unchanged.

* impact: drop GainForest/Glow Q3 evidence line from outcomes-verified note

* radar: auto-advance slides with story-style progress bars

* Add named Capital-role ventures as contribution outputs

Populate contribution.outputs on the six capital inflection points with
concrete PL-network ventures as examples of the Capital instrument (the
HAND/contribution axis — not field progress):

- Comms that can't be switched off: Fluence, Huddle01
- Personhood without the state: Tools for Humanity (World), SpruceID, Privy
- Provenance as default for truth: EQTY Lab
- Agents on open rails: Fluence, Spheron, Expanso, Impossible Cloud, Lava, Fleek
- Public goods financeable: + Molecule
- Capital paid on verified outcomes: + WeatherXM

Unverified funding relationships are hedged inline pending confirmation.

* Linkify named ventures in contribution copy; drop hedge text

- Remove the 'funding relationship to be confirmed' qualifiers from the
  identity / provenance / comms outputs.
- Add a TEAM_LINKS registry (team name -> website) and a Linkify renderer
  so each mentioned venture in the 'In practice' activities/outputs lines
  links to its own site. Links open in a new tab (target=_blank,
  rel=noopener noreferrer), consistent with the live-evidence links.

* Fix inflection point card text: 'How PL is making a difference'

* impact: relabel field subtitle to 'Inflection point status and impact'

* impact: add "How to read this" overlay + methodology callout, mark forthcoming areas

- Shared HOW_TO_READ contract constant in inflection-points.ts
- "How to read this" button above the card grid opens an overlay with the
  statement + the field / our hand / live-signal legend (3b)
- Same statement as a left-ruled pull-quote in the methodology section (3a)
- Explicit forthcoming flag on focus areas: AI & Robotics tab now reads
  "Soon" instead of "0", and its empty state leads with a "Coming Soon"
  pill and "Not zero, just not yet" copy

* impact: drop the "How to read this" methodology pull-quote

Statement still lives in the "How to read this" overlay button; the
inline callout looked out of place in the methodology section.

* impact: retune crowd-forecast markets

- Add Metaculus as a third signal platform (reputation-weighted community
  forecasts). Token-gated API via METACULUS_API_TOKEN with graceful fallback
  to just linking the question when no token/live price is available.
- Memory retrieval in simulation (WBE): gap -> proxy, mapped to Metaculus
  Q372 "brain emulation as first route to human-level AI".
- Agents run on open rails: drop the "open-weights best model by Dec 31"
  market (about the weights, not the infra) and map to the Polymarket
  "US removes public access to a major AI model in 2026" market as a
  contrarian/headwind signal for open, permissionless rails.

* impact: reassign Metaculus WBE forecasts + drop World from programmable government

- Neural distillation: map to Metaculus Q372 (brain emulation as first route
  to human-level AI) as a neural-data-to-AI proxy.
- Memory retrieval in simulation: map to Metaculus Q2813 (date of first human
  whole-brain emulation). Add date-question support to the Metaculus fetcher:
  unscale the community CDF to a median year and show it as the headline
  reading (e.g. "~2068") instead of a probability.
- Programmable government in production: gap again — drop the shared World
  market, which now lives only on "Personhood without the state in the loop".

* impact: rename 'Capital' role to 'Funding' in methodology modal

* impact-v2: add acceleration-centered data model (field-velocity.ts)

Y=field acceleration via a per-FA velocity basket; inflection points demoted to
pre-registered sensors (dated/falsifiable, misses kept); X restructured to
tool -> targeted condition -> what we did -> observed movement. Imports from
inflection-points.ts as the single source of truth; no v1 files touched. Real
unknowns left as explicit TODO(lukas) placeholders.

* impact-v2: add ImpactDashboardV2 (velocity basket + sensors + our hand)

Field card leads with the velocity basket (trend glyphs; unknown renders honest
grey) then a 'Our sensors: inflection points' list with the five status states.
Hand card shows tool -> condition -> movement with a proposed-tool badge.
Reuses market-signals crowd forecasts on the field axis in the sensor modal.

* impact-v2: add MeasuringQuestionsV2 methodology section

Three compact blocks: X->Y logic model, the three questions, and 'The toolkit,
checked against history' (seven entries, each opening a modal with the full
description + what-changed + co-funder gap). Adds a 'Where we need co-funders'
panel. All seven historical conditions covered by releases: tags.

* impact-v2: add /impact-v2 route (reframe hero + cross-link to /impact)

Separate route/component tree from v1. Kept out of nav + sitemap to mirror the
existing draft gating on /impact. Low-key cross-link back to the original
methodology lives on v2 only.

* impact-v2: add side-by-side screenshots (both dashboards, light + dark)

Cards + modals for /impact (v1, unchanged) and /impact-v2 (velocity basket,
sensor states incl. retired + missed-field-moved, toolkit modal, how-to-read).

* impact: single field-velocity dashboard at /impact

Drop the /impact-v2 toggle so PR 98 carries only the field-velocity dashboard;
#29's inflection-point design stays on its own branch/preview. Remove the v1
ImpactDashboard/MeasuringQuestions and the /impact-v2 route.

Rework the page:
- Hero: drop the 'inflection points got demoted' genesis; name inflection
  points as one marker of field velocity; frame the method as the meta-research
  design of 'how we do field acceleration'.
- Field velocity section (was 'Field acceleration, focus area by focus area'):
  horizontal sticky tabs (release at methodology), Our hand on the left, field
  velocity + live crowd signal on the right; inflection-point sensors removed.
- Methodology: name the interventions first, then field velocity as the result;
  drop the three questions, the 'toolkit checked against history' framing, the
  Mokyr/condition tags, the releases/what-changed/co-funder boxes; toolkit modal
  now shows the description only.
- Add the five velocity-measurement methods (performance curves, latency
  compression, idea vintage, revealed commitments, markets).
- Strip visible TODO(lukas) draft markers from published copy.

Applied the Lukas editing style throughout (no em-dashes, plain verbs, no
significance inflation).

* impact: inflection cards + wide field-velocity box; velocity metrics as modals

Field velocity section:
- Drop the talent/capital/tool-cost/cadence basket and the 'Our hand' box.
- Bring back PR #29's inflection-point cards (four boxes, two rows) with their
  live signals and detail modals.
- Add one wide field-velocity box that previews the five velocity instruments
  with an accelerating/decelerating/flat/n-a indicator and opens a modal with
  the fuller descriptions. Readings default to n/a until sources are wired.

Methodology:
- Rename 'The interventions' to 'PL R&D interventions'; drop the draft-pending note.
- Add a downward divider between the toolkit and the velocity block.
- Rename 'The difference they make' to 'Observed field velocity'.
- Make the five velocity metrics clickable modals.
- Reword the metric descriptions as plain explanations of what each instrument
  is; strip named attributions (Wright, METR, Stevenson & Kording, etc.).

Restore live-output fetch (Simocracy/GainForest/Glow) for the inflection cards.

* impact: vertical tabs (PR #29 layout); tie velocity and methodology together

- Restore the vertical focus-area tabs from PR #29 (left column with counts),
  replacing the horizontal sticky bar; content sits on the right.
- Methodology: add an 'Our hand' eyebrow (blue) above 'PL R&D interventions'
  and a 'The field' eyebrow above the velocity block; shorten 'Observed field
  velocity' to 'Observed velocity'.
- Inflection cards/modal: relabel 'How PL is making a difference' to 'PL R&D
  interventions' so the velocity and methodology sections read as one system.

* impact: drop draft framing; sticky vertical tabs; velocity label outside box; add inflection-points explainer

- Remove draft/discussion language: the 'Draft for review' badge, the velocity
  modal's 'being wired / n/a until source connected' note, and the forthcoming
  empty state's 'coming soon / plan of attack' copy.
- Intro jump link: 'How we measure this' -> 'Learn more about our methodology'.
- Move the 'Field velocity - Is the field speeding up?' label outside the box,
  matching the 'Inflection points we're tracking' label style.
- Make the vertical focus-area tabs sticky while scrolling the velocity section.
- Add an 'Inflection points' box to the methodology's Observed velocity section
  with a short explainer, opening a modal.

* impact: single-source velocity instruments with per-field states + charts

Task 1/2/5: move the five instrument definitions into src/lib/velocity-instruments.ts
as the single source of truth for that prose (rendered only in the definition
modal). Declare per-focus-area instrument records with three states
(reading / unwired / not_applicable), ragged by field, enforced by a build-time
assertion (reading needs value+asOf+>=1 source; unwired needs candidateMetric+blocker;
not_applicable needs reason).

Task 3: velocity box and aggregate modal become chart slots. Add an inline SVG
sparkline (log axis, confidence band, dashed unreliable tail, optional secondary
normalizer line) for readings-with-series, a compact stat block for
readings-without-series, an identical abstract blurred aria-hidden ghost chart for
unwired, and a muted line for not_applicable. The aggregate modal is
readings-and-charts only; each instrument title links to its definition modal.

Task 5: seed readings from public sources (AI performance curve = METR time
horizon; Neurotech performance curve = Stevenson & Kording neuron series; DHR
revealed commitments = Electric Capital). Everything else is honest unwired or
not_applicable.

Task 6: verbatim copy for the intro, the field-velocity standfirst, the aggregate
modal intro, the Observed-velocity standfirst, the instrument footnote, and the
state microcopy.

Stacks on #98. Draft gating unchanged.

* impact: inflection points carry outcome x mattered (Task 4)

Split marker resolution into independent outcome (pending/reached/missed/retired)
and mattered (unknown/too_early/yes/no) so a marker can resolve true while the
field goes nowhere. Derived label in one helper; mattered is never inferred from
outcome. Build-time assertion requires matteredEvidence when mattered is yes/no
and retiredReason when retired. Every existing marker seeded pending/unknown with
predictedBy/falsifiesIf null, rendered visibly as 'date not yet set' /
'condition not yet set'. Card face shows the derived label, review date, and the
two null-aware fields; the modal adds evidence/retired-reason when present. A
misses ledger near the list surfaces missed/retired/reached-without-lift markers
and renders at zero count.

* impact: wire idea vintage (+ talent entry) from OpenAlex CSVs

Follow-up to the field-velocity work. One instrument has a real data path, so it
leaves the ghost state.

- Ingestion: src/lib/velocity-openalex.ts parses one CSV per focus area at build
  time (never in the browser), retaining the # provenance lines and surfacing the
  frozen query string + generated date in the modal. Missing CSV => the documented
  unwired record (candidateMetric 'median reference age from OpenAlex', blocker
  'awaiting first run of scripts/velocity/field_velocity_openalex.py', owner Lukas).
- idea_vintage: series = median reference age with a ci_lo/ci_hi band; reliable=0
  years render as a dashed tail and are excluded from direction. Direction is
  INVERTED (a falling median = building on fresher ideas = accelerating), computed
  in scripts/velocity/vintage-direction.mjs and covered by a node:test unit test
  (npm test).
- revealed_commitments: the same CSV wires first_time_authors (talent entry) as the
  primary line with corpus_share_per_100k as a dashed normalizer; metric names it as
  the talent-entry component, with capital and job postings still unwired. Where a
  field already had a sourced reading (DHR / Electric Capital) the chart augments it.
- Chart component gains a confidence band, a dashed unreliable tail, and a secondary
  normalizer line. Caveat rendered in both instrument modals.
- Docs: src/data/velocity/README.md (CSV contract + frozen query strings) and
  scripts/velocity/README.md. No CSVs committed; the generator .py is added
  separately from Lukas's copy.
- Demo screenshots (light + dark) captured from a throwaway CSV, which was deleted
  before this commit so no synthetic data lands.

Stacks on #98. Draft gating unchanged.

* impact: markets live from mapped forecasts, card/copy polish, real OpenAlex generator

UI/copy pass on the field-velocity page:
- Hero: retitle to 'PL R&D's impact on field velocity' and let the intro
  paragraphs run full width.
- Inflection cards: drop the Defined/Emerging/Reached/Scaling progress bar, keep
  the status label.
- Move the 'How to read this' button into the sticky focus-area column (under the
  last tab) so it stays visible while scrolling.
- Field-velocity modal: remove the 'Owner: Lukas' line from unwired instruments.
- Markets instrument: bring it back for Neurotech, and surface the live forecast
  markets already mapped to each field's inflection points (Polymarket / Kalshi /
  Metaculus) both in the box (compact) and the modal (full list + reflexivity
  caveat). EG markets becomes the not_applicable example (its markers are white
  space); DHR markets becomes unwired since it has proxy markets.

Generator:
- Add scripts/velocity/field_velocity_openalex.py (real, CC0). It queries the
  OpenAlex FILTER cluster (title_and_abstract.search, | = OR) to dodge the gated
  anonymous fulltext search, samples works per year, resolves referenced-work
  years, and bootstraps the idea-vintage median + CI. certifi TLS; capped backoff
  so an anonymous multi-hour 429 fails fast instead of sleeping. first_time_authors
  is intentionally left blank (a robust count needs per-author history, not a
  constant-size sample).

No CSVs committed. Stacks on #98.

* impact(data): real OpenAlex idea-vintage CSVs for all four focus areas

Pulled via scripts/velocity/field_velocity_openalex.py (OpenAlex, CC0) with the
frozen per-field query strings. Each CSV carries its query + generated date in the
# provenance block. idea vintage now renders a live chart with CI band, dashed
unreliable tail (2024+), and the inverted direction; markets already read the
mapped live forecasts. first_time_authors left blank by design.

Regenerate + overwrite to refresh; git history is the time series. No secrets in
the data (API key passed only at runtime). Stacks on #98.

* impact: idea-vintage axis + start->latest comparison; explain in methodology modals

- Sparkline extracted to a shared component (src/components/VelocitySparkline.tsx)
  and given an optional labelled vertical axis (min/max of the series). Enabled on
  the idea-vintage charts (box + modal) so the reader can see what the curve
  indexes to (years).
- Idea vintage reading now states a start->latest comparison in its trend line
  (e.g. '8.x y in 2005 -> 6.0 y in 2023, lower = fresher ideas') instead of only a
  direction word.
- Methodology idea-vintage modal now renders the real per-field series as small
  multiples ('What it looks like today').
- Methodology inflection-points modal gains the abbreviated named x mattered
  framing: the two axes, the four quadrants (good case / hit-that-doesn't-lift /
  unnamed acceleration / noise), canonical examples (k genome, AlphaFold, Watson,
  AlexNet, transformers, HTS magnets), and the design implication.

Stacks on #98.

* impact(fix): idea-vintage direction must agree with the numbers shown

Bug: E&G showed '6.0y -> 7.0y' (references getting OLDER) yet a green
'Accelerating' chip. The chip used a trailing single-year slope while the text
used two raw endpoints, and on a noisy sampled series they disagreed and
over-claimed.

Fix: derive BOTH the direction chip and the comparison text from one calculation
— the mean of the earliest 3 reliable years vs the most recent 3 — with a 0.75y
flat band so an in-noise wobble reads 'flat', not a trend. The comparison now
shows those same window averages (e.g. '6.0y avg (2005-2007) -> 6.3y avg
(2021-2023)').

Result on the real data: E&G flat (6.0->6.3), DHR decelerating (5.0->7.0),
AI accelerating (5.3->3.7), Neurotech decelerating (6.3->8.7). Unit test updated
to cover the in-noise = flat case. Stacks on #98.

* impact(methodology): explain how the idea-vintage sparkline is built from OpenAlex, and the guards

Address three OpenAlex pitfalls, and make the previously-bare sparklines legible:
- 'How the chart is built': per-year keyword-cohort sample -> resolve each
  reference's publication year -> pooled median age -> bootstrap CI band ->
  early-vs-recent direction with a flat band. States it is a sampled estimate.
- 'What we guard against in OpenAlex': (1) size is not velocity, so we read an
  age not a count and normalize any counts against corpus growth; (2) labels
  drift, so cohorts are frozen title+abstract keyword queries, not OpenAlex topic
  labels, with the query + retrieval date stored per series; (3) recent years lag,
  so the last ~2 years are dashed, excluded from direction, and compared like
  windows.
- Aggregate-modal provenance now reads 'Keyword cohort (title + abstract): <query>
  retrieved <date>' to make the cohort + snapshot explicit at the point of use.

Copy only; the underlying pipeline already used keyword cohorts, an age metric,
and a reliable-year cutoff. Stacks on #98.

* impact(copy): name OpenAlex in the idea-vintage modal and convey careful use

Lukas-style pass on the idea-vintage methodology copy:
- 'How we build this from OpenAlex' now names the source up front (an open, CC0
  catalogue of 250M+ works and their reference lists) and walks the build:
  keyword-cohort sample -> resolve each reference year -> pooled median age ->
  bootstrap CI -> early-vs-recent direction with a flat band.
- Guards retitled 'Reading OpenAlex without its artefacts' with a one-line lead
  that OpenAlex is a moving target, then the three habits (age not count; frozen
  keyword cohort not topic labels; dash and drop lagging recent years).
- Tightened wording (plain verbs, no em-dashes, specific numbers).

Copy only. Stacks on #98.

* impact: remove the maturity progress bar from the modal and cards

The four-step Defined -> Emerging -> Reached -> Scaling bar mixed a state of
our own naming with states of the world; outcome x mattered now carries
resolution. Drop it from the detail modal and the card stage label, delete the
unused maturity field/type/helpers (InflectionStatus, FIELD_STAGES,
stageIndexForStatus, STATUS_META, FIELD_TRACK), and fix the status line to read
'not yet reviewed' instead of 'reviewed not yet'.

* impact: fold an attribution note into the interventions block

Under 'PL R&D interventions', add a short, honest note: we don't claim our
interventions directly cause a field to accelerate (attribution at the field
level isn't cleanly identifiable); for now we name what we run and watch
whether the field moves, and intend to make the link clearer and publish it
later. No separate section, no grading machinery.

* Make impact dashboard an unlisted, non-indexed preview route

- Move /impact -> /impact-preview-eb61fba1b98e (cryptic, unguessable slug)
- Remove Impact from main nav so it isn't discoverable on the site
- Add robots noindex/nofollow (page + googleBot); already absent from sitemap
- Deliberately NOT added to robots.txt (would publish the secret path)
- Update stale /impact doc reference

---------

Co-authored-by: Lukas Bresser <noreply>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Lukas Bresser <lukas@bress.xyz>
Co-authored-by: lksbrssr <lksbrssr@users.noreplace.github.com>
Co-authored-by: Lukas Bresser <lukas@plrd.org>
Co-authored-by: lksbrssr <lksbrssr@users.noreply.github.com>
@lksbrssr

lksbrssr commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator Author

Closing as superseded. This v1 Impact Dashboard was reframed into the v2 field-velocity dashboard in #98, which is now merged to main — the live /impact page renders that v2 version. All shared work from here (inflection-points, market-signals, the route + nav entry) is already on main; only the old v1 components are unique to this PR, and they've been replaced. Follow-up polish lives in #103.

@lksbrssr lksbrssr closed this Aug 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants