{"data":{"skill":{"slug":"zhanlincui-xlsx","name":"xlsx","icon":"📦","repo":"https://github.com/ZhanlinCui/Ultimate-Agent-Skills-Collection/tree/main/xlsx","status":"approved","author":"ZhanlinCui","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"fc51fe20-1a5a-44df-aaec-fc9c29b9b52e","skill_id":"594b4f2f-e77e-47c1-bafd-8e0efd0528ed","version":3,"content_hash":"v2:88a205c7f635a966e31156313b590d59007c5caa:020ccdb5932257b66c638ec1157ea248d57fa52c8c01f1f68b559b5970c7df35:69df3415bdb5fa1d5fbd131b4a7c40c0353ca8cee858f8f41391e4c0336abb75:40d9168023cfa4b2457b5a6c7292d354","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Confirmed findings are limited to recalc.py filesystem side effects that create and write a LibreOffice macro under the user application config directory, plus external execution of LibreOffice and timeout tools from PATH. The hardcoded URL is only an XML namespace, and the SKILL.md shell detections are markdown and code-fence false positives. No prompt injection, data exfiltration intent, or unauthorized network behavior was found.","remediation":[{"issue":"Persistent LibreOffice macro installation","severity":"high","suggestion":"Avoid writing macros into the user profile by default. Use a temporary LibreOffice profile or require explicit confirmation before setup."},{"issue":"External command execution through PATH","severity":"high","suggestion":"Resolve soffice and timeout tools with trusted paths, disclose the commands before execution, and fail closed when binaries are missing."},{"issue":"Workbook modification during recalculation","severity":"medium","suggestion":"Create a backup or write recalculated output to a new file before LibreOffice saves changes."},{"issue":"Unbounded timeout argument parsing","severity":"low","suggestion":"Validate the timeout as a bounded positive integer and return a clear error for invalid input."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"recalc.py","line_end":31,"line_start":31},{"file":"recalc.py","line_end":84,"line_start":84},{"file":"recalc.py","line_end":92,"line_start":92},{"file":"SKILL.md","line_end":71,"line_start":71},{"file":"SKILL.md","line_end":92,"line_start":78},{"file":"SKILL.md","line_end":101,"line_start":92},{"file":"SKILL.md","line_end":113,"line_start":101},{"file":"SKILL.md","line_end":116,"line_start":113},{"file":"SKILL.md","line_end":125,"line_start":116},{"file":"SKILL.md","line_end":135,"line_start":125},{"file":"SKILL.md","line_end":137,"line_start":135},{"file":"SKILL.md","line_end":140,"line_start":137},{"file":"SKILL.md","line_end":140,"line_start":140},{"file":"SKILL.md","line_end":144,"line_start":143},{"file":"SKILL.md","line_end":145,"line_start":144},{"file":"SKILL.md","line_end":146,"line_start":145},{"file":"SKILL.md","line_end":150,"line_start":146},{"file":"SKILL.md","line_end":175,"line_start":150},{"file":"SKILL.md","line_end":179,"line_start":175},{"file":"SKILL.md","line_end":202,"line_start":179},{"file":"SKILL.md","line_end":206,"line_start":202},{"file":"SKILL.md","line_end":208,"line_start":206},{"file":"SKILL.md","line_end":210,"line_start":208},{"file":"SKILL.md","line_end":213,"line_start":210},{"file":"SKILL.md","line_end":215,"line_start":213},{"file":"SKILL.md","line_end":234,"line_start":215},{"file":"SKILL.md","line_end":237,"line_start":234},{"file":"SKILL.md","line_end":248,"line_start":237},{"file":"SKILL.md","line_end":260,"line_start":248},{"file":"SKILL.md","line_end":270,"line_start":260},{"file":"SKILL.md","line_end":270,"line_start":270},{"file":"SKILL.md","line_end":272,"line_start":271},{"file":"SKILL.md","line_end":272,"line_start":272},{"file":"SKILL.md","line_end":277,"line_start":276},{"file":"SKILL.md","line_end":278,"line_start":277}]},{"factor":"network","evidence":[{"file":"recalc.py","line_end":37,"line_start":37}]},{"factor":"filesystem","evidence":[{"file":"recalc.py","line_end":21,"line_start":21},{"file":"recalc.py","line_end":21,"line_start":21},{"file":"recalc.py","line_end":46,"line_start":46},{"file":"recalc.py","line_end":33,"line_start":33}]}],"critical_findings":[],"high_findings":[{"title":"Python subprocess.run","locations":[{"file":"recalc.py","line_end":31,"line_start":31}],"confidence":0.78,"description":"subprocess.run(['soffice', '--headless', '--terminate_after_init'],","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"The helper launches soffice from PATH to initialize LibreOffice. The command is hardcoded and shell=False, but it still executes a local binary as a side effect of skill use."},{"title":"Python subprocess.run","locations":[{"file":"recalc.py","line_end":84,"line_start":84}],"confidence":0.72,"description":"subprocess.run(['gtimeout', '--version'], capture_output=True, timeout=1, check=False)","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"The helper probes gtimeout by executing a PATH-resolved binary. There is no shell injection, but external command execution remains a real local execution risk."},{"title":"Python subprocess.run","locations":[{"file":"recalc.py","line_end":92,"line_start":92}],"confidence":0.83,"description":"result = subprocess.run(cmd, capture_output=True, text=True)","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"The script invokes LibreOffice with a user-selected workbook path and a macro URL. Arguments are passed as a list, but the command opens and saves local files through an external application."},{"title":"Hidden file in home directory","locations":[{"file":"recalc.py","line_end":21,"line_start":21}],"confidence":0.91,"description":"macro_dir = os.path.expanduser('~/.config/libreoffice/4/user/basic/Standard')","review_kind":"capability","source_category":"filesystem","source_severity":"high","confidence_reasoning":"The script targets the user LibreOffice profile under ~/.config. Writing persistent macro files in hidden application configuration is a real security-sensitive side effect."}],"medium_findings":[{"title":"Hidden file access","locations":[{"file":"recalc.py","line_end":21,"line_start":21}],"confidence":0.9,"description":"macro_dir = os.path.expanduser('~/.config/libreoffice/4/user/basic/Standard')","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The script accesses the hidden LibreOffice user configuration directory. The purpose is setup, but hidden profile access can affect future LibreOffice behavior."},{"title":"Python file write/append","locations":[{"file":"recalc.py","line_end":46,"line_start":46}],"confidence":0.88,"description":"with open(macro_file, 'w') as f:","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The script writes Module1.xba into the LibreOffice macro directory. The content is static, but writing a macro file is a persistent filesystem modification."},{"title":"Python os file operations","locations":[{"file":"recalc.py","line_end":33,"line_start":33}],"confidence":0.86,"description":"os.makedirs(macro_dir, exist_ok=True)","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The script creates the LibreOffice macro directory in the user profile if missing. This is expected setup behavior but still modifies user application configuration."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":2,"total_lines":467,"audit_model":"codex","audited_at":"2026-07-08T17:08:42.005+00:00","created_at":"2026-07-08T17:49:47.00072+00:00","static_findings":[{"id":"external_commands:recalc.py:31:python-subprocess-run","file":"recalc.py","pattern":"Python subprocess.run","snippet":"subprocess.run(['soffice', '--headless', '--terminate_after_init'],","category":"external_commands","line_end":31,"severity":"high","line_start":31},{"id":"external_commands:recalc.py:84:python-subprocess-run","file":"recalc.py","pattern":"Python subprocess.run","snippet":"subprocess.run(['gtimeout', '--version'], capture_output=True, timeout=1, check=False)","category":"external_commands","line_end":84,"severity":"high","line_start":84},{"id":"external_commands:recalc.py:92:python-subprocess-run","file":"recalc.py","pattern":"Python subprocess.run","snippet":"result = subprocess.run(cmd, capture_output=True, text=True)","category":"external_commands","line_end":92,"severity":"high","line_start":92},{"id":"network:recalc.py:37:hardcoded-url","file":"recalc.py","pattern":"Hardcoded URL","snippet":"<script:module xmlns:script=\"http://openoffice.org/2000/script\" script:name=\"Module1\" script:languag","category":"network","line_end":37,"severity":"low","line_start":37},{"id":"filesystem:recalc.py:21:hidden-file-in-home-directory","file":"recalc.py","pattern":"Hidden file in home directory","snippet":"macro_dir = os.path.expanduser('~/.config/libreoffice/4/user/basic/Standard')","category":"filesystem","line_end":21,"severity":"high","line_start":21},{"id":"filesystem:recalc.py:21:hidden-file-access","file":"recalc.py","pattern":"Hidden file access","snippet":"macro_dir = os.path.expanduser('~/.config/libreoffice/4/user/basic/Standard')","category":"filesystem","line_end":21,"severity":"medium","line_start":21},{"id":"filesystem:recalc.py:46:python-file-write-append","file":"recalc.py","pattern":"Python file write/append","snippet":"with open(macro_file, 'w') as f:","category":"filesystem","line_end":46,"severity":"medium","line_start":46},{"id":"filesystem:recalc.py:33:python-os-file-operations","file":"recalc.py","pattern":"Python os file operations","snippet":"os.makedirs(macro_dir, exist_ok=True)","category":"filesystem","line_end":33,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**LibreOffice Required for Formula Recalculation**: You can assume LibreOffice is installed for reca","category":"external_commands","line_end":71,"severity":"medium","line_start":71},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":92,"severity":"medium","line_start":78},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":101,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":113,"severity":"medium","line_start":101},{"id":"external_commands:SKILL.md:113:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":116,"severity":"medium","line_start":113},{"id":"external_commands:SKILL.md:116:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":125,"severity":"medium","line_start":116},{"id":"external_commands:SKILL.md:125:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":135,"severity":"medium","line_start":125},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":137,"severity":"medium","line_start":135},{"id":"external_commands:SKILL.md:137:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":140,"severity":"medium","line_start":137},{"id":"external_commands:SKILL.md:140:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- If `status` is `errors_found`, check `error_summary` for specific error types and locations","category":"external_commands","line_end":140,"severity":"medium","line_start":140},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `#REF!`: Invalid cell references","category":"external_commands","line_end":144,"severity":"medium","line_start":143},{"id":"external_commands:SKILL.md:144:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `#DIV/0!`: Division by zero","category":"external_commands","line_end":145,"severity":"medium","line_start":144},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `#VALUE!`: Wrong data type in formula","category":"external_commands","line_end":146,"severity":"medium","line_start":145},{"id":"external_commands:SKILL.md:146:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `#NAME?`: Unrecognized formula name","category":"external_commands","line_end":150,"severity":"medium","line_start":146},{"id":"external_commands:SKILL.md:150:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":175,"severity":"medium","line_start":150},{"id":"external_commands:SKILL.md:175:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":179,"severity":"medium","line_start":175},{"id":"external_commands:SKILL.md:179:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":202,"severity":"medium","line_start":179},{"id":"external_commands:SKILL.md:202:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":206,"severity":"medium","line_start":202},{"id":"external_commands:SKILL.md:206:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Excel files created or modified by openpyxl contain formulas as strings but not calculated values. U","category":"external_commands","line_end":208,"severity":"medium","line_start":206},{"id":"external_commands:SKILL.md:208:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":210,"severity":"medium","line_start":208},{"id":"external_commands:SKILL.md:210:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":213,"severity":"medium","line_start":210},{"id":"external_commands:SKILL.md:213:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":215,"severity":"medium","line_start":213},{"id":"external_commands:SKILL.md:215:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":234,"severity":"medium","line_start":215},{"id":"external_commands:SKILL.md:234:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- [ ] **NaN handling**: Check for null values with `pd.notna()`","category":"external_commands","line_end":237,"severity":"medium","line_start":234},{"id":"external_commands:SKILL.md:237:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- [ ] **Division by zero**: Check denominators before using `/` in formulas (#DIV/0!)","category":"external_commands","line_end":248,"severity":"medium","line_start":237},{"id":"external_commands:SKILL.md:248:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```json","category":"external_commands","line_end":260,"severity":"medium","line_start":248},{"id":"external_commands:SKILL.md:260:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":270,"severity":"medium","line_start":260},{"id":"external_commands:SKILL.md:270:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Use `data_only=True` to read calculated values: `load_workbook('file.xlsx', data_only=True)`","category":"external_commands","line_end":270,"severity":"medium","line_start":270},{"id":"external_commands:SKILL.md:271:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Warning**: If opened with `data_only=True` and saved, formulas are replaced with values and perm","category":"external_commands","line_end":272,"severity":"medium","line_start":271},{"id":"external_commands:SKILL.md:272:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- For large files: Use `read_only=True` for reading or `write_only=True` for writing","category":"external_commands","line_end":272,"severity":"medium","line_start":272},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Specify data types to avoid inference issues: `pd.read_excel('file.xlsx', dtype={'id': str})`","category":"external_commands","line_end":277,"severity":"medium","line_start":276},{"id":"external_commands:SKILL.md:277:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- For large files, read specific columns: `pd.read_excel('file.xlsx', usecols=['A', 'C', 'E'])`","category":"external_commands","line_end":278,"severity":"medium","line_start":277},{"id":"blocker:SKILL.md:143:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- `#REF!`: Invalid cell references","category":"blocker","line_end":143,"severity":"low","line_start":143},{"id":"blocker:SKILL.md:276:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Specify data types to avoid inference issues: `pd.read_excel('file.xlsx', dtype={'id': str})`","category":"blocker","line_end":276,"severity":"low","line_start":276},{"id":"blocker:SKILL.md:283:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Avoid verbose variable names and redundant operations","category":"blocker","line_end":283,"severity":"low","line_start":283},{"id":"blocker:SKILL.md:284:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Avoid unnecessary print statements","category":"blocker","line_end":284,"severity":"low","line_start":284}],"finding_verdicts":[{"id":"external_commands:recalc.py:31:python-subprocess-run","reason":"The helper launches soffice from PATH to initialize LibreOffice. The command is hardcoded and shell=False, but it still executes a local binary as a side effect of skill use.","verdict":"confirmed","severity":"high","confidence":0.78},{"id":"external_commands:recalc.py:84:python-subprocess-run","reason":"The helper probes gtimeout by executing a PATH-resolved binary. There is no shell injection, but external command execution remains a real local execution risk.","verdict":"confirmed","severity":"high","confidence":0.72},{"id":"external_commands:recalc.py:92:python-subprocess-run","reason":"The script invokes LibreOffice with a user-selected workbook path and a macro URL. Arguments are passed as a list, but the command opens and saves local files through an external application.","verdict":"confirmed","severity":"high","confidence":0.83},{"id":"network:recalc.py:37:hardcoded-url","reason":"The hardcoded URL is an XML namespace inside a LibreOffice macro module string. It is not used for a network request or data transfer.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:recalc.py:21:hidden-file-in-home-directory","reason":"The script targets the user LibreOffice profile under ~/.config. Writing persistent macro files in hidden application configuration is a real security-sensitive side effect.","verdict":"confirmed","severity":"high","confidence":0.91},{"id":"filesystem:recalc.py:21:hidden-file-access","reason":"The script accesses the hidden LibreOffice user configuration directory. The purpose is setup, but hidden profile access can affect future LibreOffice behavior.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"filesystem:recalc.py:46:python-file-write-append","reason":"The script writes Module1.xba into the LibreOffice macro directory. The content is static, but writing a macro file is a persistent filesystem modification.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"filesystem:recalc.py:33:python-os-file-operations","reason":"The script creates the LibreOffice macro directory in the user profile if missing. This is expected setup behavior but still modifies user application configuration.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","reason":"This line describes LibreOffice as a requirement for recalculation. It contains no Ruby backtick execution or executable shell interpolation.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","reason":"This is a fenced Python example for reading and writing spreadsheets. The markdown backticks are documentation delimiters, not executed code.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"This finding overlaps the boundary of markdown code examples. It is documentation text, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","reason":"This is a fenced Python anti-pattern example about hardcoded spreadsheet values. It does not execute shell commands.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:113:ruby-shell-backtick-execution","reason":"This finding marks a markdown fence transition. The backticks are formatting syntax only.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:116:ruby-shell-backtick-execution","reason":"This is a fenced Python example that assigns Excel formulas as strings. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:125:ruby-shell-backtick-execution","reason":"This finding marks markdown prose and a following workflow section. The backticks are formatting syntax only.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:135:ruby-shell-backtick-execution","reason":"This is a fenced bash usage example for the local recalc.py helper. The actual execution risk is covered by recalc.py, not Ruby backticks in markdown.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:137:ruby-shell-backtick-execution","reason":"This finding marks the end of a bash code fence and surrounding prose. It is not executable Ruby or shell backtick syntax.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:140:ruby-shell-backtick-execution","reason":"This line references JSON field names in inline code formatting. It does not execute commands.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","reason":"This line documents the Excel #REF! error in inline code formatting. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:144:ruby-shell-backtick-execution","reason":"This line documents the Excel #DIV/0! error in inline code formatting. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:145:ruby-shell-backtick-execution","reason":"This line documents the Excel #VALUE! error in inline code formatting. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:146:ruby-shell-backtick-execution","reason":"This line documents the Excel #NAME? error in inline code formatting. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:150:ruby-shell-backtick-execution","reason":"This is a fenced Python openpyxl example for workbook creation. The markdown fence is documentation, not executed code.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:175:ruby-shell-backtick-execution","reason":"This finding marks a markdown code fence boundary. It is formatting syntax only.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:179:ruby-shell-backtick-execution","reason":"This is a fenced Python openpyxl example for editing workbooks. It is not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:202:ruby-shell-backtick-execution","reason":"This finding marks the end of a Python code example. The backticks are markdown formatting only.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:206:ruby-shell-backtick-execution","reason":"This line describes using the helper script for recalculation. It does not contain Ruby backtick execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:208:ruby-shell-backtick-execution","reason":"This is a fenced bash syntax block showing recalc.py usage. The underlying helper risk is addressed in recalc.py verdicts.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:210:ruby-shell-backtick-execution","reason":"This finding marks a markdown fence boundary around a command example. The fence is not executable code.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:213:ruby-shell-backtick-execution","reason":"This is another fenced bash example for recalc.py usage. It is documentation, not Ruby backtick execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:215:ruby-shell-backtick-execution","reason":"This finding marks the end of the command example and following prose. The backticks are formatting syntax.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:234:ruby-shell-backtick-execution","reason":"This line uses inline code to show pd.notna() in a spreadsheet checklist. It does not execute a command.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:237:ruby-shell-backtick-execution","reason":"This line uses inline code for an Excel formula operator. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:248:ruby-shell-backtick-execution","reason":"This is a fenced JSON example of recalc.py output. It is documentation, not executable code.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:260:ruby-shell-backtick-execution","reason":"This finding marks a markdown fence boundary before best practices. It is formatting syntax only.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:270:ruby-shell-backtick-execution","reason":"This line uses inline code for an openpyxl option. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:271:ruby-shell-backtick-execution","reason":"This line uses inline code for an openpyxl option in a warning. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:272:ruby-shell-backtick-execution","reason":"This line uses inline code for openpyxl read and write modes. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:276:ruby-shell-backtick-execution","reason":"This line uses inline code in a pandas read_excel example. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:277:ruby-shell-backtick-execution","reason":"This line uses inline code in a pandas usecols example. It is not shell execution.","verdict":"false_positive","confidence":0.93},{"id":"blocker:SKILL.md:143:system-reconnaissance","reason":"This line documents the Excel #REF! formula error. It does not collect system details or instruct reconnaissance.","verdict":"false_positive","confidence":0.96},{"id":"blocker:SKILL.md:276:system-reconnaissance","reason":"This line shows a pandas dtype example for reading Excel data. It is not system reconnaissance.","verdict":"false_positive","confidence":0.96},{"id":"blocker:SKILL.md:283:system-reconnaissance","reason":"This line advises concise variable names in generated code. It does not inspect the host system.","verdict":"false_positive","confidence":0.96},{"id":"blocker:SKILL.md:284:system-reconnaissance","reason":"This line discourages unnecessary print statements. It does not gather system or environment information.","verdict":"false_positive","confidence":0.96}],"semantic_findings":[],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":7,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}