--
You received this message because you are subscribed to the Google Groups "Eiffel Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to eiffel-users...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/1f036d2d-4511-4f55-9753-a913e53f0431n%40googlegroups.com.
Subject: Why "Drift" is the Enemy: Please Review the Eiffel Kit Document
This is my final post for the day, and I’d like to make a sincere request: please take a moment to read the Eiffel Kit document in its entirety.
The document addresses exactly what many of you have been rightfully criticizing: AI Slop and the phenomenon of Drift (both human-driven and the new AI + Human hybrid).
As I collaborated with Claude to assemble this documentation, the reality of "Drift" became increasingly apparent. From my perspective, the fight against Drift is the very motive that drove Bertrand toward software correctness tools—Type Safety, Void Safety, Design by Contract (DbC), and SCOOP, just to name a few. It is the same force that drives the development of AutoProof.
Humans do not survive Drift. It is the silent, incremental deviation from excellent specifications into the abyss of flawed or failed systems. I have witnessed this firsthand repeatedly over the last 35 years, and I suspect most of you have as well.
AI changes nothing about this fundamental struggle. You cannot fight an enemy you haven't identified. This exercise in refining Claude’s generated code has reinforced this lesson more strongly than any other experience in my career.
I believe this document speaks to the anxieties we have all been feeling regarding AI—not just in the general sense, but specifically how it intersects with Eiffel and other high-integrity tech stacks.
Please read the document and share your feedback. I am eager to hear your thoughts on how we can use Eiffel’s unique capabilities to anchor our systems against this drift.
Best regards,
Larry
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/CA%2B3qnjfw1vx9GdxxE%3DBesZ1Ee60PwZaiLXcXKveTkGmSbVdD%3Dw%40mail.gmail.com.
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/CAO299FvYzMGCwovvYg-aX1aopE4kbvSFmoAB%3D2ExcjEJuC2L6A%40mail.gmail.com.







Allow me to make some suggestions. As always, advice is cheap, action is hard, but that does not deter advice-givers.
I believe there is an enormous potential in the combination of Eiffel and AI techniques for producing software of guaranteed quality. Maybe a unique opportunity for the software industry. It is impressive to see how Larry Rix, aided by other members of this group, seized the moment and produced so much so quickly.
The risk exists in my view of embracing too much too soon. Pie-in-the-sky discussions are good but they should be accompanied by concrete achievements. At some point – I do not know if it is now – the speculations and prototypes should lead to an actual project with goals, plans, milestones, releases, regression test suites, bug fixes, documentation and all the boring but indispensable trappings of an effort destined to become influential.
Defining them and sticking to the plan may be unexciting to the extreme, but is a prerequisite for the world to start paying attention. One modest product (for example a library), fully worked out, verified and usable “as is”, will draw more followers than the most ecstatic promises.
That would be my suggestion. Continue the brainstorming but take a product turn.
Congratulations for all the great work of these past weeks,
-- BM

So I ask: what specific outcome are you looking for? I genuinely want to understand what "take a product turn" means when the posts included shipped products with passing tests. Obviously I'm missing something, so please help me know specifically what it is.
Respectfully,
Larry
Dear Larry,
I am following from a distance (being busy in recent weeks) so I may miss the picture. If you say everything is planned, managed and resulting in strong products then my concerns are misplaced.
I have enough experience in software to know that what works according to the designer does not always work for the consumer at the end of the line. Hence my concerns. I see so many directions that I have trouble believing that everything is impeccable. Any project needs a skeptic, or devil’s advocate, so I can be it. But it is true that I should look at the actual stuff rather than expressing admittedly generic concerns.
So let me look more closely and come back when I have something more concrete to say.
Thanks,
-- BM
--
You received this message because you are subscribed to the Google Groups "Eiffel Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to eiffel-users...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/CA%2B3qnjfB_mazK1njCa%2BcKj9BDxKNUYLz1YNxcX-9z9srMhAysA%40mail.gmail.com.
Dear Bertrand,
Thank you for your candid feedback. You are correct, and I want to acknowledge that directly.
Your core question seems certain to be—"does it work for the consumer, not just the designer?"—cuts to the heart of what's missing. Let me be concrete about where I believe the gaps are:
What exists:
100+ libraries with passing tests (for whatever that counts for or amounts to).
Additional MML contracts (thanks to your suggestion).
Integration where libraries consume each other.
A structured development process (eiffel-* skills).
Potential missing bits:
Test-by-consumer-use and not just the designer (me + Claude).
Some "Getting Started" tutorials for a stranger approaching from zero.
Any external users (that I know of - perhaps a few here in the group like Chris Tillman).
Documentation of friction points encountered by non-experts.
A concrete example from last night illustrates your point precisely. I asked the AI to build eiffel_graph_gen.exe—a tool to generate documentation graphs for each Simple Eiffel library. The AI produced code that compiled, had contracts, and appeared complete. But when run, it crashed on two issues:
A directory creation routine that doesn't handle nested paths.
A precondition violation when the ECF parser encounters duplicate library references.
These are exactly the kinds of bugs that a consumer would hit immediately, but the designer (AI or human) missed because they weren't exercising the actual consumer path (yet — I ultimately did but that took time). You wrote: "what works according to the designer does not always work for the consumer at the end of the line." This is demonstrably true in my own work with Claude. But I cannot force or coerce people into using what has been produced. The best I can do is either better testing towards the intended purpose and goal of the library (e.g. simple_graphviz --> graphs/charts/et al) coupled with integration where one Simple Eiffel lib consumes another. There is a third option which is to work with the AI to develop real-world-ish MOCK APPS that consume the libraries towards their intended purpose, but even that is a swag (albeit it can be a good swag depending on the mock). In the abscense of real-world consumers and projects, I am not sure what more I can do.
Given what I have just written, I am not sure what the "concrete next step(s)" look like, other than pressing some organization to take up the work to build out their real-world project. That's where sales people come in. I am just a developer-cheerleader doing my best to lend-a-hand. :-)
I would welcome any specific observations when you have time to look more closely. A skeptic and devil's advocate is exactly what this effort needs.
Respectfully,
Larry
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/226001dc8bf2%24e61255a0%24b23700e0%24%40inf.ethz.ch.
Regarding the perceived lack of specification: I’d like to offer a bit of pushback. The Simple Eiffel (SE) libraries were not created in a vacuum or by whim; they are anchored by a rigorous, multi-layered development process.
First, the SE libs are designed to streamline the ISE and Gobo ecosystems. By identifying 80% use-cases and wrapping complex boilerplate in modern, US-programmer semantic framing, I’ve created higher-level APIs that attempt to simplify development. Leveraging AI for these human-language mapping tasks has been a perfect marriage of technology and intent. Since SE is built upon ISE and Gobo, it inherently inherits their real-world specifications and proven utility.
Second, much of the SE ecosystem is informed by "deep-research" into successful stacks like Python, Rust, and Go. The AI was instructed to "strip to the studs" these competitor libraries to understand their core architecture. If the original library is a relief carving, the SE version is a precision "charcoal rubbing"—different in medium, but pushing towards being identical in structural integrity.
Third, we went beyond mere imitation by researching the underlying RFCs and industry standards. This ensures the libraries are anchored in global protocols, not just existing codebases or designer knowledge-base (or lack thereof).
Fourth, I directed the AI to catalog the specific "pain points" and complaints of developers using those non-Eiffel libraries. The SE plan explicitly bakes in solutions to these issues, resulting in APIs that assist the developer rather than fighting them through the frictions they themselves express anxiety over.
Finally, the AI was tasked with innovation—finding non-standard applications for these technologies and solving problems within and beyond the traditional problem domains from which they emerged. This is a pronounced strength of using AI as a dev-partner.
While this is a lengthy explanation, I want to demonstrate that SE Libs are not being created "willy-nilly." They are grounded in real-world data and cross-platform research. My next steps ought to involve deeper integration between libs and building "mock apps" to prove their efficacy. The use of
simple_graphvizto document SE Libs is a primary example of our shared "dog-fooding" philosophy—a practice that has served ISE well for decades.
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/226001dc8bf2%24e61255a0%24b23700e0%24%40inf.ethz.ch.
--
You received this message because you are subscribed to the Google Groups "Eiffel Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to eiffel-users...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/d8048a2b-e075-4cff-bc82-69d3a29a6ba3%40gmail.com.
--
You received this message because you are subscribed to the Google Groups "Eiffel Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to eiffel-users...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/e7e00bc9-bc84-492c-80bb-29039d8aae5c%40gmail.com.
To reformat this for a Google Group comment, I have cleaned up the layout to ensure it remains readable across different screen sizes and email clients (which often struggle with complex ASCII tables). I’ve integrated your architectural defense from the previous message to provide the "why" behind these "what" metrics.
Lines Added: 1,070
New Classes: 2 (AUDIO_PLAYER, AUDIO_RECORDER)
Features Beyond Spec: 35
Drift Status: POSITIVE (Exceeded initial research specifications)
What was delivered:
High-Level API (80/20 Use Case):
audio.play ("music.wav") — One-liner playback.
audio.record ("output.wav", 5.0) — One-liner recording.
Granular Volume & Peak Control:
dev.set_volume (0.75) — Normalized 0.0–1.0 control.
dev.mute / dev.unmute
level := dev.peak_level — Built-in VU meter support.
Asynchronous Streaming & Callbacks:
player.set_on_finished (agent on_done)
recorder.set_on_data_available (agent process_audio)
Recent Commits:
b9c0a9b feat: complete audio implementation per research/specs (1,070 lines)
0753add docs: updated drift analysis - POSITIVE drift
Addressing "Lack of Specification":
I’ve heard the feedback regarding a perceived lack of specification. I want to clarify that simple_audio (and the wider Simple Eiffel ecosystem) is anchored in reality via three vectors:
ISE/Gobo Heritage: We simplify existing robust libs, inheriting their real-world application.
Indirect Specification Inheritance: By "stripping to the studs" competitor libraries and underlying RFCs, we inherit proven architectural integrity.
Pain-Point Research: We explicitly baked in solutions to common developer complaints found in other tech-stacks to ensure our APIs help the dev rather than fight them.
All research vision items from 7S-07-RECOMMENDATION.md are now implemented. The library compiles successfully with full DbC contracts and SCOOP compatibility.
Hi!
To combine efficiency of presenting content (making it easy to understand it) with esthetics (making it look good) is non-trivial for sure. User interfaces are a good example: Lacking essential functions is just as bad as overloading it with e.g. menu items.
For a universal tool like graphviz such rules can be quite challenging, because if they make one scenario look good, will the same rules make all scenarios look good?
Ulrich
23.01.2026 19:27:48 Liberty Lover <rix....@gmail.com>:
> I find graphviz to be a very helpful tool as well. Again, the issue is: What is being communicated -vs- what is the need? Does the graph or chart fill that need and how? These are both human and AI issues as AI now has some capacity to decipher images towards purpose. It's not as good as a human, but it is capable of quite a bit. In this case, I first pointed out to Claude that the charts had problems. I didn't say what the problem was. I simply complained that the chart was unreadable. I let Claude figure out why and it did. Perfectly. Getting the chart/graph cleaned up to a state of okay-readability was a multi-step challenge, where I had to repeatedly complain and point out what I saw as "wrong" and then Claude started grooving-in and finally got the graphs to at least a mostly usable state. However, there are still questions to ask and refinements to make. For the moment, it is good enough.
>
> On Fri, Jan 23, 2026 at 12:41 PM Ulrich Windl <u202...@gmail.com> wrote:
>> Hi!
>>
>> Some years ago when I needed to debug my implementation of AVL trees, I used graphviz to draw the tree. Not BON, but really helpful and easier to grasp than hundreds of lines of debug output.
>>
>> Ulrich
>>
>> 23.01.2026 16:25:39 Liberty Lover <rix....@gmail.com>:
>>
>>> The simple_graphviz was inspired by your post asking about BON.
>>
>> --
>> You received this message because you are subscribed to the Google Groups "Eiffel Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to eiffel-users...@googlegroups.com[eiffel-users%2Bunsu...@googlegroups.com].
>> To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/e7e00bc9-bc84-492c-80bb-29039d8aae5c%40gmail.com.
>
> --
> You received this message because you are subscribed to the Google Groups "Eiffel Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to eiffel-users...@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/CA%2B3qnjezkkQwuhvGBgtmK1Utb%3DRdnQo5fQo9XziO%3DDmPZ9zouA%40mail.gmail.com[https://groups.google.com/d/msgid/eiffel-users/CA%2B3qnjezkkQwuhvGBgtmK1Utb%3DRdnQo5fQo9XziO%3DDmPZ9zouA%40mail.gmail.com?utm_medium=email&utm_source=footer].
--
You received this message because you are subscribed to the Google Groups "Eiffel Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to eiffel-users...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/eiffel-users/b233b997-872c-4b5d-afb7-2e3939ecdc6f%40gmail.com.
This report documents the evolution of the simple_chart library from a basic ASCII utility into a robust, multi-format visualization suite. By leveraging the simple_* ecosystem, the library now delivers high-resolution charts across text, vector, raster, and PDF formats.
The test suite validates the system through 46 automated tests with a 100% pass rate.
13 Unit Tests: Validating core logic and component instantiation.
22 Visual Text Tests: Ensuring proper Unicode/UTF-8 rendering for Sparklines and Braille charts.
5 SVG Image Tests: Validating pure XML vector graphics generation.
4 PNG Image Tests: Testing raster graphics output via the Cairo engine.
2 PDF Tests: Confirming multi-page report generation.
Following a drift analysis, several missing components were implemented to align the library with its research vision, expanding the codebase from 400 lines to approximately 2,800 lines.
LINE_CHART_RENDERER: Uses braille-based rendering for high-resolution time series and trend lines.
HISTOGRAM_RENDERER: Supports frequency distributions with configurable bins.
BRAILLE_CANVAS: Implements 2x4 dot matrix rendering (U+2800-U+28FF) for high-density terminal graphics.
Multi-Format Renderers: New SVG_CHART_RENDERER (pure XML) and CAIRO_CHART_RENDERER (PNG via simple_cairo) enable professional-grade exports.
The implementation utilizes existing ecosystem strengths to provide complex features with minimal "glue" code:
simple_pdf: Configured to use Edge Headless (pdf.use_chrome), ensuring PDF generation works on Windows 10/11 without external installations.
simple_file & simple_encoding: Resolved a double-encoding bug by prepending a Unicode BOM (U+FEFF) to STRING_32 data, allowing the library to handle UTF-8 natively.
simple_json: Added a JSON_DATA_LOADER to support modern data interchange.
The TEST_DATA_GENERATOR class provides reproducible datasets for verification:
Financial: 30 and 90-day simulated stock price volatility.
Scientific: Height vs. Weight correlations and Normal Distributions for exam scores.
System Metrics: High-resolution metrics for CPU spikes, memory GC drops, and network throughput.
The suite produces 33 verifiable files in testing/output/:
Text Reports: Comprehensive reports including UTF-8 Sparklines like ▂▃▁█.
Images: Vector chart_line_stock.svg and raster chart_bar_sales.png (800x500 anti-aliased).
Documents: Multi-page chart_report.pdf containing a full dashboard of all chart types.
To run the suite, the project must be linked against: simple_csv, simple_file, simple_json, simple_pdf, simple_cairo, simple_graphviz, and simple_encoding.