Skip to content

ACES naming audit: 2020 live occurrences remain after the rename (full inventory) #908

Description

@Brad-Edwards

Method

Fresh clone of dev at c2000ad, 1724 tracked files, every file read and every
match bucketed so the totals reconcile exactly.

Matching uses a word-boundary–anchored pattern
((?<![A-Za-z0-9])(ACES|Aces|aces)([-_.][A-Za-z0-9]+)*) rather than a substring
search. This matters: a naive grep aces matches spaces, surfaces,
interfaces, namespaces, workspaces, traces, replaces, races, faces, places,
braces
— which is a plausible way earlier passes both over- and under-counted.

Total: 4840 occurrences across 760 files.

What is already done

Worth stating so this doesn't get re-litigated:

  • Every Python package under implementations/python/packages/ is raes_*.
  • The aces namespace package (implementations/python/src/aces/) is gone,
    along with the aces._compat / aces.core.sdl transitional shims.
  • Zero import aces… / from aces… import statements remain.
  • Only two string-form module references survive, and both are artifact names
    rather than imports (covered in §5).

The Python import rename is complete. What remains is contract, artifact, and
prose surface.

Reconciliation

Bucket Occurrences Files
1. Published contract (contracts/schemas, profiles, concept-authority, schema-publication) 488 115
2. Contract fixtures (contracts/fixtures) 250 106
3. Implementation code + tests 858 174
4. Specs (specs/) 72 23
5. Docs prose (docs/, excl. records) 55 16
6. Examples 53 20
7. Tools 139 21
8. Agent / CI config 87 17
9. Repo root 18 10
Live subtotal 2020 502
10. Historical records 2820 258
Total 4840 760

§1 — The published schema namespace is still aces.dev (highest impact)

Every $id in the repo is rooted at https://aces.dev/schemas. All 72 of
them. There are no exceptions.

72  "$id": "https://aces.dev/schemas/..."
36      .../schemas/semantic-invariants/...

This is the single largest item in the audit and the one with the widest blast
radius, because $id values are the identity of the published contract — any
consumer that resolves, caches, or pins a schema URL is bound to this namespace.

Decide explicitly whether aces.dev is being retired. If it is, the cutover
needs a version and probably a redirect; if it is not, that should be written
down, because right now it reads as an oversight rather than a decision.

§2 — Contract identifier strings

Identifier values in const / enum / title, i.e. matched literally by
consumers:

Identifier Occurrences Notes
aces-invariants 149 82 in published contract
aces-reference-processor 114 81 in fixtures
aces-semantic-invariants-v1 83 also a filename, see §4
aces-sdl-semantic 45
aces-semantic-profile 39
aces-variable-reference 35
aces-behavioral-relations 29
aces-sdl-instantiated-snapshot 15
aces-client-verified, aces-client-identity 30
aces-finite-domain-satisfiability-v1 19
aces-reusable-asset-trust-policy 8 consumed downstream by env-packs ADR 0010
aces-random-stream-v1, aces-exploit-path-analysis-v1, aces-plane, aces-validation, aces-document-phase, aces-realization-dimension, aces-structural-validation, aces-semantic-validation, aces-evidence-backed-validation, aces-trust, aces-inventory, aces-participant-semantics, aces-z3-finite-domain, aces-attack-graph, aces-exploit-path-{query,witness,invalid,unsupported}, aces-monotonic-attack-transition, aces-deterministic-attack-graph-search, aces-sdl-snapshot-attack-binding, aces-satisfiability-{witness,unsupported}, aces-unsatisfiable-core, aces-finite-domain-{constraints,theory}, aces-sdl-authoring-translation, aces-test remainder

contracts/schemas/exploit-path-analysis/exploit-path-analysis-evidence-v1.json
and contracts/schemas/satisfiability/scenario-satisfiability-evidence-v1.json
are the densest single files here.

§3 — Wire field names and model class names

JSON object keys — renaming these is a payload-breaking change, distinct
from the identifier strings above:

  • aces_boundariescontracts/schemas/provenance/sdl-lineage-ledger-v1.json
  • aces_native — same
  • aces_relative_to_source — same
  • aces_addresscontracts/schemas/exploit-path-analysis/…

Pydantic model names in
contracts/schemas/profiles/aces-semantic-invariants-v1.json:

  • AcesSemanticInvariantEntryModel
  • AcesSemanticInvariantInputModel
  • AcesSemanticInvariantProfileReferenceModel

§4 — Files and paths still named aces*

  • contracts/schemas/profiles/aces-semantic-invariants-v1.json
  • contracts/schema-publication/entries/aces-semantic-invariants-v1.json
  • docs/decisions/adrs/adr-012-shared-concept-authority-and-aces-extension-discipline.md
  • docs/research/specification-coverage/bundles/aces-standardized-specification-coverage-{8bf12ee,9347f64}-v1.json

The first two are published-contract paths, so renaming them is a contract move,
not a file move.

§5 — Runtime artifact names (user-visible, not tracked files)

These are names the tooling writes or reads at runtime, so they never show
up in a file listing and are easy to miss:

Artifact Where
aces.lock.json — module lockfile packages/raes/module_registry.py:37 (LOCKFILE_NAME)
aces-trust.yaml — trust policy file consumers author 15 refs
OCI container labels aces.workspace, aces.address packages/raes_reference_backend/drivers/oci.py:52
libvirt domain naming aces.libvirt.scenario* 15 refs, incl. aces.libvirt.scenario-evidence-run
aces-sdl-policy.out, aces-sdl-gc.out CI output artifacts

§6 — Runtime event topic namespace

The whole event vocabulary is still aces.*:

aces.participant_runtime.{lifecycle,outcome_report,observation,shared_state,joint_action}
aces.outcome.interpreted        aces.observation.emitted
aces.lifecycle.operation_state.completed
aces.operation_state.running    aces.shared_state.commit
aces.challenge                  aces.cross

§7 — Environment variables

  • ACES_REQUIREMENT_UID (21)
  • ACES_REAL_LIBVIRT_URI (9)
  • ACES_RELATIVE_TO_SOURCE (2)
  • ACES_NATIVE (2)

§8 — Code identifiers in implementation

aces_invariant* (81), aces_uuid (24), aces_revision (23), aces_level,
aces_semantic_invariant_annotations (12), plus 213 bare aces tokens in
docstrings and comments across 174 files. Densest: raes_contracts/contracts/schema_constraints.py
(39), raes_contracts/contracts/schema_invariants.py (24),
raes_backend_libvirt/guest_appliance.py (23), and the runtime test modules
(test_libvirt_backend_driver.py 35, test_runtime_contracts.py 34,
test_runtime_control_plane_api.py 30, test_runtime_planner.py 23).

§9 — Specs, docs, examples, tools, config

  • specs/ — 72 across 23 files; specs/concept-authority/* (4 files) and
    specs/formal/* carry most of it, including the identifier aces-extension-discipline.md.
  • tools/ — 139 across 21 files; tools/real-daemon/libvirt_smoke.py (38) is
    the densest, plus tools/policy/* and the check_*.py gate scripts.
  • agent/CI config — 87 across 17 files, incl. .github/workflows/ci.yml,
    .github/dependabot.yml, .github/PULL_REQUEST_TEMPLATE.md, .gc/plan-rules.md,
    and the .claude/ + .codex-skills/ skill definitions (already named
    raes-*, but ACES survives in their bodies — 60 occurrences).
  • repo root — 18 across README.md, AGENTS.md, CONTRIBUTING.md,
    noxfile.py, sonar-project.properties, .ground-control.yaml, .mcp.json,
    .gitleaks.toml, implementations/python/pyproject.toml, contracts/README.md.
  • examples/ — 53 across 20 files, incl. aces-library-pattern,
    aces-library-template.
  • docs/ prose — 55 across 16 files, mostly the aces-inventory /
    aces_inventory.py capture tooling.

§10 — Historical records (2820, 58% of total)

File / area Occurrences
docs/decisions/ (ADRs + preflights) 1509
docs/research/ 627
contracts/provenance/sdl-lineage-ledger-v1.json 346
CHANGELOG.md 297
docs/migration/, docs/lessons/ 41

These are dated records of decisions and derivation. My recommendation is to
leave them as written and let the names be historically accurate — the lineage
ledger in particular is a provenance artifact whose whole value is that it was
not edited after the fact. Flagging rather than deciding, since the instruction
was to find everything.

Suggested order

  1. Decide aces.dev (§1) — everything else in the contract layer depends on it.
  2. Decide frozen-vs-rename for identifiers (§2) and wire keys (§3) together;
    they share consumers.
  3. §5–§7 (artifacts, events, env vars) — user-visible, independently shippable.
  4. §8–§9 — mechanical, no consumer impact.
  5. §10 — decide once, apply never or apply wholesale.

Downstream tracking: OpenRAE/env-packs#139, #907.

Requirements

  • GOV-944

Metadata

Metadata

Assignees

No one assigned

    Labels

    convergenceCross-product convergence / companion-spec work

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions