Fossil Forum

stephan 3 weeks, 4 days ago

Post: Milestone: libfossil is now "100% native" (edit: 99%)

A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.

Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.

My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.

The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.


  1. e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. 

stephan 3 weeks, 4 days ago

A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.

Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.

My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.

The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.

Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!


  1. e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. 

stephan 3 weeks, 4 days ago

A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.

Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.

My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.

The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.

Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!

Edit: screenshot or it didn't happen:

[stephan@nuc:~/f/libfossil]$ f-ci -m "Replace fcli_sync()'s shelling-out-to-fossil impl with fsl_sync_client(). By default fcli will include sync metrics for a while, while this code is still new, but that can be suppressed with --sync-metrics or -sm. When that flag is eventually turned off by default, the same flag will enable it. This means that f-sanity, f-ci, f-update, and whatever else are now 100% library code :)."
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read:      2
    igot         1
    pragma       1

Cards written:   3
    pragma       2
    pull         1

Bytes written:           215
Bytes read uncompressed: 297

fsl_xfer timers (ms):
    Purpose            Wall       CPU        User       System    
    fsl_sc::submit()   173.397    10.520     8.565      1.955     
    fsl_sc::read()     0.014      0.015      0.012      0.003     
    processing         0.534      0.535      0.521      0.014     
    --------------------------------------------------------------------------------
                     = 173.945    11.070     9.098      1.972     
QUEUED: include/fossil-scm/cli.h
QUEUED: src/cli.c
QUEUED: src/xfer.c
New version: fe5739c207a54273cd8ca6c74a4cfcf9a91d65d99f2672b9b045d75cce8d22e6 (17518)
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read:      108
    gimme        106
    igot         1
    pragma       1

Cards written:   8
    file         4
    pragma       2
    pull         1
    push         1

Bytes written:           221,478
Bytes read uncompressed: 5,304

fsl_xfer timers (ms):
    Purpose            Wall       CPU        User       System    
    fsl_sc::submit()   377.727    4.831      3.846      0.985     
    fsl_sc::read()     0.186      0.160      0.155      0.005     
    processing         1.881      1.882      1.842      0.040     
    --------------------------------------------------------------------------------
                     = 379.794    6.873      5.843      1.030

Forum bug: the preview of this message is truncated near the end of the above block. It's still there but the DOM element is neither expanding far enough nor offering scrollbars (but i can find no max-height set anywhere).

(blank line after code block to avoid what looks like a truncated message but is just a rendering quirk.)


  1. e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. 

stephan 3 weeks, 4 days ago

A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.

Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.

My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc. They offer more proof that we are indeed living in The Future.

The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.

Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!

Edit: screenshot or it didn't happen:

[stephan@nuc:~/f/libfossil]$ f-ci -m "Replace fcli_sync()'s shelling-out-to-fossil impl with fsl_sync_client(). By default fcli will include sync metrics for a while, while this code is still new, but that can be suppressed with --sync-metrics or -sm. When that flag is eventually turned off by default, the same flag will enable it. This means that f-sanity, f-ci, f-update, and whatever else are now 100% library code :)."
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read:      2
    igot         1
    pragma       1

Cards written:   3
    pragma       2
    pull         1

Bytes written:           215
Bytes read uncompressed: 297

fsl_xfer timers (ms):
    Purpose            Wall       CPU        User       System    
    fsl_sc::submit()   173.397    10.520     8.565      1.955     
    fsl_sc::read()     0.014      0.015      0.012      0.003     
    processing         0.534      0.535      0.521      0.014     
    --------------------------------------------------------------------------------
                     = 173.945    11.070     9.098      1.972     
QUEUED: include/fossil-scm/cli.h
QUEUED: src/cli.c
QUEUED: src/xfer.c
New version: fe5739c207a54273cd8ca6c74a4cfcf9a91d65d99f2672b9b045d75cce8d22e6 (17518)
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read:      108
    gimme        106
    igot         1
    pragma       1

Cards written:   8
    file         4
    pragma       2
    pull         1
    push         1

Bytes written:           221,478
Bytes read uncompressed: 5,304

fsl_xfer timers (ms):
    Purpose            Wall       CPU        User       System    
    fsl_sc::submit()   377.727    4.831      3.846      0.985     
    fsl_sc::read()     0.186      0.160      0.155      0.005     
    processing         1.881      1.882      1.842      0.040     
    --------------------------------------------------------------------------------
                     = 379.794    6.873      5.843      1.030

Forum bug: the preview of this message is truncated near the end of the above block (edit: only in Firefox). The content is still there but the DOM element is neither expanding far enough nor offering scrollbars (but i can find no max-height set anywhere).


  1. e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. 

stephan 3 weeks, 4 days ago

A long-awaited moment has been reached in (lib)fossil's history: thanks to the herculean efforts of (in order of first name) Dan Shearer and Dan Mestas, the library is, as of a few moments ago, 100% native. That is: it no longer has to shell out to fossil for synchronization.

Over the past several weeks The Dans (as they're colloquially known) got sync and clone working and tested across a wide variety of in-the-wild repositories. There are a very few outlier pieces left to sync1 but everything needed for non-admin-specific use is up and running.

My sincerest thanks to Dan, the other Dan (you know who you are), and their Claude swarms. Just as interesting as the resulting code are the reports Claude writes up justifying every change, reporting finds of age-old bugs which block its changes, what it does to fix those, hard proof of test results (across many different repositories), etc.2 They offer more proof that we are indeed living in The Future.

The Dans have also been hard at work hammering out RFCs to publish for Fossil's artifact format and sync protocol, covering the tiniest details about data format, historical compatibility constraints, and "what fossil(1) does for these undocumented cases". Dan Shearer is welcomed to elaborate on that.

Edit: oh, it's actually only 99% native: when syncing to a local file it does the same thing fossil does: shells out to (fossil test-http) to provide an HTTP transport channel. Once we get the server side of sync going (we've not started that), we can reimplement that part. Apologies for the fake news. It's close enough to 100% for marketing purposes, though!

Edit: screenshot or it didn't happen:

[stephan@nuc:~/f/libfossil]$ f-ci -m "Replace fcli_sync()'s shelling-out-to-fossil impl with fsl_sync_client(). By default fcli will include sync metrics for a while, while this code is still new, but that can be suppressed with --sync-metrics or -sm. When that flag is eventually turned off by default, the same flag will enable it. This means that f-sanity, f-ci, f-update, and whatever else are now 100% library code :)."
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read:      2
    igot         1
    pragma       1

Cards written:   3
    pragma       2
    pull         1

Bytes written:           215
Bytes read uncompressed: 297

fsl_xfer timers (ms):
    Purpose            Wall       CPU        User       System    
    fsl_sc::submit()   173.397    10.520     8.565      1.955     
    fsl_sc::read()     0.014      0.015      0.012      0.003     
    processing         0.534      0.535      0.521      0.014     
    --------------------------------------------------------------------------------
                     = 173.945    11.070     9.098      1.972     
QUEUED: include/fossil-scm/cli.h
QUEUED: src/cli.c
QUEUED: src/xfer.c
New version: fe5739c207a54273cd8ca6c74a4cfcf9a91d65d99f2672b9b045d75cce8d22e6 (17518)
fsl_msg INFO: Sync URL: https://[email protected]/r/libfossil
fsl_msg INFO: Using saved password for [libfossil-sync-pw:https://[email protected]/r/libfossil]
fsl_msg CONNECT: starting trip #1
fsl_msg INFO: Remote fossil version is 22900 20260728 021109
fsl_xfer metrics:
Cards read:      108
    gimme        106
    igot         1
    pragma       1

Cards written:   8
    file         4
    pragma       2
    pull         1
    push         1

Bytes written:           221,478
Bytes read uncompressed: 5,304

fsl_xfer timers (ms):
    Purpose            Wall       CPU        User       System    
    fsl_sc::submit()   377.727    4.831      3.846      0.985     
    fsl_sc::read()     0.186      0.160      0.155      0.005     
    processing         1.881      1.882      1.842      0.040     
    --------------------------------------------------------------------------------
                     = 379.794    6.873      5.843      1.030

Forum bug: the preview of this message is truncated near the end of the above block (edit: only in Firefox). The content is still there but the DOM element is neither expanding far enough nor offering scrollbars (but i can find no max-height set anywhere).


  1. e.g. subscriber lists, but i almost consider it a bug that that is synced at all because i once sent notifications to dozens of people by accident after cloning a repo and getting the subscribers along with it. 

  2. As an example: a fascinating treatise on why fossil's F-cards have to support a trailing space 

danshearer 3 weeks, 4 days ago

Stephan you've been working on libfossil for 16 years or so. According to scc there are well over half a million lines of code in libfossil, so its safe to say you've personally written around half a million lines. Along the way you've done a lot of work on the Fossil artifact format (especially the documentation) and contributed a lot of code to fossil(1).

So along with other Dan (and other Dan's LLM clusters) I have been putting the icing on your half-million-line cake. And it tastes very nice too.

--
Dan Shearer
[email protected] / https://shearer.org

stephan 3 weeks, 4 days ago

so its safe to say you've personally written around half a million lines

Not after we exclude sqlite3.[ch] and fnc!

[stephan@nuc:~/f/libfossil]$ scc src include bindings f-apps
───────────────────────────────────────────────────────────────────────────────
Language            Files       Lines    Blanks  Comments       Code Complexity
───────────────────────────────────────────────────────────────────────────────
C                     121      75,179     4,235    10,907     60,037     13,103
C Header               21      26,557     1,761    20,062      4,734        279
TCL                    16       2,305       237       167      1,901        163
C++                     7       2,058       306        76      1,676        186
<snip...>
───────────────────────────────────────────────────────────────────────────────
Total                 184     115,809     7,594    36,392     71,823     13,880

That's a number i can believe. Z 491b09d1fc066197ce1201a7d743d2c4

danshearer 3 weeks, 4 days ago

Ah, yes thanks for the correction.

Nevertheless. Your fair fingers did nearly 100% of that.

D :)

bohwaz 2 weeks, 2 days ago

Great job all, and thank you very much Stephen for your work!

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button