Commit Graph

3715 Commits

Author SHA1 Message Date
HAL9000 f99daea800 fix(invariant): restore ACTION scope in merge_invariants and InvariantSet.merge 2026-06-18 19:01:49 -04:00
HAL9000 a7cc3a9ff6 Merge pull request 'fix(security): use relpath containment instead of startswith to prevent prefix-collision bypass' (#11234) from security/relpath-containment-fallback into master
CI / benchmark-publish (push) Has started running
CI / load-versions (push) Successful in 18s
CI / push-validation (push) Successful in 23s
CI / quality (push) Successful in 1m5s
CI / benchmark-regression (push) Has been skipped
CI / helm (push) Successful in 3m30s
CI / typecheck (push) Successful in 4m14s
CI / security (push) Successful in 4m36s
CI / unit_tests (push) Successful in 6m5s
CI / build (push) Successful in 6m20s
CI / lint (push) Successful in 6m47s
CI / docker (push) Successful in 2m18s
CI / coverage (push) Successful in 12m11s
CI / integration_tests (push) Successful in 19m35s
CI / status-check (push) Successful in 3s
2026-06-18 22:42:35 +00:00
controller-ci-rerun d34919d5a3 chore: re-trigger CI [controller]
CI / load-versions (pull_request) Successful in 17s
CI / push-validation (pull_request) Successful in 20s
CI / build (pull_request) Successful in 41s
CI / helm (pull_request) Successful in 46s
CI / quality (pull_request) Successful in 54s
CI / security (pull_request) Successful in 1m30s
CI / unit_tests (pull_request) Successful in 6m14s
CI / lint (pull_request) Successful in 7m1s
CI / typecheck (pull_request) Successful in 7m20s
CI / docker (pull_request) Successful in 1m41s
CI / integration_tests (pull_request) Successful in 8m30s
CI / coverage (pull_request) Successful in 11m26s
CI / status-check (pull_request) Successful in 0s
2026-06-18 18:22:57 -04:00
CleverAgents Bot 8b7a26e0d7 fix(security): use relpath containment instead of startswith to prevent prefix-collision bypass 2026-06-18 18:22:57 -04:00
HAL9000 044c21e1b0 Merge pull request 'fix(invariant): persist invariants to database via InvariantRepository and Alembic migration' (#8684) from fix/invariant-database-persistence into master
CI / load-versions (push) Successful in 14s
CI / push-validation (push) Successful in 16s
CI / build (push) Successful in 40s
CI / lint (push) Successful in 42s
CI / helm (push) Successful in 45s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 4m42s
CI / docker (push) Successful in 1m27s
CI / typecheck (push) Successful in 7m1s
CI / quality (push) Successful in 7m6s
CI / security (push) Successful in 7m32s
CI / integration_tests (push) Successful in 8m35s
CI / benchmark-publish (push) Failing after 15m30s
CI / coverage (push) Successful in 10m6s
CI / status-check (push) Successful in 3s
2026-06-18 22:19:36 +00:00
CleverAgents Bot 525a0e1d56 fix(invariant): route persistence through repository
CI / push-validation (pull_request) Successful in 27s
CI / load-versions (pull_request) Successful in 27s
CI / lint (pull_request) Successful in 46s
CI / build (pull_request) Successful in 56s
CI / quality (pull_request) Successful in 1m27s
CI / typecheck (pull_request) Successful in 1m35s
CI / security (pull_request) Successful in 1m35s
CI / helm (pull_request) Successful in 3m17s
CI / unit_tests (pull_request) Successful in 5m42s
CI / integration_tests (pull_request) Successful in 9m8s
CI / docker (pull_request) Successful in 2m24s
CI / coverage (pull_request) Successful in 10m14s
CI / status-check (pull_request) Successful in 3s
2026-06-18 11:36:35 -04:00
drew d65c4a172d fix(invariant): serialize database-backed service mutations 2026-06-18 11:36:35 -04:00
HAL9000 19dc9c231f fix(invariant): neutralise legacy m3_001 migration + drop stale model fixtures
Commit f2626d66e removed the legacy ``InvariantModel`` (id/description/
is_active) and rewired ``InvariantModel`` onto the new ``id/text/scope/
source_name/active/non_overridable`` schema owned by
``m11_001_standalone_invariants``.  Two pieces of the previous design
remained behind and were breaking CI:

1. ``m3_001_invariants_table`` still issued ``op.create_table('invariants',
   ...)`` for the obsolete column set.  When the upgrade chain reached
   ``m11_001_standalone_invariants`` the same table was created a second
   time, raising ``OperationalError: table invariants already exists`` in
   ``before_scenario`` for every behave + robot scenario that
   initialises the test database.  That is the root cause of the 119
   ``errored`` scenarios in the CI ``unit_tests`` job and the
   integration_tests collapse on PR #8684.

   Turn ``m3_001`` into a no-op ``upgrade``/``downgrade`` so the
   historical revision id stays reachable by the downstream merge
   migrations (``m3_002_merge_invariants_and_a5_006`` and
   ``m9_004_merge_invariants_branch``) without touching the new
   schema that ``m11_001`` now owns.

2. ``robot/invariant_model.robot`` + ``robot/helper_invariant_model.py``
   and ``features/invariant_model.feature`` +
   ``features/steps/invariant_model_steps.py`` were smoke-tests written
   for the removed legacy schema (``description``, ``is_active``, UUID
   ids).  They instantiate ``InvariantModel(description=..., is_active=...)``
   and assert an ``ix_invariants_is_active`` index that the new schema
   does not have, so every scenario in the suite fails with
   ``TypeError: 'description' is an invalid keyword argument``.  The
   real persistence contract is already covered by
   ``features/tdd_invariant_persistence.feature``,
   ``robot/tdd_invariant_persistence.robot`` and
   ``robot/invariant_cli.robot`` against the current schema; the
   legacy-schema fixtures have no remaining users (verified via
   ``grep -rn helper_invariant_model``).  Delete them.

Also runs ``ruff format`` on ``models.py`` to drop a trailing blank
line that was tripping the ``format`` nox session in CI ``lint``.

Verified locally:

* ``ruff format --check .`` -> 2298 files already formatted.
* ``ruff check src/ scripts/ examples/ features/ robot/ .opencode/``
  -> All checks passed.
* ``nox -s unit_tests-3.13 -- features/tdd_invariant_persistence.feature``
  -> 4 scenarios passed, 0 failed, 0 errored.
* ``nox -s integration_tests-3.13 -- robot/tdd_invariant_persistence.robot
  robot/invariant_cli.robot robot/`` -> only the 8 deleted
  ``Suites.Robot.Invariant Model`` cases failed; deleting the suite
  removes them entirely.

ISSUES CLOSED: #8573
2026-06-18 11:36:35 -04:00
CleverAgents Bot 4ed01ec0c1 fix(db): resolve invariant model migration head 2026-06-18 11:36:35 -04:00
HAL9000 c1dca18654 fix(invariant): use json format in persistence helper list calls
The helper used the CLI default Rich table renderer and substring-checked
for the invariant text in the captured output. With CliRunner's narrow
default console width the Rich table soft-wraps "Must validate inputs"
across two visual rows, so the substring check always failed even though
the invariant was correctly persisted and retrieved from the database.

Pass --format json on the list invocations: the JSON serialiser emits the
text verbatim so the substring assertion now reflects persistence rather
than column-width formatting. Verified locally by running all three
helper subcommands against a fresh SQLite DB — all three now print their
ok markers.

ISSUES CLOSED: #8573
2026-06-18 11:36:35 -04:00
HAL9000 13e23a6a8a fix(invariant): isolate per-suite DB in tdd_invariant_persistence.robot
The TDD invariant persistence suite was using `Setup Test Environment`
(no DB isolation) but its helper script (helper_tdd_invariant_persistence.py)
relies on InvariantService cross-instance persistence. Without
CLEVERAGENTS_DATABASE_URL set, InvariantService falls back to in-memory
mode (invariant_service.py:90) and the second helper invocation cannot
see invariants written by the first — every TDD scenario fails:

  - TDD Invariant Add Then List Project Across Invocations
  - TDD Invariant Add Then List Global Across Invocations
  - TDD Invariant Remove Cross Instance

Switch the suite setup to `Setup Test Environment With Database
Isolation` so each suite gets a unique sqlite path via the existing
keyword in robot/common.resource. This also prevents pabot worker
collisions on the default `sqlite:///cleveragents.db`.

ISSUES CLOSED: #8573
2026-06-18 11:36:35 -04:00
HAL9000 ea967142df fix(invariant): expose non_overridable via add_invariant + round-trip from DB
Three connected regressions surfaced by the new DB-backed list path
on the invariant_reconciliation_actor scenarios:

- `InvariantService.add_invariant()` had no way to set `non_overridable`,
  so the BDD step `step_add_non_overridable_global` was bypassing the
  service entirely (writing straight into `_invariants`). Once the
  service became DB-backed for ad-hoc constructors, those direct dict
  writes were invisible to `list_invariants()` and the reconciler saw a
  regular global invariant.
- `InvariantModel.to_domain()` was dropping the `non_overridable` column
  on read — it persisted correctly via `from_domain` but the round-trip
  silently lost the flag.
- The step file imported `Invariant` + `ULID` only for the bypass that
  is now gone; `ULID` is dropped, `Invariant` stays (still used in the
  `isinstance` assertion further down).

ISSUES CLOSED: #8573
2026-06-18 11:36:35 -04:00
HAL9000 6e29206e7e fix(invariant): make InvariantService DB-backed for ad-hoc constructors
The BDD persistence scenarios construct ``InvariantService()`` directly
(simulating fresh CLI invocations), bypassing the DI container that
otherwise wires database_url + UnitOfWork. Without these hooks the
no-arg constructor silently reverted to in-memory mode and the
"persists across process restarts" guarantee broke under tests.

- Read CLEVERAGENTS_DATABASE_URL in the constructor when no database_url
  is passed, so ad-hoc callers still get cross-instance persistence.
- Route every DB-backed branch (add/list/remove/get_by_id) through
  _ensure_session_factory() so the session factory is materialised on
  first use, not only after a prior add.
- Drop class_=Session from sessionmaker — Session was only imported
  under TYPE_CHECKING so this raised NameError at runtime.  The default
  Session class is fine.
- Invoke MigrationRunner.init_or_upgrade() before handing the engine to
  sessionmaker so the test harness's template-DB patch (and prod
  migrations) gets a chance to materialise the invariants table before
  the first INSERT.
- Drop @mock_only tag from tdd_invariant_persistence.feature.  The
  feature now exercises real SQLite via the persistence service; the
  tag was a leftover from the in-memory-only era and prevented the
  per-scenario template copy from triggering.
- Make CLI list-output assertion robust against Rich's table line-wrap
  (the long invariant text is split across two rows of the same
  column with │ borders interleaved; word-level membership is the
  reliable check).

ISSUES CLOSED: #8573
2026-06-18 11:36:35 -04:00
HAL9000 d9f66b44f3 fix(invariant): resolve alembic multi-heads + typecheck errors
- Chain m11_001_standalone_invariants migration onto m9_003 (was wrongly
  pointing at m10_001, which already had m9_003 as a child — causing
  "multiple heads" alembic error that broke unit_tests and
  integration_tests entirely).
- Convert InvariantModel columns to Mapped[T] + mapped_column(...) style
  so Pyright sees them as plain Python types instead of Column[T]. Fixes
  6 reportAttributeAccessIssue errors in invariant_repository.update()
  and 1 reportArgumentType error in InvariantModel.to_domain().
- Drop now-unnecessary cast(...) calls in to_domain().
- Use _ensure_session_factory()() directly in invariant_service so
  Pyright tracks the non-None factory through the call chain.
- Apply ruff format to both touched files.

ISSUES CLOSED: #8573
2026-06-18 11:36:35 -04:00
controller-ci-rerun 19c67c0260 chore: re-trigger CI [controller] 2026-06-18 11:36:35 -04:00
controller-ci-rerun 9b8e27b924 chore: re-trigger CI [controller] 2026-06-18 11:36:35 -04:00
controller-ci-rerun 7ec3443031 chore: re-trigger CI [controller] 2026-06-18 11:36:35 -04:00
controller-ci-rerun c29918c7fa chore: re-trigger CI [controller] 2026-06-18 11:36:35 -04:00
controller-ci-rerun 9a93e9fb24 chore: re-trigger CI [controller] 2026-06-18 11:36:35 -04:00
HAL9000 421429c65f fix(invariant): persist invariants to database via InvariantRepository and Alembic migration
ISSUES CLOSED: #8573
2026-06-18 11:36:35 -04:00
HAL9000 5106e03494 Merge pull request 'Implement conversation state management' (#10922) from issue-1-conversation-state into master
CI / load-versions (push) Successful in 17s
CI / push-validation (push) Successful in 27s
CI / lint (push) Successful in 1m20s
CI / typecheck (push) Successful in 1m25s
CI / security (push) Successful in 1m25s
CI / quality (push) Successful in 1m6s
CI / build (push) Successful in 43s
CI / helm (push) Successful in 45s
CI / integration_tests (push) Failing after 14m46s
CI / unit_tests (push) Failing after 14m58s
CI / benchmark-regression (push) Has been cancelled
CI / benchmark-publish (push) Failing after 27m29s
CI / coverage (push) Has been cancelled
CI / docker (push) Has been cancelled
CI / status-check (push) Has been cancelled
2026-06-18 14:53:55 +00:00
controller-ci-rerun dd1bd6b011 chore: re-trigger CI [controller]
CI / load-versions (pull_request) Successful in 18s
CI / push-validation (pull_request) Successful in 23s
CI / lint (pull_request) Successful in 44s
CI / helm (pull_request) Successful in 44s
CI / build (pull_request) Successful in 45s
CI / quality (pull_request) Successful in 1m19s
CI / typecheck (pull_request) Successful in 1m27s
CI / security (pull_request) Successful in 1m25s
CI / unit_tests (pull_request) Successful in 5m47s
CI / docker (pull_request) Successful in 2m11s
CI / integration_tests (pull_request) Successful in 9m5s
CI / coverage (pull_request) Successful in 10m13s
CI / status-check (pull_request) Successful in 3s
2026-06-18 10:10:25 -04:00
CleverAgents Bot de9f9929c3 fix(langgraph): recognize fallback tool agents
CI / load-versions (pull_request) Successful in 14s
CI / push-validation (pull_request) Successful in 24s
CI / lint (pull_request) Successful in 49s
CI / integration_tests (pull_request) Successful in 10m24s
CI / helm (pull_request) Failing after 12m58s
CI / build (pull_request) Failing after 13m37s
CI / unit_tests (pull_request) Failing after 13m39s
CI / quality (pull_request) Failing after 13m39s
CI / security (pull_request) Failing after 13m40s
CI / typecheck (pull_request) Failing after 13m40s
CI / coverage (pull_request) Has been cancelled
CI / docker (pull_request) Has been cancelled
CI / status-check (pull_request) Has been cancelled
2026-06-18 09:49:41 -04:00
CleverAgents Bot b10750bcb3 style(langgraph): format conversation state changes 2026-06-18 09:49:41 -04:00
CleverAgents Bot 4b6547b114 fix(langgraph): preserve state history coverage semantics 2026-06-18 09:49:41 -04:00
HAL9000 fcf1306817 fix(langgraph): resolve conversation state management review issues
Fixed all issues identified in PR review:

1. Fixed self.history property/attribute conflict in ConversationStateManager:
   - Renamed internal snapshot list from self.history to self._snapshots
   - The @property history now correctly returns conversation messages
   - Added public snapshots property for time-travel snapshot access
   - Updated existing tests to use manager.snapshots instead of manager.history

2. Removed unused variable full_history and dead code self._node_executors
   noqa comment from graph.py execute() method

3. Fixed ambiguous NON-BREAKING HYPHEN in state.py docstring

4. Restored removed public methods to ConversationStateManager:
   - clear_history(), load_checkpoint(), get_latest_checkpoint()
   - time_travel(), replace_state()
   - Added state property for backward compatibility

5. Fixed reset() to properly restore metadata from initial_state

6. Added BDD feature file and step definitions for conversation state
   management covering all 6 changed files

ISSUES CLOSED: #1
2026-06-18 09:49:41 -04:00
HAL9000 eba64663d1 Implement conversation state management 2026-06-18 09:49:41 -04:00
CleverAgents Bot 556de5f6f9 fix(events): restore event bus close and bridge semantics
CI / load-versions (push) Successful in 16s
CI / push-validation (push) Successful in 24s
CI / lint (push) Successful in 41s
CI / quality (push) Successful in 52s
CI / build (push) Successful in 39s
CI / security (push) Successful in 1m5s
CI / typecheck (push) Successful in 1m16s
CI / helm (push) Successful in 57s
CI / unit_tests (push) Successful in 5m54s
CI / integration_tests (push) Successful in 8m32s
CI / docker (push) Successful in 2m4s
CI / coverage (push) Successful in 11m53s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
2026-06-18 10:38:44 +00:00
controller-ci-rerun 4fd5393a62 chore: re-trigger CI [controller] 2026-06-18 10:38:44 +00:00
controller-ci-rerun 3195d1a59e chore: re-trigger CI [controller] 2026-06-18 10:38:44 +00:00
controller-ci-rerun 68eb026bfd chore: re-trigger CI [controller] 2026-06-18 10:38:44 +00:00
controller-ci-rerun 4b1eecd741 chore: re-trigger CI [controller] 2026-06-18 10:38:44 +00:00
HAL9000 d3a74aa86c fix(events): eliminate inline type ignores in event_bus_steps.py
Replace all # type: ignore[arg-type] and # type: ignore[misc] comments
with pyright-compatible alternatives: typing.cast() for intentional
type mismatches in error-handling tests, and explicit stub method bodies
for Protocol subclasses.
2026-06-18 10:38:44 +00:00
CleverThis Bot 339a5ad0e0 fix(ci): resolve ruff SIM105, E501, W291 lint errors in PR #11197 changes
- events.py: add missing contextlib import, use contextlib.suppress for
  TypeError/AttributeError try/except (SIM105)
- reactive.py: fix docstring line length (E501), remove trailing whitespace (W291)
- logging_bus.py: fix docstring line length (E501), remove trailing whitespace (W291)
2026-06-18 10:38:44 +00:00
HAL9000 432fd2c9a1 fix(events): add unsubscribe() to EventBus protocol and implementations 2026-06-18 10:38:44 +00:00
HAL9000 76b1a62f04 Merge pull request 'perf(ci): reduce CI quality check execution time by parallelizing and caching' (#10845) from test/v3.8.0-ci-quality-execution-time into master
CI / load-versions (push) Successful in 16s
CI / push-validation (push) Successful in 28s
CI / lint (push) Successful in 56s
CI / build (push) Successful in 44s
CI / typecheck (push) Successful in 1m9s
CI / quality (push) Successful in 1m23s
CI / security (push) Successful in 1m30s
CI / helm (push) Successful in 47s
CI / unit_tests (push) Successful in 6m2s
CI / docker (push) Successful in 2m22s
CI / integration_tests (push) Successful in 10m59s
CI / coverage (push) Successful in 12m54s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
2026-06-18 08:20:48 +00:00
controller-ci-rerun f7eebf01e4 chore: re-trigger CI [controller]
CI / load-versions (pull_request) Successful in 16s
CI / push-validation (pull_request) Successful in 30s
CI / lint (pull_request) Successful in 45s
CI / quality (pull_request) Successful in 1m12s
CI / typecheck (pull_request) Successful in 1m35s
CI / security (pull_request) Successful in 1m36s
CI / build (pull_request) Successful in 48s
CI / helm (pull_request) Successful in 47s
CI / unit_tests (pull_request) Successful in 6m26s
CI / docker (pull_request) Successful in 2m18s
CI / integration_tests (pull_request) Successful in 10m54s
CI / coverage (pull_request) Successful in 12m21s
CI / status-check (pull_request) Successful in 4s
2026-06-18 04:00:46 -04:00
controller-ci-rerun d227205020 chore: re-trigger CI [controller] 2026-06-18 04:00:46 -04:00
controller-ci-rerun c48fa88e75 chore: re-trigger CI [controller] 2026-06-18 04:00:46 -04:00
controller-ci-rerun 40a4c83028 chore: re-trigger CI [controller] 2026-06-18 04:00:46 -04:00
controller-ci-rerun 04c90ba78f chore: re-trigger CI [controller] 2026-06-18 04:00:46 -04:00
HAL9000 9cd0748dd6 fix(tests): update coverage job dependency assertions to unit_tests
The coverage job in ci.yml was updated to depend on unit_tests only
(removing lint/typecheck which are independent static-analysis jobs).
Two BDD scenarios still asserted the old lint+typecheck dependency,
causing unit_tests gate failures. Updated both scenarios and the
step definition to assert the correct unit_tests dependency.

ISSUES CLOSED: #1641
2026-06-18 04:00:46 -04:00
HAL9000 f60c996000 perf(ci): reduce CI quality check execution time by parallelizing and caching
Key optimisations applied to .forgejo/workflows/ci.yml:

1. Remove unnecessary needs: [lint, typecheck, security, quality] from the
   coverage job. Coverage runs the full unit-test suite independently under
   slipcover and does not depend on static-analysis results. Removing this
   dependency allows coverage to start immediately in parallel with all other
   jobs, eliminating a sequential bottleneck that forced coverage to wait for
   four upstream jobs before it could begin.

2. Reduce docker job gate from needs: [lint, typecheck, security, quality,
   unit_tests] to needs: [unit_tests] only. The Docker image build does not
   require static-analysis results to succeed; gating on unit_tests alone is
   sufficient to ensure the image is built from tested code.

3. Add uv.lock to all cache keys (was pyproject.toml only). Including the
   lock file produces a more precise cache key: a dependency version bump now
   correctly invalidates the cache, and unchanged lock files yield higher hit
   rates across PRs that only touch source code.

4. Add per-job .nox virtualenv caching for all jobs (lint, typecheck,
   security, quality, unit_tests, integration_tests, e2e_tests, coverage,
   build). On cache hit, nox skips the full uv pip install step, saving
   30-90 s of package installation time per job per run.

Expected aggregate wall-clock reduction: >50% vs the 3556 s baseline
(target: <=1778 s over 20 PRs), primarily from parallelising coverage and
reducing per-job install overhead via nox venv caching.

ISSUES CLOSED: #1641
2026-06-18 04:00:46 -04:00
HAL9000 93e1ca8bb6 Merge pull request 'fix(cleanup): invalidate sandbox_dirs_cache after purge (#7527)' (#11010) from fix-sandbox-cache-invalidation into master
CI / load-versions (push) Successful in 16s
CI / push-validation (push) Successful in 27s
CI / lint (push) Successful in 1m3s
CI / quality (push) Successful in 1m6s
CI / build (push) Successful in 1m4s
CI / security (push) Successful in 1m14s
CI / typecheck (push) Successful in 1m14s
CI / helm (push) Successful in 44s
CI / unit_tests (push) Successful in 6m28s
CI / docker (push) Successful in 2m26s
CI / integration_tests (push) Successful in 11m0s
CI / coverage (push) Successful in 13m25s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
2026-06-18 07:55:55 +00:00
controller-ci-rerun 85e36369bd chore: re-trigger CI [controller]
CI / load-versions (pull_request) Successful in 18s
CI / push-validation (pull_request) Successful in 26s
CI / build (pull_request) Successful in 40s
CI / lint (pull_request) Successful in 48s
CI / quality (pull_request) Successful in 52s
CI / typecheck (pull_request) Successful in 1m20s
CI / security (pull_request) Successful in 1m21s
CI / helm (pull_request) Successful in 47s
CI / unit_tests (pull_request) Successful in 5m59s
CI / docker (pull_request) Successful in 2m30s
CI / integration_tests (pull_request) Successful in 10m29s
CI / coverage (pull_request) Successful in 12m16s
CI / status-check (pull_request) Successful in 3s
2026-06-18 03:28:57 -04:00
controller-ci-rerun 0e807f8f5e chore: re-trigger CI [controller]
CI / load-versions (pull_request) Successful in 31s
CI / push-validation (pull_request) Successful in 36s
CI / build (pull_request) Successful in 54s
CI / integration_tests (pull_request) Failing after 56s
CI / quality (pull_request) Successful in 59s
CI / lint (pull_request) Successful in 1m4s
CI / typecheck (pull_request) Successful in 1m31s
CI / security (pull_request) Successful in 1m32s
CI / helm (pull_request) Successful in 1m23s
CI / unit_tests (pull_request) Successful in 6m23s
CI / docker (pull_request) Successful in 2m32s
CI / coverage (pull_request) Successful in 13m50s
CI / status-check (pull_request) Failing after 4s
2026-06-18 03:03:26 -04:00
HAL9000 ffa0a3b3bf fix(acms): defer settings strategy auto-load past _strategies/_logger init
The previous ACMSPipeline.__init__ invoked _load_strategies_from_settings
at line 831 before self._strategies (line 834) and self._logger (line 864)
were initialized.  When a Settings whose context dict contained a
'strategies' key was passed in, the method body raised AttributeError on
'self._strategies', and the except handler then raised a second
AttributeError on 'self._logger' that propagated out of __init__ and
crashed pipeline construction entirely.

Move the auto-load call to after both attributes are bound.  Convert the
pytest-shaped tests/strategies/test_strategy_registry.py (which the
behave-based unit_tests gate never ran) into a behave feature file +
step definitions under features/, matching the project's BDD convention
and bringing the strategy auto-loading paths under actual CI coverage.

ISSUES CLOSED: #7527
2026-06-18 03:03:26 -04:00
CleverAgents Bot 35ecfda7d4 ci: rerun sandbox cache invalidation gates 2026-06-18 03:03:26 -04:00
controller-ci-rerun e9fd57d401 chore: re-trigger CI [controller] 2026-06-18 03:03:26 -04:00
CleverAgents Bot 53803c5e73 fix(acms): align strategy registry types 2026-06-18 03:03:26 -04:00