Files
2026-09-22 19:23:17 +02:00

6.3 KiB

Historical reference retained from the preceding release. Current deployment/contracts and evidence are in DEPLOYMENT.md, REPORTS.md, JOURNAL.md and VERIFICATION.md. Do not treat old limitations or tests as current qualification.

Historical core review. Current2.1 behavior is documented in README, API and READ-ONLY-EXPERIENCE; older capability limits below are not current release claims.

Review of the supplied AIM 3.1.0 contract

Reviewed archive: AIM-Ansible-3.1.0.zip SHA-256: 6005cab58875cfd6eabfd18e9b388c219a02d5b0472ba50a94c78abafb637ae9 (matched the supplied checksum). This is source-based analysis, not live-controller verification. The core archive and extracted baseline are not changed by WebGUI development.

Sources reviewed

Paths below are relative to aim-core-3.1.0 in the uploaded ZIP:

Source Load-bearing contract/findings
ADDON_AGENTS.md Authoritative same-UID, independent client boundary; no private imports, argument interception or key export
scripts/docs/ADDON_API.md Public operations, RunRequest, credentials-fd framing, event/result schema, limits
scripts/docs/ADDON_SUPPORT.md and addon-support-v1.json Implemented scope versus unsupported Custom, raw output and mutable APIs
scripts/docs/RELEASE_HANDOFF.md Core 3.1/API 1.0 stability; controller results do NOT establish noninteractive execution or non-root SSH qualification
scripts/docs/RC19_HANDOFF.md Historical design intent only; newer support contract takes precedence
scripts/docs/LOCAL_VALIDATION.md and CONTROLLER_ACCEPTANCE.md Core acceptance procedure and evidence boundaries
deploy/README.md and scripts/aim.yml Independently installed aim/aimctl; operator-owned addon execution opt-in and runtime settings
scripts/src/aim/services/v1/models.py Strict RunRequest; unknown fields rejected; explicit hosts; no credential or arbitrary path/actor fields
scripts/src/aim/services/v1/service.py prepare/readiness/execute, key 0600 calling-UID policy, authoritative revisions, native inventory precedence, safe events
scripts/src/aim/ctl.py One request JSONL line; separate inherited pipe/socket secret channel; final response required
scripts/src/aim/runtime/ansible.py and process.py Native CLI discovery/execution, core-owned environment and cancellation
scripts/src/aim/locking.py Stable customer .aim.lock, shared terminal/service advisory locking
scripts/src/aim/inventory and playbooks modules Checked only to understand documented output; never imported by the add-on

Decisions derived from these sources

  1. Replace RC18Adapter, external_presentation interception and the private Ansible credential strategy entirely with a bounded aimctl client. Core's private signatures are not the supported extension interface.
  2. service_user remains the remote account/key basename. runtime.private_key_owner controls new-key ownership, not automatic local UID switching. An explicitly pre-started add-on executor runs as the actual authorized key-owning UID. This is add-on infrastructure, not a claimed native core broker.
  3. prepare returns a core-owned revision and credential requirements. Save/queue/ dispatch revalidate through prepare, not local inventory scans/hashes. No stat-only shortcut for protected sources. Key mode customer needs key access during prepare.
  4. Core 1.0 supports customer/catalog reads but no inventory mutations, Custom forced authentication or password-only verification. Native password defaults retain inventory precedence. The old Custom UI is removed rather than silently reinterpreted.
  5. list_hosts exposes name/address/platforms, not recursive inventory group paths. Bulk selection is retained for available platform groups only. This is a temporary feature-parity loss, not a reason to import inventory internals.
  6. Global catalog is a union of customer-scoped available catalogs; unavailable customer-specific playbooks are not offered. Catalog inputs remain core-typed.
  7. Events contain structured fixed statuses/counters, not raw task names/messages. The old raw live console becomes Execution progress. RunResult controls success; zero exit without final counters is not treated as successful.
  8. Optional core fields are ignored safely. The tested product is 3.1.0, service/ wire/event1.0. Future core products need qualification even if API 1.x is stable.
  9. Core's public readiness performs local runtime/collection checks. It is not a remote connection test or guarantee that native task execution will succeed.
  10. There is no public per-browser-user actor authorization. WebGUI maintains its own account/grant/approval checks, but the executor UID is a trusted controller actor with the core permissions of that OS identity, not an isolated tenant.

Explicit changes from old WebGUI

  • Removed imports of aim.config, managers, inventory readers and old command hooks.
  • Removed TextVaultSecret/VaultSecret API adaptation, custom Ansible strategies, canonical-key-export sudo bridge, job-private canonical-key copies and elevated CAP_SETUID/CAP_SETGID worker design.
  • Ansible/version/collection interpretation now belongs to core. /usr/bin is no longer an add-on execution.ansible_bin setting.
  • Added a reviewed one-run path; saving is optional. Name collisions return 409.
  • New HTTP v2 and schema 4, independently of core API 1.0. Old APIs are not silently accepted with changed semantics.

Useful requests for a future core release (NOT implemented here)

Additive HostSummary group paths would restore subgroup selection. Safe per-host result identifiers and explicitly bounded diagnostic categories could improve progress without raw logs. A separately designed forced Custom authentication mode would need to define native precedence, key/agent/control-socket fallback and approval semantics. None should be recreated in the add-on using private APIs.

Qualification status

The tests use the real uploaded-core machine interface. Native Ansible is absent in this development container: controlled fake native commands verify protocol, result and worker integration only. Real SSH/WinRM, encrypted-key behavior, actual systemd sandbox deployment and reverse-proxy streaming require controller acceptance. See VERIFICATION.md for exact tests and limitations; no old rc9 qualification is claimed as qualification of this new core boundary.