Export iMessage data + run iMessage Diagnostics
This report summarizes scanner evidence for ReagentX/imessage-exporter, a Rust project with 5,712 GitHub stars. SynthScan examined 47,812 lines of code across 244 source files, recording 170 pattern matches distributed across 3 syntactic categories. The legacy adjusted pattern signal is 3.6 (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? 115 finding(s).
Are imports declared and package/API names verified? 55 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 170 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 170 distinct pattern matches across 3 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 | imessage-database/src/tables/chat_handle.rs | 41 | } | COMMENT |
| LOW | imessage-database/src/tables/chat_handle.rs | 101 | /// | COMMENT |
| LOW | imessage-database/src/tables/chat_handle.rs | 241 | /// | COMMENT |
| LOW | imessage-database/src/tables/chat_handle.rs | 261 | /// | COMMENT |
| LOW | imessage-database/src/tables/chat_handle.rs | 401 | /// We query `chat_message_join.message_date` when that column exists. | COMMENT |
| LOW | imessage-database/src/tables/chat_handle.rs | 441 | /// Choose one chat row to represent each deduplicated conversation. | COMMENT |
| LOW | imessage-database/src/tables/handle.rs | 41 | // MARK: Rows | COMMENT |
| LOW | imessage-database/src/tables/handle.rs | 61 | /// let conn = get_connection(&db_path).unwrap(); | COMMENT |
| LOW | imessage-database/src/tables/handle.rs | 101 | /// Groups of `handle` rows that belong to one person. | COMMENT |
| LOW | imessage-database/src/tables/handle.rs | 121 | /// | COMMENT |
| LOW | imessage-database/src/tables/handle.rs | 201 | } | COMMENT |
| LOW | imessage-database/src/tables/table.rs | 41 | // MARK: Traits | COMMENT |
| LOW | imessage-database/src/tables/table.rs | 101 | /// # Example: | COMMENT |
| LOW | imessage-database/src/tables/table.rs | 181 | /// }; | COMMENT |
| LOW | imessage-database/src/tables/capabilities.rs | 21 | }, | COMMENT |
| LOW | imessage-database/src/tables/capabilities.rs | 41 | pub(crate) utf16_text: bool, | COMMENT |
| LOW | imessage-database/src/tables/chat.rs | 101 | } | COMMENT |
| LOW | imessage-database/src/tables/chat.rs | 141 | COMMENT | |
| LOW | imessage-database/src/tables/attachment.rs | 61 | // MARK: MediaType | COMMENT |
| LOW | imessage-database/src/tables/attachment.rs | 141 | /// Whether the app bundle ID identifies the Messages drawing board. | COMMENT |
| LOW | imessage-database/src/tables/attachment.rs | 281 | COMMENT | |
| LOW | imessage-database/src/tables/attachment.rs | 361 | COMMENT | |
| LOW | imessage-database/src/tables/attachment.rs | 401 | COMMENT | |
| LOW | imessage-database/src/tables/attachment.rs | 621 | COMMENT | |
| LOW | imessage-database/src/tables/messages/message.rs | 281 | /// Indicates the first message in a thread of replies in [`get_replies()`](crate::tables::messages::Message::get_re | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 301 | pub num_replies: i32, | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 321 | // MARK: Rows | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 361 | } | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 521 | fn marks_unattributed(summary: &Value) -> bool { | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 661 | COMMENT | |
| LOW | imessage-database/src/tables/messages/message.rs | 861 | /// `true` when the message is present in the recoverable deleted-message table. | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 1001 | if !filters.is_empty() { | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 1041 | } else { | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 1061 | /// use imessage_database::util::query_context::QueryContext; | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 1361 | /// | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 1441 | None => Expressive::None, | COMMENT |
| LOW | imessage-database/src/tables/messages/message.rs | 1461 | /// | COMMENT |
| LOW | imessage-database/src/tables/messages/body.rs | 61 | #[derive(Debug, PartialEq)] | COMMENT |
| LOW | imessage-database/src/tables/messages/columns.rs | 61 | /// Size of the stack buffer used to case-fold column names. The two longest | COMMENT |
| LOW | imessage-database/src/tables/messages/columns.rs | 121 | COMMENT | |
| LOW | …atabase/src/tables/messages/models/attributed_range.rs | 1 | /*! | COMMENT |
| LOW | …atabase/src/tables/messages/models/attributed_range.rs | 21 | /// [`BubbleComponent::Run`](crate::tables::messages::models::BubbleComponent::Run). For example, message text with a | COMMENT |
| LOW | …atabase/src/tables/messages/models/attributed_range.rs | 41 | pub struct AttributedRange { | COMMENT |
| LOW | …atabase/src/tables/messages/models/bubble_component.rs | 1 | /*! | COMMENT |
| LOW | …atabase/src/tables/messages/models/bubble_component.rs | 21 | /// | COMMENT |
| LOW | imessage-database/src/util/size.rs | 1 | /*! | COMMENT |
| LOW | imessage-database/src/util/query_context.rs | 21 | pub selected_handle_ids: Option<BTreeSet<i32>>, | COMMENT |
| LOW | imessage-database/src/util/query_context.rs | 61 | /// let mut context = QueryContext::default(); | COMMENT |
| LOW | imessage-database/src/util/query_context.rs | 81 | /// ``` | COMMENT |
| LOW | imessage-database/src/util/data_detected.rs | 21 | COMMENT | |
| LOW | imessage-database/src/util/data_detected.rs | 121 | } | COMMENT |
| LOW | imessage-database/src/util/streamtyped.rs | 21 | /// | COMMENT |
| LOW | imessage-database/src/util/streamtyped.rs | 41 | /// | COMMENT |
| LOW | imessage-database/src/util/plist.rs | 41 | /// ```xml | COMMENT |
| LOW | imessage-database/src/util/plist.rs | 61 | /// | COMMENT |
| LOW | imessage-database/src/util/dirs.rs | 21 | /// use imessage_database::util::dirs::default_db_path; | COMMENT |
| LOW | imessage-database/src/util/dirs.rs | 81 | /// | COMMENT |
| LOW | imessage-database/src/util/bundle_id.rs | 1 | /*! | COMMENT |
| LOW | imessage-database/src/util/dates.rs | 21 | pub const TIMESTAMP_FACTOR: i64 = 1_000_000_000; | COMMENT |
| LOW | imessage-database/src/util/path_hint.rs | 41 | COMMENT | |
| 54 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 915 | .insert(0, Name::fake_name(&"A".repeat(200))); | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 917 | .insert(1, Name::fake_name(&"B".repeat(200))); | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 919 | .insert(2, Name::fake_name(&"C".repeat(200))); | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1156 | Name::fake_name("Person With An Extremely and Excessively Long Name 10"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1160 | Name::fake_name("Person With An Extremely and Excessively Long Name 11"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1164 | Name::fake_name("Person With An Extremely and Excessively Long Name 12"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1168 | Name::fake_name("Person With An Extremely and Excessively Long Name 13"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1172 | Name::fake_name("Person With An Extremely and Excessively Long Name 14"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1176 | Name::fake_name("Person With An Extremely and Excessively Long Name 15"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1180 | Name::fake_name("Person With An Extremely and Excessively Long Name 16"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1184 | Name::fake_name("Person With An Extremely and Excessively Long Name 17"), | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1620 | app.participants.insert(10, Name::fake_name("Person 10")); // Included | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1621 | app.participants.insert(11, Name::fake_name("Person 11")); // Included | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1622 | app.participants.insert(12, Name::fake_name("Person 12")); // Included | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1623 | app.participants.insert(13, Name::fake_name("Person 13")); // Excluded | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1672 | app.participants.insert(10, Name::fake_name("Person 10")); // Excluded | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1673 | app.participants.insert(11, Name::fake_name("Person 11")); // Excluded | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1674 | app.participants.insert(12, Name::fake_name("Person 12")); // Excluded | CODE |
| LOW⚡ | imessage-exporter/src/app/runtime.rs | 1675 | app.participants.insert(13, Name::fake_name("Person 13")); // Included | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 875 | app.participants.insert(10, Name::fake_name("Person 10")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 876 | app.participants.insert(11, Name::fake_name("Person 11")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 894 | app.participants.insert(0, Name::fake_name("Person A")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 895 | app.participants.insert(1, Name::fake_name("Person B")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 939 | app.participants.insert(0, Name::fake_name("Person A")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 940 | app.participants.insert(1, Name::fake_name("Person B")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 978 | app.participants.insert(i, Name::fake_name(&name)); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1016 | .insert(i, Name::fake_name(&format!("{i}{}", "n".repeat(width)))); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1035 | app.participants.insert(0, Name::fake_name("Person A")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1036 | app.participants.insert(1, Name::fake_name("Person B")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1202 | app.participants.insert(10, Name::fake_name("He slipped his key into the lock, and we all very quietly entered t | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1227 | app.participants.insert(10, Name::fake_name(&first)); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1228 | app.participants.insert(11, Name::fake_name(&second)); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1284 | app.participants.insert(10, Name::fake_name("Person 10")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1285 | app.participants.insert(11, Name::fake_name("Person 11")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1332 | app.participants.insert(10, Name::fake_name(&emoji_name)); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1354 | app.participants.insert(i, Name::fake_name(&emoji_name)); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1372 | app.participants.insert(10, Name::fake_name(&cjk_name)); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1398 | app.participants.insert(10, Name::fake_name("Person 10")); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1724 | let mut alice = Name::fake_name("+15551234567"); | CODE |
| LOW | imessage-exporter/src/app/runtime.rs | 1731 | let mut bob = Name::fake_name("+15559876543"); | CODE |
| LOW | imessage-exporter/src/app/contacts.rs | 112 | pub fn fake_name(name: &str) -> Name { | CODE |
| LOW | imessage-exporter/src/app/compatibility/models.rs | 237 | assert!(!exists("fake_name")); | CODE |
| LOW | …sage-exporter/src/exporters/txt/tests/announcements.rs | 17 | config.participants.insert(0, Name::fake_name(ME)); | CODE |
| LOW | …sage-exporter/src/exporters/txt/tests/announcements.rs | 638 | let mut business = Name::fake_name("Business"); | CODE |
| LOW | …age-exporter/src/exporters/html/tests/announcements.rs | 666 | let mut business = Name::fake_name("Business"); | CODE |
| LOW | imessage-exporter/src/exporters/shared/edited.rs | 335 | config.participants.insert(7, Name::fake_name("Alice")); | CODE |
| LOW | imessage-exporter/src/exporters/shared/test_support.rs | 24 | config.participants.insert(0, Name::fake_name(ME)); | CODE |
| LOW | imessage-exporter/src/exporters/shared/test_support.rs | 30 | config.participants.insert(handle, Name::fake_name(name)); | CODE |
| LOW | imessage-exporter/src/exporters/shared/announcement.rs | 282 | config.participants.insert(42, Name::fake_name("Alice")); | CODE |
| LOW | imessage-exporter/src/exporters/shared/announcement.rs | 304 | config.participants.insert(7, Name::fake_name("Bob")); | CODE |
| LOW | imessage-exporter/src/exporters/shared/announcement.rs | 350 | config.participants.insert(7, Name::fake_name("Bob")); | CODE |
| LOW | imessage-exporter/src/exporters/shared/announcement.rs | 394 | config.participants.insert(7, Name::fake_name("Bob")); | CODE |
| LOW | imessage-exporter/src/exporters/shared/announcement.rs | 428 | config.participants.insert(handle, Name::fake_name(name)); | CODE |
| LOW | imessage-exporter/src/exporters/shared/announcement.rs | 494 | let mut business = Name::fake_name("Business"); | CODE |
| LOW | imessage-exporter/src/exporters/shared/announcement.rs | 498 | let mut alice = Name::fake_name("Alice"); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …atabase/src/message_types/business_chat/list_picker.rs | 45 | // robust signal. | COMMENT |