*** Settings *** Documentation SEC5 - Secrets masking integration smoke tests Library OperatingSystem Library Collections Library String Library Process Resource ${CURDIR}/common.resource *** Variables *** ${SRC_DIR} ${CURDIR}/../src/cleveragents *** Test Cases *** Redaction Module Exists [Documentation] Verify the redaction module is present File Should Exist ${SRC_DIR}/shared/redaction.py Logging Config Module Exists [Documentation] Verify the structlog config module is present File Should Exist ${SRC_DIR}/config/logging.py Redaction Module Exports Expected Symbols [Documentation] Verify redaction.py exports the public API ${content}= Get File ${SRC_DIR}/shared/redaction.py Should Contain ${content} def redact_value Should Contain ${content} def redact_dict Should Contain ${content} def is_sensitive_key Should Contain ${content} def mask_database_url Should Contain ${content} def register_pattern Should Contain ${content} def secrets_masking_processor Should Contain ${content} def get_show_secrets Should Contain ${content} def set_show_secrets Should Contain ${content} REDACTED Main CLI Declares Show Secrets Option [Documentation] Verify --show-secrets global option is wired in ${content}= Get File ${SRC_DIR}/cli/main.py Should Contain ${content} --show-secrets Should Contain ${content} show_secrets_callback CLI Error Handlers Use Redaction [Documentation] Verify error handlers in main.py use structured error classification with redaction ${content}= Get File ${SRC_DIR}/cli/main.py Should Contain ${content} classify_error Should Contain ${content} wrap_unexpected Formatting Module Applies Redaction [Documentation] Verify format_output applies dict redaction ${content}= Get File ${SRC_DIR}/cli/formatting.py Should Contain ${content} _redact_data Should Contain ${content} safe_data Settings Has Show Secrets Field [Documentation] Verify Settings model includes show_secrets field ${content}= Get File ${SRC_DIR}/config/settings.py Should Contain ${content} show_secrets: bool Should Contain ${content} CLEVERAGENTS_SHOW_SECRETS Settings Has Safe Repr [Documentation] Verify Settings.__repr__ masks sensitive values ${content}= Get File ${SRC_DIR}/config/settings.py Should Contain ${content} def __repr__ Should Contain ${content} is_sensitive_key Redaction Module Does Not Use Eval Or Exec [Documentation] Security check: no eval/exec in redaction module ${content}= Get File ${SRC_DIR}/shared/redaction.py Should Not Contain ${content} eval( Should Not Contain ${content} exec( Logging Config Integrates Masking Processor [Documentation] Verify structlog config uses secrets_masking_processor ${content}= Get File ${SRC_DIR}/config/logging.py Should Contain ${content} secrets_masking_processor Should Contain ${content} configure_structlog