Some engineers ship features. Some quietly remove the reasons anyone had to open the production database at eleven at night. Jonas did both, for four years, without ever once being the loudest person in the room.
SEP 2022 — AUG 2026 // PROJECTS: ALKT · IT
62Tokens Drawn
56Resolved
4Years
1Epic, End to End
27Median Days
0Fires Started
The Good Team
Townsfolk
Twelve characters he played, all at once, across four years. Each ability is a real thing that is running in production right now.
You start knowing nothing about inbound transport. By dusk there is a Freight Forwarder role, transport fields, a pickup workflow and a price negotiation — and a stranger can log into ZenOS and move your pallets.
Each time DHL rejects a reimbursement because the totals do not add up, you may rebuild the PDF. Eventually DHL runs out of reasons.
ALKT-547 · ALKT-548 · IT-926 · IT-996 · IT-997
Suppliers see only their own purchase orders. Before you, every supplier saw everyone’s. Nobody had noticed.
ALKT-386 · ALKT-394 · ALKT-513
Each night, inventory that arrived under a blocked batch number and believed itself free is blocked again — this time in Storelogix, where it actually counts.
ALKT-507
Each night, returns that were announced but never shipped leave the Grimoire. Returns that arrive without a label are finally seen.
ALKT-433 · ALKT-534 · ALKT-569 · IT-934
Warehouse workers in Aschaffenburg read German. Warehouse workers in Szczecin read Polish. This required considerably more than a dictionary.
ALKT-528 · ALKT-532
You know where every Packstation, Paketshop and Postfiliale stands, and you tell DHL and Hermes in real time. You also worked out that a Postfiliale never needed a Postnummer to begin with.
ALKT-471 · ALKT-474 · ALKT-479 · ALKT-533
Orders may now change fulfillment centre without anybody opening a production database at 23:00 and pasting in a list of UUIDs. Operations has not stopped thanking you.
ALKT-361
External return providers, partners and safety-stock consumers may speak to ZenOS through an actual endpoint instead of an email and a hope.
IT-855 · IT-1547 · ALKT-563 · ALKT-571
You choose what ZenOS whispers to Azza: reserve the stock or don’t, send the bundle configuration, mark digital products inactive, leave the warehouse SKU unprefixed.
ALKT-495 · ALKT-499 · ALKT-502 · ALKT-406
A refund may be taken as store credit. The money never leaves the shop, the customer gets a bonus, and the merchant sends you a very nice message.
ALKT-568
Every export gains the thing it was missing — the ZF number, the shipping date, and the carrier’s own words about where the parcel actually is.
ALKT-427 · ALKT-506 · ALKT-560 · ALKT-500
Also on the Good Team, Technically
Outsiders
Every script needs characters whose ability is mildly inconvenient for everyone, including themselves.
You start knowing the answer. Six of your tickets produced no code whatsoever — only the truth, which turned out to be the expensive part.
You are eleven of the sixty-two. You did the work. Nobody will count you.
ALKT-331 · ALKT-333 · ALKT-460 · ALKT-471 · +7
Created 10 January 2025. Status: To Do. Some evils cannot be defeated, only outlived — and you have outlived it.
ALKT-196
Removed From the Bag
Minions & Demons
The evils that lived inside ZenOS before he got to them. All six are dead. None of them are coming back.
Each night, an engineer opens the production database and moves orders between fulfillment centres by hand, following a four-step procedure written down in a ticket.
Minion · slain
ALKT-361
You are visible to every supplier who logs in, regardless of whose purchase order you happen to be.
Minion · slain
ALKT-394
You assume every purchase order starts with “ZF”, and that no other merchant on earth ever had the same idea.
Minion · slain
IT-962
You were announced. You were never shipped. You will sit in “Incoming” forever, and there are thousands of you.
Minion · slain
ALKT-433
Each day DHL reads the Order Overview PDF, observes that the total does not equal the sum of its parts, and declines to pay.
Demon · slain
ALKT-548
You were integrated, never finished, then quietly reimplemented somewhere else. You lingered in the codebase anyway. Removed in a single day, without ceremony.
Demon · slain
IT-1493
The Almanac
What He Actually Built
Sixty-two tickets is a number, and numbers are the least interesting thing about this. They are also only the tail of it: Jonas joined in September 2022, and the ALKT and IT boards only start carrying his name in January 2025. Eleven of the sixty-two are sub-tasks of his own stories. Six produced no code at all — only an answer, which was usually the expensive part. What the number hides is that three of the systems ZenOS runs on today did not meaningfully exist before he picked them up.
I. The Freight Forwarder, from nothing
In June 2026 ZenOS had no concept of a freight forwarder. By mid-August it had a role, transport fields on every warehouse receiving, a pickup task workflow, automated notifications to external forwarders, a price confirm-and-reject negotiation, and a Partner API that exposes all of it. He owned the epic IT-1010 and every one of its six children. That is not “worked on a feature” — that is an entire external actor introduced into the inbound process, designed and shipped end to end, by one person, in ten weeks.
II. The returns thread, start to finish
Returns runs through his whole time on ZenOS like a spine. Phantom returns that were announced but never shipped, cluttering merchants’ overviews forever — gone. Returns that arrived without a label and were therefore invisible — now visible. Return reasons displayed in English to a warehouse worker in Szczecin — now in Polish, and in German in Aschaffenburg. C-grade items being booked back as A-stock because Storelogix pre-selected nothing — now pre-selected correctly. Store credit as a refund option, so the money stays in the shop. External return providers with a real API endpoint instead of a spreadsheet.
No single one of those is a headline. Together they are the reason the returns side of ZenOS is something merchants tolerate rather than complain about.
III. Making DHL pay up
The most quietly valuable thing in the list. DHL was rejecting reimbursement claims because the Order Overview PDF attached to Carrier Investigation emails didn’t reconcile — discounts weren’t included, so the total never matched the sum of the line items. Jonas worked out why the PDFs were frequently missing altogether, then rebuilt the price calculation so the numbers hold up to a claims adjuster. Then he added the customer number and the trigger type, and went back to document how the automatic trigger logic actually works so it could be improved.
If someone pulls the DHL rejection rate from before and after ALKT-548, that number is his single strongest line — and nobody has thought to look for it yet.
IV. On the “always high quality” part
The evidence is not in the features. It is in what he did when nobody asked. He replaced a fragile ZF-prefix string check with proper warehouse-site resolution before it broke. He folded the last orphan email into the shared builder instead of leaving the duplication. He killed an N+1 feature-fetch loop. He deleted a dead GoRamp integration rather than letting it rot. He replaced a documented, multi-step, hand-written production SQL procedure for moving orders between fulfillment centres with a button.
And when he handed over the unfinished return-matching work, he left spec.md, discovery.md and idea.md in the repository, with decision records and a written warning about which subtask is a safety prerequisite. Most people leave a Slack message.
Still in the Bag
The Night Order
Six tokens remain. Whoever picks them up should read this in order — the first one genuinely matters.
I
Re-anchor the deadline windows · IT-1599
His own ticket calls this “a hard prerequisite for safety rather than for function.” Automatic feedback generation decides restock-or-dispose on the merchant’s behalf once a return is old enough — and under Return Adoption, “old enough” starts measuring from the wrong moment. Do this before enabling Return Adoption for anyone.
II
Score every match candidate · IT-1600, IT-1598
Return matching is currently unaccountable: a single candidate is accepted without ever being scored. Specs and decision records are in the repo under .scratch/IT-1262/.
III
Upgrade the Lambda runtimes · IT-925
node16 and python3.9 are not getting younger. In progress since February.
IV
Find a way to announce holidays · IT-1566
Opened four days ago. Step one: restore the BambooHR notifications. Step two: ask other teams what they use. Step three, apparently, is somebody else’s problem now.
V
The WMS regression tests · ALKT-196
Created 10 January 2025. Status: To Do. Nineteen months. This one is not a handover item, it is a family heirloom.
Sourced From GitHub · alaiko-tech
The Chronicle
His public profile shows nothing — zero repos, zero followers. Everything below came from the private org he actually shipped into, four years of it, pulled straight from the log.
1,640Pull Requests
1,527Merged
43Repositories
336,628Net Lines
1.4hMedian Time to Merge
0Weekend Commits
Ten thousand and three lines in one pull request — filter picklines with tag — merged clean. And of the 1,640 he opened, every single one landed Monday through Friday. Not one, in four years, on a weekend.
Behind the Storyteller’s Screen
The Grimoire
The Script records what the town saw. The Grimoire is what was kept behind the screen — the git history of the backend monorepo’s twenty-five repositories, read back line by line. Four years of evidence, sorted by how much trouble it caused.
2,564Non-Merge Commits
826Adjustments
57TODOs Written
0TODOs Surviving
Storyteller’s Note
If you read one entry, read the Demon. On 17 December 2025 he opened a branch called ALKT-X_Change-nothing-remove-useless-todo, merged it as PR #4682, and shipped a commit titled “ALKT-X change nothing.”
The diff was one deleted line. The line was his own //TODO shopid?, written five weeks earlier. He did not answer the question. He removed the question.
T
Townsfolk
Harmless. Load-bearing. The habits you only notice once someone plots them.
The Adjustment
826 of 2,564 non-merge commit subjects · 121 of 830 branch names
One commit in three is an adjustment. His third commit ever, 1 July 2022 at 06:31, was “Adjust spacing in wording.” The verb arrived before the ticket numbers did and never left. Six commits are the complete sentence Adjust.
The Weekend That Never Came
2,564 commits, plotted by day and hour
Mon 477 Sat0Tue 514 Sun0Wed 578
Thu 511 after 19:00 …5commits, everFri 484 before 08:00 …3
Four years, zero weekend commits. Five commits after seven in the evening across the entire tenure — and one of those five is titled “Change nothing.” A man with boundaries.
$product3->setTitle('NFQ t-shirt');
$product5->setTitle('NFQ backpack');
$product31->setTitle('NFQ backpack');
// and 'NFQ cap', in the transformer tests
Every warehouse fixture in wms-platform has been stocking the same three items of company merch since 2023. They are still there. Somewhere in the test suite, a t-shirt, a backpack and a cap are picked, packed and returned several thousand times a day.
The Placeholder
139 commits carrying a ticket ID that does not exist
94 AL-X 9 APS-X
23 ALKT-X 5 AS-X
8 ALKT-PIP
The convention is ALKT-NNN. When there was no NNN, there was X. Branch names include X-change-pagination-count and X-removed-items-test-fix, where even the prefix gave up.
The Whatnot Specification
wms-platform · wms-regression-tests, 2023–2024
// TODO: log and what not// TODO: handle - error and what not// TODO : return here box and whatnot// TODO : adjust scanning, wait for box and whatnot// TODO;
Four separate TODOs where the requirement is literally “and whatnot”. And one, in WebAppManager.php, that is a TODO terminated by a semicolon and nothing else — a task so undefined it needed punctuation instead of a description.
The Return That Never Came
apps/wms-platform/src/Inventory/Handler/ImportGoodsReceiptEnvelopeHandler.php · 4 May 2023
// will comeback to this. todo
He did not come back to this. The file no longer exists.
Not a revert. A rechange. Then a revert of the rechange. The word does not appear anywhere else in four years of history.
The Login
apps/wms-regression-tests/tests/Unit/RegressionTests/PickingTest.php · 18 Oct 2022
'username' => 'jonas.terleckas@nfq.lt',
For a while, the regression suite logged into the warehouse as him. Every night, in CI, Jonas picked the order. It was later parameterised, which is the correct engineering decision and a small loss to the mythology.
O
Outsiders
Typos that outlived their author. Several are load-bearing. One is multilingual.
Groupped
apps/wms-platform/tests/Picklist/Functional/Api/Action/GetPicklistLinesGrouppedAndOrderedForScanInTest.php — and its Tenant2 twin
Two double-p’d filenames, committed 6 January 2023, still in the repository today. The rest of the codebase spells it Grouped — BinItemGroupedDTO, createQueryBuilderByBinIdGrouped. The typo held the line in exactly one directory for three and a half years.
en:uuid_missmatch: 'Access Denied. Picklist might have
been taken over by someone else'
de:uuid_missmatch: 'Zugriff verweigert. …'
lt:uuid_missmatch: 'Prieiga uždrausta. …'
pl, ru, ua— same key
One misspelling, seven occurrences, six languages. Every warehouse operator in Germany, Lithuania, Poland, Russia and Ukraine has been served a message keyed on missmatch. Commit message: “Custom assignment uuid missmatch message.” Consistent, at least.
Dublicate
Test method, two branch names, one commit subject
public function testAddNewBarcodesWithDublicates(): void
branch AL-4610_Fix-product-dublicates
branch AS-1812_Break-dublicate-lines
commit AS-1812 Break dublicate lines.
Two years apart, same letter missing. NewItemsWithBarcodesImporterTest.php:92 is still green and still misspelled.
Live today. Also on the shelf: the branch Adjust-Pip-pixi-stock-change-request-username-lenght, the branch ALKT-221_Adjust-SendWebhoodHandler, and the variable $messageShippingOrderPackageInvoicealreadyCreated.
Also fielded across the years: “Adjsutments.” and “Tes fix deploy.” And the last commit of his career, 27 August 2026, 11:27: “IT-1599 remove raw sql formtest.” Four years, and the final subject line still had a typo in it. Perfect landing.
M
Minions
Code that works, and would rather you didn’t look at how.
The Self-Documenting Column
apps/wms-platform/src/Picklist/Repository/PicklistLineRepository.php · on master 6 → 20 Jan 2023
SUM(picklist_line.requiredQuantity) as aggregatedRequired,
SUM(picklist_line.scannedQuantity) as aggregatedScanned,
SUM(picklist_line.manuallyScannedQuantity) as
aggregatedScannedQuantityThatIHAveToChangeToScanInQuantity,
A 57-character DQL alias that is not a name — it is a note to self, escaped into the type system, complete with a stray capital A in IHAve. It shipped to master and sat in production queries for fourteen days.
And then he did it. Commit 68abee1c, 20 January 2023: the alias is gone and the column is scanInQuantity. The identifier made a promise and the man kept it. This is, genuinely, the most Jonas artefact in the repository.
The Shouty TODO
Same file, four days later · 10 Jan 2023
// TODO: intro scanin scan and sort by it// TODO: adjust tests, add cases// TODO !!! AND SUM IS NOT YET PICKED !!!group b
Three TODOs stacked on one query builder, the last one shouting in capitals and trailing off mid-thought into group b. The commit that added it also replaced a bare // TODO: — a colon with nothing after it — so this counts as an improvement.
The Sleeping Suite
apps/wms-regression-tests · 42sleep() calls, 94 seconds, all his
WebAppManager.php 16 sleeps
GoodsReceiptTest 6
PickerIsThePacker 7…and, at line 1000:// for animation to complete
sleep(2);
The end-to-end suite is held together by ninety-four seconds of hoping. One of them is documented, and its justification is a CSS transition.
To pick ten units, the test clicks + ten times and waits two seconds after each one. Twenty seconds, plus logging, to enter the number 10. There is a quantity input on that modal.
The Eleven Divs
apps/wms-regression-tests/src/RegressionTests/PageObject.php:241 · 65 of the file’s 86 locators are his
Eleven levels of positional XPath, anchored to nothing but the shape of the DOM on the day it was written. Any frontend developer adding a wrapper div breaks the warehouse.
This is not hypothetical: 102 of his commits mention a selector or a locator. Nine are titled “Selector adjustments.” Seven are “Adjust selector.” Six, “Adjusting selectors.” Five, “Adjusting locators.”
The File That Was Excused
PageObject.php:22 — line 22 of 243
// phpcs:ignoreFile
final class PageObject
{
The coding standard is non-negotiable across the monorepo. Except here, where the very first statement after the namespace declaration is a note excusing the entire file from having to comply.
public function doAuthenticate(Request $request): Passport
{
$this->logger->critical("Debug JWT: \n" . $this->publicKey);
return parent::doAuthenticate($request);
}
Every single authentication, dumping the key into the log at critical. When the log did not appear, the fix was to escalate the severity from error to critical and try again. Two days later it was reverted three times in seven minutes, across two repositories.
In his defence, and it is a real defence: it was the public key, and the branch never reached master.
WebAppManager
1,154 lines · 58 methods · one class · 2,325 lines of it written by him
The largest hand-written file he touched, and the beating heart of the regression suite. Every warehouse workflow the company has, driven through one object. It is not good architecture. It has also been catching real bugs for four years, which is more than can be said for a lot of good architecture.
He wrote //TODO shopid? on 13 November 2025. Thirty-four days later he opened a branch, opened a pull request, got it reviewed, and merged a change whose entire content was the removal of his own question.
This is not an isolated incident. It is a method. The same month, in apps/order, he wrote // TODO: shopId? maybe not for this notification on 12 November — and deleted it on 14 November under the commit “ALKT-382 Remove todo.” Two days. He didn’t decide about the shopId. He decided about the TODO.
Change Nothing, Twice More
wms-regression-tests 974c2e7, 18 Dec 2024 · wms-platform 37e0f65c, 28 Jan 2025
974c2e7 — "Change nothing." — 1 insertion(+)
STOCK_MOVE_NEXT_BUTTON_LOCATOR = '…';
+····
RETURNS_MODAL_NEXT_BUTTON_LOCATOR = '…';
37e0f65c — "Change nothing." — 2 deletions(-)- // this up() migration is auto-generated, please modify it- // this down() migration is auto-generated, please modify it
The first is a single empty line — with trailing whitespace — added to force a CI run. The second deletes two comments Doctrine generates. Both are titled “Change nothing.” and both are, unimpeachably, accurate commit messages.
The migration one landed at 19:46. In all of 2025 it is the only commit he made after seven in the evening. He stayed late, once, to change nothing.
18 December 2024
apps/wms-regression-tests · one deploy pipeline · 10:45 → 16:03
Temp fix deployment.
Temp fix deployment.
Revert “Temp fix deployment.”
Testing yaml.
Revert “Testing yaml.”
Fix deployment.
Change nothing.
Tes fix deploy.
Adjust deployment.
Workflow changes.
Test.
Test.
Fallback.
Five hours and eighteen minutes. Thirteen commits. It opens with a temporary fix, passes through a revert, a typo, an adjustment and a commit that changes nothing, and ends — as these days always end — with “Fallback.”
His busiest day of the entire year, and not one line of product code was written.
Fifty-Seven Questions, No Survivors
Every TODO he ever wrote, vs. the tree as it stands today
TODOs authored, 2022–2026 ......... 57
Still present in the codebase ..... 0
Among the fallen: // TODO: Implement process() method. (the PhpStorm stub, shipped as-is), // TODO: test locally, // TODO: test on dev myself, // TODO: tbd, // TODO, // TODO:, and // TODO;.
Not one is left. Some were done. Most were deleted. He leaves behind a codebase with no unanswered questions in it, because he removed the questions.
Four years. Twenty-five repositories. Not one Saturday.
What the Grimoire adds to the Script is only this: he is leaving the Groupped filenames, the six-language missmatch, ninety-four seconds of sleep(), and eleven levels of XPath standing between this company and knowing whether its warehouse still works.
Somebody is going to have to adjust that.
Assembled from git history across 25 repositories of the alaiko backend monorepo.
All commits, filenames, line numbers and diffs quoted verbatim. Nothing has been embellished; it did not need to be.
Good has won. Good is, regrettably, also leaving.
The Storyteller has checked, and there is no clause in the rules that lets us keep a player who has already picked up his token and put on his coat.
Thank you, Jonas — for the freight forwarders, for the Polish return reasons, for making DHL pay their invoices, and for every single time you fixed the thing next to the thing you were asked to fix.
Ships Well · Documents Better
Bonus Token
One More Line to Clear
Four years of clearing them four at a time. Here is one for the road.