Releases: hannobraun/fornjot
v0.19.0
This release announcement is also available on the Fornjot website
I've continued the slow work of expanding the scope of the centralized object storage (#1021). Including a new object in the centralized object storage opens opportunities for making any validation code that deals with that object more strict, which helps to prevent bugs. I wrote documentation about that, in case you're interested in the details.
The gist of it is, that sometimes you expect two references to an object to be the same. You can check that using equality (do they look the same?) or identity (are they actually the same object?), the latter being much stricter and less error-prone. The bulk of the work is to update any code that triggers to fulfill those stricter requirements.
Last week, I've integrated Curve
and GlobalVertex
into the centralized object storage, but most code creating GlobalVertex
instances has not been updated to meet the stricter validation requirements yet.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
None this week. Still busy improving the kernel!
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Make minor cleanups in sweep code (#1167)
- Fix various instances of duplicate objects being created (#1168, #1170, #1172, #1174)
- Expand and improve partial object API (#1169, #1171)
- Improve
Debug
implementation ofObjectId
(#1173) - Simplify
HalfEdge
andVertex
(#1175, #1178) - Expand scope of centralized object storage (#1176, #1179, #1180)
- Clean up handling of vertices in normalized order (#1181)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1165, #1177)
- Update dependencies (#1166, #1182, #1183, #1184, #1185, #1186, #1187, #1188, #1189, #1192)
Outlook
I'm continuing my systematic approach of increasing the strictness of the validation code, thereby increasing the general robustness of the kernel code. As a side effect, this should take care of #1162, which then clears the road for further progress on the union operation (#42).
v0.18.0
This release announcement is also available on the Fornjot website
Hey folks, sorry for being a day late with the weekly release! Yesterday was a public holiday here in Germany.
Last week, I've been able to finish the round of cleanups that kept me busy over the last few weeks. I addressed #1079, then fixed #993, which had been holding up further progress on the union operation (#42).
I returned to implementing the intersection tests required for the union operation and made some progress there. I pretty quickly found out that the sweep algorithm (and possibly more code) is generating invalid geometry though (#1162), which is preventing further progress on the intersection tests, so I started working on that.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
None this week. Busy improving the kernel!
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-kernel
- Improve some panic messages (#1139, #1149)
- Improve partial object API (#1140, #1144, #1148, #1150)
- Fix some code that creates duplicate global curves (#1145, #1151, #1152)
- Remove redundant geometry from
GlobalCurve
(#1146, #1153) - Make
GlobalEdge
undirected (#1155) - Validate winding of interior cycles of
Face
(#1158) - Add
HorizontalRayToTheRight::direction
(#1159) - Integrate
Surface
into centralized object storage (#1163)
fj-math
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1138)
- Expand release automation (#1141)
- Update dependencies (#1142)
- Update screenshot of test model (#1156)
Issue of the Week
Fornjot being code-first gives a lot of flexibility to models. They can run arbitrary logic to create geometry, process complex inputs, and perform all kinds of calculations. But they lack ways to present output to the user.
So far, the best they can do is print to stdout
, which the user might not even see. Fornjot already displays model status updates to the user. If models could display arbitrary message there, that would be a step in the right direction.
Does that sound interesting to you? If so, maybe give #996 - Models should be able to add status messages a try.
Outlook
Since #1162 is preventing further progress on the union operation (#42), I'm working on that right now. I'd like to fix that bug properly, so instead of just addressing the specific instances I'm aware of, I'd like to add validation code that makes all instances visible.
That new validation code would benefit from the scope of the centralized object storage being expanded (#1021), so that's my next step.
v0.17.0
This release announcement is also available on the Fornjot website
I've been busy with cleanups for a few weeks now, and that hasn't changed last week either. My priority remains implementing the union operation (#42), but that is currently blocked by #993, which in turn is blocked by #1079, which until recently was blocked by #1021.
I've made enough progress on #1021 to un-block #1079, so I've returned my attention there. As it turns out, finishing up that issue requires more changes all around the kernel code than I initially expected, but in the end this isn't really surprising. The changes to the GlobalCurve
object that are the subject of #1079 have a follow-on effect on all other objects that reference it, so a lot of code needs to be updated.
Going into the details here would be a bit much, but the gist of it is, there's a new way of doing things (comparing objects by identity instead of equality). This new way will make the kernel code more reliable, but right now this can't be implemented, because the current code is cutting a lot of corners.
Un-cutting those corners, as well as implementing the infrastructure required to do that without making the affected code too cumbersome, is what I'm currently working on. If you want to know more about that, I suggest to follow the links to those issues, as I keep those updated with the details of the work I'm doing.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
None this week. Busy improving the kernel!
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-kernel
- Implement centralized object storage (#1108, #1116, #1121)
- Prepare for removing geometry from
GlobalCurve
(#1111, #1114) - Start converting builder API into partial object API (#1113, #1117, #1118, #1119, #1120, #1123, #1124, #1126, #1128, #1130, #1131, #1133, #1134, #1135)
- Simplify
Triangulate
trait (#1122) - Clean up
Face
constructor (#1125) - Remove
HalfEdge::from_curve_and_vertices
(#1127)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#1101, #1103, #1104, #1105, #1106, #1107, #1109)
- Remove unused dependencies (#1110)
- Expand release automation (#1115)
- Upgrade to Rust 1.64.0 (#1132)
- Update list of sponsors in README (#1136)
Issue of the Week
The Fornjot UI can display status updates. For example, that the model has been reloaded, or that there has been an error trying to do just that. A nice incremental improvement to that capability, would be to also display a timestamp with each update.
If you're interested in getting into Fornjot, and are looking for something manageable, maybe check out #971 - Print timestamp with each status update
Outlook
Cleanups will continue for the time being. I've been questioning whether I should find some shortcut to get back on track with the union operation (#42) instead, but so far I've decided against that. First, it's not clear to me what that shortcut would be. Second, fixing #1079 and then #993 the proper way has many positive side effects, making the kernel more reliable and preventing whole classes of bugs.
I'll stay the course for now and will keep re-evaluation the situation as I go on.
v0.16.0
This release announcement is also available on the Fornjot website
At the beginning of last week, I had just wrapped up a round of cleanups and was about to return to #993, which is blocking further work on the union operation (#42). Instead, I found another problem that I need to address first (#1079).
All of this is relatively complex, concerning the architecture of the CAD kernel data structures. If you're interested in the details, check out those issues, but here's my attempt at a high-level summary:
- For the the union operation (#42), lots of intersection testing code needs to be written.
- One of those intersection tests needs to determine whether two edges are equal, which isn't really possible right now (#993).
- Fixing that isn't possible, because curves can't really compared for equality either (#1079).
- The best way to fix that involves having a central data store for curves (#1021).
I've made good progress on #1079 and started working on #1021. I ran into some trouble with that, preventing the work I already have in a local branch from getting merged on Friday.
Meanwhile, @payload addressed a very confusing problem with the Fornjot app, making sure the GUI is displayed, even if there's a problem with loading the model.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-math
fj-kernel
- Improve validation of
HalfEdge
andVertex
(#1075) - Expand builder API (#1076, #1083)
- Expand sweep test suite (#1077)
- Perform various cleanups (#1080, #1084)
- Replace
CurveKind
withSurfacePath
/GlobalPath
(#1081) - Make path approximation deterministic (#1089, #1090, #1094)
- Future-proof curve approximation code (#1082, #1091, #1092, #1096)
- Un-derive
Copy
from various object types (#1097)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#1071, #1072, #1074)
- Update release procedure (#1073)
- Expand release automation (#1078)
- Update list of sponsors in README (#1098)
Issue of the Week
Fornjot models can have parameters, and those can be provided by the user as command-line arguments. But if the user provides an argument that the model doesn't actually use (which could be the result of a simple typo), that argument just gets ignored. This is confusing.
If you're interested in how the Fornjot application interacts with models, maybe issue #821 - Exit with error, if user provides unused parameters could be your way to get into that.
Outlook
I've been doing some thinking over the weekend, and I believe I've come up with solutions for the issues that prevented my work on #1021 from getting merged last week. I expect to make enough progress there to start finishing up #1079, and after that, the road should be clear for #993.
I said something similar last week, so take it with a grain of salt. More issues popping up and needing to be addressed first, wouldn't be a surprise.
v0.15.0
This release announcement is also available on the Fornjot website
A few weeks ago, I fell down a rabbit hole of kernel cleanups, and I'm starting to climb back up. Doing cleanups can cause me this nagging feeling that I'm indulging myself; that I should find some hack to work around the problem at hand, so I can continue doing what's actually important. But a) stacking hacks on top of each other soon causes more problems than it solves; and b) when those cleanups pay off, that is so sweet.
And last weeks, those cleanups paid off! I managed to simplify lots of kernel code and many issues are now closed (#97, #250, #695, #1020). Some of them very longstanding ones! This not only clears the way for continuing the implementation of the union operation, it will make all work easier going forward.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be stable and sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
None this week; busy improving the kernel!
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-kernel
- Improve sweep algorithm (#1038, #1054, #1061, #1063, #1068)
- Add
SurfaceVertex
(#1048) - Produce better approximations, validate their correctness (#1049, #1053, #1056, #1058)
- Make triangulation more flexible (#1050)
- Add
Faces
(#1051) - Simplify
Edge
; perform cleanups this enables (#1055, #1057, #1059, #1062) - Rename
Edge
toHalfEdge
(#1064) - Define face orientation by the winding of its exterior cycle (#1066)
- Add API for finding faces (#1067)
fj-math
- Add
Vector<2>::cross
(#1065)
fj-operations
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1037)
- Update dependencies (#1039, #1040, #1041, #1042, #1043, #1044, #1045, #1047)
- Expand release automation (#1046)
Issue of the Week
Fornjot is still an early-stage project. Many things don't work very well yet, and that can lead to a rough user experience in some places. One such problem is how the GUI is coupled to the loaded model.
The GUI assumes that a model is always loaded. If a model can't be loaded when you start the Fornjot app, due to some error in the model, the GUI won't show at all. This is extremely confusing!
If you're interested in digging into Fornjot's graphics and UI code, to make an improvement that will have a big impact on Fornjot's usability, check out #1015 - GUI should start immediately, without waiting for model to be loaded.
Outlook
With all those cleanups finished, I should finally be in a position to address the issue that has been blocking the work on the union operation (#993). I expect that to be pretty easy now, but when I started looking into it on Friday (I only had a few minutes left), making the necessary changes caused a lot of test failures.
Hopefully this is going to be straight-forward. We'll see.
v0.14.0
This release announcement is also available on the Fornjot website
I spent most of last week working on CAD kernel cleanups, with the goal of addressing the issue that is blocking further progress on the union operation (#993; also see the more detailed update I left in there).
I'm very happy with the progress I've made, but I also hope to finish this work soon, so I can return to working on the union operation (#42) directly.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be stable and sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
- Fix crash on some graphics hardware (#1035)
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-kernel
- Clean up approximation code (#1011, #1012, #1013, #1028)
- Clean up and expand
algorithms::reverse
(#1017) - Fix edge cases in object equality comparisons (#1018, #1022)
- Improve and expand object validation (#1023, #1024, #1030, #1031)
- Make small improvements in kernel (#1025)
- Clean up sweep algorithm (#1026, #1033)
fj-math
- Add some validation code to
PolyChain
(#1027) - Derive
Default
for all math types (#1029) - Add
Line::from_points_with_line_coords
(#1032)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1008, #1009)
- Update dependencies (#1010)
- Expand release automation (#1016)
Issue of the Week
One important function of a CAD application is to export the CAD model to external file formats, for further processing in other software. Fornjot currently supports export to STL and 3MF. Both of those formats are comparable, in that they contain a triangle mesh.
3MF is more tightly specified than STL, however, and we make use of that by verifying the validity of exported 3MF files as part of our CI build. This has caught a lot of bugs already! We use a custom tool based on lib3mf to do that, but unfortunately this tool only works on Linux, making it impossible for users of other operating systems to do a full build locally.
If you have access to Windows or macOS and know a thing or two about linking C/C++ code into a Rust program (or would like to learn), #920 - export-validator
doesn't support macOS and Windows might interest you.
Outlook
My priority remains the union operation (#42), which is currently blocked by #993. Addressing that will keep me busy with cleanups for some more time.
Next up is finishing the cleanup of the sweep algorithm, which should help unblock #993 and #1020. After that, I plan to address #1020, as that will simplify a lot of code, promises to address some long-standing issues (#97, #250), and should make the next steps easier. After that, I'll look into #695, as solving that will help address #993.
v0.13.0
This release announcement is also available on the Fornjot website
Last week was eventful! Initially I made some progress on the intersection tests (see #42, specifically the list I keep updated). Then, I hit a hurdle (#993). That issue has more details, but the gist of it is, that the kernel data structures are not robust enough to handle certain tasks required for the next batch of intersection tests.
Solving this required some cleanups, and while planning those out, inspiration struck and I recognized an opportunity for a big simplification of the kernel code, which in turn required some more cleanups... and down the rabbit hole I went. Check out the pull requests below for the progress I made so far.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be stable and sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
- Update usage documentation in README (#994)
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-host
- Improve comments and documentation (#988)
fj-kernel
- Expand intersection tests (#977, #978)
- Extract
Shell
fromSolid
(#983) - Clean up sweep API (#984, #989, #991)
- Add builder API for
Sketch
(#992) - Add
GlobalEdge
(#998, #999) - Make some minor cleanups (#1000, #1001, #1005)
- Clean up
approx
module (#1003, #1006)
fj-math
- Make minor API additions (#1004)
fj-viewer
/fj-window
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#964, #965, #966, #968, #969, #970, #974)
- Update release procedure (#972)
- Upgrade to Rust 1.63.0 (#973)
- Expand release automation (#981, #982)
- Add usage documentation to
CONTRIBUTING.md
(#995)
Issue of the Week
Fornjot is still very much an early-stage project, and I'm pretty sure that most of its usage still happens as part of developing it. Being run mostly from within its own repository has allowed some problems to creep in, that become really obvious once you start using it in the real world.
One such problem is #980 - Version mismatch between fj
and fj-app
can cause problems. If you like fiddling with Rust and aren't deterred by the presence of an FFI boundary, this might be the issue for you!
Outlook
As I explained above, I fell into a rabbit hole of kernel cleanups. My priority this week will be to figure out, which of those cleanups are going to be required to solve the problem at hand (#993); which of them aren't, but are still worth the investment (because they will soon start saving more work than implementing them costs me now); and which of them are currently a distraction.
Implementing the union operation (#42) remains my top priority and I don't want to get stuck in a cleanup cycle that won't be conducive to that.
v0.12.0
This release announcement is also available on the Fornjot website
After taking a week off, I'm back this week with another release! Aside from some relaxing and a lot of hiking, I spent most of my time since the last release on cleaning up and expanding the intersection testing infrastructure. Intersection testing is a necessary building block for implementing the union operation (#42). I maintain a list of the building blocks still required, according to my current understanding.
Meanwhile, @Michael-F-Bryan has upgraded/rewritten the host/model API to switch to a model-driven concept. This is invisible to users right now, but it's a prerequisite for many future improvements. @devanlooches and @connor-lennox have worked on improving the status updates that have recently been added to the Fornjot app.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, and my other awesome sponsors. Thank you!
If you want Fornjot to be stable and sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
- Display the last few status updates (#919, #945, #952; thank you, @devanlooches!)
- Add table of contents to README (#942)
- Display model compile times in status updates (#960; thank you, @connor-lennox!)
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-kernel
- Add
Surface
toCycle
(#939) - Clean up and expand intersection testing code (#940, #941, #946, #947, #948, #949, #950, #951)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Switch to model-driven host API (#885, #934; thank you, @Michael-F-Bryan!)
- Update list of sponsors in README (#921, #961)
- Update dependencies (#922, #923, #924, #925, #926, #928, #929, #930, #931, #933, #953, #954, #956, #957, #958, #959)
- Update release procedure (#932)
Issue of the Week
Fornjot is still at an early stage, and one way that manifests is in its error messages, which can be pretty raw and not very helpful. An example of that, is when a user forgets to define that a model is to be compiled to a dynamic library.
It should be able to prevent that case outright, by using a different Cargo command to compile Fornjot models, and passing the right parameters. If playing around with Rust and Cargo to get an introduction to Fornjot sounds appealing to you, why not take a look at #938 - Use cargo rustc
to compile models as dynamic libraries?
Outlook
I'll be busy writing intersection testing code for the foreseeable future, as part of the process of implementing the union operation (#42).
v0.11.0
This release announcement is also available on the Fornjot website
I'm still working on the union operation (#42), specifically intersection code and some related cleanups. I've also been making some progress in figuring out the details of the algorithm.
Meanwhile, @hekno25 has worked on detecting which features are provided by the graphics backend, and only using those. @devanlooches has added a UI element that displays the current state of the model.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, and my other awesome sponsors. Thank you!
If you want Fornjot to be stable and sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
- Prevent crashes due to unavailable features in graphics backend (#902, #909, #914; special thanks go to first-time contributor @hekno25!)
- Add UI element that display current model status (#911; special thanks go to first-time contributor @devanlooches!)
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-kernel
- Clean up handling of curves (#900, #901, #904)
- Clean up intersection code (#905, #906)
- Implement face/face intersection (#915)
- Make ray casting code public, clean it up (#918)
fj-math
- Validate
Line
andCircle
on construction (#910, #913) - Extend and clean up
AbsDiffEq
implementations (#912)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#892, #894, #895, #896, #899)
- Update release procedure (#898)
- Speed up release automation (#903)
- Update description of Cargo packages (#916)
- Update list of sponsors in README (#921)
Issue of the Week
Thanks to the awesome work done by various contributors, viewing a model in Fornjot works pretty well these days! There's still room for improvement, however.
If you're interested in UI and enjoy experimenting, why not take a look at #20 - Consider turning camera towards mouse cursor when zooming?
Outlook
I have made a list of some of the missing building blocks for the union algorithm. That should keep busy for a while!
v0.10.0
This release announcement is also available on the Fornjot website
I was able to spend most of last week heads-down working on the union operation (#42). The bulk of this work related to the various intersection tests that the union algorithm requires, but it also resulted in some cleanups to kernel APIs.
@Michael-F-Bryan has been busy too, with the --version
argument he added to fj-app
being merged last week.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, and my other awesome sponsors. Thank you!
If you want Fornjot to be stable and sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end-users.
- Add
--version
argument (#868; thank you, @Michael-F-Bryan!) - Improve README (#877, #882)
Ecosystem improvements
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
fj-interop
- Re-use
fj_math::Triangle
infj_interop::mesh
(#886)
fj-kernel
- Improve wording in doc comment (#880)
- Clean up API of object types (#881, #891)
- Implement curve/edge intersection (#884, #888, #889)
- Clean up surface/surface intersection (#890)
fj-math
- Make
Triangle::from_points
fallible; addLine::is_coincident_with
(#887)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
Issue of the Week
The Fornjot repository has a continuous deployment workflow that builds binaries for the Fornjot app every time new changes are pushed to the main
branch. There is currently a bug that mislabels those binaries as official release binaries, which results in the wrong output being displayed for them, if the user calls the app with the --version
argument.
If you're looking for a way to get involved with Fornjot and are interested in CI/CD and GitHub Actions, why not take a look at #883 - All binaries built by CD workflow are labeled as release binaries?
Outlook
I understand the union algorithm from a high-level (and have been for a while now, I think), but working out and implementing all the details is still a challenge. I expect that this work will continue for a while.