<feed xmlns='http://www.w3.org/2005/Atom'>
<title>atuin/atuin-server/src/router.rs, branch main</title>
<subtitle>Turtle. A hard-fork of atuin, focusing on a more minimal feature set</subtitle>
<id>http://git.foss-syndicate.org/bpeetz/forks/atuin/atom/atuin-server/src/router.rs?h=main</id>
<link rel='self' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/atom/atuin-server/src/router.rs?h=main'/>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/'/>
<updated>2024-04-18T15:41:28Z</updated>
<entry>
<title>chore: move crates into crates/ dir (#1958)</title>
<updated>2024-04-18T15:41:28Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2024-04-18T15:41:28Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=95cc472037fcb3207b510e67f1a44af4e2a2cae9'/>
<id>urn:sha1:95cc472037fcb3207b510e67f1a44af4e2a2cae9</id>
<content type='text'>
I'd like to tidy up the root a little, and it's nice to have all the
rust crates in one place</content>
</entry>
<entry>
<title>feat(server): add me endpoint (#1954)</title>
<updated>2024-04-16T14:59:11Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2024-04-16T14:59:11Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=19f70cdc918769e0485b0e4aba4069327e96dc3b'/>
<id>urn:sha1:19f70cdc918769e0485b0e4aba4069327e96dc3b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add `store push --force`</title>
<updated>2024-02-02T18:01:09Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2024-02-02T15:05:07Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=c9a453289e2fea97b5ac17e265f99332edcdcd4c'/>
<id>urn:sha1:c9a453289e2fea97b5ac17e265f99332edcdcd4c</id>
<content type='text'>
This will

1. Wipe the remote store
2. Upload all of the local store to remote

Imagine the scenario where you end up with some mixed keys locally :(

You confirm this with

```
atuin store verify
```

You then fix it locally with

```
atuin store purge
```

Ensure that your local changes are reflected remotely with

```
atuin store push --force
```

and then (another PR, coming soon), update all other hosts with

```
atuin store pull --force
```
</content>
</entry>
<entry>
<title>feat: Add change-password command &amp; support on server (#1615)</title>
<updated>2024-01-29T11:17:10Z</updated>
<author>
<name>TymanWasTaken</name>
<email>ty@blahaj.land</email>
</author>
<published>2024-01-29T11:17:10Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=0faf414cd958137ac60a1f37288994f3a1441780'/>
<id>urn:sha1:0faf414cd958137ac60a1f37288994f3a1441780</id>
<content type='text'>
* Add change-password command &amp; support on server

* Add a test for password change

* review: run format

---------

Co-authored-by: Ellie Huxtable &lt;ellie@elliehuxtable.com&gt;</content>
</entry>
<entry>
<title>chore(deps): update axum (#1637)</title>
<updated>2024-01-28T13:33:45Z</updated>
<author>
<name>Conrad Ludgate</name>
<email>conradludgate@gmail.com</email>
</author>
<published>2024-01-28T13:33:45Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=bdcb143996567c9540fb411bc53448355665747b'/>
<id>urn:sha1:bdcb143996567c9540fb411bc53448355665747b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: rework record sync for improved reliability (#1478)</title>
<updated>2024-01-05T17:57:49Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2024-01-05T17:57:49Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=7bc6ccdd70422f8fc763e2fd814a481bc79ce7b5'/>
<id>urn:sha1:7bc6ccdd70422f8fc763e2fd814a481bc79ce7b5</id>
<content type='text'>
* feat: rework record sync for improved reliability

So, to tell a story

1. We introduced the record sync, intended to be the new algorithm to
   sync history.
2. On top of this, I added the KV store. This was intended as a simple
   test of the record sync, and to see if people wanted that sort of
   functionality
3. History remained syncing via the old means, as while it had issues it
   worked more-or-less OK. And we are aware of its flaws
4. If KV syncing worked ok, history would be moved across

KV syncing ran ok for 6mo or so, so I started to move across history.
For several weeks, I ran a local fork of Atuin + the server that synced
via records instead.

The record store maintained ordering via a linked list, which was a
mistake. It performed well in testing, but was really difficult to debug
and reason about. So when a few small sync issues occured, they took an
extremely long time to debug.

This PR is huge, which I regret. It involves replacing the "parent"
relationship that records once had (pointing to the previous record)
with a simple index (generally referred to as idx). This also means we
had to change the recordindex, which referenced "tails". Tails were the
last item in the chain.

Now that we use an "array" vs linked list, that logic was also replaced.
And is much simpler :D

Same for the queries that act on this data.

----

This isn't final - we still need to add

1. Proper server/client error handling, which has been lacking for a
   while
2. The actual history implementation on top
    This exists in a branch, just without deletions. Won't be much to
    add that, I just don't want to make this any larger than it already
    is

The _only_ caveat here is that we basically lose data synced via the old
record store. This is the KV data from before.

It hasn't been deleted or anything, just no longer hooked up. So it's
totally possible to write a migration script. I just need to do that.

* update .gitignore

* use correct endpoint

* fix for stores with length of 1

* use create/delete enum for history store

* lint, remove unneeded host_id

* remove prints

* add command to import old history

* add enable/disable switch for record sync

* add record sync to auto sync

* satisfy the almighty clippy

* remove file that I did not mean to commit

* feedback</content>
</entry>
<entry>
<title>chore: remove the teapot response (#1496)</title>
<updated>2024-01-03T16:37:27Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2024-01-03T16:37:27Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=37c4b7adff76f71cc8eec5667d1ed64b32284090'/>
<id>urn:sha1:37c4b7adff76f71cc8eec5667d1ed64b32284090</id>
<content type='text'>
It was fun, but it wasn't as informative as it needs to be

I'm leaving the function name though :)</content>
</entry>
<entry>
<title>feat: add semver checking to client requests (#1456)</title>
<updated>2023-12-20T09:03:04Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2023-12-20T09:03:04Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=86f50e0356e4b661be43c2aeba97a67d83910095'/>
<id>urn:sha1:86f50e0356e4b661be43c2aeba97a67d83910095</id>
<content type='text'>
* feat: add semver checking to client requests

This enforces that the client and the server run the same major version
in order to sync successfully.

We're using the `Atuin-Version` http header to transfer this information

If the user is not on the same MAJOR, then they will see an error like
this

&gt; Atuin version mismatch! In order to successfully sync, the client and the server must run the same *major* version
&gt; Client: 17.1.0
&gt; Server: 18.1.0
&gt; Error: could not sync records due to version mismatch

This change means two things

1. We will now only increment major versions if there is a breaking
   change for sync
2. We can now add breaking changes to sync, for any version &gt;17.1.0.
   Clients will fail in a meaningful way.

* lint, fmt, etc

* only check for client newer than server

* Add version header to client too</content>
</entry>
<entry>
<title>feat: add metrics server and http metrics (#1394)</title>
<updated>2023-11-16T23:18:13Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2023-11-16T23:18:13Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=15d214e2372308fa1d12b576a675c9e2cbf6cde1'/>
<id>urn:sha1:15d214e2372308fa1d12b576a675c9e2cbf6cde1</id>
<content type='text'>
* feat: add metrics server and http metrics

* setup metrics

* update default config

* fix tests</content>
</entry>
<entry>
<title>Add Kris Nova to X-Clacks-Overhead (#1355)</title>
<updated>2023-10-28T20:18:16Z</updated>
<author>
<name>Ellie Huxtable</name>
<email>ellie@elliehuxtable.com</email>
</author>
<published>2023-10-28T20:18:16Z</published>
<link rel='alternate' type='text/html' href='http://git.foss-syndicate.org/bpeetz/forks/atuin/commit/?id=bb438d8d59b8c8032ba8210e08b8e96be9bf460f'/>
<id>urn:sha1:bb438d8d59b8c8032ba8210e08b8e96be9bf460f</id>
<content type='text'>
Rest in peace 😔

https://nivenly.org/memorials/krisnova/</content>
</entry>
</feed>
