Skip to content
Merged

Dev #887

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.24.0"
".": "0.25.0"
}
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ACES SDL Agent Rules
# RAES SDL Agent Rules

Use the repo policy tooling before and after implementation work.

Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
PRs do **not** edit this file directly. release-please maintains it from the
Conventional Commit history on `main` (#684).

## [0.25.0](https://github.com/RAESystem/rae/compare/v0.24.0...v0.25.0) (2026-07-25)


### Features

* add ASR-515 validation-basis disclosure contract ([#871](https://github.com/RAESystem/rae/issues/871)) ([1cd7362](https://github.com/RAESystem/rae/commit/1cd73624c2a2a694e428f12969bc71f0899d29d3))
* **contracts:** add participant control occurrence contracts ([#868](https://github.com/RAESystem/rae/issues/868)) ([9122de5](https://github.com/RAESystem/rae/commit/9122de5be5a961c6954a5ec501748f1a5f486c57))


### Bug Fixes

* **release:** publish package as raes ([#879](https://github.com/RAESystem/rae/issues/879)) ([dad6692](https://github.com/RAESystem/rae/commit/dad6692322eccede19d81fe424ff61d20b1a253b))

## [0.24.0](https://github.com/RAESystem/rae/compare/v0.23.1...v0.24.0) (2026-07-25)


Expand Down
57 changes: 40 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,27 @@
# Reproducible Agentic Environments System

Reproducible Agentic Environments System (RAES) is a backend-agnostic scenario
description language, Python reference implementation, and contract surface
for cyber range scenarios and experiments.
Reproducible Agentic Environments System (RAES) is a system for describing,
realizing, controlling, evaluating, and reproducing agentic environments. An
agentic environment is a declared and realized setting in which participants
receive observations, take actions, interact with resources or other
participants, and are evaluated under stated controls. Participants can
include software agents, policies, scripts, and human-control proxies.

RAES supports a bounded reproduction attempt by connecting authored intent,
deterministic or governed variation, realization inputs, participant behavior,
observations, apparatus identity, provenance, evidence, replay boundaries, and
conformance results. It does not guarantee deterministic runtime behavior,
equal outcomes, exact replay, scientific validity, or reproducibility.

Cyber, AI security, AI safety, testing, research, and evaluation are
non-exhaustive application areas. The general model can support additional
domains through domain-specific examples, controlled vocabularies, semantic
profiles, reusable assets, backend profiles, and evidence requirements.

The current repository materializes RAES through its Scenario Description
Language (SDL), Python reference implementation, published contracts, examples,
and assurance material. RAES names the overall system; RAES SDL is the authored
scenario language within it.

The repository separates authored scenario meaning from processors, backends,
participant implementations, runtime state, and archived evidence. In the
Expand All @@ -12,12 +31,13 @@ backend contracts without binding the authored scenario to one cloud, range
implementation, or execution harness.

This is an academic and engineering project. The repository is intended to be
read, tested, and used as reference implementation code, not treated as a product
surface.
read, tested, and used as reference implementation code, not treated as a
managed service.

The repository is not a managed cyber range and does not include a production
backend. Backend contracts, stubs, conformance checks, and examples are present;
real deployment backends remain separate implementations.
The repository is not a managed environment service and does not include a
production backend. Backend contracts, stubs, conformance checks, and examples
are present; real deployment backends remain separate implementations. Cyber is
the strongest current example and lineage base, not the boundary of the core.

A worked example of RAES SDL driving a concrete range is
[APTL (Advanced Purple Team Lab)](https://github.com/Brad-Edwards/aptl), a
Expand All @@ -26,7 +46,7 @@ realizes the selected topology on a Docker Compose backend.

## Contents

- [What RAES Describes](#what-raes-describes)
- [Agentic Environments And RAES SDL](#agentic-environments-and-raes-sdl)
- [Getting Started](#getting-started)
- [Using the Python Reference Implementation](#using-the-python-reference-implementation)
- [Repository Layout](#repository-layout)
Expand All @@ -39,12 +59,15 @@ realizes the selected topology on a Docker Compose backend.
- [License](#license)
- [Maintainer](#maintainer)

## What RAES Describes
## Agentic Environments And RAES SDL

An SDL file is a declarative scenario document. It can describe topology,
hosts, services, identities, content, relationships, agents, objectives,
workflows, variables, and evaluation material without directly describing a
specific backend's infrastructure primitives.
RAES SDL records authored scenario and experiment intent. An SDL file can
describe topology, hosts, services, identities, content, relationships, agents,
objectives, workflows, variables, and evaluation material without directly
describing a specific backend's infrastructure primitives. Processors,
backends, participant implementations, and runtime choices turn that authored
scenario into a realized environment; the realization is not identical to the
SDL document.

```yaml
name: hospital-ransomware-surgery-day
Expand Down Expand Up @@ -99,7 +122,7 @@ Parse and validate a scenario from Python:
```python
from pathlib import Path

from aces_sdl import parse_sdl_file
from raes import parse_sdl_file

scenario = parse_sdl_file(
Path("../../examples/scenarios/hospital-ransomware-surgery-day.sdl.yaml")
Expand Down Expand Up @@ -234,12 +257,12 @@ must mint a new schema version as described in

## Citation

If you use RAES SDL in academic work, cite the repository:
If you use RAES in academic work, cite the system:

```bibtex
@software{raes,
author = {Edwards, Brad},
title = {RAES SDL: Backend-Agnostic Scenario Description Language for Cyber Range Experiments},
title = {RAES: Reproducible Agentic Environments System},
year = {2026},
license = {MIT},
url = {https://github.com/RAESystem/rae}
Expand Down
4 changes: 2 additions & 2 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Z3 Theorem Prover

ACES uses the `z3-solver` Python package, version 4.16.0.0, for the governed
RAES uses the `z3-solver` Python package, version 4.16.0.0, for the governed
finite-domain scenario satisfiability profile. Z3 is distributed under the MIT
License.

Expand All @@ -28,7 +28,7 @@ SOFTWARE.

## Open Cyber Range SDL Parser

Portions of the ACES SDL model structure were translated and adapted from Open
Portions of the RAES SDL model structure were translated and adapted from Open
Cyber Range SDL Parser v0.21.2, revision
`fe83e8281fc4b954967fbaa5a0d099007ddcb06c`.

Expand Down
4 changes: 2 additions & 2 deletions contracts/concept-authority/behavioral-relations-v1.json
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@
"test_status": "tested",
"proof_status": "deliberately-unproved",
"evidence_refs": [
"implementations/python/packages/aces_sdl/validator/"
"implementations/python/packages/raes/validator/"
]
},
"source_refs": [
Expand Down Expand Up @@ -703,7 +703,7 @@
"test_status": "tested",
"proof_status": "not-applicable",
"evidence_refs": [
"implementations/python/packages/aces_sdl/canonical.py"
"implementations/python/packages/raes/canonical.py"
]
},
"source_refs": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,28 @@
{
"concern_id": "source-profile-validity", "status": "implemented", "limitation": "Admission proves the governed source profile, not scientific adequacy.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/_yaml_loader.py", "claim": "Safe YAML ingress and source-profile enforcement."},
{"kind": "implementation", "path": "implementations/python/packages/raes/_yaml_loader.py", "claim": "Safe YAML ingress and source-profile enforcement."},
{"kind": "test", "path": "implementations/python/tests/test_sdl_parser.py", "claim": "Source-profile and parser rejection coverage."}
]
},
{
"concern_id": "closed-structural-model", "status": "implemented", "limitation": "Closed structure permits a name-only fragment and is not a completeness claim.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/scenario.py", "claim": "Closed Scenario model."},
{"kind": "implementation", "path": "implementations/python/packages/raes/scenario.py", "claim": "Closed Scenario model."},
{"kind": "test", "path": "implementations/python/tests/test_sdl_models.py", "claim": "Closed-model validation coverage."}
]
},
{
"concern_id": "semantic-reference-integrity", "status": "implemented", "limitation": "Semantic admission covers declared SDL references, not backend realization.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/validator/_core.py", "claim": "Collect-all semantic validation."},
{"kind": "implementation", "path": "implementations/python/packages/raes/validator/_core.py", "claim": "Collect-all semantic validation."},
{"kind": "test", "path": "implementations/python/tests/test_sdl_validator.py", "claim": "Cross-section semantic validation coverage."}
]
},
{
"concern_id": "topology-and-resource-intent", "status": "implemented", "limitation": "The SDL expresses intent; realizability remains apparatus and backend relative.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/scenario.py", "claim": "Typed scenario topology and resource surfaces."},
{"kind": "implementation", "path": "implementations/python/packages/raes/scenario.py", "claim": "Typed scenario topology and resource surfaces."},
{"kind": "test", "path": "implementations/python/tests/test_sdl_realworld.py", "claim": "Real-world scenario authoring coverage."}
]
},
Expand All @@ -39,12 +39,12 @@
},
{
"concern_id": "scoped-specificity-open-world-intent", "status": "partial", "limitation": "Realization envelopes and explicitness semantics exist, but scenario-scoped default and most-specific override authority remain open.", "issue_refs": ["#539"],
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/explicitness.py", "claim": "Current explicitness analysis."}]
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/raes/explicitness.py", "claim": "Current explicitness analysis."}]
},
{
"concern_id": "parameter-typing", "status": "implemented", "limitation": "SDL variables instantiate scenario values; they do not define an experimental factor design.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/instantiate.py", "claim": "Typed variable binding and instantiation."},
{"kind": "implementation", "path": "implementations/python/packages/raes/instantiate.py", "claim": "Typed variable binding and instantiation."},
{"kind": "test", "path": "implementations/python/tests/test_sdl_phase_contracts.py", "claim": "Instantiation and closed-phase coverage."}
]
},
Expand Down Expand Up @@ -77,28 +77,28 @@
{
"concern_id": "propositions", "status": "implemented", "limitation": "The model defines claims and truth domains; it does not guarantee a backend can decide them.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/propositions.py", "claim": "Typed proposition model."},
{"kind": "implementation", "path": "implementations/python/packages/raes/propositions.py", "claim": "Typed proposition model."},
{"kind": "test", "path": "implementations/python/tests/test_proposition_semantics.py", "claim": "Predicate, subject, and truth-composition coverage."}
]
},
{
"concern_id": "assertions", "status": "implemented", "limitation": "Assertion composition is not evaluator lifecycle success or graded scoring.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/propositions.py", "claim": "Role-constrained assertion model."},
{"kind": "implementation", "path": "implementations/python/packages/raes/propositions.py", "claim": "Role-constrained assertion model."},
{"kind": "test", "path": "implementations/python/tests/test_truth_result_contracts.py", "claim": "Assertion truth-result integrity coverage."}
]
},
{
"concern_id": "condition-probe-binding", "status": "implemented", "limitation": "Conditions are probe realizations and cannot substitute command success for truth.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/conditions.py", "claim": "Explicit condition-to-proposition binding."},
{"kind": "implementation", "path": "implementations/python/packages/raes/conditions.py", "claim": "Explicit condition-to-proposition binding."},
{"kind": "test", "path": "implementations/python/tests/test_proposition_capabilities.py", "claim": "Backend binding capability and rejection coverage."}
]
},
{
"concern_id": "workflow-compensation", "status": "implemented", "limitation": "Compensation is bounded workflow behavior, not universal resource rollback.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/orchestration.py", "claim": "Workflow compensation surface."},
{"kind": "implementation", "path": "implementations/python/packages/raes/orchestration.py", "claim": "Workflow compensation surface."},
{"kind": "test", "path": "implementations/python/tests/test_fm2_semantics.py", "claim": "Workflow semantic invariants."}
]
},
Expand All @@ -123,7 +123,7 @@
},
{
"concern_id": "deadlines-and-windows", "status": "partial", "limitation": "Objective windows exist, but a complete time-domain-bound deadline surface is not published.", "issue_refs": ["#285", "#288"],
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/semantics/objectives.py", "claim": "Current objective-window analysis."}]
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/raes/semantics/objectives.py", "claim": "Current objective-window analysis."}]
},
{
"concern_id": "pacing-and-synchronization", "status": "partial", "limitation": "Participant time-management records exist; general advancement and synchronization semantics remain open.", "issue_refs": ["#284", "#287", "#290"],
Expand All @@ -132,13 +132,13 @@
{
"concern_id": "participant-declaration", "status": "implemented", "limitation": "Participant declaration does not prove that an implementation respects every authority or observation boundary.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/agents.py", "claim": "Participant identity, scope, and boundary references."},
{"kind": "implementation", "path": "implementations/python/packages/raes/agents.py", "claim": "Participant identity, scope, and boundary references."},
{"kind": "test", "path": "implementations/python/tests/test_sem_208_participant_behavior.py", "claim": "Participant semantic validation coverage."}
]
},
{
"concern_id": "participant-action-observation", "status": "partial", "limitation": "Action contracts and observation boundaries exist, but participant-relative information-flow admission is not complete.", "issue_refs": ["#747"],
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/participant_behavior.py", "claim": "Current action-contract and observation-boundary models."}]
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/raes/participant_behavior.py", "claim": "Current action-contract and observation-boundary models."}]
},
{
"concern_id": "participant-episode-reset", "status": "partial", "limitation": "Runtime episode lifecycle is implemented, while complete authored episode/reset semantics and conformance remain open.", "issue_refs": ["#305", "#307", "#311", "#314"],
Expand Down Expand Up @@ -172,7 +172,7 @@
},
{
"concern_id": "credential-intent", "status": "partial", "limitation": "Account and runtime-value posture exists, but authored credential-bearing setup remains unresolved.", "issue_refs": ["#673", "#708"],
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/accounts.py", "claim": "Current account and credential-posture authoring."}]
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/raes/accounts.py", "claim": "Current account and credential-posture authoring."}]
},
{
"concern_id": "credential-materialization", "status": "missing", "limitation": "No complete portable binding materializes authored credential-bearing accounts while preserving secret boundaries.", "issue_refs": ["#708"], "evidence": []
Expand All @@ -191,7 +191,7 @@
{
"concern_id": "vulnerability-inventory", "status": "implemented", "limitation": "A declared vulnerability is not proof of reachability, exploitability, or observation.",
"evidence": [
{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/vulnerabilities.py", "claim": "Typed vulnerability inventory."},
{"kind": "implementation", "path": "implementations/python/packages/raes/vulnerabilities.py", "claim": "Typed vulnerability inventory."},
{"kind": "test", "path": "implementations/python/tests/test_sdl_models.py", "claim": "Vulnerability model validation coverage."}
]
},
Expand All @@ -201,11 +201,11 @@
},
{
"concern_id": "flexible-step-tooling", "status": "partial", "limitation": "Scripts and workflows exist, but portable tool selection and affordance binding remain incomplete.", "issue_refs": ["#653"],
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/orchestration.py", "claim": "Current script and workflow step surfaces."}]
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/raes/orchestration.py", "claim": "Current script and workflow step surfaces."}]
},
{
"concern_id": "portable-behavior-contracts", "status": "partial", "limitation": "Behavior specifications and action contracts exist, but portable participant affordance and realization coverage is incomplete.", "issue_refs": ["#653"],
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/aces_sdl/participant_behavior_specification.py", "claim": "Current behavior specification surface."}]
"evidence": [{"kind": "implementation", "path": "implementations/python/packages/raes/participant_behavior_specification.py", "claim": "Current behavior specification surface."}]
},
{
"concern_id": "behavioral-relation-taxonomy", "status": "implemented", "limitation": "The revisioned taxonomy, bindings, finite-evidence gate, and counterexamples are implemented; universal simulation, refinement, equivalence, bisimulation, epistemic, strategic, probabilistic, timed, and partial-order proofs remain deliberately unproved or future.", "issue_refs": [],
Expand Down
Loading
Loading