Posted on :: Tags: ,

Intended Audience: The people from the Jujutsu Discord and random bypassers.

Disclaimer

The year I'm talking about is from
2025.11.03 - 2026.11.03
This year has the subtitle: 'The more things change the more they stay the same'

Foreword: Four years seems like a long time depending on the time when you joined the project, so here are some numbers to relativize it. Four years is at this point a bit less than 20% of Git's age and its approximately the time you need to implement an initiative in a 60 person organization. I personally think this should be a blimp in the project's lifetime. The year is once again told in a chronological matter. And because I've now worked on Source Control for a while I should call myself a "Source Control Developer".

What happened in the project.

Like a lot of Open Source projects during these changing times we discussed GenAI and its usage because the project received the first AI authored PR from a community member in January. It initially wasn't really a discussion before it turned into an actual discussion which finally concluded with an Fedora or LLVM like policy.

We also have reached the point where we almost have completed the asyncification of the library which now started over two years ago. This is beneficial for all downstreams and the project since it makes building custom servers for forges easier, I think its a pretty big milestone. With that in mind the CLI was also made async which made efforts like jj run easier. Then someone tried to move "Core parts of the CLI into the library" which led to an effort in which we split up the library into multiple self-contained crates.

Then a Maintainer stepped up whose moderation efforts and expertise were needed during the first ban of the project. There also was the first person which was banned from project grounds because of their behavior and I assume their inability to improve it.

The project clarified its stance on how to approach "Design Docs" through my efforts, more on that later in my section.

A new group of people interested in building a jj-based forge showed up besides ERSC and they're trying to open source it at some point. And at this point it is pretty standard that more and more forges and GUIs are built around the project, which make efforts such as moving "Core parts of the CLI into the library" increasingly important.

I took an announced break from the project and on the same day Martin changed his job from Google to CTO at ERSC.

The second JJ-Con was held in Lisbon colocated with Git Merge in September, this time with a hundred attendees. Its significant that there were 35 more people because it means that the interest in the project continues to grow.

The project lost someone who many of just recently met because of the AI stance which was chosen as a policy. They also were the owner of the jj-vcs.dev which could've turned out quite bad.

And very recently a Maintainer stepped down from the role and someone quite fresh replaced them and the Maintainer which was appointed for their moderation efforts is now also a moderator, its not clear if that is a leading position yet.

And to end the projects year here's a list of things I deem significant minor events which happened:

  • We shipped jj run
  • We now show language specific hunks in jj diff
  • We added the option to not commit a transaction
  • A proposal for indepent workspaces is under discussion which primarily helps agent based development but at the same time solves issues around continued operation integration which are necessary for both jj run and the potential scripting language
  • We shipped colocated workspaces after two years of their initial appearance
  • We finally added revsets.git-push
  • There's a new proposal for Git Submodules which deals with them quite nicely
  • An independent contributor built a io-uring based VFS for jj
  • Google had two very important intern projects for both a VFS and a Commit Cloud PoC
  • Someone offered to replace our Proptests with Hegel so I made people aware of it and it should be an official Antithese contribution

What happened to me this year

After getting some sponsors last year and getting a pay-out after the initial three months, I was pretty happy because it shows that people care about me being both active and on the project. This also enabled me to detach my identity from the project for which I'm thankful for, because mixing ones identity with a project one has little control over is extremely unhealthy. A part of last years choice of accepting sponorship also was that I try to get back to an healthy relationship with the project, whatever that meant at the time. This more or less means that I need to make choices which do not sacrifice my health over ideas, actions and other things which favor the project. In the same vein I also need to avoid large conflicts because they're incredibly expensive for me to both clean up and put stuff in order again and because they lose parts of me in the process of it happening which is I think a feature not a bug. And since that thing might take me out entirely it cannot happen anymore.

And because I set myself the goal to work on Mahou this year I really tried to avoid any further discussions about the Governance which got plenty discussion after my last such blog post. This meant that I made myself the "someone" who we always talked about when we were discussing extracting parts of cli_util.rs to the library. So I put roughly five full weeks into "Extracting Core parts of the CLI into the library" which was both kind of tedious but also fulfilling work. Thanks again to Thomas Castiglione for helping me there for both the UserError and WorkspaceEnvironment extraction. Before I did it though, I also needed to accept my contributions to the project so others choices for a certain volunteer role no longer frustrated me, this is some sort of poison pill to me because it usually signifies that both my work or presence is no longer useful. A side effect of that decision is that I can now stop working on the project whenever I deem that necessary, figuratively this can be tomorrow, in half a year, a year or later if everything goes well.

It also happened to me that I was asked if I wanted to be an technical advisor for a related project which I accepted because I want to help the community and for another forge like project I sorta fell into a similar role because I had some opinions (and continue to have) on how I'd create a forge for jj, the latter one also implemented something because I pitched it which is extremely nice for me since I don't have a server I currently work on. And I think a bunch of people reached out to me on LinkedIn because they see me work on the project.

I also had this year the feeling that people sometimes just treat like I'm a part of the environment around the project which totally disregards that I'm a person of my own with ambitions and goals and more. In other conversations it also felt like that you actually wanted a robot instead of a human which also is not great. And then there was that joke which was well intentioned but just reduced me to a single ability (it is much more OK now that I've met the person behind it) and there I was disappointed that no one said anything that it might affect another community member if you mention them by name. And one of my impressions this year actually was that I'm on an island in relation to the project, this is because not much of anything is happening when I'm awake and because 7 out of 9 Maintainers are on US timezones and there's no representation from my or any other central european timezone.

Then there was that kerfuffle around design docs in which I think that some clearer guidance, which we do have now, where I clearly didn't choose the correct words. In the private discussion around it, it showed that there only was a slight understanding and I'm now on good terms with that person, they also were observant enough to tell me that there's no indication of middle for me. I was very surprized at the speed which it escalated though and after it I made a realization which left me very vulnerable. The day after making that realization I did announce my planned absence for the first time because people perceive me as always being around, even though it has happened before to say that much. On the same day Martin left Google for ERSC which I consider a good thing both for him and the project and its something I support out of personal reasons.

I'm writing this paragraph because I think its the best choice if I publicly acknowledge it and because I have now warmed up to it. Through various interactions over the last two years I am now a "important" person and opinion on the project, this is because I sometimes represent the Open Source parts or because I had an active choice in important decisions which I don't believe a random contributor has access to. I personally think that this sometimes is a categorization error but then I turn around and do stuff which others don't think is trivial at all, or that's at least my impression of it. So it has become important that I clean up or at least no longer show certain behaviors and it some contexts its not only like twice as important but multitudes of that. I also had someone block me over the conflict from last years (even though they were never even involved) and they led me to the conclusion that I'm now a somewhat "public figure" for the project since both my writing and actions actually affect it. Its pretty likely to me that this is one of the last times I actually will talk about it besides some private conversations where it is of major importance. I personally hope that it means that I'm important enough for people to ship me out to next years JJ-Con/Git Merge if my financial situation does not improve.

During my "Extracting Core parts of the CLI to Library" work and from the second Maintainer review it was clear that something needed to happen around jj-lib or that it should be moved into a new crate. After hearing that I decided to propose something I guess amibitous and that was splitting the library into a "core crate" and a bunch of smaller libraries oriented around functionality around them by moving a each backend to its own crate. I tried very hard to get explicit feedback on it by involving the maintainers early and some downstreams such as GG so it could progress but besides eyes reactions and the question that I didn't intend to drop the work on the community, which was something I never considered anyway. And so I started to invest my time into that project and because I try to make as accessible as possible I continued posting it to its dedicated thread and only after I started to work on it the actual questions began to pop-up which I constantly tried to appease and answer. After it going back and forth for about five weeks and two PRs which for me just appeared at night I had enough. Because while the project was tedious and slow to start there were multiple things I hoped to achieve which then either were promptly moved into another direction while I essentially was offline and unavailable for any discussion. That was so incredibly frustrating that I needed to take an 20 hour break before being able to respond nicely. It also made me so angry during the initial hours that thought I might as well just quit. This was not a great experience and I think someone else who is a bit more afraid of working on the project might as well just have left the community. I did try to talk to people to get my points across with moderate success.

After that was JJ-Con and Git Merge in Lisbon which were great, I had some great conversations around the project, GitHubs scaling issues and more. It also was a place where the previous issue was able to be discussed in person. All of that happened in the week after my birthday which was strange and also while a medical issue in my family was ongoing, so it was a great distraction. Also during André Arko's presentation on what progressed in the community around jj that I had no strong attachments to run anymore and that it carries much less of my name, I do think there are other parts which represent my work.

To round out my year I did something which I consider torpedoing my previous efforts because I got incredibly angry after the same pattern affected something I worked on for weeks showed up again and to be clear I also showed the exact behavior which is unacceptable.

To end things here are some unordered thoughts which may be useful to you. I am very disappointed that a year after the last blog post the reviewer bandwidth and situation has not improved. Because there were at least two other people which directly complained about it and there was the Claude nudge spam for reviews which directly correlates. I think there exist many middle of the pack solutions to it and if we don't find the correct thing for the project and people at the start it's not a bad thing as long as we're able to change it again. I'm also unhappy that nothing in the direction of transparency was done. For all of those issues I think last years conversation after my blog post continues to carry weight.

I also needed to re-define my reasons to stay on the project again. I also accepted that I both have the desire to stay on the project and want to leave at the same because of what I've done at the same time.

And while it was nice to finally have a decision on the whole bookmark movement issue around jj split, I think its in the interest of the Maintainers and the community around it that you also describe how you arrived at the decision in a presentable manner, because that clearly was missing. Since it is a first I don't particularly want to see a change tomorrow but for the next time.

Project opinions and what it maybe should do

This is a place for suggestions and ideas

Since we have a larger community now, we should try to involve key individuals or people just interested in helping the project by giving them the opportunity to make their work visible. If that is done by having community meetups around the project in different cities, a FOSDEM stand or presence in the Source Control room or even having monthly community nights in the Discord. We also should have more roles besides contributor, moderator and maintainer since we're at a point where more structure is definitely needed. It also can help finally stop the review bandwidth problem the project has. To me its pretty clear that if a secondary or third role exists in the project that they should have representation in discussions which affect the longterm health of the project. I know that I'm not alone in having this feeling but I can only suggest things from my current position.

Also we should try to get the ignoring Git LFS PR over the line because that has likely stopped further user adoption which still is important. In the same vein we also should try to invest into a solution for Git Submodules to increase adoption.

I also we should introduce support tiers, so we can actually define how many w orkflows around Git Submodules and Git LFS we want to support, this also would allow the project to introduce both BUILD and BUCK files which both are downstream supported build options besides Mise which already is on an experimental "community supported" tier.

And the last though I have on the project, I know a bunch of things already have gotten harder to achieve wrt. finding consensus along more interests from both the community and the companies which we're lucky to have dedicate time to it. But this will be the "easiest" for some time and if more the interest grows larger this will look like a piece of cake.

What's next

I'm trying my best to find a way forward to deal with my anger issues even if that means that I may be less present sometimes. I also realized that it may be possible to turn this into a job if all goes well, be it on the Sapling team or another downstream which is interested in my knowledge around the project. My next year also is full of questions since my finances are now the ones getting hit after being out of work for over 18 months. So I'm more or less facing an existential threat.

And while my relationship with the project is much better, it still isn't good enough in some terms to say that much.