Skip to content
CAI
Software that uses CAICheck a score

AsyncFlow-Sim/AsyncFlow

68.9

Adequate · 22 September 2026

4.5k

lines of production code

Python

primary language

6

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Python-based simulation framework designed to model and analyze network conditions, specifically focusing on latency, throughput, and server metrics. It provides a builder API and YAML configuration to define topologies and inject events like network spikes and outages. The project includes comprehensive testing for simulation scenarios and developer tooling to ensure code quality and environment setup.

Features

Added developer setup and quality check scripts

Introduced new shell and PowerShell scripts to streamline the developer workflow. The \dev\_setup\ scripts automate the initial environment configuration, ensuring Python 3.12+, Poetry, and project dependencies are installed, and then execute linting (Ruff), type-checking (MyPy), and tests (pytest). Separate \quality\_check\ scripts provide a quick path to run only linting and type-checking, while \run\_tests\ and \run\_sys\_tests\ scripts offer targeted execution of unit and system tests with appropriate environment variables and coverage reporting.

scripts · high confidence

Added example scenarios and builder API for simulating network spikes and server outages

The AsyncFlow library now includes a Pythonic builder API (the \AsyncFlow\ class) and corresponding YAML configuration files that allow users to define simulation scenarios with injected events, such as network latency spikes and server outages. Example scripts in \examples/builder\_input/\ and \examples/yaml\_input/\ demonstrate how to construct topologies (single server, load-balanced two servers) and run simulations that include these event injections, producing plots of latency, throughput, and server metrics.

examples, src/asyncflow · high confidence

Behavioural changes

Added Windows Zone.Identifier metadata to README images

The project has added Zone.Identifier alternate data streams to the dashboard and server metrics PNG files in the readme\_img directory. These files contain \[ZoneTransfer\] metadata with ZoneId=3, which is a Windows-specific mechanism used to mark downloaded or copied files as potentially unsafe. This change ensures that these images carry the appropriate security warnings when opened on Windows systems.

_readme\img · high confidence

Test coverage

Added integration and system tests for simulation scenarios

Added comprehensive test coverage for the simulation engine, including integration tests for minimal, single-server, and load-balanced topologies, as well as system tests verifying event injection (network spikes, server outages) and load balancing behavior. The suite also includes tests for invalid payload validation and unit tests for the results analyzer.

tests · high confidence

Dependencies

Initial project setup with Python 3.12 and key simulation dependencies

The project is initialized with a \pyproject.toml\ and \poetry.lock\ file, establishing a Python 3.12 environment for the 'asyncflow-sim' package. This adds core dependencies including Pydantic, NumPy, SimPy, Matplotlib, and PyYAML, alongside development tools like Pytest, Mypy, and Ruff. The lockfile also pins specific versions for transitive dependencies such as \annotated-types\, \colorama\, \contourpy\, and \coverage\.

(dependencies) · 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 62 → 69 (+6.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 95 → 96 (+1.8)
  • Architecture 100 → 97 (-3.1)
  • Maturity 77 → 79 (+1.8)
  • Readiness 48 → 51 (+3.8)
  • Security 65 → 85 (+20.5)

Resolved (39)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (11 lines × 2) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (11 lines × 4) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (12 lines × 3) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (13 lines × 3) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (16 lines × 2) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (16 lines × 2) (examples/yaml_input/event_injections/heavy_single_server.py)
  • Duplicated block (16 lines × 3) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (21 lines × 2) (src/asyncflow/samplers/gaussian_poisson.py)
  • Duplicated block (24 lines × 2) (examples/builder_input/event_injection/single_server.py)
  • Duplicated block (24 lines × 3) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (8 lines × 2) (examples/yaml_input/single_server/single_server.py)
  • Duplicated block (9 lines × 2) (examples/yaml_input/load_balancer/two_servers.py)
  • Duplicated block (9 lines × 2) (src/asyncflow/metrics/analyzer.py)
  • High CVE: [GHSA redacted] (poetry.lock)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 19 more

New (47)

  • Dependency hygiene PARTLY measured — Python dependencies read, no exact pin to grade for currency
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (11 lines × 4) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (12 lines × 3) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (14–17 lines × 3) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (20 lines × 3) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (21 lines × 2) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (21–22 lines × 2) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (22–23 lines × 2) (src/asyncflow/samplers/gaussian_poisson.py)
  • Duplicated block (25–26 lines × 3) (examples/builder_input/event_injection/single_server.py)
  • Duplicated block (30 lines × 3) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (37 lines × 3) (examples/yaml_input/event_injections/heavy_single_server.py)
  • Duplicated block (39 lines × 2) (examples/builder_input/event_injection/single_server.py)
  • Duplicated block (41–43 lines × 2) (examples/builder_input/event_injection/lb_two_servers.py)
  • Duplicated block (5 lines × 4) (examples/yaml_input/event_injections/heavy_single_server.py)
  • Duplicated block (5 lines × 4) (examples/yaml_input/event_injections/heavy_single_server.py)
  • Duplicated block (6 lines × 4) (examples/yaml_input/event_injections/heavy_single_server.py)
  • Duplicated block (6 lines × 5) (src/asyncflow/metrics/analyzer.py)
  • Duplicated block (7 lines × 2) (examples/yaml_input/single_server/single_server.py)
  • …and 27 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

AsyncFlow-Sim/AsyncFlow 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 22 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 f47bc9392ce95aa9f2698b8decef81b1c5966eb5 — 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-821afab8930d.