A modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive.
This report summarizes scanner evidence for tectonic-typesetting/tectonic, a C project with 5,219 GitHub stars. SynthScan examined 184,795 lines of code across 533 source files, recording 347 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.0 (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? 342 finding(s).
Are imports declared and package/API names verified? 1 finding(s).
Are wrappers, guards, and repeated structures necessary? 4 finding(s).
Which changes need focused human review? 347 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 347 distinct pattern matches across 9 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 | crates/xetex_layout/layout/tectonic_xetex_layout.h | 1 | #ifndef XETEX_LAYOUT_BINDINGS_H | COMMENT |
| LOW | crates/xetex_layout/layout/tectonic_xetex_layout.h | 21 | #endif | COMMENT |
| LOW | crates/xetex_layout/src/engine.rs | 181 | } else { | COMMENT |
| LOW | crates/xetex_layout/src/engine.rs | 201 | // 0 | COMMENT |
| LOW | crates/engine_xdvipdfmx/xdvipdfmx/dvipdfmx.c | 21 | COMMENT | |
| LOW | crates/engine_xdvipdfmx/xdvipdfmx/dvipdfmx.c | 41 | #include "dpx-dpxfile.h" | COMMENT |
| LOW | crates/engine_xdvipdfmx/src/lib.rs | 1 | // Copyright 2021 the Tectonic Project | COMMENT |
| LOW | crates/engine_xdvipdfmx/src/lib.rs | 21 | use std::{ffi::CString, time::SystemTime}; | COMMENT |
| LOW | crates/bridge_icu/src/lib.rs | 1 | // Copyright 2020 the Tectonic Project | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-Common.h | 61 | #define kStatus_NeedMoreInput 2 /* ConvertBuffer: processed all input data, ready for next chunk */ | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-Common.h | 81 | #define kStatus_OutOfMemory -10 /* unable to allocate required memory */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-synctex.c | 41 | #define height_offset 3 | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-Format.h | 201 | typedef union RepElem RepElem; | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-XeTeXOTMath.cpp | 61 | break; | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-ext.c | 41 | #include "teckit-c-Engine.h" | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-Compiler.h | 21 | #ifndef __TECkit_Compiler_H__ | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-Compiler.h | 41 | #endif | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 201 | * this conversion besides painstakingly annotating things. | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 221 | #define ACTIVE_NODE_break_node(p) mem[(p) + 1].b32.s1 /* aka "rlink" in double-linked list */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 241 | #define EDGE_NODE_edge_dist(p) mem[(p) + 2].b32.s1 /* "new left_edge position relative to cur_h" */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 261 | /* To check: do these really only apply to MATH_NODEs? */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 281 | #define PASSIVE_NODE_serial(p) mem[p].b32.s0 /* aka "info" */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 301 | #define GLUE_SPEC_shrink(p) mem[(p) + 3].b32.s1 /* a scaled */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 1061 | // ttbc_diagnostic_t *warning = diagnostic_begin_capture_warning_here(); | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 1081 | // A replacement for xetex print_file_line+print_nl_ctr blocks. e.g. Replace | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 1181 | /* additional declarations we want to slip in for xetex */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-xetexd.h | 1201 | COMMENT | |
| LOW | crates/engine_xetex/xetex/teckit-c-Engine.h | 41 | #define kFlags_VisualOrder 0x00008000U /* visual rather than logical order */ | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-c-Engine.h | 81 | /* MS compiler has predefined _WIN32, so assume Windows target */ | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-Engine.cpp | 21 | 2005-05-06 jk patched match() to forget matches within groups if we backtrack out | COMMENT |
| LOW | crates/engine_xetex/xetex/teckit-Engine.cpp | 41 | # undef WORDS_BIGENDIAN | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 41 | #define HOLD_HEAD (MEM_TOP - 4) | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 61 | #define FROZEN_ENDV (FROZEN_CONTROL_SEQUENCE + 6) | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 81 | #define SF_CODE(n) (eqtb[SF_CODE_BASE + (n)].b32.s1) | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 101 | */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 121 | #define EXPR_NODE_SIZE 4 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 141 | /* MATH_NODE L/R typesetting extras */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 161 | #define MATH_GROUP 9 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 181 | /* scanner_status values: */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 201 | #define V_TEMPLATE 2 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 221 | #define MID_LINE 1 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 241 | #define RIGHT1 143 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 261 | #define TOKEN_LIST 0 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 281 | #define SHRINKING 2 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 301 | #define SUP_MARK 7 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 321 | #define RADICALVERTICALGAP 49 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 341 | #define NO_EXPAND_FLAG (BIGGEST_USV + 2) | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 361 | #define PROTECTED_TOKEN (END_MATCH_TOKEN + 1) | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex-constants.h | 381 | #define VSPLIT_INIT 0 | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 21 | COMMENT | |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 41 | #define INT_PAR__widow_penalty 6 /* = 0x6 */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 61 | #define INT_PAR__hbadness 26 /* = 0x1a */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 81 | #define INT_PAR__default_hyphen_char 46 /* = 0x2e */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 101 | #define INT_PAR__xetex_linebreak_locale 66 /* = 0x42 */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 121 | COMMENT | |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 141 | #define DIMEN_PAR__v_offset 19 /* = 0x13 */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 161 | #define GLUE_PAR__space_skip 12 /* = 0xc */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 181 | #define LOCAL__err_help 9 /* = 0x9 */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 201 | #define FROZEN_CONTROL_SEQUENCE 2243226 /* = 0x223a9a */ | COMMENT |
| LOW | crates/engine_xetex/xetex/xetex_format.h | 221 | #define DEL_CODE_BASE 7827068 /* = 0x776e7c */ | COMMENT |
| 272 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/xdv/src/lib.rs | 95 | /// This internal error type lets us leverage Results to conveniently | COMMENT |
| MEDIUM | crates/cfg_support/src/lib.rs | 139 | // macro expands out to a big boolean logical expression. Fundamentally, it's | COMMENT |
| MEDIUM | crates/bridge_freetype2/build.rs | 5 | //! like to be able to vendor it. When that day comes, we should leverage | COMMENT |
| MEDIUM | crates/bundles/src/ttb.rs | 97 | // TODO: more robust checks | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bundles/tests/packages.py | 211 | except KeyError: | CODE |
| HIGH | bundles/tests/packages.py | 227 | except KeyError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/assets/glyphlist.txt | 1 | # ----------------------------------------------------------- | COMMENT |
| MEDIUM | tests/assets/glyphlist.txt | 14 | # ----------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/pdf_io/pdf_io/dpx-pdflimits.h | 30 | * NOTE: Don't forget to update CIDFont_stdcc_def[] in cid.c | COMMENT |
| LOW | crates/pdf_io/pdf_io/dpx-pdfobj.c | 368 | /* Don't forget to update CIDFont_stdcc_def[] in cid.c too! */ | COMMENT |
| LOW | bundles/tests/packages.py | 106 | # `just_added` enables us to make sure to test new packages in | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/engine_spx2html/src/fontfile.rs | 465 | // Step 1: create new CMAP, appending to buffer. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/engine_spx2html/src/fontfile.rs | 465 | // Step 1: create new CMAP, appending to buffer. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bundles/tests/packages.py | 37 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bundles/tests/packages.py | 49 | CODE |