Skip to content

Dev - #753

Merged
Brad-Edwards merged 25 commits into
mainfrom
dev
Jul 13, 2026
Merged

Dev#753
Brad-Edwards merged 25 commits into
mainfrom
dev

Conversation

@Brad-Edwards

Copy link
Copy Markdown
Collaborator

Summary

Related Issues

Requirement Context

  • Requirement UID:
  • ADRs touched:
  • Ground Control project: aces-sdl

Changes

Test Plan

  • Relevant tests pass
  • uvx nox -s verify passes, or the unchecked sessions are listed below
  • Docs build passes when documentation changed (uvx nox -s docs)

Checklist

  • Code follows project coding standards (docs/explain/reference/coding-standards.md)
  • FM level classified if semantic change
  • Published contract schemas regenerated if models changed
  • Towncrier fragment added under changelog.d/, or not needed
  • Architectural docs updated if applicable

Notes for Review

Brad-Edwards and others added 25 commits July 6, 2026 15:53
…lation (#668) (#685)

* Add realization-envelope membership/subsumption/witness relation (#668)

Implement the deterministic relation over the #667 realization-envelope
semantics (ADR-070, specs/formal/realization/envelope-semantics.md):

- aces_contracts.realization_envelope: closed, versioned envelope
  expression contract (exact / enum / boolean / numeric-interval /
  governed-reference / record domains, scoped bindings, posture,
  closure, witness policy). Intentionally unpublished; schema carriage
  is a downstream sibling.
- aces_sdl.realization_envelope (+ _realization_envelope_engine):
  member / subsumes / witness / generate_negative_probes over one
  shared domain and closure engine, with stable secret-free diagnostics.
  Membership requires validated instantiated SDL; subsumption is set
  inclusion on the admitted fragment; witnesses are deterministic and
  SDL-validated; closed envelopes yield out-of-envelope negative probes;
  the R2 overridability rule is enforced.
- Unit + hypothesis property tests: membership decidable/deterministic,
  subsumption is set inclusion (reflexive/transitive, authority-scoped
  governed refs), witness in-envelope and deterministic, negative probes
  out-of-envelope.

Backend-manifest carriage and retiring the #663 reference-scenario
conformance bridge remain the explicitly-downstream siblings
(ADR-070 §5).

* Reduce realization-envelope relation complexity for SonarCloud

Refactor the relation for the SonarCloud quality gate (new_violations=0)
without behavior change:

- Split domain-kind dispatch into aces_sdl._realization_envelope_domains
  (finite enumeration, subset, witness selection, out-of-envelope
  variation) as type-keyed dispatch tables, flattening the per-kind
  return/complexity that tripped S1142 / cognitive-complexity.
- Extract membership / subsumption / witness / negative-probe loops into
  focused helpers; dispatch _is_singleton_domain and scalar_in_domain in
  aces_contracts via lookup tables.
- Type value hints as DomainScalar / object (drop Any, S6542), use min()
  over sorted()[0] (S8517), set .issubset() over negated <= (S1940),
  move trailing comments to their own lines (S139).

All 42 unit + property tests still pass; ~94% line coverage on the new
modules.

* chore(sdl): drop orphaned changelog.d fragment for #668

The repo migrated from towncrier changelog.d fragments to release-please
(#682/#684); plan-rules now state "There is no changelog.d/". The #668
changelog entry is derived from the conventional PR title/commits by
release-please, so the hand-written fragment is obsolete.

* refactor(sdl): flatten nested ternary in envelope enum sort key

Replace the nested conditional in _enum_sort_key with an if/elif/else to
clear the last SonarCloud new-code violation (S3358). Behavior unchanged;
all envelope relation tests still pass.
* Bump the github-actions group with 7 updates

Bumps the github-actions group with 7 updates:

| Package | From | To |
| --- | --- | --- |
| [actions/checkout](https://github.com/actions/checkout) | `6.0.2` | `7.0.0` |
| [actions/setup-python](https://github.com/actions/setup-python) | `6.2.0` | `6.3.0` |
| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `8.0.0` | `8.3.0` |
| [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.6.2` | `7.0.1` |
| [actions/download-artifact](https://github.com/actions/download-artifact) | `4.3.0` | `8.0.1` |
| [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) | `7.1.0` | `8.2.0` |
| [googleapis/release-please-action](https://github.com/googleapis/release-please-action) | `4.4.1` | `5.0.0` |


Updates `actions/checkout` from 6.0.2 to 7.0.0
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@de0fac2...9c091bb)

Updates `actions/setup-python` from 6.2.0 to 6.3.0
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@a309ff8...ece7cb0)

Updates `astral-sh/setup-uv` from 8.0.0 to 8.3.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@cec2083...d31148d)

Updates `actions/upload-artifact` from 4.6.2 to 7.0.1
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@ea165f8...043fb46)

Updates `actions/download-artifact` from 4.3.0 to 8.0.1
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@d3f86a1...3e5f45b)

Updates `SonarSource/sonarqube-scan-action` from 7.1.0 to 8.2.0
- [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases)
- [Commits](SonarSource/sonarqube-scan-action@299e4b7...7138816)

Updates `googleapis/release-please-action` from 4.4.1 to 5.0.0
- [Release notes](https://github.com/googleapis/release-please-action/releases)
- [Changelog](https://github.com/googleapis/release-please-action/blob/main/CHANGELOG.md)
- [Commits](googleapis/release-please-action@5c625bf...45996ed)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/setup-python
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/download-artifact
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: SonarSource/sonarqube-scan-action
  dependency-version: 8.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: googleapis/release-please-action
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>

* ci: correct stale action pin comments in group bump

Dependabot bumped the pinned SHAs but left two version comments on the
previous major:

- actions/checkout 9c091bb is v7.0.0 (comment said # v6)
- SonarSource/sonarqube-scan-action 713881 is v8.2.0 (comment said # v7)

Update the comments to match the pinned SHAs so the audit trail is
accurate. No SHA changes; action behavior is unchanged.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Brad Edwards <j.bradley.edwards@gmail.com>
Add example corpus non-vacuity guard
* feat(sdl): add DSL-115 authoring specificity helper

* refactor(sdl): simplify specificity path resolver

* refactor(sdl): narrow specificity sequence resolver
…ce (#711)

* feat: add experiment authoring-input contract and MCP authoring surface

Adds experiment-authoring-input-v1 (ExperimentSpecModel), a pre-run
experiment specification that binds a task to a run plan (seeds, episode
controls, red-variant selection, condition allocation) before execution.
It is a separate input contract that references the archival experiment-core
outputs rather than weakening them, mirroring how sdl-authoring-input-v1
relates to instantiated-scenario-v1.

Ships a loader, MCP authoring tools (experiment_scaffold / experiment_validate
/ experiment_get_example), worked examples, fixtures, and a discovery test,
with ADR-074 deciding the surface and amendments to ADR-055 and ADR-069.

Closes #675

* test: cover experiment authoring loader/tools; cut MCP tool cognitive complexity

Addresses the SonarCloud quality gate on PR #711:
- Move experiment MCP tool bodies into module-level helpers so register()
  stays under the cognitive-complexity threshold (S3776).
- Add tests/test_experiment_authoring.py covering the loader (parse/load/find),
  the MCP tool helpers, and the run-plan/red-variant model validators, raising
  new-code coverage.
Add ecosystem evolution governance policy
* fix: reject ambiguous SDL mapping keys

* Fix SonarCloud findings (cycle 1)
* Publish configuration-bound libvirt realization envelopes

* Fix SonarCloud findings (cycle 1)

* Fix SonarCloud findings (cycle 2)
* Enforce TechVault realization disclosure

* Fix SonarCloud findings (cycle 1)

* Fix SonarCloud findings (cycle 2)
* feat(sdl)!: define canonical YAML source profile

* refactor(sdl): satisfy source-profile quality gate

* fix(sdl): make scalar validation branch explicit

* fix: reconcile normative SDL catalogs (#734)

* feat(libvirt): publish configuration-bound realization envelopes (#730)

* Publish configuration-bound libvirt realization envelopes

* Fix SonarCloud findings (cycle 1)

* Fix SonarCloud findings (cycle 2)

* fix: reconcile normative SDL catalogs

* chore: trigger stacked PR checks
* feat(sdl)!: define canonical YAML source profile

* refactor(sdl): satisfy source-profile quality gate

* fix(sdl): make scalar validation branch explicit

* fix: reconcile normative SDL catalogs

* chore: trigger stacked PR checks

* feat: enforce portable SDL identifiers

* chore: trigger stacked PR checks

* chore: retrigger stacked PR checks

* fix: reconcile runtime contract boundaries

* chore: trigger reconciled PR checks

* Fix SonarCloud findings (cycle 1)
* feat(libvirt): add guest-observed realization probes (ASR-519)

Populate the guest_observed evidence slot #714 reserved: concern-specific guest
observers that boot a canonical appliance through the production apply path and
read realized state from inside the guest (resource, network, content, account,
service), freshness-bound to a per-run challenge, with typed redacted failures
and verified teardown.

- New guest-certified material configuration + realization envelope
- Credential-free file-backed-serial guest fact transport (injected seam)
- Guest-observing appliance builder + staged observer + observation gate
- Evidence artifact + validator extended for guest-observed facts/binding;
  native-proof boundary (certifying flag) marks injected fakes non-certifying
- Cleanup moved to a finally-path; operator command + AWS proof harness
- Committed real-daemon evidence report (certifying: true)

* fix(libvirt): resolve review + SonarCloud findings for guest-certified probes (ASR-519)

- Reject duplicate singleton guest facts with a distinct diagnostic (+ tests)
- Accept accounts with no supplemental groups (optional groups field, + test)
- Native-proof boundary: guest artifacts carry a `certifying` flag (true only
  for the production driver); injected fakes are non-certifying (+ tests)
- Cover the residual-guest-artifact cleanup fail-closed branch (+ test)
- SonarCloud: rename passwd-named constant, dedupe literals, add type hints,
  reduce returns/cognitive complexity, wrap long lines
- Regenerate the committed real-daemon evidence report from the final code
* ci: publish Sphinx docs to GitHub Pages

Build the Sphinx site on every PR (breakage check) and deploy it to GitHub
Pages on pushes to main. Actions are SHA-pinned to match the repo convention;
Pages is enabled with the GitHub Actions build source. Non-strict build (the
tree currently emits 63 pre-existing toctree/orphan warnings).

* docs: connect all pages, add realization-envelope guide, build strict

- New decisions/index.md globs every ADR + design/preflight note into the nav;
  root index no longer hand-lists ADRs (auto-includes future ones).
- Connect the participant-backend-contracts research subdir (hidden toctree +
  root wiring).
- New explain/reference/realization-envelopes.md: observation-strength ladder,
  the libvirt generic/techvault/guest-certified configurations, how
  guest-observed realization is proven, and how to reproduce the proof
  (verified against the envelope + carrier code).
- Fix cross-tree links to specs/sdl/diagnostics.md (download role) and a stray
  transition in the SCN-010 report.
- Build is now warning-clean; docs.yml runs sphinx-build -W --keep-going.
* Define associated artifact manifest contracts

* Fix SonarCloud findings (cycle 1)

* Fix SonarCloud findings (cycle 2)
…1) (#743)

* refactor: split oversized modules and cut function complexity (MOD-001)

The dev->main promotion (PR #740) failed SonarCloud's aces-strict quality gate
with 9 new violations: 5 files over the 500-line S104 cap and 4 functions over
cyclomatic complexity 10. Split each oversized module along a cohesive seam and
decomposed each over-complex function into helpers. Moved symbols are re-imported
into their original modules so every public import path and __all__ stays stable.
No behaviour change; full nox verify green.

Splits:
- aces_sdl.parser -> _model_diagnostics (pydantic-error diagnostic rendering)
- aces_sdl._runtime_service_families -> _runtime_service_family_registry (registry data)
- aces_sdl._yaml_loader -> _mapping_key_analyzer (mapping-key validation walker)
- aces_operations._evidence_run_validation -> _evidence_run_realization
- aces_operations.libvirt_evidence_run -> _evidence_run_native (EvidenceCheck /
  LibvirtEvidenceRunConfig relocated to _evidence_run_types to break the cycle)
- aces_backend_libvirt.techvault_concerns -> techvault_plan_admission
- aces_backend_libvirt.techvault_native -> _techvault_native_ops

Complexity reductions (all now <=10):
- _evidence_run_realization._validate_unrealized_substrate (11)
- _mapping_key_analyzer._walk_mapping_entry (13)
- techvault_native.TechVaultNativeLibvirtDriver.__post_init__ (12)
- provisioner.LibvirtProvisioner._drive (14)

* refactor: make LibvirtProvisioner._active_addresses static (S2325)

The extracted _active_addresses helper does not use instance state; SonarCloud
flagged python:S2325. Make it a staticmethod (called via the instance in _drive).
* feat: enforce closed SDL phase contracts

* fix: resolve phase-contract quality findings
* feat: enforce closed SDL phase contracts

* fix: resolve phase-contract quality findings

* feat: define backend-neutral proposition semantics

* chore: run stacked PR verification

* fix: resolve SonarCloud findings (cycle 1)
* feat: enforce closed SDL phase contracts

* fix: resolve phase-contract quality findings

* feat: define backend-neutral proposition semantics

* chore: run stacked PR verification

* fix: resolve SonarCloud findings (cycle 1)

* feat: publish revision-pinned SDL lineage ledger

* refactor: reduce lineage validator complexity
)

refactor(conformance): drop redundant tuple() around tuple literals (S7496)

SonarCloud activated python:S7496 and flagged the dev->main promotion (PR #740)
on tuple((*a, *b)) in aces_conformance/conformance.py, where the inner starred
expression is already a tuple. Unwrap both occurrences. No behaviour change.
Lower the non-test source-file cap in ADR-015 section 2 from 600 to 500
lines to match SonarCloud's S104 threshold, removing the 500-599 band
where files were repo-compliant but failed the Sonar quality gate at the
dev -> main integration PR (#545). Re-baseline
_ADR015_INITIAL_OVERSIZED_FILES and tools/policy/oversized_allowlist.yaml
to the files over 500 lines as of this change; the allowlist shrink-only
rule continues from the new baseline. Record the change as an ADR-015
amendment and update its acceptance pin.

Closes #561
… (GOV-901) (#750)

Realize the versioning and compatibility portion of the merged ecosystem
evolution governance policy (ADR-075; specs/evolution/versioning-deprecation-
and-migration.md) by making the repository conform to it.

Version-literal classification: the docs build, CLI --version, control-plane
OpenAPI description, and the aces namespace fallback now derive from installed
distribution metadata and use the honest PEP 440 sentinel 0.0.0+unknown when the
distribution is absent, rather than a plausible-looking 0.1.0 that implies an
unearned release. Adds version-classification tests.

Single release/versioning workflow: name release-please as the sole workflow and
remove the contradictory towncrier path. Updates README, CONTRIBUTING, the PR
template, the authority manifest and its checker/tests, amends ADR-019 to drop
changelog.d/ from the non-normative roots (release-please replaced towncrier in
#684), and deletes the orphaned changelog.d/ fragments.

Records the version-identifier derivation evidence in the normative spec.
…up (#733)

Bumps the github-actions group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `astral-sh/setup-uv` from 8.3.0 to 8.3.2
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@d31148d...11f9893)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Publish scientific scenario completeness profiles

* Fix SonarCloud findings (cycle 1)

* Reduce completeness validator complexity
…902) (#756)

Realizes GOV-902 by making the ADR-075 / evolution-spec deprecation and
removal rules enforceable and reviewable: a normative deprecation-record
surface (specs/evolution/deprecation-records.yaml) seeded with the real
aces.* compat-namespace and SDL import path: deprecations, plus a fail-closed
policy gate (tools/check_deprecation_lifecycle.py) that pins the 7-field
record contract, a retention floor, removal-eligibility, and the ADR-061
tombstone tie-in. Classifies the ledger in the authority boundary, records
the enforcement in the evolution spec, corrects a stale v1-manifest legacy
claim in contracts/schemas/README.md, and adds full-coverage tests.
* Publish scientific scenario completeness profiles

* Fix SonarCloud findings (cycle 1)

* Reduce completeness validator complexity

* Expose completeness profiles through MCP

* Tighten MCP completeness typing
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
3 New issues

See analysis details on SonarQube Cloud

💡 Need a hand with PR review? Try Gitar by Sonar!

@Brad-Edwards
Brad-Edwards merged commit 6b86118 into main Jul 13, 2026
12 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant