Work in progress

Code review that travels with your code.

Commits, branches and tags move freely between Git hosts. Review history does not. shitpost stores pull request discussions in Git itself, on top of git-meta, so they live as long as the repository does.

Git distributes the code.
We distribute the arguments about the code.

How it works

  1. GitHub pull requestInline comments, replies, approvals, resolved threads.
  2. Portable review modelProvider-independent, with deterministic identities.
  3. git-metaSerialized into refs/meta/*.
  4. Any Git remotePushed and fetched like any other ref.
  5. A fresh checkoutReview history available locally. No GitHub needed.

Where it stands

Done
git-meta integration spike

Confirmed git-meta can carry review data.

Done
Read-only GitHub importer

Import a pull request's reviews into local git-meta.

Done
Metadata remote

Push, clone fresh, read reviews offline.

Now
Schema review

Check git-meta fits review data, then fix the final namespace.

What it looks like

$ shitpost review import github owner/repo#1
$ shitpost review show
#1  Return session token from login  ● open
Louis opened 2026-10-07 16:35 UTC · edited 2026-10-07 16:36 UTC · feature/token-login → main

Verdicts  ✔ approved by Rita Reviewer

Decisions
  ✘ changes requested · Rita Reviewer · 2026-10-07 17:10 UTC
    Please add token expiry before merging.
  ✔ approved · Rita Reviewer · 2026-10-07 17:20 UTC
    Expiry is tracked separately; approving.
  …

Threads   6 · 1 resolved · 1 outdated

┌ src/auth.rs · line 8 · ✔ resolved
│           6   +         return None;
│           7   +     }
│ ▶         8   +     Some(issue_token(user))
│
│ Louis · 2026-10-07 16:36 UTC
│   Should these tokens expire?
│ Louis · 2026-10-07 16:36 UTC
│   Good point, I'll add an expiry in a follow-up.
└

┌ src/auth.rs · line 25 · outdated
│     17   24     fn hash(password: &str) -> String {
│     18        −     format!("hash-of-{password}")
│ ▶        25   +     password.chars().rev().collect()
│
│ Louis · 2026-10-07 16:36 UTC
│   Reversing a string is not hashing.
└
…