Skip to content
CAI
Software that uses CAICheck a score

Adaptech/les

59.4

Adequate · 21 September 2026

3.1k

lines of production code

Go

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Add EML compliance test suite for user registration and validation

Added a new compliance test suite for the Event Markup Language (EML) specification, located in the cmd/compliance-test directory. This includes a Go-based test runner (main.go) and associated YAML definitions that verify the behavior of a generated API, specifically testing user registration, validation, and deletion workflows. The test suite also includes a reference implementation for EMD (Event Markdown) to ensure compatibility with the EML specification.

cmd/compliance-test · high confidence

Add TODO List sample with event sourcing schema and eventstorming

A new 'TODO List' sample has been added to the repository, providing a complete event-sourcing example. This includes an 'Eventsourcing.eml.yaml' file that defines the domain model (User, Todo), commands (Register, AddTODOListItem, MarkComplete, DeleteItem), events, and readmodels (UserLookup, TODOList). Additionally, an 'Eventstorming.emd' file is included to illustrate the event storming process for the TODO list feature.

samples/todolist · high confidence

Added shopping cart sample with event-sourcing model

A new 'Shopping Cart' sample was added to the codebase, providing a reference implementation for an online ordering system. This includes a generated event-sourcing model (.generated.eventsourcing.eml.yaml) defining streams for Orders, Payments, and Inventory, alongside an event-storming diagram (Eventstorming.emd) and a README explaining the example.

samples/shopping · high confidence

Automated release and installation instructions generation

The release tooling now includes a Makefile and associated shell scripts to automate the build and publishing process. Users can generate installation instructions for Linux, macOS, and Windows via the new \make-installation-instructions.sh\ script, and the \make github-release\ target automates uploading the compiled \les\ and \les-node\ binaries to GitHub releases for each platform.

tools · high confidence

Introduce les-viz tool for generating GraphViz diagrams from Event Markdown

The les-viz command-line utility is introduced to convert Event Markdown (.emd) files into GraphViz digraphs, enabling users to visualize event storming diagrams. The tool includes a Dockerfile for containerized execution, a .gitignore configuration, and Go source files (main.go, emdToGraphVizDigraph.go, fileio.go) that handle file reading and GraphViz output generation. The release is tagged as version 0.10.7-alpha.

cmd/les-viz · high confidence

Behavioural changes

9 commits (3 fixes) modifying releases

A change to existing behaviour in releases — 9 commits (3 fixs), 21 files.

releases · medium confidence · unverified

Corrected casing for stream and aggregate IDs in generated EML

The conversion logic for generating EML (Event Model) now uses a new helper function to produce consistent camelCase IDs (e.g., 'timesheetHoursId') instead of the previous all-lowercase format. This change ensures that stream names and aggregate IDs in the output match the expected casing, and the associated tests have been updated to reflect these corrected identifiers.

pkg/convert · medium confidence

EML validation rules for commands, events, and read models

The EML (Event Modeling Language) validation logic has been expanded to enforce stricter structural and behavioral constraints. Commands now require valid preconditions (MustHaveHappened, MustNotHaveHappened) that must reference existing events in the stream. Events must be the result of a command (postcondition) and must include an aggregate/stream ID property. Read models are now validated to ensure their keys correspond to actual event properties. These changes introduce new validation errors like UnknownCommandPreconditionType, EventMustBeCommandPostcondition, and ReadModelKeyDoesNotExist.

pkg/eml · medium confidence

Improved parsing of EMD properties with trailing commas and spaces

The EMD parser now tolerates trailing commas and extra whitespace in property lists for commands, events, and documents. This prevents validation errors when users enter properties like 'userId, ' or 'userId, ' with trailing commas or spaces. Additionally, the parser now supports commands with parameters specified without the '//' separator (e.g., 'command -\> param1, param2'), making the input format more user-friendly. A new file, graphViz.go, was added to handle the conversion of EMD data into GraphViz diagrams, supporting the visualization of event storming models.

pkg/emd · high confidence

Node.js code generator: Adds event counting and command preconditions

The Node.js code generator now tracks event occurrences in the generated aggregate classes, enabling new command preconditions (MustHaveHappened, MustNotHaveHappened) that validate event history before execution. Additionally, generated controllers now use try/catch blocks for better error handling, and read model handlers are refactored to use a new createOrUpdate pattern that handles both creation and updates.

pkg/eml/generate · high confidence

Refined user domain model and file naming

The user sample has been refocused from a generic 'Subscriptions' context to a specific 'User Registration' domain. The underlying event-sourcing schema (Eventsourcing.eml.yaml) now defines user-centric commands (RegisterUser, MarkAsAuthenticated, DeleteUser) and events (UserRegistered, UserAuthenticated, UserDeleted) with appropriate preconditions. Additionally, the default EML and EMD file names have been updated to be more descriptive, and the .gitignore configuration has been adjusted to reflect the new file naming convention.

samples/users · medium confidence

Renamed EventStorming sample and updated generated file patterns

The EventStorming sample file has been renamed from Eventmarkdown.emd to Eventstorming.emd to better reflect its contents, and a typo in the event name has been corrected. Additionally, the .gitignore file has been updated to ignore the newly named .generated.eventsourcing.eml.yaml file.

samples/veggiesgalore · high confidence

Renamed and restructured email sample files to reflect domain concepts

The email sample files have been renamed to better reflect their content: \Eventmarkdown.emd\ is now \Eventstorming.emd\, and \Emlfile.yaml\ is now \Eventstorming.eml.yaml\. The YAML file was also restructured to move the User stream and its associated commands (Register, LogIn) and events (UserRegistered, UserAuthenticated) from the bottom of the file to the top, aligning with the Eventstorming domain model. Additionally, the \.gitignore\ file was updated to ignore \.generated.eventsourcing.eml.yaml\ instead of \.generated.eml.yaml\.

samples/email · medium confidence

Renamed and updated Eventstorming sample files to reflect domain terminology

The Eventstorming sample files have been renamed from 'Eventmarkdown.emd' and 'Emlfile.yaml' to 'Eventstorming.emd' and 'Eventstorming.eml.yaml' respectively, aligning the file names with the content. The underlying domain model has been updated to use 'Administrator' instead of 'Administer' (e.g., 'AdministratorRegistered' event, 'Administrator' stream), and the 'Administer' stream has been renamed to 'Administrator'. Additionally, the .gitignore file has been updated to ignore the new generated file '.generated.eventsourcing.eml.yaml' instead of the old '.generated.eml.yaml'.

samples/consentaur · high confidence

Renamed event files and added preconditions to inventory commands

The sample files in the helloworld and inventory directories have been renamed to better reflect their content (e.g., Eventmarkdown.emd to Eventstorming.emd). In the inventory sample's Eventstorming.eml.yaml, a new 'RemoveItemFromInventory' command has been added alongside existing commands, and 'Preconditions' fields have been introduced for various commands. Additionally, the .gitignore files have been updated to exclude the new .generated.eventsourcing.eml.yaml files.

samples/helloworld · medium confidence

Renamed subscription sample and updated default file names

The subscription sample file has been renamed from Eventmarkdown.emd to Eventstorming.emd. Additionally, the default file names for EML and EMD outputs have been updated to better reflect their contents, and the .gitignore configuration has been adjusted to exclude the new .generated.eventsourcing.eml.yaml file.

samples/subscriptions · medium confidence

Timesheets sample refactored and standardized

The timesheets sample has been refactored to improve clarity and compliance. The generated EML file was removed, and the primary EML definition was renamed from Emlfile.yaml to Eventsourcing.eml.yaml, with all commands now explicitly declaring empty Preconditions. The event subscription order in the Timesheets read model was adjusted so that TimesheetEntryLogged is subscribed to before the other events. Additionally, the Eventmarkdown.emd file was renamed to Eventstorming.emd, and the .gitignore was updated to exclude the new generated file.

samples/timesheets · high confidence

Updated default file naming and improved validation logic

The default output file names for EMD and EML conversions have been changed to be more descriptive (e.g., 'Eventstorming.emd' instead of 'Eventmarkdown.emd'). The validation logic has been refactored: the \validateFile\ function was renamed to \isFileValidEmdOrEml\ and now returns a boolean to indicate validity, allowing the \validate\ command to exit with an error code if validation fails. Additionally, the \convert\ command now generates output files with a \.eml.yaml\ extension based on the input file name.

cmd/les · high confidence

les-node updates template source and default input file

The les-node command now fetches the latest template release from GitHub instead of a static Azure URL, and the default EML input file has been renamed from 'Emlfile.yaml' to 'Eventstorming.eml.yaml'.

cmd/les-node · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 55 → 59 (+4.7)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 82 → 87 (+5.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 41 → 44 (+3.0)
  • Readiness 46 → 58 (+12.5)
  • Security 94 → 86 (-7.9)

Resolved (15)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Duplicated block (11 lines × 2) (pkg/eml/validateCommands.go)
  • Duplicated block (13 lines × 2) (cmd/les-node/getDirectories.go)
  • Duplicated block (13 lines × 2) (cmd/les/checkIfFileContainsValidEml.go)
  • Duplicated block (13 lines × 3) (cmd/les-node/fileio.go)
  • Duplicated block (21 lines × 2) (cmd/les/checkIfFileContainsValidEml.go)
  • Duplicated block (9 lines × 2) (pkg/eml/validateCommands.go)
  • Medium IaC: DS-0001 (cmd/les-node/Dockerfile)
  • Medium IaC: DS-0001 (cmd/les-viz/Dockerfile)
  • Medium IaC: DS-0001 (cmd/les/Dockerfile)
  • No exposed public API
  • Scanner failed to run — not a clean result
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (30)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (11 lines × 3) (cmd/les-viz/fileio.go)
  • Duplicated block (12 lines × 2) (pkg/eml/validateCommands.go)
  • Duplicated block (12 lines × 3) (cmd/les-node/fileio.go)
  • Duplicated block (13 lines × 3) (cmd/les-node/fileio.go)
  • Duplicated block (16 lines × 2) (cmd/les-node/checkIfFileContainsValidEml.go)
  • Duplicated block (18 lines × 2) (cmd/les-node/getDirectories.go)
  • Duplicated block (35 lines × 2) (cmd/les-node/checkIfFileContainsValidEml.go)
  • Duplicated block (7 lines × 3) (cmd/les-node/fileio.go)
  • Duplicated block (8 lines × 2) (pkg/convert/emdToEml.go)
  • Duplicated block (8 lines × 2) (pkg/eml/generate/nodejs/commandjs.go)
  • Duplicated block (8 lines × 3) (pkg/eml/generate/nodejs/commandjs.go)
  • Duplicated block (8–9 lines × 2) (pkg/eml/validateCommands.go)
  • Duplicated block (9 lines × 2) (pkg/convert/emdToEml.go)
  • Duplicated block (9 lines × 2) (pkg/emd/parseDocument.go)
  • High: security finding (details withheld)
  • Medium IaC: DS-0001 (cmd/les-node/Dockerfile)
  • Medium IaC: DS-0001 (cmd/les-node/Dockerfile)
  • Medium IaC: DS-0001 (cmd/les-viz/Dockerfile)
  • …and 10 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Adaptech/les was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit d05ecc4fae65fa96ae297384f24b837154dbdfc1 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.