Fork status · 2026-09-26
What this tree actually is.
The live lab is the contract and the simulation. The Rust prior lives on a public fork of xai-org/x-algorithm. Neither one changes For You on X. Both flags default off, and the event source in the fork is empty.
| Where | Pointer |
|---|---|
| Upstream | xai-org/x-algorithm @4c5cfe8 |
| Fork | TheRetardedElon/x-algorithm---TheRetardedElon |
| Current branch | pulse/causal-q-4c5cfe8 |
| Pull request | PR #3 (draft) |
| Writeup on the branch | README |
The contract
- weighted_score is never rewritten.
- Favorite, reply, and view counts are not inputs.
- Reactions at or after scoring time are dropped.
- The viewer’s own click stream is the wrong shape for the event source. The source is reactions on the post and past decisions by the author being ranked.
What may narrow σ
| Class | Meaning | Narrows σ in this slice? |
|---|---|---|
| human | Independently acting person | No |
| mixed | Human plus tools | No |
| agent | Declared model or automation | Yes, σ = 0.08 |
| service | Declared service account | Yes, σ = 0.08 |
| coordinated | Coupled actors, not a verdict | No |
Unlabeled posteriors are floored at σ = 0.22, above the action gate. A high coordination residual is a measurement. It is not a rank change. Newsrooms, sports, and fan accounts look synchronized. Treating that as guilt would punish real humans. The lab uses the same gate.
Honest status
| Item | State |
|---|---|
| main vs upstream | Synced. PR #2 merged 4c5cfe8 into this fork’s main. |
| PULSE on by default | No. Both flags default false. |
| Event source | EmptyPulseEventSource returns empty windows. |
| Changes live For You | No. |
| Can q_t move a score in the Rust tree? | Only if flags are on and narrow evidence is attached. Declared agent or service is the only class that does that today. |
| Old RankingScorer | Deleted upstream. The hook moved. |
| This lab | Documentation and a causal simulation. Not the Rust tree. |
Branches
| Name | What it is |
|---|---|
| xai-org/x-algorithm main | Public snapshot at 4c5cfe8, 2026-09-26. |
| fork main | That snapshot, plus a short landing README. No PULSE mixer files. |
| pulse/causal-q | Original five commits on the Sept 1 tree. Hooks the deleted RankingScorer. Superseded. PR #1 is the record. Do not patch it. |
| pulse/causal-q-4c5cfe8 | Current work. PR #3. Hooks PhoenixScoresRankingScorer and VMRanker. |
Between Sept 1 and Sept 26 upstream deleted home-mixer/scorers/ranking_scorer.rs and moved the published sum into the value model. Replaying the old commits would conflict on a file that no longer exists. The estimator moved forward. The hook moved with the score.
Where it sits
weighted_score stays untouched on both paths. A source error fails open: pulse stays unset, so q_t is 1.
Two systems, not one
PULSE asks whether the lagged field looks like independent humans or a coupled controller. That becomes evidence, a width, and maybe q_t.
Reject Closure is preference isolation. If viewer u blocks actor a at time t, then later:
A blocked account is not labeled a bot. They are removed from this viewer’s field. The global source still returns every arrived reaction. The hydrator subtracts.
| Surface | In the public repo | After a block |
|---|---|---|
| For You author | Yes | Hard drop (AuthorSocialgraphFilter) |
| For You lagged field | Yes, on the PULSE branch | viewer_influence_mask |
| Posts from people you simply don’t follow | Yes | Kept. Out-of-network is a discount, not a ban. |
| @ typeahead | No | Same exclusion set should apply. Compose is another service. |
| Who to Follow | No | Same |
| Search | No | Same |
Flags
| Flag | Default | Effect |
|---|---|---|
| rust_home_mixer_enable_pulse_prior | false | Allow q_t ≠ 1 when evidence is narrow. |
| rust_home_mixer_enable_pulse_hydrator | false | Run PulseHydrator. |
File map
| Path | Role |
|---|---|
| home-mixer/models/pulse.rs | Evidence, causal_q, sigma policy, lagged field, viewer mask |
| home-mixer/candidate_hydrators/pulse_hydrator.rs | Event-source trait, empty source, mask |
| home-mixer/scorers/phoenix_scores_ranking_scorer.rs | score = weighted · q_t |
| home-mixer/scorers/vm_ranker.rs | apply_pulse after remote or local score |
| docs/pulse.md | Mixer contract |
| docs/reject-closure.md | Block, mute, suggestion contract |
The name counterfactual_independence overclaims. On this branch it is residual predictive lift of a lagged cluster term, not a randomized experiment. The fuller time-split estimator still lives on the superseded Sept 1 branch.
Still missing
- Wire the candidate field, the two flags, and the empty hydrator.
- A real event source: per-post reactions with timestamps before t, plus optional author decision rows. Not the viewer’s click stream. Not lifetime counts.
- An offline falsification harness before unlabeled evidence is allowed to narrow σ. Measure the false-positive rate on newsrooms, sports, and fan communities. The falsify page is that contract.
- Reject Closure on @ typeahead, Who to Follow, and search. Those services are not in the repository.
- The click-then-block sequence, labeled as a hypothesis.
What this lab is for
The miniature feed uses the same gate as the Rust prior: wide σ stays at q_t = 1, a viral swarm updates the EKG and does not move the slate, a declared agent can. It does not compile the mixer, and it does not model @ suggestions. Read the algorithm page for the published weights, then open the lab.