@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
