This is the fastest way to understand the product: Forgejo keeps the code-hosting surface recognizable, while Vaglio adds analysis, provenance, and investor-readable repository narratives beside it.
A self-hosted forge codebase that makes the product boundary itself easy to demonstrate.
Mirror forgejo/forgejo into a Forgejo-hosted demo namespace without bespoke setup.
Project refs, pull requests, and merges through the Git↔jj gateway before analysis.
Expose maintainer concentration, expertise signals, hotspots, provenance overlays, and the first stress/heat surface on the same host.
Use Forgejo's repo, tree, issue, and pull-request UI unchanged.
Reuse Forgejo authentication and session handling instead of building a parallel account system.
Treat Vaglio as an adjacent panel or sidecar surface, not a hard fork of Forgejo chrome.
Let Forgejo emit Git-shaped events while Vaglio translates them at the gateway boundary.
Keep the internal source of truth `jj`-first behind the Git↔jj translation layer.
%{
git: %{kind: :branch_ref, branch: "forgejo", ref: "refs/heads/forgejo"},
jj: %{
kind: :bookmark_projection,
writable: true,
bookmark: "git/heads/forgejo"
},
provenance: %{lossy: false, notes: [], translated_from: :git}
}
%{
git: %{kind: :commit, sha: "8badf00d"},
jj: %{kind: :revset_selector, revset: "commit_id(\"8badf00d\")"},
provenance: %{
lossy: false,
notes: ["Git commit SHAs map to explicit `jj` revset selectors, not synthetic change IDs."],
translated_from: :git
}
}
%{
git: %{
state: :open,
title: "Vaglio shell integration",
number: 66,
kind: :pull_request,
head_ref: "feature/vaglio-shell",
base_ref: "forgejo"
},
jj: %{
change_key: "git/pr/66",
kind: :change_proposal,
base_bookmark: "git/heads/forgejo",
head_bookmark: "git/pr/66/head",
review_state: :open,
source_branch_bookmark: "git/heads/feature/vaglio-shell"
},
provenance: %{
lossy: false,
notes: ["Pull requests are projected as change proposals, not canonical internal review objects."],
translated_from: :git
}
}
%{
git: %{
strategy: :merge,
kind: :merge_event,
base_ref: "forgejo",
merged_commit_sha: "8badf00d",
pull_request_number: 66
},
jj: %{
kind: :bookmark_move,
merge_strategy: :merge,
bookmark: "git/heads/forgejo",
target_revset: "commit_id(\"8badf00d\")"
},
provenance: %{
lossy: false,
notes: ["Non-squash merges preserve Git edge ancestry most directly."],
translated_from: :git
}
}
This demo makes the platform story concrete: repository browsing and account UX stay Forgejo-native while Vaglio adds semantic change tracking, provenance, and analysis surfaces beside it.
A modest core still anchors critical forge workflows.
UI, auth, federation, and actions each show repeat expert contributors.
Web UI, repository APIs, and actions runners drive most coordination cost.
This demo frames stress as the cost of forcing one layer to impersonate the other. Heat is highest where repository APIs, UI expectations, and automation governance overlap.
Shallow history sample from the tracked branch.
Unique contributors observed in the sampled window.
Share of sampled commits attributable to the top three contributors.
Recent sampled commits per day across the fetched window.
Most uncertainty is architectural rather than operational: where should the semantic boundary live?
Repository APIs, web UI, and actions automation carry most of the integration pressure.
Boundary clarity reduces stress faster than raw code churn reduction in this demo.
Modules with low prediction error read as settled. Repeated coordination pressure, concentrated authorship, and hot paths rise into contested zones.
Heat appears where Git-facing expectations must be translated into a richer internal model without confusing operators.
UI reuse is valuable, but stress rises if product boundaries are hidden instead of made explicit.
Agent-scale automation needs provenance and policy hooks or the apparent convenience becomes latent operational debt.
The sampled branch history shows 18 contributors with 57.0% of commits concentrated in the top three authors, indicating medium coordination concentration.
This section is computed from a shallow sample of the public source branch, not hand-authored demo prose. It is meant to be the first visible proof that the page is tied to actual repository state.
| Author | Commits | |
|---|---|---|
| Renovate Bot | bot@kriese.eu | 15 |
| Mathieu Fenniak | mathieu@fenniak.net | 6 |
| Shiny Nematoda | snematoda.751k2@aleeas.com | 2 |
| limiting-factor | limiting-factor@posteo.com | 2 |
| steven.guiheux | steven.guiheux@ovhcloud.com | 2 |
| When | Author | SHA |
|---|---|---|
| 2026-05-23 | Renovate Bot | 26f18a94 |
| 2026-05-23 | limiting-factor | 5c618080 |
| 2026-05-23 | Renovate Bot | 0f449ff8 |
| 2026-05-23 | Renovate Bot | 37b3b3a2 |
| 2026-05-23 | Mai-Lapyst | 5704b305 |
| 2026-05-23 | Mathieu Fenniak | 6d522ecb |
| 2026-05-23 | limiting-factor | 03d336de |
| 2026-05-23 | Renovate Bot | c749861d |
| 2026-05-22 | Renovate Bot | 1a108e8f |
| 2026-05-22 | B0sh | e49cb9e7 |
| 2026-05-22 | hwipl | 1ea5605e |
| 2026-05-22 | Renovate Bot | 7054075b |
| Path | Mentions |
|---|---|
go.sum |
6 |
go.mod |
6 |
options/locale_next/locale_en-US.json |
4 |
routers/web/web.go |
3 |
package.json |
2 |
options/locale/locale_en-US.ini |
2 |
.forgejo/workflows/merge-requirements.yml |
2 |
tests/e2e/user-settings.test.e2e.ts |
2 |
Use Forgejo for the shell, but keep the inside unmistakably `jj`-native so the product story remains differentiated.
Roundtable.Adapters.Forgejo
Reads and writes discussion repos against Forgejo's API.
Roundtable.Translation.GitToJj
Maps Git refs, pull requests, commits, and merges into `jj`-native analysis objects.
RoundtableWeb.DiscussionLive
Hosts the existing roundtable dashboard without requiring Git to become the internal source of truth.
These controls are here for operators and demo preparation. Most visitors should start with the recommended curated demo above instead of changing the shell inputs first.