# research.arnao.ai — PRD

**A living, AI-filtered weighted knowledge graph that self-improves overnight and produces sendable "context-as-a-graph" blocks.**

Owner: Byron Arnao. Status: spec for build. Front-door, brand-level scrutiny.

---

## 1. Product & the wedge

Chatting with an AI gives you an answer that evaporates. A notes app gives you a pile you have to re-read. research.arnao.ai gives you a **weighted graph of a topic that a background agent keeps making smarter** — and the unit you take out of it is a **block**: a filtered subgraph, self-contained, that you send to another person the way you'd send a link.

The hero is that block. When Byron sends someone his "memory" research, they don't get a wall of text or a chat log they have to trust — they get a **labeled, weighted infographic** where every node shows *why it's there and how much it should be believed*: source authority, how fresh it is, how many independent camps corroborate it. That is the wedge. A chat answer is unweighted and unshareable. A notes app is unweighted and dead. This is **weighted, living, and sendable** — the first two make it defensible, the third makes it spread.

Test for every feature: does it make the sent block more legible, more current, or more obviously Byron's? If not, cut it.

---

## 2. The self-improvement agent

A background agent runs on a cadence (default nightly; hot topics hourly). Four jobs.

**a) Source discovery.** Each cycle it expands the frontier: follows citations out of high-weight arXiv nodes, pulls new episodes from tracked podcasts, sweeps the voices roster (below), and runs 2–3 agent-issued queries seeded by *yesterday's rising terms*. New candidate sources are scored, deduped against existing nodes, and admitted only above a weight floor — the graph grows toward authority, not volume.

**b) The weighting formula.** Node weight is not flat and not one metric fits all sources. Weight is computed per **source class**, then normalized 0–1:

```
weight = authority(class) × recency_decay × corroboration
```

| Source class | authority signal (concrete) |
|---|---|
| arXiv / preprint | citation count + venue tier + author track record |
| Lab / institutional paper | institutional weight + peer-review status |
| Podcast | host authority × guest authority (transcript-mined claims) |
| X / Bluesky voice | follower-adjusted **but hard-capped** — social never outranks a paper |
| Byron's own notes | fixed operator weight (his judgment is a first-class signal) |

- **recency_decay** = `0.5 ^ (age_days / half_life)`. Half-life is topic-velocity-adaptive: fast-moving areas ~30 days, settled canon ~365. A 2019 result and last week's preprint are visibly different sizes.
- **corroboration** = count of *independent source-classes* asserting the same claim, not raw mention count. **Ten reposts of one post is not corroboration; it is one source.** A claim carried only by social sits at the lowest tier and must be corroborated by a non-social class before its weight lifts. This rule is inherited directly from the existing pipeline's verification tiers.

**c) Trend detection.** Trend is a mechanism, not a mood. The agent tracks each claim's and each term's **corroboration-weighted frequency across rolling time windows** (7 / 30 / 90 day). A trend *fires* when a claim's weight crosses a threshold (rising or collapsing) or when a new node cluster forms above the floor. That gives the time dimension: "the discourse is shifting from X to Y" is a measured slope, with the sources that moved it attached.

**d) The overnight diff — "what changed."** Every cycle emits a structured changelog rendered as an annotation layer on the graph, never a silent rebuild:

- **+ new nodes** (source, admitted weight)
- **↕ re-weighted edges/nodes** (old → new, why: new corroboration, decay, retraction)
- **▲/▼ claims that gained or lost corroboration**
- **⚡ trends fired** since last cycle

This is the "it got smarter overnight" moment — a badge on the graph ("3 new sources · 2 claims re-weighted since yesterday") the user can expand.

---

## 3. Data model

**Node** — an entity or claim.
`{ id, type: [paper|claim|person|concept|artifact|note], label, source_class, authority, first_seen, last_seen, weight, provenance_url, corroborated_by[] }`

**Edge** — a typed, weighted relation.
`{ id, from, to, type: [supports|refutes|extends|cites|coined_by|corroborates], weight, evidence_url }`

Refutation is first-class: the graph shows disagreement, not just consensus.

**Weight** — always the derived 0–1 above, always visible (size + glow + a numeric badge on inspect). Flat rendering is a bug.

**Block** — a filtered subgraph = the shareable artifact. Self-contained JSON + a rendered view:
`{ block_id, topic, filter_query, nodes[], edges[], generated_at, weighting_snapshot, source_manifest[], signature: "RAI · Byron Arnao" }`

A block embeds its own sources and the weighting snapshot at clip time, so it renders offline, cites at the point of claim, and cannot silently drift after you send it. Screenshot-native for LinkedIn; also a live link that shows freshness against the current graph.

---

## 4. The live AI filter

The chatbox is a **re-render control**, not a Q&A bot. Message → **query → filter/re-weight → re-render**, sub-second, animated so the change is legible:

1. **Parse** the message into filter predicates (`source_class ∈ {paper,lab}`, `topic ~ safety`, `since ≥ June`, `min_weight`).
2. **Re-weight** for intent — "only what's changed my mind lately" boosts recency; "the settled canon" boosts corroboration and lengthens half-life.
3. **Re-render** the same graph filtered/re-weighted — nodes fade, resize, cluster. No new page, no chat transcript replacing the graph.

"Only the safety-critical memory work since June" visibly collapses the constellation to a handful of bright nodes. Then: **clip → block.** The current filtered view *is* the shareable artifact — one action from talking to sending.

---

## 5. Plugs into Byron's existing pipeline

This is the **graph layer on top of the Signal source registry** — not a new ingestion stack.

- **Ingest reuses what's live:** smol.ai AI News RSS as the AI-Twitter backbone, Grok `x_search` (sanctioned X, ≤20 handles/call), Bluesky `getListFeed`, plus arXiv/labs and podcast transcripts already flowing into Signal.
- **The voices roster becomes people-nodes:** the ~100-voice set — RAI luminaries Gebru, Bender, Mitchell, Birhane on Bluesky/Mastodon; researchers and enterprise RAI on X/LinkedIn — with platform split and 90-day mortality already tracked upstream.
- **Verification tiers become corroboration inputs:** the existing two-tier verification + golden-set diff maps straight onto the corroboration term. Social = lowest tier, needs non-social backing — same rule, now visualized.
- **Signal stays the daily heartbeat; this is the memory.** A Signal episode is a moment; the graph is the accumulated, weighted structure those moments deposit. The overnight diff can *feed* a Signal segment ("what the graph learned overnight"), closing the loop.

No new firehose. The graph consumes the registry's output and adds structure, weight, and shareability.

---

## 6. RAI positioning & honest risks

**Why this is category-defining.** Byron owns governance and the harness. Everyone else ships an answer and asks you to trust it. This ships an answer **and the apparatus that decided how much to trust each piece of it, in public, at the point of claim.** A weighted, corroboration-gated, citation-anchored graph *is* an RAI artifact — provenance, contestability, and transparency are the product, not a compliance afterthought. It's the difference between "I read a lot" and "here is my epistemics, inspect it."

**The honest risks — name them, because the RAI audience will.**

- **The weighting formula is itself a governance artifact that encodes bias.** A naive authority metric (citations, followers, venue) would systematically **under-weight exactly the marginalized RAI voices the product claims to elevate** — Gebru, Bender, Birhane, whose influence runs through Bluesky, community, and refused venues, not h-index. Mitigation: authority is per-class with social capped *and floored*, operator-curated voices carry a standing weight, and the formula is **published and versioned** — the bias is auditable, not hidden. Shipping the formula openly is the RAI move.
- **Automation laundering false authority.** A confident, unsupported claim rendered as a bright node looks true. Mitigation: corroboration gating, refutation edges shown, social-only claims visibly provisional.
- **Living ≠ churning.** Overnight diffs must be signal, not motion for its own sake. Threshold-gated trends, not a graph that rearranges to look busy.

---

## 7. Roadmap & recommendation

**Build Direction 2 (Editorial Infographic-first) FIRST.** The decisive test isn't taste — it's the brief's own constraints: *the block is the hero, and this is a public front-door.* Score the five directions on "which produces the most legible, screenshot-native, unmistakably-Byron sent block":

| Direction | Sends well as a block? |
|---|---|
| 1 Observatory | Beautiful, but a bare constellation risks textless art (banned) |
| 2 **Editorial infographic** | **Labeled, weighted, on-brand, legible to a non-technical leader — clears every bar** |
| 3 Cockpit | Dense power tool; a 3-pane terminal doesn't screenshot into a share |
| 4 Trend River | Strong later; time-scrub is a second-visit feature, not a first block |
| 5 Canvas | Subordinates the graph to chat; the artifact is the conversation, not the graph |

Only Direction 2 clears all three. It also lands in Byron's established brand look (the "MY AI AGENT FLEET" labeled infographic).

**The honest tension, confronted:** an infographic is the most *static-feeling* of the five, and the soul of this product is that it's *living*. So Direction 2 must prove liveness on screen: the live filter **visibly redraws the infographic**, and the overnight diff renders as an **annotation layer** ("3 new sources · 2 claims re-weighted since yesterday") stamped on the art. A static-looking hero that demonstrably moves is stronger than a graph that's always in motion.

**Phasing turns the other directions into sequencing, not hedging:**

- **Phase 1 — Editorial block + live filter (ship first).** Auto-generated weighted infographic on "memory," working chat re-render, clip-to-block with self-contained export. This is the front-door artifact.
- **Phase 2 — Cockpit power tier (Direction 3).** Weighted source ledger + trend sparklines + filter chat for Byron's own daily use; blocks = saved views.
- **Phase 3 — Trend River (Direction 4).** Time-primary scrub; pull a moment-in-time cross-section as a block. The time dimension gets its own surface once the graph has history worth scrubbing.

Ship the thing that sends. Build the power tool behind it. Add time last.
