feature
Forward insight agent
The Forward insight agent turns finished study results into Forward Insights: first mockups you accept, then a code edit that adds pin_cell / popover_layout.
Use this path (or Conductor’s Put on chart offer) instead of asking the study authoring agent to “add a pin.”

Two pin pipelines
Path | Mockup blocks | Study | Bind |
|---|---|---|---|
Put on chart (this agent) |
|
|
|
Pin Studio / batch (Pin Designer) |
|
|
|
This page covers Put on chart. Pin Studio uses the legacy column-id contract.
Lifecycle
Phase 1 — mockups —
propose_mockups/revise_mockups(typically 2–4 options).scope_dimension_ids= declared scope-role dims only.You accept a mockup (scope dimensions, metrics, layout intent).
Phase 2 — code —
propose_chart_pin_edit(orchestrator orstudy_pin_rewrite_agent). Converts retained outcome axes torole: "report"; hoistsscopeEventabove outcome reads.You approve the study Code edit.
Re-run / Put on chart bind (
layout_cell.pin_cell).
Skipping acceptance yields errors like missing_accepted_mockup.
What the rewrite must produce
results.declare({
id: "pin_cell",
kind: "popover_layout",
indexedBy: [/* accepted mockup scope-role dimension ids */],
});
// onFinish — additive with research publishes
ctx.publish("pin_cell", cells.map((c) =>
ctx.popoverLayout.cell({
dims: c.dims,
n: c.n,
signal: c.signal,
blocks: [/* metric / text / badge / note */],
})
));Report-role dimensions are layout blocks — never pin indexedBy keys. Report indexedBy may be wider than pin indexedBy.
Conductor
Conductor may offer Put on chart after a study run. That routes here — it should not dump pin DSL through the study authoring agent.
Prompting patterns
Good
“Mock up a London vs NY pin with win % and median R; keep research tables.”
“Revise mockup 2: drop the badge, add sample n as text.”
Bad
“Skip mockups and just write pin_cell” — mockup-first lifecycle.
“Inflate n so the pin looks denser” — forbidden.
“Replace my study results with only the pin” — pins are additive.
“Put ny_regime in scope_dimension_ids” — report-role axis; use layout blocks.
