104func (q *Queue) push(ctx context.Context, pr PR) error {
Code review, CI, planning, and releases.
One product. Not four tabs.
GitHub was built for 2010. GitAxis is built for how developers actually work today — stacked pull requests, fast CI, sprint planning that lives next to the diff, and a codebase that's fully open source. One platform, not a pile of integrations.
seenAt so the health-check
doesn't mark it stale 30s later?queue_integration_test.go.Author small. Land in order.
Split a feature into a chain of small, reviewable slices. The
merge queue rebases each PR on top of the latest main, runs CI, and lands them in dependency order —
without anyone watching a Slack thread.
- ▸ Native stack-aware UI. Every PR shows its chain.
- ▸ Draft-merge gate. Protection rules fan out in realtime.
- ▸ One keybind walks the diff (j k).
- ✓ gofmt 0.4s
- ✓ go vet ./... 2.1s
- ✓ go test ./internal/auth/... 3.8s
- ✓ go test ./internal/catalog/... 5.2s
- ✗ go test ./internal/pullrequests/... 8.7s
- --- FAIL: TestQueue_RebaseStacked (0.41s)queue_integration_test.go:142: stack head not updatedexpected: q.tip == "abc123"actual: q.tip == "ffe092"FAIL gitaxis/internal/pullrequests 8.741s
- … go test ./internal/issues/... running
- ○ svelte-check queued
- ○ e2e (chromium) queued
- ○ e2e (firefox) queued
- ○ docker build queued
- ○ publish artifacts queued
CI in seconds. Failures collapse to the file.
NVMe storage and hot caches by default. The log surface jumps you to the failing assertion — not page-five of an unstructured dump. Rerun just the failures with one keystroke.
- ▸ Job-level parallelism. Defaults to aggressive.
- ▸ Live streaming logs. Passes collapse, failures expand.
- ▸ Rerun-failed-only is a primary action, not a buried menu.
Run open source with an actual control surface.
Maintainers need triage, review state, CI signal, contributor history, and fast moderation decisions in one place. The workflow should feel closer to a control panel than a pile of tabs.
- ▸ Triage queues built for maintainers, not just contributors.
- ▸ Review, CI, and contributor context on the same surface.
- ▸ Faster decisions without chat-tab archaeology.
- ✓ m @maia merged gitaxis#138 stacked-pr: rebase on top of #137 2m
- ▲ r @rafa requested changes on gitaxis#142 still missing the regression test 12m
- ● o @odell opened gitaxis#142 enforce queue ordering on rebase 2h
- ✗ c ci failed on gitaxis@e3f2a91 TestQueue_RebaseStacked 3h
- ◆ b @bex @-mentioned you in gitaxis#139 reviewing protection-rule fan-out 5h
| ID | title | pri | who | due | |
|---|---|---|---|---|---|
| ◑ in review | GIT-142 | enforce queue ordering on rebase | P1 | o | today |
| ◐ in progress | GIT-143 | regression test for stale base | P1 | m | today |
| ✓ done | GIT-138 | split queue interface | P2 | o | fri |
| ⊘ blocked | GIT-145 | realtime fan-out for protection rules | P0 | r | mon |
| ○ todo | GIT-146 | docs: stack lifecycle diagram | P3 | b | — |
| ○ todo | GIT-147 | inbox: collapse bursts from one author | P2 | m | wed |
Plan the sprint where the pull requests actually land.
Issues, sprint views, and manager-facing planning stay in the same system as code review and CI. Work does not disappear into a separate tracker the moment implementation starts.
- ▸ Org and manager views built around actual engineering flow.
- ▸ Issues, PRs, and CI status stay connected by default.
- ▸ Sprint planning without context loss between tools.
Keep your workflow syntax. Lose the drag.
Compatibility matters when teams move. The goal is a better platform without forcing every team to rewrite its delivery muscle memory first.
- ▸ Familiar workflow format.
- ▸ Less friction to try the platform.
- ▸ Migration without ceremony.
- ✓ test.ymlpush · pull_request28s ago · 412ms median
- ✓ deploy.ymlon: release4h ago · 1m 12s
- ✓ nightly.ymlcron 0 2 * * *12h ago · 2m 04s
- ◆ importedci.ymlimported · .github/workflows/ci.ymlrunning · 18s
name: test on: [push, pull_request] jobs: test: runs-on: gitaxis-nvme steps: - uses: actions/checkout@v4 - run: go test ./...
- ✓github.com/pmd_dev/dotfiles → gitaxis/pavanmanish/dotfilesdone · 42s18 prs · 12 issues · 482 commits
- ◆github.com/pmd_dev/gitaxis-cli → gitaxis/pavanmanish/gitaxis-cliimporting issues · 18s left41 prs · 28 issues · 1,284 commits
- ◆github.com/pmd_dev/blog → gitaxis/pavanmanish/blogcloning history · 1m left6 prs · 4 issues · 318 commits
- ○github.com/pmd_dev/notes → gitaxis/pavanmanish/notesqueued
Move without losing your history.
Switching fails when migration is painful. Gitaxis is built to bring over repositories, issues, pull requests, comments, releases, and authors cleanly.
- ▸ Repository and metadata import.
- ▸ History preserved instead of flattened.
- ▸ Lower switching cost for teams.
Every pull request ships a live URL.
Preview deployments belong in the review flow, not in a separate platform. Open the branch, inspect the UI, compare it to main, and decide faster.
- ▸ One preview per PR.
- ▸ Logs and checks next to the diff.
- ▸ Faster feedback before merge.
168func (q *Queue) pushBatch(ctx context.Context, prs []PR) error {
88func Test_Queue_PushFlatPR(t *testing.T) {
14cmd := &cobra.Command{Use: "push", Short: "send a PR to the merge queue"}
Search code like the repo actually matters.
Symbol, semantic, and literal search should feel instant. Developers should not have to lower their expectations because the codebase got large.
- ▸ Fast code and symbol lookup.
- ▸ Built for real repository depth.
- ▸ Search that keeps review momentum.
Security should be part of the flow, not an upsell.
Secrets, dependency risk, and attestations belong inside the same developer loop as review and CI. OSS should not be second-class here.
- ▸ Secret scanning in the normal path.
- ▸ Dependency alerts with context.
- ▸ Better defaults for public repos.
- CRIT ⊞ CVE-2026-0142 in lodash@4.17.20go.sum · web/package.json◆ auto-PRing fix
- HIGH 🔑 AWS access keytest/fixtures.go:48✓ rotated 2h ago
- MED 🔑 GitHub PAT in .env.examplepull/145 — blocked merge● 12m ago
- LOW ⊞ CVE-2025-9981 in marked@4.1.0apps/web/package.json✓ patched 1d ago
npm install @gitaxis/cli - 1.4.2 2 days ago latest
- 1.4.1 1 week ago stable
- 1.4.0 3 weeks ago
- 1.3.7 2 months ago archived
Ship code and packages from the same place.
Repositories and artifacts should not feel like different planets. Publish under the same org, keep provenance tighter, and reduce tool sprawl.
- ▸ Private and public package flows.
- ▸ Closer build-to-release chain.
- ▸ Less artifact-tool overhead.
Release notes that understand what shipped.
Releases should be a continuation of review history, not a separate editorial task built from memory and copy-paste.
- ▸ PR-linked release flow.
- ▸ Cleaner changelog generation.
- ▸ Less manual release bookkeeping.
queue ordering
◆ Features
- · Stacked PRs now reorder on rebase without manual intervention. #142 @odell
- · Inbox burst-collapse turns 10 events from one author into 1 row. #147 @maia
✓ Fixes
- · Health-check no longer marks reordered PRs as stale 30s later. #142 @odell
- · Protection-rule fan-out re-runs on settings change instead of next push. #139 @bex
· Internals
- · Queue interface split into push / reorder / advance. #140 @odell
- · Integration tests cover stale-base path explicitly. #143 @maia
q.seenAt = time.Now()pinged you here so it stays with the PR — the reorderOnto path is missing the seenAt bump, right?
just pushed it. health-check stays happy now.
thx. approving once CI is green.
Talk where the work is happening.
Developers keep losing context to chat tabs. Threads tied to pull requests, issues, and commits keep the conversation attached to the work.
- ▸ Discussion anchored to code objects.
- ▸ Less Slack archaeology.
- ▸ Better coordination around changes.
Documentation that lives with the codebase.
Docs should stay closer to changes, releases, and code ownership. Treat them as part of the workflow instead of an abandoned side tab.
- ▸ Docs tied to repository history.
- ▸ Easier traceability from docs to code.
- ▸ Fewer stale wiki islands.
Merge queue
The merge queue takes accepted PRs and lands them on main in dependency order. Each PR is rebased on
top of the latest main, runs CI, and merges only
if the run is green.
q.reorderOnto() in queue.go:104.Lifecycle
- 1 Author opens PR →
q.push()enqueues. - 2 Queue rebases on
main, runs full CI suite. - 3 On green, merge writes new tip and notifies subscribers.
func (q *Queue) push(ctx context.Context, pr PR) error
Building gitaxis. Tired of waiting on CI.
- gitaxis/gitaxis ★ 412open-source code hosting platform
- pavanmanish/gitaxis-cli ★ 84cli client for gitaxis
- pavanmanish/dotfiles ★ 22my zsh + tmux + nvim setup
A profile built around actual development work.
Contribution should be visible through real artifacts: merged pull requests, maintained projects, and work that mattered.
- ▸ Work-centric profile surfaces.
- ▸ Better OSS discovery.
- ▸ Less noise, more signal.
AI inside your review rules, not outside them.
AI should participate in the same workflow humans use, with the same merge gates and review structure instead of a detached side channel.
- ▸ AI in the real review surface.
- ▸ Same guardrails as human review.
- ▸ Help without workflow drift.
Read the 3-file diff (+62 / −18). Three findings — one suggestion you can apply in place, one note, one piece of praise.
- Bump q.seenAt after reorder internal/pullrequests/queue.go:106
The health-check uses seenAt to mark stale entries. Without the bump the reordered PR can be reaped 30s later.
+ q.seenAt = time.Now() - Regression test covers happy path only queue_integration_test.go:142
TestQueue_RebaseStacked asserts q.tip but not the seenAt bump above. Worth adding a subtest.
- Error wrap looks good internal/pullrequests/queue.go:108
fmt.Errorf with %w preserves the stale-base sentinel — downstream queue.recover() still works.
- ▸ internal/pullrequests/queue.go ▎file · go
- ▸ internal/pullrequests/queue_integration_test.go ▎file · go
- ▸ internal/ci/queue.go ▎file · go
- commands
- ⌘ switch repo… g r
- ⌘ new pull request c p
- ⌘ jump to inbox g n
- ⌘ cheatsheet ?
The interface should move at developer speed.
Every surface in GitAxis is built for people who live in their tools. Dense information, fast navigation, and no click-tax for actions you take fifty times a day.
- ▸ Faster navigation once you are inside.
- ▸ Dense surfaces without dead weight.
- ▸ Built for people who live in the tool.
We get these a lot.
Here are the honest answers.
-
Yes. The MVP lives on the platform itself at /gitaxis/gitaxis — you can browse the source, read the issue tracker, and watch how it gets built. We are intentionally developing in the open.
-
The platform hosts its own source code and the team uses it daily. We are opening access in controlled waves to keep quality high — the waitlist is the queue. You can browse the live codebase at /gitaxis/gitaxis right now.
-
Gitaxis is opinionated around the full developer loop instead of being a code host with disconnected add-ons. Review, CI, planning, maintainer control, and migration paths are treated as one product.
-
Yes. Single Go binary, Postgres, Redis. That is the entire dependency list. Run it on a NUC, a VM, or a fleet behind a load balancer — the same release artifact serves all three.
-
The landing now shows the whole product in one features flow: review, CI, planning, maintainer control, deployment, search, migration, packages, releases, communication, and docs.
-
Because almost no one else does. Every new platform we look at is optimised for agents to read code or for managers to report on it. Gitaxis is for the people whose hands are on the keyboard. The AI features come later — and they will fit into the workflow, not replace it.
Join the waitlist.
See the product when it opens.
Gitaxis is invite-only right now. Leave your email and we will open access in waves while keeping the product stable.