AI Slop Code RIsk Monitor

typst/typst

A markup-based typesetting system that is powerful and easy to learn.

7.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for typst/typst, a Rust project with 56,538 GitHub stars. SynthScan examined 176,624 lines of code across 610 source files, recording 1354 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 7.7 (Moderate 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.

7.7
Adjusted Signal
7.7
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
56.5K
Stars
Rust
Language
176.6K
Lines of Code
610
Files
1.4K
Pattern Hits
2026-10-12
Scan Date
0.01
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 30.8/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 1343 finding(s).

Hallucinated Dependency & Supply Chain Risk 1.9/100 · LOW

Are imports declared and package/API names verified? 11 finding(s).

Agent Over-Engineering Ratio 0.1/100 · LOW

Are wrappers, guards, and repeated structures necessary? 3 finding(s).

PR Review Velocity Impact 33.1/100 · MEDIUM

Which changes need focused human review? 1354 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 6HIGH 0MEDIUM 5LOW 1343

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1354 distinct pattern matches across 6 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.

Over-Commented Block1332 hits · 1278 pts
SeverityFileLineSnippetContext
LOWcrates/typst-render/src/format.rs21/// In contrast to Typst's other export formats, PNGs are bound to a specificCOMMENT
LOWcrates/typst-render/src/format.rs41/// PNGs can have transparent backgrounds. By default, Typst will output a PNGCOMMENT
LOWcrates/typst-render/src/format.rs61/// - Which resolution to render at by specifying `--ppi` followed by a numberCOMMENT
LOWcrates/typst-library/translations/gu.txt1# figure =COMMENT
LOWcrates/typst-library/translations/ta.txt1figure = படம்COMMENT
LOWcrates/typst-library/translations/ml.txt1figure = ചിത്രംCOMMENT
LOWcrates/typst-library/translations/alt.txt1figure = ЈурукCOMMENT
LOWcrates/typst-library/src/format.rs1//! Specify configurable export formats.COMMENT
LOWcrates/typst-library/src/format.rs21//! use typst_library::format::{Complete, Fields, Format, FormatElement, Populate};COMMENT
LOWcrates/typst-library/src/format.rs41//! }COMMENT
LOWcrates/typst-library/src/format.rs61//! // Export an EPUB here...COMMENT
LOWcrates/typst-library/src/lib.rs1//! Typst's standard library.COMMENT
LOWcrates/typst-library/src/lib.rs41};COMMENT
LOWcrates/typst-library/src/lib.rs61/// performance.COMMENT
LOWcrates/typst-library/src/lib.rs81 /// should also succeed. The [`Bytes`] can be cheaply created as a view intoCOMMENT
LOWcrates/typst-library/src/lib.rs161/// Definition of Typst's standard library.COMMENT
LOWcrates/typst-library/src/routines.rs101 /// Returns the body of a MathML `HtmlElem`, if the content is one.COMMENT
LOWcrates/typst-library/src/routines.rs121/// - where diagnostics for the evaluated text show up,COMMENT
LOWcrates/typst-library/src/routines.rs141 /// identified by `id`. In the `RangeMapper` terminology, `id` definesCOMMENT
LOWcrates/typst-library/src/diag.rs21 DiagSpan, Lines, RealizeError, Span, Spanned, SyntaxDiagnostic, VirtualRoot,COMMENT
LOWcrates/typst-library/src/diag.rs41/// ```ignoreCOMMENT
LOWcrates/typst-library/src/diag.rs81///COMMENT
LOWcrates/typst-library/src/diag.rs141 (hint[$hint_span:expr]: $err:ident, $hint:literal $(, $hint_arg:expr)*) => {COMMENT
LOWcrates/typst-library/src/diag.rs201// be scoped locally to this module and imported like normal items, including byCOMMENT
LOWcrates/typst-library/src/diag.rs421/// An error or warning in a source or text file. The recommended way to createCOMMENT
LOWcrates/typst-library/src/diag.rs661{COMMENT
LOWcrates/typst-library/src/diag.rs921pub type LoadResult<T> = Result<T, LoadError>;COMMENT
LOWcrates/typst-library/src/engine.rs21 /// Definition of Typst's standard library.COMMENT
LOWcrates/typst-library/src/engine.rs141 /// `None` otherwise.COMMENT
LOWcrates/typst-library/src/engine.rs261/// The route the engine took during compilation. This is used to detectCOMMENT
LOWcrates/typst-library/src/loading/xml.rs1use roxmltree::ParsingOptions;COMMENT
LOWcrates/typst-library/src/loading/xml.rs21/// `content` tag contains one or more paragraphs, which are represented as `p`COMMENT
LOWcrates/typst-library/src/loading/xml.rs41///COMMENT
LOWcrates/typst-library/src/loading/json.rs1use ecow::eco_format;COMMENT
LOWcrates/typst-library/src/loading/json.rs21/// = Example <example>COMMENT
LOWcrates/typst-library/src/loading/json.rs41///COMMENT
LOWcrates/typst-library/src/loading/json.rs61///COMMENT
LOWcrates/typst-library/src/loading/json.rs81/// [@content],COMMENT
LOWcrates/typst-library/src/loading/read.rs1use typst_syntax::Spanned;COMMENT
LOWcrates/typst-library/src/loading/toml.rs1use ecow::eco_format;COMMENT
LOWcrates/typst-library/src/loading/toml.rs21/// ```exampleCOMMENT
LOWcrates/typst-library/src/loading/toml.rs41/// [@int],COMMENT
LOWcrates/typst-library/src/loading/toml.rs61///COMMENT
LOWcrates/typst-library/src/loading/toml.rs81/// == Notes <notes>COMMENT
LOWcrates/typst-library/src/loading/cbor.rs1use ciborium::de::Error;COMMENT
LOWcrates/typst-library/src/loading/cbor.rs21/// table.header[CBOR value][Converted into Typst],COMMENT
LOWcrates/typst-library/src/loading/cbor.rs41/// [array],COMMENT
LOWcrates/typst-library/src/loading/cbor.rs61/// [text via @repr],COMMENT
LOWcrates/typst-library/src/loading/csv.rs1use az::SaturatingAs;COMMENT
LOWcrates/typst-library/src/loading/csv.rs21/// columns: 2,COMMENT
LOWcrates/typst-library/src/loading/yaml.rs1use ecow::eco_format;COMMENT
LOWcrates/typst-library/src/loading/yaml.rs21///COMMENT
LOWcrates/typst-library/src/loading/yaml.rs41///COMMENT
LOWcrates/typst-library/src/loading/yaml.rs61/// #docs-table(COMMENT
LOWcrates/typst-library/src/loading/yaml.rs81/// - In most cases, YAML numbers will be converted to floats or integersCOMMENT
LOWcrates/typst-library/src/layout/page.rs21/// Layouts its child onto one or multiple pages.COMMENT
LOWcrates/typst-library/src/layout/page.rs41/// = Accessibility <accessibility>COMMENT
LOWcrates/typst-library/src/layout/page.rs61 pub paper: Paper,COMMENT
LOWcrates/typst-library/src/layout/page.rs81 #[parse(COMMENT
LOWcrates/typst-library/src/layout/page.rs101 #[default(Smart::Custom(Paper::A4.height().into()))]COMMENT
1272 more matches not shown…
Hallucination Indicators6 hits · 60 pts
SeverityFileLineSnippetContext
CRITICALcrates/typst-library/src/visualize/tiling.rs261 if !offset.v.x.abs.em.is_zero() || !offset.v.y.abs.em.is_zero() {CODE
CRITICALcrates/typst-pdf/src/lib.rs156 self.format.standard.v.config.version()CODE
CRITICALcrates/typst-pdf/src/lib.rs169 self.format.standard.v.config.validators()CODE
CRITICALcrates/typst-pdf/src/outline.rs25 let visible = gc.options.format.pages.v.as_ref().is_none_or(|ranges| {CODE
CRITICALcrates/typst-pdf/src/tags/tree/build.rs658 tree.options.format.standard.v.config.validators().to_comma_list();CODE
CRITICALcrates/typst-pdf/src/tags/resolve/mod.rs64 let root = gc.tags.tree.groups.list.get(GroupId::ROOT);CODE
AI Slop Vocabulary5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMcrates/typst-library/src/introspection/locator.rs74/// - To make things more robust, we can incorporate some stable knowledge aboutCOMMENT
MEDIUMcrates/typst-library/src/text/mod.rs594 /// default of `{100%}`, prevents them. More nuanced cost specification forCOMMENT
MEDIUMcrates/typst-layout/src/inline/line.rs186 // Use the trimmed range for robust boundary checks.COMMENT
MEDIUMcrates/typst-layout/src/grid/lines.rs523 // FIXME: Make this check more robust when footers at arbitraryCOMMENT
MEDIUMcrates/typst-pdf/src/format.rs207 /// 2.0 export, Typst will leverage some of these features. PDF 2.0 andCOMMENT
Fake / Example Data5 hits · 7 pts
SeverityFileLineSnippetContext
LOWcrates/typst-library/src/model/par.rs778/// Lorem ipsum \COMMENT
LOWcrates/typst-library/src/model/par.rs779/// dolor sit ametCOMMENT
LOWcrates/typst-library/src/text/lorem.rs10/// This function yields a Latin-like _Lorem Ipsum_ blind text with the givenCOMMENT
LOWcrates/typst-library/src/text/lorem.rs31/// Generates `n` words of Lorem Ipsum text, treating `--` as a non-wordCOMMENT
LOWcrates/typst-html/src/attr.rs150pub const placeholder: HtmlAttr = HtmlAttr::constant("placeholder");CODE
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippetContext
LOWcrates/typst-layout/src/math/table.rs64 // This variable stores the maximum ascent and descent for each row.COMMENT
LOWcrates/typst-layout/src/grid/lines.rs282 // When the vline isn't at the border, we need to check if a colspan wouldCOMMENT
LOWcrates/typst-layout/src/grid/lines.rs407 // When the hline isn't at the border, we need to check if a rowspanCOMMENT
Hyper-Verbose Identifiers3 hits · 3 pts
SeverityFileLineSnippetContext
LOWtests/src/report/report.js534function changeGlobalSourceVisibility(visible) {CODE
LOWtests/src/report/report.js547function onViewportIntersectionChanged(element, callback) {CODE
LOWdocs/assets/docs.js1040function buildSymbolScoringFunction(query) {CODE