Every release, newest first. Fixes, new features and improvements, written so you can tell whether any of it affects you.
Korium 1.0.28
The rate limit on the API is now the number we publish, and your memories get their connections sooner.
Fixed
The rate limit on the API is now the number we publish. It was being counted in more than one place at once, so in practice you could go some way past it before anything stopped you. If you were relying on that extra room, you may now see requests turned away where they used to get through. Tell us and we will raise your limit.
Improved
Your memories get their people, places and ideas read out of them sooner. This work was being held to a rate far below what it needed, so a burst of memories took longer to come good than the work itself required. That cap is gone. A busy hour now clears at the speed of the work rather than the speed of a queue.
Korium 1.0.27
The work that happens after you save a memory now runs on machines of its own, so it can never slow down what you are waiting for.
Improved
Everything that happens after you save a memory - reading the people, places and ideas out of it, working out how it connects to what you already have, keeping search fresh - used to run on the same machines that answer you. When a lot of memories arrived at once, or a slow one held things up, you felt it as a slow page or a slow answer. That work now runs on machines of its own. It can take as long as it needs and nobody is waiting on it.
The machines that answer you and the machines that do the background work now grow and shrink on their own terms. How busy a machine is has always been the right measure for answering you. It is the wrong measure for background work, where what matters is how long the oldest waiting job has been waiting, so that is what we watch now.
Background work also writes its own record of what it did. When something falls behind, there is one place to look instead of two, which means we find it in hours rather than days.
Korium 1.0.26
Korium CLI is on your dashboard, so indexing code no longer needs someone to send you a file.
New
If your team uses the code index, your dashboard now has a Korium CLI card with the current version and a download. Before this there was no way to get the app at all short of asking us for a copy. It is signed and notarized by Apple, so it opens on any Mac without a warning.
The card only appears for accounts on the code index, which is invite-only while we grow it. If your team wants it and you do not see it, talk to us.
The getting started guide now explains what Korium CLI does and where to find it. There is no public download link on purpose: the app comes off your account, not off a web page.
Korium 1.0.25
Twice as many people on your team can index at the same time before anyone is asked to wait.
Improved
A team can now have sixteen indexes building at once instead of eight. If your team indexes on every commit, several people pushing at the same moment is normal, and the ninth person was being told to come back later for no good reason.
If you do need more than sixteen at once, ask us and we will raise it for your team.
Korium 1.0.24
The starter toolkit now teaches you how to build agents that remember, and indexing your code is a single command.
New
Ask Korium for the starter toolkit and you get what you actually need to begin: a skill for writing memories worth keeping and finding them again, a skill for searching your own code, a sample agent that looks things up before it starts, and a short house rule to paste into your project so everyone works the same way.
The toolkit now explains how to make the habit automatic, so searching before you start and writing down what you decided stop depending on anyone remembering.
Improved
Indexing a repository is one command, korium-cli index. Sign in once with korium-cli login and you are never asked for a token again. Many teams run the index from a git hook so it keeps up on its own.
Everything in the toolkit is text you read and copy in. There is nothing to install and nothing that runs on your machine.
Korium 1.0.23
What korium-cli remembers about a repository now belongs to the account that indexed it, and to nobody else.
Fixed
If an index was still running when you signed in as somebody else, it finished afterwards and wrote its note about that repository back where the new account would find it. The next run believed it, decided the repository was already indexed, and sent nothing at all. korium-cli now records which account wrote each note and ignores one written by anybody else.
One thing to expect from that: the first korium-cli index in each repository after updating sends the whole repository, because notes written by earlier versions do not say who wrote them. Runs after that go back to sending only what changed.
Korium 1.0.22
Two people indexing the same commit at the same time can no longer put each other's work back the way it was.
Fixed
When two machines indexed the same commit at the same time, each sending only what had changed, whichever finished second quietly put the other one's files back to the way they were before. Korium now refuses that second index instead of publishing it. Nothing you sent is lost and there is nothing to undo: run korium-cli index again and it sends what changed since the index that is actually being used.
New
An answer from code_locate now says which index it came from, in indexed_set_id. Two indexes of one commit look identical if you only have the commit, so this is the only exact way to tell whether the index you built is the one answering. Worth reading if you use these answers in your own code.
Korium 1.0.21
Indexing a repository you have already indexed now sends only the files you changed, so it finishes in a moment instead of minutes.
Fixed
A file with an accent or a space in its name could be treated as a file that had left the repository. It is now read and indexed like any other.
Running korium-cli index from a folder inside a repository indexed only that folder while claiming to cover the whole repository. It now reads the whole repository, and says so. Use --include to index part of one.
An index no longer publishes a file that was being saved while it was read. The run stops and names the file, and running it again once you have finished saving is all it takes.
New
korium-cli index sends only the files that changed since the last time you indexed this repository, and Korium keeps everything else. The first index of a repository still sends all of it.
Deleting a file and re-indexing now removes its symbols from Korium. Until now the only way to take anything out was to send the whole repository again.
--full sends the whole repository even when only part of it changed.
--allow-removals lets an index take content out of Korium. You need it when a file you changed has no symbols left in it, or when the repository really did get much smaller. Without it Korium refuses and tells you what would have gone.
Korium 1.0.20
Signing in lets you choose the right Google account, and one Korium session no longer knocks another one offline when they renew.
Fixed
Choosing Google sign-in could jump straight to a passkey for the last account Chrome used, with no chance to choose a different account. Google sign-in now asks which account you want first.
Running Korium from more than one coding session on the same Mac could make one session's renewal invalidate the other and send you back to the browser to sign in again. Sessions that renew up to half an hour apart now receive the same renewed sign-in instead of treating the second session as an intruder.
Korium 1.0.19
You can send the files a commit changed instead of the whole repository again.
Fixed
An index that covers far less of your repository than the one it would replace is now checked again at the moment it goes live, not only when you finish uploading it. Two people indexing the same repository at once could finish in the wrong order and leave the smaller index serving. If yours is turned away for this, index the commit again; nothing you already had is changed.
An update that names an index we no longer have, or one that has stopped being the one this repository serves, is refused before anything is uploaded, and the refusal says to send the whole repository instead. Nothing quietly moves an update onto a different starting point.
Sending the same start twice is safe, including after a lost connection: the second call picks up where the first left off and answers with the same index. Sending it with a different starting index, or a different list of files, is refused rather than mixed with what already arrived.
New
Indexing a change no longer means sending the whole repository. Start the index with base_set_id, the index you are updating from, plus changed_files and deleted_files, which git diff --name-only gives you. Everything in the files you did not name is kept, including the work already done to make those files searchable, and you upload only the files that changed. The result is a complete index of the new commit, exactly as if you had sent all of it.
Send each changed file in full. A symbol you deleted is gone from the index, because the file you send replaces the one that was there. Naming a file as changed and then sending no symbols for it says that file has none left, so we stop and ask: the update is refused, and if you meant it, send it again with intent set to truncate. Nothing is lost by asking - the upload stays where it was - and a file your tooling dropped by accident cannot quietly take every symbol it had with it. We only ask about files that had symbols to lose, so the README and the lock file in your diff cost you nothing.
Declare only what you are sending. The counts and the file fingerprint describe the changed files, not the repository.
The answer to your first call tells you how much was kept and whether those files' search results came across as they were or are being rebuilt. They are rebuilt when we have changed the model that makes them since the index you are updating from was built.
Korium 1.0.18
An index that sends different files than it said it would is now refused.
Fixed
Only the NUMBER of files was checked against what you declared, never which files they were. An index that sent the right number of the wrong files was accepted, searched like any other index, and reported itself up to date, and nothing you could see said otherwise. The files are now checked too, and an index that does not match what it said it was sending will not publish.
Starting an index needs one more thing from you for that check to be possible: a fingerprint of the files you are about to send, alongside the counts you already send. Take the repository-relative path of every file your symbols came from, remove duplicates, sort them, write each one as its length in bytes, a colon, then the path, run sha256 over the result, and send the hex as paths_digest. An index without it is refused at the start, before you upload anything.
You can also send the file list itself as paths, up to 12,000 files. Nothing about whether your index is accepted depends on it, and a repository too large to include it is checked just as strictly. It only lets the refusal name the file that did not match, instead of telling you that one did not.
Korium 1.0.17
Sending part of a repository no longer wipes out the rest of your index.
Fixed
Sending one file's worth of code, instead of the whole repository, used to take the rest of your index with it. Everything reported success, searches still said your index was up to date, and the symbols were simply gone with no way to get them back short of indexing again. Sending part of a repository without asking to replace anything was the opposite problem: it was built, charged for, and thrown away, and you were told three times that it had worked.
Both are now refused before anything is changed, and the answer tells you how many files you sent, how many the current index covers, and that sending an index replaces what is there rather than adding to it. Nothing is lost while you sort it out, and you can send the same import again once you have the whole thing.
If your repository really did lose most of its files, send the import again with intent set to truncate and it will go through.
Korium 1.0.16
Indexing a large repository no longer gives up part way through.
Fixed
A large index could stop part way with nothing to show for it, try again, and stop again in the same place. It now saves its work in small pieces as it goes, and finishes. Indexing a big repository also no longer slows down everything else on your account while it runs. If one has been stuck, index it again.
Korium 1.0.15
A big repository now finishes indexing instead of quietly never becoming searchable.
Fixed
Indexing a large repository could appear to work and then never finish. The import was accepted, the counts matched, and searches carried on answering from the previous version of your code with nothing to say why. Behind that, each attempt threw away everything it had done and started over, so a repository above a certain size could never get there no matter how many times it tried. Each attempt now keeps its work, and a long index picks up where the last one left off rather than starting again. If you have a repository that never became searchable, index it again and it will finish.
Improved
Indexing is several times faster. A repository that took around half an hour of work now takes closer to ten minutes, and small updates are ready in about a second.
Searching stays fast while a repository is being indexed. Indexing used to be able to get in front of a search and keep you waiting; searches now go first.
Korium 1.0.13
A long memory that takes too long to read is no longer given up on in silence.
Fixed
Reading a long memory for the people, projects and systems it mentions can take a while, and when it took longer than we allow, we stopped it without writing anything down. The memory kept waiting, came back an hour later to be tried again, and nothing said why. We now stop it in a way we can see and hand it straight back to be retried. This is the same backlog the last note was about: long memories may still take more than one attempt, but they no longer fail quietly.
A memory that had already been read by an earlier attempt was recorded as though we had just read it again. Nothing was wrong with the memory, but the record of what happened to it was not true, so anyone reading that back was told about work that never took place.
Improved
We can now see when memories are not getting the people and projects picked out of them, and when the queue of memories waiting for that stops going down. Both had been happening with nothing to show for it, which is why the backlog in the last note went unnoticed for as long as it did. Nothing for you to do here.
Korium 1.0.12
Saved memories are getting the people and projects they mention picked out again.
Fixed
When you save a memory, Korium reads it for the people, projects and systems it mentions, so you can later find it by those and walk from one memory to a related one. For some memories that was not happening, and searching for them only matched their words. It now happens for every memory you save.
Memories you saved earlier that missed out are still waiting on it. They are safe and they are searchable by their words in the meantime. We are working through them and will say here when they are done.
Korium 1.0.11
Requests are no longer turned away while we are releasing an update.
Fixed
While we were releasing an update, a request could be turned away with no explanation. It lasted under a minute and cleared on its own, so most releases went by without anyone noticing, but if one of yours was caught by it your tool showed an error and you had to try again. Releases no longer do this.
If we are ever genuinely out of room, you now get a clear message asking you to retry, instead of a request that fails without saying why. Retrying it works.
Korium 1.0.10
Memories that could never be saved, because of a character in the label they were filed under, can now be brought back.
Fixed
A memory filed under a label containing a character we cannot store, such as a colon, could never be saved. It failed the same way on every attempt, ran out of retries, and went to the holding area for memories we could not save. Retrying it from there could not help, because nothing about the memory had changed, so it went straight back. Nothing was lost: those memories still answered searches, and they were correctly shown as not yet saved. We can now correct the label and save them properly. The correction changes only the characters we cannot store and keeps the rest of the label exactly as it was written, and a label with nothing usable left is cleared rather than replaced with something invented.
Memories saved since 25 July were already protected from this, so this is about ones that were stuck before then. If your count of memories we could not save has been sitting at the same number no matter what, this is why, and it should now come down. Ask us if it does not.
Korium 1.0.9
One more number stops pretending it knows the answer, and the note beside it is in plain words.
Fixed
Asking how full your memory is included a breakdown of your memories by status, and it always came back empty. That reads as "none of my memories have a status", which is not what it meant: we do not group your memories by status yet, so nobody ever looked. It now comes back blank rather than as an empty list, the same way every other number we could not read already does. Read it as "not available", not as "none". If you read this answer in your own code, allow for a blank value here.
Improved
The note at the bottom of that same answer was written in our words rather than yours, and mentioned a piece of our own paperwork by name. It now says what it means: which number is missing, and that everything else you are looking at was read just now.
Korium 1.0.8
When Korium cannot read one of your numbers, it says so instead of showing a zero.
Fixed
Asking how full your memory is could answer 0 for a count Korium had not managed to read. Zero is also what an empty one looks like, so the two were impossible to tell apart, and the reassuring reading is the one anybody believes. A count we could not read now comes back empty rather than as 0, and anywhere we show it to you it is a dash. Read that as "not known right now" and ask again. If you read these counts in your own code, allow for an empty value.
New
The same answer now tells you how many of your memories are still saving, how many are in Korium's hands but not yet saved for good, and how many Korium could not save after repeated tries. That last number should be nothing. If it is not, tell us, because those memories need us to step in.
Korium 1.0.7
Search stops missing memories you know you saved.
Fixed
Searching could miss memories you had definitely saved. The more you had saved in the last little while, the more likely it was, so it was worst just after saving a batch and could keep happening for the best part of an hour afterwards. Your newest memories were taking every place on the page. They now take their turn alongside everything else.
Korium 1.0.6
Korium stops signing you out while you are using it.
Fixed
When your tool made several requests at the same moment and its access had just run out, each request asked to renew on its own. Korium served the first and treated the rest as though someone were reusing a stolen credential, which signed you out. Requests that arrive together are now treated as what they are: one tool asking once.
A connection you were actively using could be dropped in favour of one you had abandoned, because Korium only noticed a machine when its access renewed. Using Korium now counts as using it.
Improved
Access lasts an hour instead of fifteen minutes, so your tools spend far less time renewing.
Removing a device from your account now ends that machine's access on its next request. It used to keep working until its access next renewed.
Korium 1.0.5
Being signed out no longer causes the next sign-out.
Fixed
Signing back in used to take a new device slot and disconnect one of your other connected machines, which then had to sign in too, and so on. If you kept more than three connections open you could be sent round that loop for days. Signing in again on a machine you have used before now keeps the place it already had.
Korium 1.0.4
Your plan, your next charge and your invoices now say the right thing on the account page.
Fixed
A paying customer's account page could relabel itself Free on its own, hide the plan buttons and show an empty invoice list, having done nothing to cause it. It was a momentary read failure being treated as an answer.
The account page now shows the day you will actually next be charged.
Paying for a plan turns it on straight away, rather than leaving you paid up and still waiting.
Moving from a paid plan down to Free no longer asks you for a card.
A free trial is no longer described as a payment.
Paying now updates the account page without you having to reload it.
Signing up when you already have a workspace waiting no longer sells you a second one.
A brief hiccup while your plan was being read can no longer strand a signup that had otherwise finished.
Improved
Choosing a plan during signup now takes you straight to the card form instead of stopping at a page in between.
Korium 1.0.3
Memories saved since July 31 were not becoming searchable. They have been recovered and the cause is fixed.
Fixed
Some memories saved between July 31 and August 5 were never becoming searchable. Saving them appeared to work, and from the outside nothing looked wrong, but they never made it into search. Every affected memory has been recovered and is searchable now. The cause was our embedding service being asked for more than it could answer at once, which made it time out and the memory be set aside as broken.
Long memories were only searchable by their opening. Anything past roughly the first two thousand words was stored but could not be found, which hit structured content like JSON, SQL and code hardest because it packs more into the same space. Long memories are now split and read in full.
The service could restart when a database connection was cut, briefly interrupting anyone using it at the time.
Improved
We now check whether a memory fits before storing it, instead of guessing from its size. Anything too long is split rather than quietly cut short, so nothing you are allowed to save gets refused or truncated.
Korium 1.0.2
Code search returns real functions in every supported language, not a list of file names.
Fixed
Searching a repository written in anything other than Elixir returned file names where functions should have been. Indexing reported a symbol for every file and looked like it had worked. Go, and the rest of the supported languages, now return real symbols, and indexing tells you plainly when a file is one it cannot read.
Entering card details no longer fails when your billing address is already on file.
Improved
Indexing a large repository no longer slows down everything else in your workspace while it runs.
Korium 1.0.1
Sign in with a code, pay without leaving Kyroco, and start saving the moment your workspace exists.
Fixed
New workspaces now start with Korium switched on. Before this, a brand new workspace looked connected but quietly refused everything you tried to save, on the free plan and the paid plan alike.
New
You can sign in with a code sent to your email. The link in that email still works and now fills the code in for you.
Improved
Card details are entered on our own checkout page instead of a page hosted elsewhere. Your card number still goes straight to our payment processor and never touches our systems.