OfficeCLI is the first and best Office suite purpose-built for AI agents to read, edit, and automate Word, Excel, and PowerPoint files. Free, open-source, single binary, no Office installation required.
This report summarizes scanner evidence for iOfficeAI/OfficeCLI, a C# project with 31,836 GitHub stars. SynthScan examined 402,597 lines of code across 1031 source files, recording 3678 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 18.3 (Elevated 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.
Can maintainers explain intent, assumptions, and trade-offs? 1830 finding(s).
Are imports declared and package/API names verified? 80 finding(s).
Are wrappers, guards, and repeated structures necessary? 1768 finding(s).
Which changes need focused human review? 3678 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 3678 distinct pattern matches across 18 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 |
|---|---|---|---|---|
| MEDIUM | examples/excel/shapes.py | 61 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 63 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 77 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 79 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 93 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 95 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 110 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 112 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 129 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 131 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 158 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/shapes.py | 160 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 32 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 34 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 46 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 48 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 72 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 74 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 93 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 95 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 115 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 117 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 133 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/data-validation.sh | 135 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/slicers.py | 48 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/slicers.py | 51 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/slicers.py | 80 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | examples/excel/slicers.py | 93 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | examples/excel/slicers.py | 103 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | examples/excel/slicers.py | 105 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | examples/excel/slicers.py | 107 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/slicers.py | 120 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/slicers.py | 130 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/slicers.py | 142 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/excel/slicers.py | 151 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | examples/excel/slicers.py | 162 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | examples/excel/slicers.py | 170 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | examples/excel/slicers.py | 176 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 156 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 158 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 187 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 189 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 205 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 207 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 242 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 244 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 263 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/charts.py | 270 | # ====================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 29 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 31 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 63 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 65 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 95 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 97 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 114 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 116 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 142 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 144 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 171 | # ========================================================================== | COMMENT |
| MEDIUM | examples/excel/cell-formatting.sh | 173 | # ========================================================================== | COMMENT |
| 1692 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sdk/python/officecli.py | 221 | break | COMMENT |
| LOW | sdk/python/officecli.py | 401 | # `as_json`, not `json`, so we don't shadow the imported json module. | COMMENT |
| LOW | sdk/node/index.js | 341 | } | COMMENT |
| LOW | examples/excel/data-validation.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/slicers.py | 81 | # The slicer SOURCE — a PivotTable. Slicers anchor to this pivot's cache | COMMENT |
| LOW | examples/excel/slicers.py | 101 | "name": "SalesPivot", "style": "PivotStyleMedium9"}}) | COMMENT |
| LOW | examples/excel/slicers.py | 121 | print("\n--- Slicer: Region ---") | COMMENT |
| LOW | examples/excel/slicers.py | 141 | # pivots), columnCount=3 (wide grid) | COMMENT |
| LOW | examples/excel/cell-formatting.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/pivot-tables.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/conditional-formatting.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/sparklines.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/shapes.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/slicers.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/workbook-settings.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/sheet-settings.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/pivot-tables.py | 141 | # -------------------------------------------------------------------------- | COMMENT |
| LOW | examples/excel/pivot-tables.py | 181 | # --prop source=Sheet1!A1:J51 \ | COMMENT |
| LOW | examples/excel/pivot-tables.py | 201 | layout="outline", | COMMENT |
| LOW | examples/excel/pivot-tables.py | 241 | # officecli add pivot-tables.xlsx "/4-Channel Analysis" --type pivottable \ | COMMENT |
| LOW | examples/excel/pivot-tables.py | 261 | grandtotals="both", | COMMENT |
| LOW | examples/excel/pivot-tables.py | 301 | # Sheet: 6-Compact 3-Level | COMMENT |
| LOW | examples/excel/pivot-tables.py | 361 | sort="asc", | COMMENT |
| LOW | examples/excel/pivot-tables.py | 421 | name="Top5Products", | COMMENT |
| LOW | examples/excel/pivot-tables.py | 461 | COMMENT | |
| LOW | examples/excel/pivot-tables.py | 501 | # --prop 'values=Sales:count,Quantity:min,Quantity:product,Sales:countNums' \ | COMMENT |
| LOW | examples/excel/pivot-tables.py | 521 | grandtotals="both", | COMMENT |
| LOW | examples/excel/pivot-tables.py | 561 | # officecli add pivot-tables.xlsx "/14-Statistical" --type pivottable \ | COMMENT |
| LOW | examples/excel/pivot-tables.py | 581 | cols="Quarter", | COMMENT |
| LOW | examples/excel/pivot-tables.py | 621 | layout="outline", | COMMENT |
| LOW | examples/excel/pivot-tables.py | 661 | layout="tabular", | COMMENT |
| LOW | examples/excel/charts/charts-basic.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-column.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-boxwhisker.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-histogram.py | 141 | # A single giant chart using EVERY histogram knob at once: | COMMENT |
| LOW | examples/excel/charts/charts-histogram.py | 181 | x="0", y="0", width="27", height="38"), | COMMENT |
| LOW | examples/excel/charts/charts-histogram.py | 241 | overflowBin="95", **LAB, | COMMENT |
| LOW | examples/excel/charts/charts-histogram.py | 321 | # | COMMENT |
| LOW | examples/excel/charts/charts-histogram.py | 481 | # ====================================================================== | COMMENT |
| LOW | examples/excel/charts/charts-combo.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-extended.py | 301 | # Chart 1: Pareto — defect analysis, raw counts auto-sorted + cumul% overlay | COMMENT |
| LOW | examples/excel/charts/charts-extended.py | 341 | COMMENT | |
| LOW | examples/excel/charts/charts-waterfall.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-line.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-bar.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-bubble.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-scatter.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-histogram.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-pie.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-advanced.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-radar.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-area.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-stock.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/excel/charts/charts-extended.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/word/textbox.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/word/numbering.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/word/document-formatting.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/word/pictures.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/word/run-formatting.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/word/charts.sh | 1 | #!/bin/bash | COMMENT |
| 1676 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/officecli/Core/Chart/ChartHelper.Setter.cs | 3520 | /// dataLabels=… spec. Mirrors the inline scaffold in case "labelpos". | COMMENT |
| MEDIUM | src/officecli/Core/Chart/ChartHelper.Setter.cs | 3547 | /// DataLabels' DefaultRunProperties, creating the TextProperties scaffold | COMMENT |
| MEDIUM | src/officecli/Core/Chart/ChartExStyleBuilder.cs | 103 | // schema-compliant scaffold below. | COMMENT |
| MEDIUM | src/officecli/Core/Chart/ChartExStyleBuilder.cs | 154 | /// visually coherent; the rest get the generic 4-ref scaffold. | COMMENT |
| MEDIUM | src/officecli/Core/Chart/ChartExStyleBuilder.cs | 222 | // Generic 4-ref scaffold — the smallest schema-valid form per | COMMENT |
| MEDIUM⚡ | src/officecli/Handlers/PowerPointHandler.cs | 1494 | // rId-collision guard. The blank scaffold ships a fixed set of | COMMENT |
| MEDIUM⚡ | src/officecli/Handlers/PowerPointHandler.cs | 1497 | // that range (e.g. rId5 = master bg image, but the scaffold already | COMMENT |
| MEDIUM⚡ | src/officecli/Handlers/PowerPointHandler.cs | 1502 | // by re-homing the colliding scaffold relationship onto a fresh id. | COMMENT |
| MEDIUM⚡ | src/officecli/Handlers/PowerPointHandler.cs | 1503 | // For a scaffold-leftover SlideLayoutPart we additionally patch the | COMMENT |
| MEDIUM⚡ | src/officecli/Handlers/PowerPointHandler.cs | 1511 | // Re-home the colliding scaffold relationship onto a fresh, | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 1672 | // The blank scaffold's master ships rId1..rId5 as slideLayout | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 1674 | // with a scaffold layout. Re-home the colliding part onto a fresh | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 1800 | // Part-rel collision: on a rebuilt deck the scaffold's own | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 1854 | // Part collision (scaffold layout rel occupying rId3..rId5 on | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 2127 | // decks give each master its own theme; the blank scaffold + | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 2211 | // currently occupies it onto a fresh id. The blank scaffold ships a master | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 2215 | // r:embed dangles. For a scaffold SlideLayoutPart occupant we also repoint | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 2436 | // (dump replay: prune scaffold + grow from source) and a later reload — | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 2570 | /// scaffold's shared theme (wrong colours for every styleRef on its slides). | COMMENT |
| MEDIUM | src/officecli/Handlers/Excel/ExcelBatchEmitter.cs | 10 | // CONSISTENCY(emit-X-mirror): scaffold mirrors WordBatchEmitter.cs / | COMMENT |
| MEDIUM | src/officecli/Handlers/Pptx/PptxBatchEmitter.cs | 12 | // CONSISTENCY(emit-X-mirror): scaffold mirrors WordBatchEmitter.cs — same | COMMENT |
| MEDIUM | …/officecli/Handlers/Pptx/PptxBatchEmitter.Resources.cs | 79 | // The blank scaffold shares ONE theme part (/ppt/theme/theme1.xml) | COMMENT |
| MEDIUM | …/officecli/Handlers/Pptx/PptxBatchEmitter.Resources.cs | 83 | // masters 2..N (which the scaffold doesn't provide). This keeps the | COMMENT |
| MEDIUM | …/officecli/Handlers/Pptx/PptxBatchEmitter.Resources.cs | 95 | // blank scaffold's theme has no such images, so a pinned source rId is | COMMENT |
| MEDIUM⚡ | …/officecli/Handlers/Pptx/PptxBatchEmitter.Resources.cs | 244 | // master1's theme is the shared /ppt/theme/theme1.xml that the scaffold | COMMENT |
| MEDIUM⚡ | …/officecli/Handlers/Pptx/PptxBatchEmitter.Resources.cs | 247 | // the presentation<->master1 sharing. Masters 2..N have no scaffold theme, | COMMENT |
| MEDIUM⚡ | …/officecli/Handlers/Pptx/PptxBatchEmitter.Resources.cs | 255 | // ThemePart is DISTINCT from the presentation's, the shared-scaffold | COMMENT |
| MEDIUM⚡ | …/officecli/Handlers/Pptx/PptxBatchEmitter.Resources.cs | 257 | // detaches the scaffold share first, restoring the source topology. | COMMENT |
| MEDIUM | …li/Handlers/Pptx/PowerPointHandler.HtmlPreview.Text.cs | 342 | // Scoping (regression guardrails): apply ONLY to body/content-family | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | schemas/help/pptx/slide.json | 120 | { "element": "placeholder", "pathSegment": "placeholder", "cardinality": "0..n" } | CODE |
| LOW | schemas/help/pptx/placeholder.json | 4 | "element": "placeholder", | CODE |
| LOW | schemas/help/docx/sdt.json | 139 | "placeholder": { | CODE |
| LOW | examples/excel/workbook-settings.py | 64 | wb(**{"extended.company": "Acme Corp", "extended.manager": "Dana Lead", | CODE |
| LOW | examples/excel/workbook-settings.sh | 39 | officecli set "$FILE" / --prop extended.company="Acme Corp" \ | CODE |
| LOW | examples/excel/workbook-settings.md | 44 | officecli set file.xlsx / --prop extended.company="Acme Corp" \ | CODE |
| LOW | examples/word/document-formatting.sh | 28 | officecli set "$FILE" / --prop extended.company="Acme Corp" \ | CODE |
| LOW | examples/word/document-formatting.md | 41 | officecli set file.docx / --prop extended.company="Acme Corp" \ | CODE |
| LOW⚡ | examples/word/document-formatting.py | 85 | "extended.company": "Acme Corp", | CODE |
| LOW | examples/ppt/presentation-settings.py | 54 | pres(**{"extended.company": "Acme Corp", "extended.manager": "Dana Lead", | CODE |
| LOW | examples/ppt/presentation-settings.md | 48 | officecli set file.pptx / --prop extended.company="Acme Corp" \ | CODE |
| LOW | examples/ppt/presentation-settings.sh | 30 | officecli set "$FILE" / --prop extended.company="Acme Corp" \ | CODE |
| LOW | examples/ppt/shapes/shapes-typography.py | 32 | LOREM = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " | CODE |
| LOW | examples/ppt/shapes/shapes-typography.py | 32 | LOREM = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " | CODE |
| LOW | examples/ppt/shapes/shapes-effects.py | 39 | LONGTEXT = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do " | CODE |
| LOW | examples/ppt/shapes/shapes-effects.py | 39 | LONGTEXT = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do " | CODE |
| LOW | examples/ppt/shapes/shapes-typography.md | 28 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt.' | CODE |
| LOW | examples/ppt/shapes/shapes-typography.md | 28 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt.' | CODE |
| LOW⚡ | examples/ppt/shapes/shapes-typography.sh | 16 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt.' | CODE |
| LOW⚡ | examples/ppt/shapes/shapes-typography.sh | 16 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt.' | CODE |
| LOW⚡ | examples/ppt/shapes/shapes-effects.sh | 46 | LONGTEXT='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore | CODE |
| LOW⚡ | examples/ppt/shapes/shapes-effects.sh | 46 | LONGTEXT='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore | CODE |
| LOW | examples/ppt/shapes/shapes-effects.md | 28 | LONGTEXT='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore | CODE |
| LOW | examples/ppt/shapes/shapes-effects.md | 28 | LONGTEXT='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-basic.sh | 26 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-basic.sh | 26 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW | examples/ppt/textboxes/textboxes-basic.md | 28 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW | examples/ppt/textboxes/textboxes-basic.md | 28 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW | examples/ppt/textboxes/textboxes-advanced.py | 37 | LOREM = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " | CODE |
| LOW | examples/ppt/textboxes/textboxes-advanced.py | 37 | LOREM = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-advanced.py | 148 | text="[lang=fr-FR at paragraph level] Lorem ipsum dolor sit amet.", | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-advanced.py | 148 | text="[lang=fr-FR at paragraph level] Lorem ipsum dolor sit amet.", | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-basic.py | 61 | LOREM = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-basic.py | 61 | LOREM = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-advanced.sh | 20 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-advanced.sh | 20 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-advanced.sh | 128 | --prop text="[lang=fr-FR at paragraph level] Lorem ipsum dolor sit amet." \ | CODE |
| LOW⚡ | examples/ppt/textboxes/textboxes-advanced.sh | 128 | --prop text="[lang=fr-FR at paragraph level] Lorem ipsum dolor sit amet." \ | CODE |
| LOW | examples/ppt/textboxes/textboxes-advanced.md | 28 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW | examples/ppt/textboxes/textboxes-advanced.md | 28 | LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.' | CODE |
| LOW | examples/ppt/textboxes/textboxes-advanced.md | 133 | --prop text="[lang=fr-FR at paragraph level] Lorem ipsum dolor sit amet." \ | CODE |
| LOW | examples/ppt/textboxes/textboxes-advanced.md | 133 | --prop text="[lang=fr-FR at paragraph level] Lorem ipsum dolor sit amet." \ | CODE |
| LOW | …ppt/reference/styles/dark--architectural-plan/build.sh | 180 | a '/slide[1]' --prop text="Lorem ipsum dolor sit amet, consectetur adipiscing\nelit, sed do eiusmod tempor incididunt ut | CODE |
| LOW | …ppt/reference/styles/dark--architectural-plan/build.sh | 180 | a '/slide[1]' --prop text="Lorem ipsum dolor sit amet, consectetur adipiscing\nelit, sed do eiusmod tempor incididunt ut | CODE |
| LOW | src/officecli/Handlers/PowerPointHandler.cs | 4637 | var segIsPlaceholder = m.Groups[3].Value == "placeholder"; | CODE |
| LOW | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3713 | // "###-####" → "555-1234", SSN "000-00-0000" → "123-45-6789". An integer-only | COMMENT |
| LOW | …officecli/Handlers/Pptx/PowerPointHandler.Mutations.cs | 511 | if (elementType == "placeholder") | CODE |
| LOW | src/officecli/Handlers/Pptx/PowerPointHandler.Add.cs | 79 | "placeholder" or "ph" => AddPlaceholder(parentPath, index, properties), | CODE |
| LOW | src/officecli/Handlers/Pptx/PptxBatchEmitter.Shape.cs | 419 | Element: "placeholder", | CODE |
| LOW | src/officecli/Handlers/Pptx/PptxBatchEmitter.Shape.cs | 447 | Type = "placeholder", | CODE |
| LOW | src/officecli/Handlers/Pptx/PptxBatchEmitter.Shape.cs | 826 | case "placeholder": | CODE |
| LOW | src/officecli/Handlers/Pptx/PowerPointHandler.Query.cs | 955 | node.Type = "placeholder"; | CODE |
| LOW | src/officecli/Handlers/Pptx/PowerPointHandler.Query.cs | 1383 | else if (elementType == "placeholder") | CODE |
| LOW | src/officecli/Handlers/Pptx/PowerPointHandler.Query.cs | 1683 | or "table" or "chart" or "placeholder" or "notes" | CODE |
| LOW | src/officecli/Handlers/Pptx/PowerPointHandler.Query.cs | 2295 | if (parsed.ElementType == "placeholder") | CODE |
| LOW | src/officecli/Handlers/Pptx/PowerPointHandler.Query.cs | 2318 | node.Type = "placeholder"; | CODE |
| LOW | src/officecli/Handlers/Pptx/PowerPointHandler.Query.cs | 2357 | lNode.Type = "placeholder"; | CODE |
| LOW | src/officecli/Handlers/Pptx/PptxBatchEmitter.cs | 625 | // id with the slide's Query("placeholder") result. | COMMENT |
| LOW | src/officecli/Handlers/Pptx/PptxBatchEmitter.cs | 634 | foreach (var ph in ppt.Query("placeholder")) | CODE |
| LOW | src/officecli/Handlers/Pptx/PptxBatchEmitter.cs | 718 | case "placeholder": | CODE |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/officecli/CommandBuilder.cs | 686 | var node = System.Text.Json.Nodes.JsonNode.Parse(envelopeJson) as System.Text.Json.Nodes.JsonObject; | STRING |
| CRITICAL | src/officecli/ResidentServer.cs | 1013 | var node = System.Text.Json.Nodes.JsonNode.Parse(envelopeJson); | CODE |
| CRITICAL | src/officecli/CommandBuilder.Plugins.cs | 180 | ["manifest"] = System.Text.Json.Nodes.JsonNode.Parse(rawManifest), | CODE |
| CRITICAL | …/officecli/Handlers/Excel/ExcelHandler.Helpers.Node.cs | 988 | try { arr = System.Text.Json.Nodes.JsonNode.Parse(runsJson) as System.Text.Json.Nodes.JsonArray; } | CODE |
| CRITICAL | src/officecli/Handlers/Word/WordHandler.Selector.cs | 223 | ? para.ParagraphProperties.NumberingProperties.NumberingId.Val.Value.ToString() : null, | CODE |
| CRITICAL | src/officecli/Handlers/Word/WordHandler.Selector.cs | 225 | ? para.ParagraphProperties.NumberingProperties.NumberingLevelReference.Val.Value.ToString() : null, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.sh | 113 | # Step 1: Try downloading (mirror first, github fallback) | COMMENT |
| LOW | install.sh | 157 | # Step 2: Fallback to local files | COMMENT |
| LOW | install.sh | 180 | # Step 3: Install | COMMENT |
| LOW | install.sh | 235 | # Step 4: Install AI agent skills (first install only) | COMMENT |
| LOW | examples/ppt/video.py | 101 | # Step 1: Generate video and cover | COMMENT |
| LOW | skills/morph-ppt-3d/SKILL.md | 40 | ### Step 1: Understand the topic and suggest model direction | COMMENT |
| LOW | skills/morph-ppt-3d/SKILL.md | 57 | ### Step 2: Search for models (agent-driven) | COMMENT |
| LOW | skills/morph-ppt-3d/SKILL.md | 99 | ### Step 3: Present candidates to user for confirmation | COMMENT |
| LOW | skills/morph-ppt-3d/SKILL.md | 132 | ### Step 4: Download the confirmed model | COMMENT |
| LOW | skills/morph-ppt-3d/SKILL.md | 154 | ### Step 5: When user says "anything" / "you decide" / "just make a demo" | COMMENT |
| LOW | skills/morph-ppt-3d/SKILL.md | 170 | ### Step 6: When user wants to find models themselves | COMMENT |
| LOW | skills/morph-ppt-3d/SKILL.md | 198 | ### Step 7: When user gives keywords and asks agent to search | COMMENT |
| LOW | src/officecli/CommandBuilder.cs | 594 | // Step 1: does a resident own this file? Probe via the -ping pipe, | STRING |
| LOW | src/officecli/CommandBuilder.cs | 637 | // Step 2: resident is confirmed alive — wait for our turn in the main | STRING |
| LOW | src/officecli/Core/UpdateChecker.cs | 328 | // Step 1: cheap size sanity check. A self-contained .NET | COMMENT |
| LOW⚡ | src/officecli/Core/UpdateChecker.cs | 348 | // Step 2: ensure the file is executable (Unix). Externally- | COMMENT |
| LOW⚡ | src/officecli/Core/UpdateChecker.cs | 355 | // Step 3: smoke test — see RunVersionVerify for rationale (shebang | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3648 | // Step 1: Replace h:mm and h:m patterns → mark minutes as placeholder | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3654 | // Step 2: Convert remaining m/mm to M/MM (month) | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3657 | // Step 3: Restore minute placeholders | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3659 | // Step 4: Other conversions | COMMENT |
| LOW | …fficecli/Handlers/Pptx/PowerPointHandler.Animations.cs | 327 | // Step 1: Build the Transition element using SDK (for correct child XML generation) | COMMENT |
| LOW | …cecli/Handlers/Word/WordHandler.Helpers.FindReplace.cs | 691 | // Step 1: Replace text in affected runs (same logic as old ReplaceInParagraph) | COMMENT |
| LOW | …cecli/Handlers/Word/WordHandler.Helpers.FindReplace.cs | 748 | // Step 2: If format props, split at the replaced text position and apply | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.sh | 113 | # Step 1: Try downloading (mirror first, github fallback) | COMMENT |
| LOW | install.sh | 157 | # Step 2: Fallback to local files | COMMENT |
| LOW | install.sh | 180 | # Step 3: Install | COMMENT |
| LOW | install.sh | 235 | # Step 4: Install AI agent skills (first install only) | COMMENT |
| LOW | examples/ppt/video.py | 101 | # Step 1: Generate video and cover | COMMENT |
| LOW | src/officecli/CommandBuilder.cs | 594 | // Step 1: does a resident own this file? Probe via the -ping pipe, | STRING |
| LOW | src/officecli/CommandBuilder.cs | 637 | // Step 2: resident is confirmed alive — wait for our turn in the main | STRING |
| LOW | src/officecli/Core/UpdateChecker.cs | 328 | // Step 1: cheap size sanity check. A self-contained .NET | COMMENT |
| LOW⚡ | src/officecli/Core/UpdateChecker.cs | 348 | // Step 2: ensure the file is executable (Unix). Externally- | COMMENT |
| LOW⚡ | src/officecli/Core/UpdateChecker.cs | 355 | // Step 3: smoke test — see RunVersionVerify for rationale (shebang | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3648 | // Step 1: Replace h:mm and h:m patterns → mark minutes as placeholder | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3654 | // Step 2: Convert remaining m/mm to M/MM (month) | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3657 | // Step 3: Restore minute placeholders | COMMENT |
| LOW⚡ | …c/officecli/Handlers/Excel/ExcelHandler.HtmlPreview.cs | 3659 | // Step 4: Other conversions | COMMENT |
| LOW | …fficecli/Handlers/Pptx/PowerPointHandler.Animations.cs | 327 | // Step 1: Build the Transition element using SDK (for correct child XML generation) | COMMENT |
| LOW | …cecli/Handlers/Word/WordHandler.Helpers.FindReplace.cs | 691 | // Step 1: Replace text in affected runs (same logic as old ReplaceInParagraph) | COMMENT |
| LOW | …cecli/Handlers/Word/WordHandler.Helpers.FindReplace.cs | 748 | // Step 2: If format props, split at the replaced text position and apply | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/officecli/CommandBuilder.cs | 257 | // launching shell), it still leaks. The robust fix is to inherit ONLY | STRING |
| MEDIUM | src/officecli/Core/PivotTableHelper.Parse.cs | 330 | // robust even if the source headers were renamed between Get and | COMMENT |
| MEDIUM | src/officecli/Core/Chart/ChartHelper.Reader.cs | 726 | // plot-area border/fill as VERBATIM <c:spPr> OuterXml (same robust | COMMENT |
| MEDIUM | src/officecli/Handlers/PowerPointHandler.cs | 816 | // Writing content at creation time is URI-agnostic and robust. | COMMENT |
| MEDIUM | …/officecli/Handlers/Excel/ExcelHandler.Set.Workbook.cs | 293 | // it" so the clear is robust even when the implied lock came from a | COMMENT |
| MEDIUM | src/officecli/Handlers/Word/WordHandler.Navigation.cs | 1108 | // key) — robust against paragraphs living in tables/headers without needing a | COMMENT |
| MEDIUM | src/officecli/Handlers/Word/WordHandler.Navigation.cs | 3415 | // attribute text so the check is robust regardless of how the | COMMENT |
| MEDIUM | …icecli/Handlers/Word/WordHandler.HtmlPreview.Shapes.cs | 538 | // Absolutely-positioned overlay: write the declared px dimensions (from | COMMENT |
| MEDIUM | …/officecli/Handlers/Word/WordBatchEmitter.Resources.cs | 2910 | // seed <w:p> instead is robust to tcPr presence. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | sdk/python/officecli.py | 123 | except OSError: | CODE |
| HIGH | sdk/python/officecli.py | 478 | except OfficeCliError: | CODE |
| HIGH | sdk/python/smoke.py | 19 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/word/pictures.py | 0 | ship one `add` item over the pipe; return the parsed envelope. | STRING |
| HIGH | examples/ppt/pictures/pictures-basic.py | 0 | ship one `add` item over the pipe; return the parsed envelope. | STRING |
| HIGH | examples/ppt/ole/ole-embed.py | 0 | ship one `add` item over the pipe; return the parsed envelope. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/excel/charts/charts-column.sh | 13 | # Usage: | COMMENT |
| LOW | examples/excel/charts/charts-line.sh | 13 | # Usage: | COMMENT |
| LOW⚡ | examples/excel/charts/charts-histogram.sh | 19 | # Usage: | COMMENT |
| LOW | examples/excel/charts/charts-advanced.sh | 9 | # Usage: | COMMENT |
| LOW | examples/excel/charts/charts-extended.sh | 9 | # Usage: | COMMENT |
| LOW | examples/word/charts.sh | 21 | # Usage: | COMMENT |
| LOW | examples/ppt/charts/charts-combo.sh | 17 | # Usage: | COMMENT |
| LOW | examples/ppt/charts/charts-scatter.sh | 16 | # Usage: | COMMENT |
| LOW | examples/ppt/charts/charts-pie.sh | 15 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/excel/shapes.py | 174 | except Exception: | CODE |
| LOW⚡ | examples/excel/cell-formatting.py | 247 | except Exception: | CODE |
| LOW | skills/morph-ppt/reference/morph-helpers.py | 64 | except Exception: | CODE |
| LOW | skills/morph-ppt/reference/morph-helpers.py | 256 | except Exception as e: | CODE |
| LOW | skills/morph-ppt/reference/morph-helpers.py | 276 | except Exception as e: | CODE |
| LOW | skills/morph-ppt/reference/morph-helpers.py | 336 | except Exception as e: | CODE |
| LOW | skills/morph-ppt/reference/morph-helpers.py | 396 | except Exception as e: | CODE |
| LOW | skills/morph-ppt/reference/morph-helpers.sh | 174 | except Exception as e: | CODE |
| LOW | skills/morph-ppt/reference/morph-helpers.sh | 270 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …h-ppt/reference/styles/light--minimal-product/build.sh | 264 | # For brevity, I'll create placeholder shapes that can be shown/hidden | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | sdk/python/officecli.py | 606 | sh = f"(curl -fsSL {_INSTALL_SH_MIRROR} 2>/dev/null || curl -fsSL {_INSTALL_SH_GITHUB}) | bash" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/morph-ppt/reference/morph-helpers.sh | 153 | # Check if this shape has previous slide's content prefix | COMMENT |
| LOW | skills/morph-ppt/reference/morph-helpers.sh | 155 | # Check if it's NOT ghosted (x != 36cm) | COMMENT |
| LOW | skills/morph-ppt/reference/morph-helpers.sh | 254 | # Check if text and position are identical | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/morph-ppt/reference/morph-helpers.py | 211 | CODE | |
| LOW | skills/morph-ppt/reference/morph-helpers.py | 401 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sdk/python/officecli.py | 617 | __all__ = ["open", "create", "install", "Document", "OfficeCliError"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/ppt/charts/charts-advanced.py | 40 | CODE |