Files
cleveragents-core/features/tdd_server_connect_atomic_writes.feature
brent.edwards c2d84c6f09 bug(cli): server_connect writes three config values non-atomically — partial update on failure
Make server_connect config persistence all-or-nothing by snapshotting ~/.cleveragents/config.toml before the three set_value calls and restoring the exact prior bytes on any exception. This preserves existing config-change audit events on success while preventing partially written server URL/namespace/TLS state after mid-sequence failures.\n\nAlso promote the #993 TDD feature from expected-fail to active regression coverage and tighten a flaky resource DAG Robot scenario by using a shared session with explicit commits to keep integration gates stable under parallel execution.

ISSUES CLOSED: #993
2026-04-26 17:34:52 +00:00

44 lines
2.4 KiB
Gherkin

@tdd_issue @tdd_issue_993
Feature: TDD Issue #993 — server_connect writes three config values non-atomically
As a developer
I want to verify that server_connect writes all three config values atomically
So that a partial failure does not leave the configuration in a half-written state
# This test captures bug #993: server_connect in server.py makes three
# sequential set_value() calls (server.url, server.namespace, server.tls-verify)
# with no try/except, no transaction, and no rollback. If the second call
# fails (e.g. disk full, permissions error), server.url is already persisted
# but server.namespace and server.tls-verify retain their old values. The
# config is left in a half-written state.
#
# Expected behavior: all three config values are written atomically either
# all succeed or all fail (rollback to original state).
#
# This scenario now runs as a normal regression test after the fix for #993.
Scenario: Config remains unchanged when second set_value fails during server_connect
Given a fresh config directory for atomic write test
And the config has pre-existing server values
When I invoke server_connect but set_value fails on the second call
Then an error should have been raised during server_connect
And the config should have rolled back server.url to its original value
And the config should still have the original server.namespace
And the config should still have the original server.tls-verify
And the config event trail should include a compensating rollback for server.url
Scenario: Config remains unchanged when third set_value fails during server_connect
Given a fresh config directory for atomic write test
And the config has pre-existing server values
When I invoke server_connect but set_value fails on the third call
Then an error should have been raised during server_connect
And the config should have rolled back server.url to its original value
And the config should have rolled back server.namespace to its original value
And the config should still have the original server.tls-verify
Scenario: No partial server.url persisted when namespace write raises
Given a fresh config directory for atomic write test
And the config has no server values
When I invoke server_connect but set_value fails on the second call
Then an error should have been raised during server_connect
And the config should not contain a server.url value