Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions docs/spacexai-ire-2026-09-08/ENG_GREEN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# ENG GREEN — SpaceXAI merge-ready pack
**Reviewer:** Head of Engineering (IRE) · **2026-09-08**
**Base:** `902a06f` · **Patch:** `0001-spacexai-f1-f5-a-d.patch`
**External send:** still **HOLD** until Falcon go

## Verdict
**ENG GREEN** to land / propose. Acceptance criteria met.

| # | Criterion | Result |
|---|-----------|--------|
| 1 | PR-A FS only; defaults 4/0/20 | PASS — comment + T1–T3 arms; defaults unchanged |
| 2 | PR-F1 prefer-original FS-gated default false | PASS — first-wins off; Following parity on |
| 3 | PR-F5 Enable=false / K=1; IN-only; source_key RT→quoted→tweet_id; ≤1/slate; after PreviouslyServed; no Age/OON/VF | PASS |
| 4 | PR-D classify hooks only | PASS — `serve_card_classify.rs` |
| 5 | Out list untouched | PASS |
| 6 | Tests green + EXP± | PASS — standalone **22/22** (re-run by HoE); Python smoke **22/22** |

## Non-blockers (treatment / monorepo follow-ups)
1. **F5 v1 scopes to PreviouslyServed only** — `PreviouslySeen*` still drops impressed related ids. Correct blast radius for landable default-off; treatment arms may need a measured seen-policy later (not open F2b).
2. **D hooks fire on F5 keep path** — full serve-mix baseline when F5 off still needs product Under-the-Hood / monorepo counter wire.
3. **OSS cannot run full home-mixer cargo** — private `xai_*`; standalone crate is the required green bar here.

## Go
Falcon go → send from GitHub `falconortiz` with patch + mixed cover. Until then: HOLD.
43 changes: 43 additions & 0 deletions docs/spacexai-ire-2026-09-08/PATCHES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Touched files — SpaceXAI pack @ 902a06f

## Modified

| File | Pack |
|------|------|
| `home-mixer/params/param.rs` | A (comments), F1 params, F5 params |
| `home-mixer/filters/retweet_deduplication_filter.rs` | F1 |
| `home-mixer/filters/previously_served_posts_filter.rs` | F5 (defer when armed) |
| `home-mixer/filters/mod.rs` | F5 module export |
| `home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs` | F5 wire |
| `home-mixer/util/candidates_util.rs` | F5 `source_key` |
| `home-mixer/util/mod.rs` | D module export |

## Added

| File | Pack |
|------|------|
| `home-mixer/filters/controlled_source_reexposure_filter.rs` | F5 |
| `home-mixer/util/serve_card_classify.rs` | D |

## Standalone test crate (cache, not in x-algorithm)

| Path | Role |
|------|------|
| `x-algo-cache/merge-ready/spacexai-pack-tests/` | Pure F1/F5/D `cargo test` |
| `x-algo-cache/merge-ready/STATUS.md` | This status |
| `x-algo-cache/merge-ready/PATCHES.md` | This list |
| `x-algo-cache/merge-ready/0001-spacexai-f1-f5-a-d.patch` | `git diff` export |

## Params added (defaults = today's behavior)

- `EnablePreferOriginalRetweetDedup`: bool = **false**
- `EnableControlledSourceReexposure`: bool = **false**
- `ControlledSourceReexposureMaxServesK`: u32 = **1**
- `ControlledSourceReexposureMinRequestGap`: u32 = **0**
- `ControlledSourceReexposureInNetworkOnly`: bool = **true**

## Params NOT changed (PR-A)

- `FollowAuthorWeight` = 4.0
- `ProfileClickWeight` = 0.0
- `ShareViaCopyLinkWeight` = 20.0
25 changes: 25 additions & 0 deletions docs/spacexai-ire-2026-09-08/RESULTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# e2e_smoke_f5 RESULTS — 2026-09-08
**Command:** `python3 smoke_controlled_reexposure.py`
**Outcome:** **22 PASS / 0 FAIL**

## EXP+ (niche re-exposure)
| Check | Result |
|-------|--------|
| Current: first serve original | PASS |
| Current: 2nd request burned (related/source) | PASS |
| Current: same-slate 3 RTs → 1 | PASS |
| F5: 2nd/3rd IN nudge within K=3 | PASS |
| F5: 4th blocked at K | PASS |
| Attribution = original source_id | PASS |

## EXP− (snowball)
| Check | Result |
|-------|--------|
| Current 20 RTs → 1 | PASS |
| Current 20 quotes survive RT-dedup | PASS (risk → need quote cap in F5) |
| F5 ≤1/slate + K=3 across requests | PASS |
| F5 rejects OON RT path | PASS |
| Following prefer-native / For You RT-first gap (F1) | PASS |

## Viability
F5 **not in tree** — implement as FS A/B on top of existing filters. Building blocks all present @ `902a06f`.
5 changes: 5 additions & 0 deletions docs/spacexai-ire-2026-09-08/SEND_GO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# SEND GO
**Falcon GO:** 2026-09-08 Europe/Madrid
**Eng:** GREEN
**Account:** falconortiz
**Base:** 902a06f
33 changes: 33 additions & 0 deletions docs/spacexai-ire-2026-09-08/SPACEXAI_COVER_MIXED_FINAL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# SpaceXAI mixed request — creator reach equilibrium (A + D + F1 + F5)
**From:** Falcon Ortiz (@falconortiz) / IRE · GitHub send: **falconortiz**
**Code:** https://github.com/xai-org/x-algorithm @ `902a06f`
**Pattern:** `docs/BIDIRECTIONAL_BOOST_CHANGE.md` (FS → A/B → ship)
**SpaceXAI owns merge.** IRE proposes only.

## Plain-language ask
For You maximizes `Σ w·P(action)` with FollowAuthor=4 vs CopyLink=20 and ProfileClick=0. Hard rules (48h age, RT XOR original, source burn, quotes bypass RT-dedup) cut prolonged niche re-exposure. Creator evidence: follow/imp **0.00636%** vs Batch B **0.0644%**; OCR HT **49.1K/500K** at η **3.78%**.

We request a **mixed program**:
1. **Study/telemetry (PR-D)** — serve mix original vs RT vs quote; re-serve≥2×; negatives if available
2. **Immediate A/Bs** — **PR-A** weight rebalance; **PR-F1** prefer-original same-slate (Following parity)
3. **PR-F5 ControlledSourceReexposure** — implement behind FS **default off** (K=2–3, IN-only, gap, ≤1/slate, **quotes share source cap with RTs**); enable after D baseline

**Not in this ask:** open burn-off (F2b), post-48h Age rewrite (F4), OCR ranking head (E), VF SpamHighRecall loosen.

## Evidence (empirical, not SLOs)
| Signal | Value |
|--------|------:|
| Cohort follow/imp | 0.00636% (79/1.24M) |
| Batch B | 0.0644% |
| High-amp vs low-amp strata | 0.0678% vs 0.0053% |
| OCR | 180/500 VF · 49.1K/500K HT |
| F5 smoke | 22/22 PASS (sim @ filters) |

## Success
↑ follow/imp on non-viral OON; ↑ original serve share after amplify; F5 arms show re-serve 2–3 with no report/mute spike; no quote/RT snowball.

## Attachments for eng
- `SPACEXAI_PARAM_SKETCH_PR_A.md`
- `SPACEXAI_PR_D_TELEMETRY_NOTE.md`
- `SPACEXAI_F5_IMPLEMENTATION.md`
- `SPACEXAI_MIXED_PR_F5.md` · `e2e_smoke_f5/`
43 changes: 43 additions & 0 deletions docs/spacexai-ire-2026-09-08/SPACEXAI_F5_IMPLEMENTATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# PR-F5 — ControlledSourceReexposure implementation note
**Status:** Landable with mixed PR as FS + filter sketch · treatment default **off**
**Depends on:** PR-D counters before enabling K>1 arms
**Companions:** `SPACEXAI_MIXED_PR_F5.md`, `e2e_smoke_f5/` (22/22 PASS sim), HoE quote-cap harden
**Repo:** x-algorithm @ `902a06f` · SpaceXAI owns merge

## Algorithm (per viewer request)
```
slate = candidates after hydration
slate = RetweetDedup + prefer-original when F1 on
slate = drop OON RTs (existing OONRetweetReplyFilter — unchanged)
for each candidate:
source = source_key(candidate)
if source in served_or_impressed_related:
if not EnableControlledSourceReexposure: drop # today
elif serves[source] >= K: drop
elif requests_since_last[source] < Gap: drop
elif InNetworkOnly and amplifier not IN: drop
else: keep as re-exposure card
else:
keep # first exposure
# Prefer original over amp when both re-admitted for same source
enforce ≤1 card per source in slate
log serve(source, card_type ∈ {original, rt, quote})
```

## source_key (quotes REQUIRED)
```
if retweeted_tweet_id: return retweeted_tweet_id
if quoted_tweet_id: return quoted_tweet_id
return tweet_id
```
RTs and quotes of the same original share one K bucket. Do not ship a false arm on IncludeQuotes.

## Rollout
1. Land params + logging (D) with **Enable=false** and/or **K=1** (behavior ≡ today)
2. Shadow: compute would-allow rate from serve mix
3. After baseline: A/B **K=2** vs **K=3**, small %; InNetworkOnly=true
4. Guardrails: report / mute / block; duplicate-fatigue proxies
5. Ship winning K or keep off

## Out of scope
AgeFilter change · OON RT enable · VF / SpamHighRecall loosen · OCR ranking head · open F2b burn-off · F4 post-48h prolong
109 changes: 109 additions & 0 deletions docs/spacexai-ire-2026-09-08/SPACEXAI_MIXED_PR_F5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# Mixed SpaceXAI request — study + solutions + implementable F5
**Account evidence:** @falconortiz Studio + API 2026-09-08
**Code:** https://github.com/xai-org/x-algorithm @ `902a06f`
**Sender when approved:** GitHub **falconortiz** · SpaceXAI owns merge
**Pattern:** `docs/BIDIRECTIONAL_BOOST_CHANGE.md` (FS → A/B → ship)
**Status:** HOLD until Falcon go
**Eng:** Head of Engineering (IRE) — hardened packaging

---

## 1. POV — is a mixed PR the right vehicle?

**Yes — as one coherent cover / program with layered diffs, not one mega-commit.**

| Layer | Role | Land now? |
|-------|------|-----------|
| **Study (PR-D)** | Serve mix original vs RT vs quote; re-serve≥2×; negatives if exposed | **Yes** — instrumentation |
| **Solutions (PR-A + PR-F1)** | FollowAuthor/ProfileClick A/B; prefer-original For You dedup | **Yes** — FS A/B on |
| **Structure (PR-F5)** | ControlledSourceReexposure — full FS + filter sketch | **Yes code / default off** — treatment arms only after D baseline |

**Not in this ask as substitutes:** open F2b (burn off) or F4 (post-48h age prolong). F5 is the controlled alternative.
**Not pertinent:** study-only with no F5 sketch · F5-only without A/D/F1 · enabling F5 treatment before serve-mix baseline.

**Projection:** Land D + A/F1 A/B + F5 params/filter **flag off** in one program. Keep F5 treatment off for ~1–2 experiment cycles until serve-mix baseline exists, then turn K=2/3 arms. Same “creator reach equilibrium” story — three layers, one cover.

---

## 2. Problem statement (metrics-backed)

1. **Conversion:** cohort follow/imp **0.00636%** vs Batch B **0.0644%** (~10×); FollowAuthor=4 vs CopyLink=20; ProfileClick=0.
2. **OCR:** 180/500 VF · 49.1K/500K HT; rolling floor ~**5,556** verified HT/day at η=3.78% or NEVER.
3. **Hard TL:** Age 48h · RT XOR original · source burn after serve · quotes bypass RT-dedup.
4. **Proxy:** high-amp strata follow/imp **0.0678%** vs low-amp megaviral **0.0053%**; serve % RT-vs-original **unmeasurable** today.
5. **Smoke:** current burn blocks niche re-see; F5 restores K=2–3 IN nudges without 20-RT flood (`e2e_smoke_f5/` 22/22 PASS sim).

Hypothesis floors only — not global SLOs.

---

## 3. F5 structure (implementable, default off)

### 3.1 Placement
Policy **override on seen/served source burn** for a source_id when F5 allows re-serve — **not** an AgeFilter rewrite and **not** OON RT enable.

Order of intent:
1. Same-slate ≤1 (existing RT dedup + **F1** prefer-original).
2. Seen/served burn as today when F5 off (K≡1).
3. When F5 on: re-admit source for a later request if K/gap/IN rules pass. Prefer **original** candidate if present; else IN amplifier card of that source.

### 3.2 Feature Store params (proposed)

| Param | Type | Default (ship) | Treatment arms |
|-------|------|----------------|----------------|
| `EnableControlledSourceReexposure` | bool | **false** | true |
| `ControlledSourceReexposureK` | u32 | **1** (≡ today’s no re-see) | **2**, **3** |
| `ControlledSourceReexposureGapRequests` | u32 | 1 | 1–3 |
| `ControlledSourceReexposureInNetworkOnly` | bool | **true** | keep true for first ship |
| `ControlledSourceReexposureIncludeQuotes` | bool | **true** | **fixed true** — no false arm (HoE) |

### 3.3 `source_key` (quotes required)

```
if retweeted_tweet_id.is_some() -> retweeted_tweet_id
else if quoted_tweet_id.is_some() -> quoted_tweet_id # REQUIRED — smoke EXP−
else -> tweet_id
```

Quotes and RTs of the same original **share one cap bucket**.

### 3.4 Acceptance
- Same request: ≤1 card per source (original / RT / quote).
- Across requests: ≤K serves per source / viewer / window.
- OON RT never used as F5 nudge.
- Attribution / logging: `get_original_tweet_id` + card_type ∈ {original, rt, quote}.
- No material ↑ report / mute / block vs control (needs PR-D).

### 3.5 Files (sketch — SpaceXAI owns merge)
- Filter / policy near `previously_seen_*` / `previously_served_*` (re-admission)
- Params: `home-mixer/params/param.rs`
- Counters: Under the Hood / side effects (PR-D)
- Tests: mirror `e2e_smoke_f5/` EXP±

Detail: `SPACEXAI_F5_IMPLEMENTATION.md`

---

## 4. Mixed PR table of contents (external)
1. Cover one-pager (soft misalignment + hard rules + F5 north star)
2. **PR-D** study / telemetry
3. **PR-A** param sketch
4. **PR-F1** prefer-original (Following parity)
5. **PR-F5** implementation note — flag default **off**
6. Explicit non-asks: open F2b / F4 / E · no OCR invent · no merge claim · no VF SpamHighRecall loosen

Companions already drafted: `SPACEXAI_COVER_TRANCHE1.md`, `SPACEXAI_PARAM_SKETCH_PR_A.md`, `SPACEXAI_PR_D_TELEMETRY_NOTE.md`, `SPACEXAI_RT_QUOTE_REQUEST.md`

---

## 5. Risk / blast radius
| Risk | Mitigation |
|------|------------|
| Quote wall | Same source_key as RT; IncludeQuotes fixed true |
| Snowball | K + gap + ≤1/slate |
| Blind A/B | F5 treatment off until D serve-mix baseline |
| Safety VF | Do not loosen SpamHighRecall |
| Creator floors as SLOs | Label empirical only |

## 6. Success projection (hypothesis, not SLO)
If η moves toward ~10% and follow/imp toward Batch B on non-viral mix, OCR HT path becomes more reachable; F5 targets **quality re-exposure**, not raw viral. Celebrity strata stay excluded from baseline reporting.
Loading