Ruby's Most Advanced Authentication Framework
This report summarizes scanner evidence for jeremyevans/rodauth, a Ruby project with 1,945 GitHub stars. SynthScan examined 42,243 lines of code across 198 source files, recording 71 pattern matches distributed across 2 syntactic categories. The legacy adjusted pattern signal is 1.8 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 67 finding(s).
Are imports declared and package/API names verified? 4 finding(s).
Are wrappers, guards, and repeated structures necessary? 67 finding(s).
Which changes need focused human review? 71 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 71 distinct pattern matches across 2 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spec/spec_helper.rb | 474 | def jwt_refresh_validate_login(res) | CODE |
| LOW | spec/http_basic_auth_spec.rb | 19 | def newline_basic_auth_json_request(opts={}) | CODE |
| LOW | lib/rodauth.rb | 80 | def def_configuration_methods(feature) | CODE |
| LOW | lib/rodauth.rb | 209 | def configuration_module_eval(&block) | CODE |
| LOW | lib/rodauth/features/base.rb | 548 | def over_max_bytesize_param_value(key, value) | CODE |
| LOW | lib/rodauth/features/base.rb | 562 | def null_byte_parameter_value(key, value) | CODE |
| LOW | lib/rodauth/features/base.rb | 623 | def convert_response_header_key(key) | CODE |
| LOW | lib/rodauth/features/base.rb | 669 | def missing_recommended_configuration(msg) | CODE |
| LOW | lib/rodauth/features/base.rb | 718 | def convert_token_id_to_integer(id) | CODE |
| LOW | lib/rodauth/features/base.rb | 762 | def normalize_session_or_flash_key(key) | CODE |
| LOW⚡ | lib/rodauth/features/base.rb | 783 | def set_redirect_error_status(status) | CODE |
| LOW⚡ | lib/rodauth/features/base.rb | 786 | def set_response_error_status(status) | CODE |
| LOW⚡ | lib/rodauth/features/base.rb | 790 | def set_response_error_reason_status(reason, status) | CODE |
| LOW | lib/rodauth/features/base.rb | 904 | def compute_raw_hmac_with_secret(data, secret) | CODE |
| LOW | lib/rodauth/features/base.rb | 959 | def retry_on_uniqueness_violation(&block) | CODE |
| LOW | lib/rodauth/features/base.rb | 1019 | def set_session_return_to_path(session_key, path=request.fullpath) | CODE |
| LOW | lib/rodauth/features/jwt_refresh.rb | 96 | def account_from_refresh_token(token) | CODE |
| LOW | lib/rodauth/features/jwt_refresh.rb | 124 | def _account_from_refresh_token(token) | CODE |
| LOW | lib/rodauth/features/jwt_refresh.rb | 140 | def _account_refresh_token_split(token) | CODE |
| LOW⚡ | lib/rodauth/features/jwt_refresh.rb | 182 | def jwt_refresh_token_account_ds(account_id) | CODE |
| LOW⚡ | lib/rodauth/features/jwt_refresh.rb | 186 | def jwt_refresh_token_account_token_ds(account_id, token_id) | CODE |
| LOW⚡ | lib/rodauth/features/jwt_refresh.rb | 195 | def remove_jwt_refresh_token_key(token) | CODE |
| LOW | lib/rodauth/features/jwt_refresh.rb | 211 | def set_jwt_refresh_token_hmac_session_key(token) | CODE |
| LOW | lib/rodauth/features/json.rb | 236 | def set_redirect_error_status(status) | CODE |
| LOW | lib/rodauth/features/json.rb | 242 | def set_response_error_status(status) | CODE |
| LOW | lib/rodauth/features/disallow_password_reuse.rb | 27 | def add_previous_password_hash(hash) | CODE |
| LOW | lib/rodauth/features/verify_account.rb | 199 | def account_from_verify_account_key(key) | CODE |
| LOW | lib/rodauth/features/verify_account.rb | 319 | def _account_from_verify_account_key(token) | CODE |
| LOW | lib/rodauth/features/reset_password.rb | 183 | def account_from_reset_password_key(key) | CODE |
| LOW | lib/rodauth/features/reset_password.rb | 260 | def _account_from_reset_password_key(token) | CODE |
| LOW | lib/rodauth/features/password_expiration.rb | 45 | def account_from_reset_password_key(key) | CODE |
| LOW | lib/rodauth/features/audit_logging.rb | 58 | def serialize_audit_log_metadata(metadata) | CODE |
| LOW | lib/rodauth/features/audit_logging.rb | 62 | def audit_log_message_default(action) | CODE |
| LOW⚡ | lib/rodauth/features/verify_login_change.rb | 124 | def account_from_verify_login_change_key(key) | CODE |
| LOW⚡ | lib/rodauth/features/verify_login_change.rb | 128 | def send_verify_login_change_email(login) | CODE |
| LOW⚡ | lib/rodauth/features/verify_login_change.rb | 136 | def get_verify_login_change_login_and_key(id) | CODE |
| LOW | lib/rodauth/features/verify_login_change.rb | 182 | def create_verify_login_change_key(login) | CODE |
| LOW | lib/rodauth/features/verify_login_change.rb | 198 | def verify_login_change_key_insert_hash(login) | CODE |
| LOW | lib/rodauth/features/verify_login_change.rb | 204 | def create_verify_login_change_email(login) | CODE |
| LOW | lib/rodauth/features/verify_login_change.rb | 216 | def _account_from_verify_login_change_key(token) | CODE |
| LOW | lib/rodauth/features/webauthn.rb | 439 | def webauthn_form_submission_call(meth, arg) | CODE |
| LOW | lib/rodauth/features/webauthn.rb | 443 | def _override_webauthn_credential_response_verify(webauthn_credential) | CODE |
| LOW | lib/rodauth/features/webauthn.rb | 456 | def webauthn_form_submission_call(meth, arg) | CODE |
| LOW | lib/rodauth/features/webauthn.rb | 460 | def _override_webauthn_credential_response_verify(webauthn_credential) | CODE |
| LOW | lib/rodauth/features/active_sessions.rb | 79 | def handle_duplicate_active_session_id(_e) | CODE |
| LOW | lib/rodauth/features/active_sessions.rb | 102 | def remove_all_active_sessions_except_for(session_id) | CODE |
| LOW | lib/rodauth/features/argon2.rb | 70 | def extract_password_hash_cost(hash) | CODE |
| LOW | lib/rodauth/features/argon2.rb | 88 | def extract_password_hash_cost(hash) | CODE |
| LOW | lib/rodauth/features/two_factor_base.rb | 149 | def require_two_factor_not_authenticated(auth_type = nil) | CODE |
| LOW | lib/rodauth/features/two_factor_base.rb | 256 | def two_factor_remove_session(type) | CODE |
| LOW | lib/rodauth/features/two_factor_base.rb | 264 | def two_factor_update_session(auth_type) | CODE |
| LOW | lib/rodauth/features/lockout.rb | 175 | def _setup_account_lockouts_hash(account_id, key) | CODE |
| LOW | …b/rodauth/features/login_password_requirements_base.rb | 132 | def set_password_requirement_error_message(reason, message) | CODE |
| LOW | …b/rodauth/features/login_password_requirements_base.rb | 153 | def set_login_requirement_error_message(reason, message) | CODE |
| LOW | …b/rodauth/features/login_password_requirements_base.rb | 233 | def extract_password_hash_cost(hash) | CODE |
| LOW | lib/rodauth/features/internal_request.rb | 193 | def _set_internal_request_return_value(value) | CODE |
| LOW | lib/rodauth/features/internal_request.rb | 198 | def _return_from_internal_request(value) | CODE |
| LOW | lib/rodauth/features/internal_request.rb | 225 | def _handle_internal_request_eval(_) | CODE |
| LOW | lib/rodauth/features/internal_request.rb | 230 | def _handle_account_id_for_login(_) | CODE |
| LOW⚡ | lib/rodauth/features/internal_request.rb | 255 | def _handle_account_id_for_remember_key(request) | CODE |
| 7 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spec/rodauth_spec.rb | 665 | @app.rodauth.create_account(login: "user@example.com", password: "secret") | CODE |
| LOW | spec/rodauth_spec.rb | 666 | @app.rodauth.account_exists?(login: "user@example.com").must_equal true | CODE |
| LOW | spec/close_account_spec.rb | 95 | account_ds.update(:email => 'foo@bar.com', :status_id=>3) | CODE |
| LOW | spec/close_account_spec.rb | 116 | DB[:accounts].select_map(:email).must_equal ['foo@bar.com'] | CODE |