115 karma · joined December 22, 2015
A lot little things you need to think of. For example.
Client sends a request. The database is temporarily down. The server catches the exception and records the key status as FAILED. The client retries the request (as they should for a 500 error). The server sees the key exists with status FAILED and returns the error again-forever. Effectively "burned" the key on a transient error.
others like:
- you may have Namespace Collisions for users... (data leaks) - when not using transactions only redis locking you have different set of problem - the client needs to be implmented correctly. Like client sees timout and generates a new key, and exactly once processing is broken - you may have race conditions with resource deletes - using UUID vs keys build from object attributes (different set of issues)
I mean the list can get very long with little details..
Also Polands power grid is quite old and hasn't kept pace with demand. The grid operator last year had to reject thousands of requests for new connections
Its an Elixir agent runtime with a thin Go TUI (bubble-tea). Im building it mostly to explore agent orchestration: planner/workers/finalizer flows, local file/code-edit tools, MCP tools, permission gates, run context, compaction, and eventually larger swarms. Erlang/Elixir is interesting for this because the actor/supervision model maps pretty naturally to lots of isolated agents and long-running supervised tasks.
As i said, The main lesson so far is that everything around contracts is much more fragile than I expected unless you use a very strong model. Planners return Markdown instead of JSON, tools get called with subtly wrong args, subagents repeat broken tool calls, finalizers lie about success after workers failed. And various permissions may be interpreted by agents in unexpexted way
I also started with too many modes too early instead of making agentic path extremely solid. That made me understand better why these codebases become huge: there are endless corner cases if you want a harness to work across models, providers, tools...
Stronger models hide a lot of harness weakness and weaker models expose. Making weaker models good enough requires a surprising amount of contract hardening. But that hardening tends to make the system better for stronger models too.
Also elixir http stack was causing a lot of problems (needed to use gun eventually)
From what I see while building my own agentic system in Elixir, the problem is in training for your specific harness/contracts. Claude/GPT-style models seem to be trained around very specific contracts used by the harness like tool call formats, planning structure, patching, reading files, recovering from errors, and knowing when to stop.
In practice, you either need a very strong general model that can infer and follow those contracts (expensive), or a weaker model that has been fine-tuned / trained specifically on your own agent contracts. Otherwise, the whole thing becomes flaky very quickly. And I suspect with Deepseek V4 you may get last options.
Also, in a world where AI output is abundant, we humans become the scarce resource the "tools" in the system that provide some connectivity to reality (grounding) for LLM
Mini paper: that future isn’t the AI replacing humans. its about humans drowning in cheap artifacts. New unit of measurement proposed: verification debt. Also introduces: Recursive Garbage → model collapse
a little joke on Prism)
32767 moves in a single prompt. That's not testing reasoning. That’s testing whether the model can emit a huge structured output without error, under a context window limit.
The authors then treat failure to reproduce this entire sequence as evidence that the model can't reason. But that’s like saying a calculator is broken because its printer jammed halfway through printing all prime numbers under 10000.
For me o3 returning Python code isn’t a failure. It’s a smart shortcut. The failure is in the benchmark design. This benchmark just smells.
With further development, SynthLingo could be used to create more natural and intuitive interfaces between humans and computers, especially in scenarios where context-driven vocabulary and emotion encoding might improve user experiences.
"Quantumix (C1:physics;C2:planck scale) emote-neutral. Subatomix (C1:particles;C2:quantum states;C3:fields) emote-explanation. WaveParticlix (C1:de Broglie;C2:wavelength;C3:momentum) emote-complex.
Schrodingerix (C1:wave equation;C2:probability density) emote-mathematical. Uncertainix (C1:Heisenberg;C2:position;C3:momentum;C4:energy;C5:time) emote-uncertainty. Superposix (C1:multiple states;C2:collapse;C3:observation;C4:cat thought experiment) emote-intriguing.
Entanglix (C1:correlation;C2:distance;C3:spooky action;C4:EPR paradox) emote-fascination. Quantumix (C1:applications;C2:computing;C3:cryptography;C4:teleportation;C5:quantum sensors) emote-potential."
Now, to address the question of how we've reached a point where software dependencies often seem unstable or difficult to manage, I believe there are several factors contributing to this situation:
Rapid pace of technology and innovation: The web and software development landscape has evolved rapidly over the years, with new tools, frameworks, and libraries being introduced constantly. This rapid pace of innovation sometimes leads to a lack of focus on long-term stability, as developers may prioritize adding new features or keeping up with trends over ensuring backward compatibility.
Increased complexity: The web has become increasingly complex, with new technologies and standards being introduced regularly. This has led to a more complex ecosystem of dependencies and interdependencies between packages, making it harder for developers to maintain and update them.
Fragmentation of the ecosystem: The JavaScript ecosystem, in particular, is highly fragmented, with many different libraries and frameworks available for similar tasks. This fragmentation can make it difficult for developers to select the most stable or well-maintained option, and it can also contribute to the "cascading effect" you mentioned when updating one package leads to the need to update many others.
Shorter project lifecycles: In the fast-paced world of software development, projects often have shorter lifecycles than in the past. This can lead to less emphasis on long-term stability and more focus on delivering features quickly, even if that means introducing breaking changes more frequently.
Open source community dynamics: Open source projects are often maintained by volunteers who may not have the time or resources to ensure long-term stability. Maintainers may also change over time, leading to different priorities or approaches to stability within the project.
edit: This is funny just after i wrote this I've seen so many references to Poland in this thread. But yeah it's interesting as working in UK as developer in small company I was earning 2500 pounds after taxes (Liverpool). And I thought that it's a dream job back then. But it was 10 years ago. And I think I am rather average developer just on level III on 6 level scale. So right now living in Poland my wage expectation is around 6k euro as Backend Java developer.