Your favorite self-hostable alternative to Google Timeline (Google Location History)
This report summarizes scanner evidence for Freika/dawarich, a Ruby project with 10,787 GitHub stars. SynthScan examined 385,511 lines of code across 3025 source files, recording 521 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.9 (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? 450 finding(s).
Are imports declared and package/API names verified? 59 finding(s).
Are wrappers, guards, and repeated structures necessary? 243 finding(s).
Which changes need focused human review? 521 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 521 distinct pattern matches across 13 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 | app/queries/points/vector_tile_query.rb | 216 | def translated_geom_expression(shift) | CODE |
| LOW | app/queries/stats/daily_distance_query.rb | 120 | def convert_to_daily_distances(distance_by_day_map) | CODE |
| LOW | app/queries/stats/daily_distance_query.rb | 147 | def validate_minutes_between_routes(minutes) | CODE |
| LOW | app/models/stat.rb | 169 | def report_malformed_toponyms(raw, sanitized) | CODE |
| LOW | app/models/stat.rb | 199 | def calculate_daily_distances(monthly_points) | CODE |
| LOW | app/models/track.rb | 383 | def report_post_commit_failure(event, error) | CODE |
| LOW | app/models/track.rb | 394 | def record_post_commit_failure_metric(event) | CODE |
| LOW | app/models/trip.rb | 288 | def select_dominant_orientation(photos) | CODE |
| LOW | app/models/user.rb | 315 | def generate_subscription_token(plan: nil, interval: nil, variant: nil) | CODE |
| LOW | app/models/concerns/calculateable.rb | 58 | def convert_distance_for_storage(calculated_distance_meters) | CODE |
| LOW | app/models/concerns/distanceable.rb | 23 | def calculate_distance_for_array_geocoder(points, unit = :km) | CODE |
| LOW | app/models/concerns/distanceable.rb | 109 | def calculate_distance_for_relation(unit, relation = all) | CODE |
| LOW | app/models/concerns/distanceable.rb | 139 | def calculate_distance_for_array(points, unit = :km) | CODE |
| LOW | app/models/concerns/distanceable.rb | 151 | def calculate_batch_distances(points) | CODE |
| LOW | app/models/concerns/nearable.rb | 54 | def extract_coordinates_and_options(*args) | CODE |
| LOW | app/models/concerns/archivable.rb | 163 | def handle_archive_fetch_error(error) | CODE |
| LOW | app/serializers/stats_serializer.rb | 68 | def countries_and_cities_from_stats(stats) | CODE |
| LOW | …javascript/maps_maplibre/utils/realtime_date_filter.js | 26 | export function pointMatchesActiveDateRange(timestamp, range = {}) { | CODE |
| LOW | app/javascript/maps_maplibre/utils/format_helpers.js | 29 | export function minutesToDaysHoursMinutes(minutes) { | CODE |
| LOW | …javascript/maps_maplibre/utils/geojson_transformers.js | 11 | export function simplifyPointsForRendering(points) { | CODE |
| LOW | app/javascript/maps_maplibre/utils/tile_freshness.js | 11 | export function setPrivacyZonesFingerprint(fingerprint) { | CODE |
| LOW | app/javascript/maps_maplibre/trip/photos.js | 53 | export function setTripReplayPhotosActive(controller, active) { | CODE |
| LOW | …vascript/controllers/maps/maplibre/map_data_manager.js | 16 | export class MapDataManager { | CODE |
| LOW | app/jobs/trek/import_trips_job.rb | 89 | def finish_unauthorized_import(source) | CODE |
| LOW | …/data_migrations/recalculate_per_tracker_tracks_job.rb | 38 | def backfill_google_records_devices(user) | CODE |
| LOW | app/jobs/data_migrations/cleanup_null_island_job.rb | 43 | def destroy_null_island_visits(user) | CODE |
| LOW | app/jobs/tracks/realtime_generation_job.rb | 44 | def enqueue_reverse_geocoding(user) | CODE |
| LOW | app/jobs/tracks/daily_generation_job.rb | 44 | def process_user_daily_tracks(user) | CODE |
| LOW | app/jobs/tracks/time_chunk_processor_job.rb | 111 | def create_track_from_points_array(points) | CODE |
| LOW | app/jobs/enhanced_import/extract_job.rb | 21 | def fail_after_deadlock_retries(error) | CODE |
| LOW | app/jobs/imports/destroy_job.rb | 56 | def broadcast_deletion_complete(import) | CODE |
| LOW | app/jobs/users/import_data_job.rb | 71 | def create_import_failed_notification(user, error) | CODE |
| LOW | app/jobs/users/recalculate_data_job.rb | 106 | def create_success_notification(years_to_process) | CODE |
| LOW | app/jobs/users/recalculate_data_job.rb | 127 | def create_failure_notification(error) | CODE |
| LOW | app/jobs/users/digests/monthly/calculating_job.rb | 23 | def create_digest_failed_notification(user_id, error) | CODE |
| LOW | app/jobs/users/digests/yearly/calculating_job.rb | 21 | def recalculate_monthly_stats(user_id, year) | CODE |
| LOW | app/jobs/users/digests/yearly/calculating_job.rb | 29 | def create_digest_failed_notification(user_id, error) | CODE |
| LOW | app/jobs/points/anomaly_backfill_user_job.rb | 76 | def run_filter_in_monthly_chunks(user, step, invalidate_dependents:) | CODE |
| LOW | app/jobs/stats/calculating_job.rb | 21 | def create_stats_update_failed_notification(user_id, error) | CODE |
| LOW | app/controllers/application_controller.rb | 347 | def apply_date_time_preferences(&) | CODE |
| LOW | app/controllers/visits_controller.rb | 256 | def build_bulk_update_streams(status, count) | CODE |
| LOW | app/controllers/visits_controller.rb | 315 | def update_visit_label_from_place(place_id) | CODE |
| LOW | app/controllers/visits_controller.rb | 384 | def build_bulk_destroy_streams(count) | CODE |
| LOW | app/controllers/visits_controller.rb | 442 | def message_for_missing_visits(ids) | CODE |
| LOW | app/controllers/visits_controller.rb | 461 | def bulk_destroy_success_message(count) | CODE |
| LOW | app/controllers/visits_controller.rb | 465 | def bulk_update_success_message(status, count) | CODE |
| LOW | app/controllers/places_controller.rb | 255 | def save_place_and_attach_visit(visit) | CODE |
| LOW | app/controllers/imports_controller.rb | 153 | def create_import_from_signed_id(item) | CODE |
| LOW | app/controllers/imports_controller.rb | 180 | def verified_original_filename(blob, descriptor) | CODE |
| LOW | app/controllers/imports_controller.rb | 196 | def generate_unique_import_name(original_name) | CODE |
| LOW | app/controllers/settings/general_controller.rb | 92 | def test_email_error_description(error) | CODE |
| LOW | app/controllers/settings/users_controller.rb | 188 | def create_import_from_signed_archive_id(signed_id) | CODE |
| LOW | app/controllers/settings/users_controller.rb | 206 | def generate_unique_import_name(original_name) | CODE |
| LOW | app/controllers/users/registrations_controller.rb | 124 | def after_inactive_sign_up_path_for(resource) | CODE |
| LOW | app/controllers/users/registrations_controller.rb | 210 | def accept_invitation_for_user(user) | CODE |
| LOW | app/controllers/api/v1/photos_controller.rb | 46 | def handle_thumbnail_response(upstream) | CODE |
| LOW | app/controllers/api/v1/subscriptions_controller.rb | 139 | def advance_last_seen_watermark(decoded) | CODE |
| LOW | app/controllers/api/v1/imports_controller.rb | 63 | def generate_unique_import_name(original_name) | CODE |
| LOW | app/controllers/api/v1/maps/hexagons_controller.rb | 115 | def hexagon_privacy_zone_masker(context) | CODE |
| LOW | app/controllers/api/v1/auth/sessions_controller.rb | 47 | def constant_time_authenticate(user, password) | CODE |
| 171 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/models/concerns/nearable.rb | 20 | # Create a point from the given coordinates | COMMENT |
| MEDIUM | app/services/google_maps/records_storage_importer.rb | 3 | # This class is used to import Google's Records.json file | COMMENT |
| MEDIUM | app/services/google_maps/records_importer.rb | 3 | # This class is used to import Google's Records.json file | COMMENT |
| MEDIUM | app/services/tasks/imports/google_records.rb | 3 | # This class is named based on Google Takeout's Records.json file | COMMENT |
| MEDIUM | app/services/tracks/track_builder.rb | 5 | # This module provides the core functionality for converting arrays of GPS points into | COMMENT |
| MEDIUM | app/services/tracks/segmentation.rb | 5 | # This module provides the core algorithm for determining where one track ends | COMMENT |
| MEDIUM | app/services/tracks/session_manager.rb | 16 | # Create a new session | COMMENT |
| MEDIUM | config/initializers/permissions_policy.rb | 5 | # Define an application-wide HTTP permissions policy. For further | COMMENT |
| MEDIUM | config/initializers/content_security_policy.rb | 5 | # Define an application-wide content security policy. | COMMENT |
| MEDIUM | config/initializers/03_dawarich_settings.rb | 60 | # This class is defined in an initializer, so it can run before the autoloader | COMMENT |
| MEDIUM | spec/integration/family_privacy_spec.rb | 146 | # Create an expired request 30 minutes ago | COMMENT |
| MEDIUM | spec/integration/family_privacy_spec.rb | 162 | # Create a pending request from A to B | COMMENT |
| MEDIUM | spec/models/concerns/point_validation_spec.rb | 6 | # Create a test class that includes the concern | COMMENT |
| MEDIUM | spec/models/concerns/user_family_spec.rb | 151 | # Create a point from 13 months ago | COMMENT |
| MEDIUM | spec/requests/authentication_spec.rb | 288 | # Create an expired invitation | COMMENT |
| MEDIUM | spec/jobs/application_job_spec.rb | 7 | # Create a concrete job class to test the helper | COMMENT |
| MEDIUM | spec/jobs/trips/calculate_countries_job_spec.rb | 20 | points # Create the points | CODE |
| MEDIUM | spec/jobs/concerns/user_timezone_spec.rb | 6 | # Create a dummy class that includes the concern | COMMENT |
| MEDIUM | …ec/services/google_maps/phone_takeout_importer_spec.rb | 18 | # This file contains 3 duplicates | COMMENT |
| MEDIUM | …ec/services/google_maps/phone_takeout_importer_spec.rb | 50 | # This file contains 4 duplicates | COMMENT |
| MEDIUM | …/services/google_maps/records_storage_importer_spec.rb | 148 | # Create a mock that will return a successful result | COMMENT |
| MEDIUM | …/services/google_maps/records_storage_importer_spec.rb | 153 | # Create the downloader mock before it gets used | COMMENT |
| MEDIUM | …/services/google_maps/records_storage_importer_spec.rb | 172 | # Create the downloader mock before it gets used - expect only one call from the importer | COMMENT |
| MEDIUM | spec/services/cache/clean_spec.rb | 93 | # Create a user that will be found during the cleaning process | COMMENT |
| MEDIUM | spec/services/cache/clean_spec.rb | 101 | # Create a new user while iterating - this should not cause errors | COMMENT |
| MEDIUM | spec/services/visits/find_within_bounding_box_spec.rb | 9 | # Define a bounding box for testing | COMMENT |
| MEDIUM | spec/services/visits/find_within_bounding_box_spec.rb | 75 | # Create a visit for another user inside the bounding box | COMMENT |
| MEDIUM | spec/services/tracks/track_builder_spec.rb | 6 | # Create a test class that includes the concern for testing | COMMENT |
| MEDIUM | spec/services/tracks/parallel_generator_spec.rb | 214 | # Create a proper mock and stub user.safe_settings to return it | COMMENT |
| MEDIUM | spec/services/tracks/incremental_generator_spec.rb | 140 | # Create an existing track that ended recently | COMMENT |
| MEDIUM | spec/services/overland/params_spec.rb | 7 | # This file contains one valid point and one invalid point w/out coordinates | COMMENT |
| MEDIUM | spec/services/imports/secure_file_downloader_spec.rb | 10 | # Create a mock that mimics ActiveStorage::Attached::One | COMMENT |
| MEDIUM | spec/services/users/export_import_integration_spec.rb | 145 | # Create a user with specific places and visits | COMMENT |
| MEDIUM | spec/services/users/export_import_integration_spec.rb | 168 | # Create a visit without a place | COMMENT |
| MEDIUM | spec/services/users/export_import_integration_spec.rb | 457 | # Create a v1 format archive with data.json | COMMENT |
| MEDIUM | spec/services/users/import_data/imports_spec.rb | 114 | # Create an existing import with same name, source, and created_at | COMMENT |
| MEDIUM | spec/services/users/import_data/trips_spec.rb | 147 | # Create an existing trip with same name and times | COMMENT |
| MEDIUM | spec/services/users/import_data/stats_spec.rb | 78 | # Create an existing stat with same year and month | COMMENT |
| MEDIUM | spec/services/users/import_data/points_spec.rb | 29 | country # Create the country | CODE |
| MEDIUM | …c/services/users/import_data/raw_data_archives_spec.rb | 79 | # Create a gzip test file | COMMENT |
| MEDIUM | spec/services/users/import_data/exports_spec.rb | 107 | # Create the file in the files directory | COMMENT |
| MEDIUM | spec/services/users/import_data/notifications_spec.rb | 70 | # Create an existing notification with same title, content, and created_at | COMMENT |
| MEDIUM | spec/services/users/digests/calculate_year_spec.rb | 201 | # Create the monthly stats | COMMENT |
| MEDIUM | db/schema.rb | 1 | # This file is auto-generated from the current state of the database. Instead | COMMENT |
| MEDIUM | db/schema.rb | 5 | # This file is the source Rails uses to define your schema when running `bin/rails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/queries/stats_query.rb | 21 | } | COMMENT |
| LOW | app/queries/tracks/vector_tile_query.rb | 21 | # (same pattern as Points::VectorTileQuery). | COMMENT |
| LOW | app/queries/points/vector_tile_query.rb | 21 | MIN_PREFILTER_ZOOM = 2 | COMMENT |
| LOW | app/models/point.rb | 61 | end | COMMENT |
| LOW | app/models/concerns/distance_convertible.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/models/concerns/point_dimension_reads.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/javascript/channels/imports_channel.js | 1 | // Imports channel subscriptions are handled by: | COMMENT |
| LOW | app/javascript/channels/index.js | 1 | // Import all the channels to be used by Action Cable | COMMENT |
| LOW | app/javascript/channels/notifications_channel.js | 1 | // Notifications channel subscriptions are handled by: | COMMENT |
| LOW | app/jobs/data_migrations/drop_legacy_lat_lon_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …/jobs/data_migrations/backfill_point_country_id_job.rb | 101 | COMMENT | |
| LOW | …jobs/data_migrations/recalculate_anomalies_user_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/jobs/data_migrations/recalculate_anomalies_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/jobs/data_migrations/recalculate_anomalies_job.rb | 61 | COMMENT | |
| LOW | app/jobs/data_migrations/recalculate_anomalies_job.rb | 101 | # "re-running only picks up what is left" contract false for exactly the | COMMENT |
| LOW | …/jobs/data_migrations/backfill_point_dimensions_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/jobs/tracks/throttled_backfill_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/jobs/tracks/realtime_generation_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/jobs/tracks/daily_generation_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/controllers/concerns/partnero_trackable.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/assets/config/manifest.js | 1 | //= link rails-ujs.js | COMMENT |
| LOW | app/helpers/timeline_helper.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/responsive_qr_svg.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/tile_epoch.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …vices/google_maps/records_device_tag_stream_handler.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/auth/internal_token_secret.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/auth/mobile_handoff_secret.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/visits/detection/policy.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/tracks/track_builder.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/tracks/track_builder.rb | 21 | # - Elevation gain/loss: Cumulative ascent and descent in meters | COMMENT |
| LOW | app/services/tracks/track_builder.rb | 41 | # # Track now exists with calculated statistics | COMMENT |
| LOW | app/services/tracks/merger.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/tracks/segmentation.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/tracks/segmentation.rb | 21 | # The maps intentionally ignore the distance threshold because haversineDistance() | COMMENT |
| LOW | app/services/tracks/stationary_stops.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/tracks/incremental_generator.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/tracks/realtime_debouncer.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/geocoding/rate_limits.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/geocoding/result_normalizer.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/geocoding/rate_limiter.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/users/import_data.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/users/import_data.rb | 161 | # Recompute instead of importing the flags: it also covers archives written | COMMENT |
| LOW | app/services/users/export_data.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/users/export_data.rb | 21 | # ├── raw_data_archives.jsonl # One archive record per line | COMMENT |
| LOW | app/services/users/export_data.rb | 41 | # "dawarich_version": "1.0.0", | COMMENT |
| LOW | app/services/users/import_data/v2_handler.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/users/import_data/v2_handler.rb | 21 | # ├── points/ # Points split by year/month | COMMENT |
| LOW | app/services/users/import_data/v1_handler.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/instance_settings/resolver.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/points/dimension_resolver.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/points/dimension_resolver.rb | 21 | # Returns rows with :source_id filled in. A no-op until the column exists — 20260816150000 can defer its ALTER to | COMMENT |
| LOW | app/services/points/device_tag_backfiller.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/points/anomaly_filter.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/points/anomaly_filter.rb | 21 | FROZEN_FIX_CONTEXT_POINTS = 240 | COMMENT |
| LOW | app/services/points/anomaly_filter.rb | 41 | # same stay, the excursion is far from it, and nothing was spent being there. | COMMENT |
| LOW | app/services/points/anomaly_filter.rb | 61 | # fixes — there the tower position is the only record there is, and erasing | COMMENT |
| LOW | app/services/points/anomaly_filter.rb | 181 | COMMENT | |
| LOW | app/services/points/anomaly_filter.rb | 441 | # ordinary points. The gate is the detour ceiling rather than the raw speed | COMMENT |
| LOW | app/services/timeline/month_summary.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/services/concerns/url_validatable.rb | 1 | # frozen_string_literal: true | COMMENT |
| 63 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spec/swagger/api/v1/auth/apple_controller_spec.rb | 44 | let(:payload) { { id_token: 'fake_token' } } | CODE |
| LOW | spec/swagger/api/v1/auth/apple_controller_spec.rb | 75 | let(:payload) { { id_token: 'fake_token' } } | CODE |
| LOW | spec/swagger/api/v1/auth/apple_controller_spec.rb | 90 | let(:payload) { { id_token: 'fake_token' } } | CODE |
| LOW | spec/swagger/api/v1/auth/google_controller_spec.rb | 44 | let(:payload) { { id_token: 'fake_token' } } | CODE |
| LOW | spec/swagger/api/v1/auth/google_controller_spec.rb | 75 | let(:payload) { { id_token: 'fake_token' } } | CODE |
| LOW | spec/swagger/api/v1/auth/google_controller_spec.rb | 90 | let(:payload) { { id_token: 'fake_token' } } | CODE |
| LOW | spec/models/family/invitation_spec.rb | 159 | valid_emails = ['test@example.com', 'user.name@domain.co.uk', 'user+tag@example.org'] | CODE |
| LOW | spec/requests/auth/account_links_spec.rb | 6 | let(:user) { create(:user, email: 'user@example.com') } | CODE |
| LOW | spec/requests/admin/settings_spec.rb | 505 | expect(form.css('input[type="number"]').map { |input| input['placeholder'] }).to eq(%w[51.3402 12.3712]) | CODE |
| LOW | spec/requests/users/registrations_spec.rb | 124 | email: 'user@example.com', | CODE |
| LOW | spec/requests/users/registrations_spec.rb | 132 | new_user = User.find_by(email: 'user@example.com') | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 26 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 37 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 55 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 88 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 103 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 107 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 124 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 127 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 148 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 167 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/google_spec.rb | 185 | post '/api/v1/auth/google', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 26 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 37 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 55 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 83 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 103 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 118 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 122 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 139 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 142 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 163 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 182 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 199 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/requests/api/v1/auth/apple_spec.rb | 220 | post '/api/v1/auth/apple', params: { id_token: 'fake_token' } | CODE |
| LOW | spec/views/map/timeline_feeds/day_spec.rb | 107 | expect(field['placeholder']).to eq('Corner Cafe') | CODE |
| LOW | spec/helpers/application_helper_spec.rb | 27 | let(:fake_user) { double(plan_restricted?: true, generate_subscription_token: 'test_token') } | CODE |
| LOW | spec/helpers/application_helper_spec.rb | 30 | allow(helper).to receive(:current_user).and_return(fake_user) | CODE |
| LOW | spec/helpers/application_helper_spec.rb | 87 | allow(user).to receive(:generate_subscription_token).and_return('fake_token') | CODE |
| LOW | spec/helpers/application_helper_spec.rb | 89 | expect(helper.subscription_upgrade_url(user)).to eq('https://manager.example.com/auth/dawarich?token=fake_token') | CODE |
| LOW | spec/services/auth/verify_google_token_spec.rb | 27 | .and_return({ 'sub' => 'google-user-id', 'email' => 'user@example.com' }) | CODE |
| LOW | spec/services/auth/verify_google_token_spec.rb | 31 | expect(result).to eq(sub: 'google-user-id', email: 'user@example.com') | CODE |
| LOW | spec/services/auth/verify_apple_token_spec.rb | 38 | email: 'user@example.com', | CODE |
| LOW | spec/services/auth/verify_apple_token_spec.rb | 49 | expect(claims[:email]).to eq('user@example.com') | CODE |
| LOW | spec/services/auth/verify_apple_token_spec.rb | 95 | email: 'user@example.com', | CODE |
| LOW | spec/services/auth/verify_apple_token_spec.rb | 113 | email: 'user@example.com', | CODE |
| LOW | spec/services/visits/names/builder_spec.rb | 75 | 'street' => '123 Main St', | CODE |
| LOW | spec/services/visits/names/builder_spec.rb | 102 | 'street' => '123 Main St', | CODE |
| LOW | spec/services/visits/names/suggester_spec.rb | 127 | 'street' => '123 Main St', | CODE |
| LOW | …c/services/reverse_geocoding/places/fetch_data_spec.rb | 767 | expect(place.name).to include('123 Main Street') | CODE |
| LOW | spec/services/users/export_data/points_spec.rb | 48 | geodata: { 'address' => '123 Main St' }, | CODE |
| LOW | spec/services/users/export_data/points_spec.rb | 101 | 'geodata' => '{"address": "123 Main St"}', # JSON string | CODE |
| LOW | spec/services/users/import_data/places_spec.rb | 14 | 'geodata' => { 'address' => '123 Main St' }, | CODE |
| LOW | spec/services/users/import_data/places_spec.rb | 47 | expect(home_place.geodata).to eq('address' => '123 Main St') | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | config/initializers/posthog.rb | 9 | # ============================================================================ | COMMENT |
| MEDIUM | config/initializers/posthog.rb | 11 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 52 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 54 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 60 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 62 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 69 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 71 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 108 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 110 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 119 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | config/initializers/posthog.rb | 121 | # ============================================================================ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/concerns/distanceable.rb | 33 | # Check if lonlat exists and is valid | COMMENT |
| LOW | app/models/concerns/distanceable.rb | 77 | # Check if Geocoder returned NaN or infinite value | COMMENT |
| LOW | app/models/concerns/distanceable.rb | 272 | # Check if Geocoder returned valid distance | COMMENT |
| LOW | app/jobs/tracks/time_chunk_processor_job.rb | 107 | # Check if segment overlaps with the actual chunk range (not buffer) | COMMENT |
| LOW | app/controllers/insights_controller.rb | 173 | # Check if essential data is missing | COMMENT |
| LOW | app/controllers/insights_controller.rb | 176 | # Check if stats have been updated since digest was last calculated | COMMENT |
| LOW | app/controllers/concerns/safe_timestamp_parser.rb | 20 | # Check if it's a valid parse by seeing if year is suspiciously at epoch | COMMENT |
| LOW⚡ | app/helpers/insights_helper.rb | 31 | # Check if previous month exists in available months (same year only for simplicity) | COMMENT |
| LOW⚡ | app/helpers/insights_helper.rb | 40 | # Check if next month exists in available months (same year only for simplicity) | COMMENT |
| LOW | app/helpers/insights_helper.rb | 176 | # Check if activity breakdown has meaningful data | COMMENT |
| LOW | app/services/location_search/geocoding_service.rb | 66 | # Check if there's already a result within 100m | COMMENT |
| LOW | app/services/tracks/boundary_detector.rb | 243 | # Check if two tracks are spatially connected (endpoints are close) | COMMENT |
| LOW | app/services/tracks/boundary_detector.rb | 268 | # Check if two points are within the specified distance | COMMENT |
| LOW | app/services/tracks/time_chunker.rb | 81 | # Check if there are any points in the buffer range to avoid empty chunks | COMMENT |
| LOW | app/services/tracks/session_manager.rb | 61 | # Check if session exists | COMMENT |
| LOW | app/services/tracks/session_manager.rb | 125 | # Check if all chunks are completed | COMMENT |
| LOW | app/services/imports/source_detector.rb | 188 | # Check if it's a KMZ file (ZIP archive) | COMMENT |
| LOW | config/environments/production.rb | 87 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. | COMMENT |
| LOW | config/environments/staging.rb | 84 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. | COMMENT |
| LOW | config/initializers/00_random.rb | 16 | # Check if Random.urandom is available | COMMENT |
| LOW | spec/models/concerns/user_family_spec.rb | 108 | # Set started_at to well in the past so general tests can find their points. | COMMENT |
| LOW | …/services/google_maps/records_storage_importer_spec.rb | 118 | # Set up to capture batch sizes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | app/models/place.rb | 54 | where(id: user.visits.active.confirmed.where.not(place_id: nil).select(:place_id)) | CODE |
| CRITICAL | app/controllers/map/maplibre_controller.rb | 54 | point = current_user.scoped_points.without_raw_data.complete.not_anomaly.order(timestamp: :desc).first | CODE |
| CRITICAL | app/services/families/locations.rb | 48 | sharing_members.map { _1.points.without_raw_data.complete.not_anomaly.order(timestamp: :desc).first }.compact | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker/web-entrypoint.sh | 98 | # Step 1: Database Setup | COMMENT |
| LOW⚡ | docker/web-entrypoint.sh | 104 | # Step 2: Run migrations for all databases | COMMENT |
| LOW | app/models/concerns/soft_deletable.rb | 6 | # WARNING: This concern adds a default_scope that excludes soft-deleted records. | COMMENT |
| LOW | spec/requests/family_workflows_spec.rb | 12 | # Step 1: User1 creates a family | COMMENT |
| LOW | spec/requests/family_workflows_spec.rb | 29 | # Step 2: User1 invites User2 | COMMENT |
| LOW | spec/requests/family_workflows_spec.rb | 41 | # Step 3: User2 views and accepts invitation | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 57 | # Step 4: User1 invites User3 | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 67 | # Step 5: User3 accepts invitation | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 74 | # Step 6: Family owner views members on family show page | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 79 | # Step 7: Owner removes a member | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker/web-entrypoint.sh | 98 | # Step 1: Database Setup | COMMENT |
| LOW⚡ | docker/web-entrypoint.sh | 104 | # Step 2: Run migrations for all databases | COMMENT |
| LOW | spec/requests/family_workflows_spec.rb | 12 | # Step 1: User1 creates a family | COMMENT |
| LOW | spec/requests/family_workflows_spec.rb | 29 | # Step 2: User1 invites User2 | COMMENT |
| LOW | spec/requests/family_workflows_spec.rb | 41 | # Step 3: User2 views and accepts invitation | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 57 | # Step 4: User1 invites User3 | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 67 | # Step 5: User3 accepts invitation | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 74 | # Step 6: Family owner views members on family show page | COMMENT |
| LOW⚡ | spec/requests/family_workflows_spec.rb | 79 | # Step 7: Owner removes a member | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/javascript/maps_maplibre/utils/route_segmenter.js | 134 | // Stitch segments at ±180° with interpolated latitude for seamless rendering | COMMENT |
| LOW | app/controllers/visits_controller.rb | 145 | # name the picker just set. | COMMENT |
| MEDIUM | app/services/tracks/track_builder.rb | 12 | # 3. Calculates comprehensive statistics: distance, duration, average speed | COMMENT |
| MEDIUM | config/initializers/rswag_api.rb | 12 | # For example, you could leverage this to dynamically assign the "host" property | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | CHANGELOG.md | 3320 | - Fix authentication to `GET /api/v1/countries/visited_cities` with header `Authorization: Bearer YOUR_API_KEY` instead | CODE |
| HIGH | CHANGELOG.md | 3616 | Authorization: Bearer YOUR_API_KEY | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/concerns/distance_convertible.rb | 14 | # Usage: | COMMENT |
| LOW | app/services/transportation_modes/detector.rb | 10 | # Usage: | COMMENT |
| LOW | app/services/tracks/track_builder.rb | 31 | # Example usage: | COMMENT |
| LOW | app/services/tracks/segmentation.rb | 34 | # Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | config/locales/en.yml | 1322 | don_t_forget_to_include_logs_from: ", don't forget to include logs from" | CODE |
| MEDIUM | spec/spec_helper.rb | 55 | # with RSpec, but feel free to customize to your heart's content. | COMMENT |