-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Claude/update main 011 cuwdnb le l9sdyh3a u xt qd #84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Claude/update main 011 cuwdnb le l9sdyh3a u xt qd #84
Conversation
- Add playwright-browser-automation skill for browser testing - Add ios-simulator-testing skill for iOS app automation - Create ZIP files for all 22 skills for Claude Desktop installation - Add create-skill-zips.sh script to regenerate ZIPs - Update README with Automation skills section - Bump version to 3.3.0 - Add installation instructions in skill-zips/README.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add file-organizer skill for intelligent file/folder organization - Includes duplicate detection and automated cleanup - Source: ComposioHQ/awesome-claude-skills - Create ZIP for file-organizer skill - Regenerate all 23 skill ZIPs - Update README with Productivity skills section - Update plugin.json to v3.4.0 - Update skill-zips README to reflect 23 skills 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add gmail-intelligence skill for email automation and analysis - Add notion-template-processor skill for Notion database integration - Both skills from ashleytower/claude-skills-collection - Create ZIP files for both new skills - Now 25 total skills (3 Productivity skills) - Update README with new Productivity skills - Update plugin.json to v3.5.0 - Update skill-zips README to reflect 25 skills 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Document Skills (4): - docx - Word documents with tracked changes - pdf - PDF extraction, creation, merging - xlsx - Excel spreadsheets with formulas - pptx - PowerPoint presentations Creative & Media (5): - canvas-design - Visual art in PNG/PDF - image-enhancer - Image upscaling - slack-gif-creator - Animated GIFs - theme-factory - Professional themes - video-downloader - Multi-platform downloads Business & Research (3): - lead-research-assistant - Lead qualification - competitive-ads-extractor - Competitor analysis - notebooklm - NotebookLM integration All skills sourced from: - anthropics/skills (official) - ComposioHQ/awesome-claude-skills - PleasePrompto/notebooklm-skill Now 37 total skills with ZIP files Updated README and docs Bumped version to 3.6.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Comprehensive AI prompt engineering skill covering: - Video generation: Veo3 with optimal 5-component structure - Image generation: Midjourney V7, DALL-E 3, Flux.1, Stable Diffusion - Conversational AI: Claude 4.x, ChatGPT/GPT-4, Gemini 2.5 Features: - Platform-specific techniques and parameters - Best practices from 2025 documentation - Quick reference tables for platform selection - Common mistakes and fixes - Real-world impact metrics Research sources: - Official documentation (Anthropic, OpenAI, Google) - Community guides and tutorials - 2025 updates for latest model versions
WalkthroughAdds many new skills, extensive OOXML XSD schemas, Python tools for packing/unpacking/validating/editing Office files (DOCX/PPTX/XLSX), iOS simulator testing scripts, plugin metadata updates (version 3.2.3 → 3.7.0) and packaging tooling (skill ZIP generation), plus numerous skill documentation and font license files. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant DocumentAPI as Document API
participant XMLEditor
participant Validators
participant Pack as Pack/Zip
User->>DocumentAPI: initialize(unpacked_dir, author)
DocumentAPI->>XMLEditor: open("word/document.xml")
User->>DocumentAPI: add_comment(start, end, text)
DocumentAPI->>XMLEditor: locate nodes & insert w:commentRange / w:commentReference
XMLEditor-->>DocumentAPI: updated XML parts
DocumentAPI->>DocumentAPI: update comments.xml / commentsIds / commentsExtensible
User->>DocumentAPI: save(destination, validate=True)
DocumentAPI->>Validators: run Base + DOCX + Redlining
Validators->>Validators: XML, namespaces, IDs, relationships, XSD, redlining diff
alt all validators pass
DocumentAPI->>Pack: condense XML & zip to .docx
Pack-->>User: saved file
else any validator fails
Validators-->>User: validation errors (fail save)
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Areas requiring extra attention:
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (1 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 21
🧹 Nitpick comments (17)
skills/competitive-ads-extractor/SKILL.md (1)
1-285: Add Prerequisites/Requirements and Limitations sections.The documentation would benefit from explicitly stating what's needed to use this skill:
- Prerequisites: Which ad libraries are supported (Facebook Ad Library, LinkedIn, TikTok, etc.), any required API keys, authentication setup, rate limits.
- Limitations: Geographical restrictions, data freshness, supported date ranges, accuracy caveats, platform-specific constraints.
This helps set realistic expectations for users. The Legal & Ethical section is good, but a Limitations section (e.g., "Currently supports Facebook and LinkedIn; TikTok support coming soon") would improve clarity.
Consider adding these sections after the "When to Use This Skill" section:
## Prerequisites - API access to supported ad libraries (Facebook Ad Library, LinkedIn Campaign Manager) - Appropriate authentication credentials - Rate limits: [specify if applicable] - Geographic availability: [list any restrictions] ## Limitations - Currently supports Facebook Ad Library and LinkedIn - Data reflects only publicly available ads - Screenshots and analysis are point-in-time snapshots - No real-time engagement metrics availablecreate-skill-zips.sh (1)
17-45: Add pre-flight check for SKILLS_DIR.While line 44 handles failure to cd into
SKILLS_DIR, it would be clearer to validate the directory exists upfront before beginning ZIP creation.Add an early validation check:
if [ ! -d "$SKILLS_DIR" ]; then echo "ERROR: SKILLS_DIR does not exist: $SKILLS_DIR" >&2 exit 1 fiThis provides immediate, explicit feedback if the skills directory is misconfigured.
skills/file-organizer/SKILL.md (1)
33-33: Add language identifiers to all fenced code blocks for proper syntax highlighting.Multiple code blocks lack language specification. This improves readability and enables syntax highlighting in rendered documentation. Most blocks appear to be shell commands/examples—specify these as
bashor shell code blocks where appropriate.For example, line 33 and other command-heavy sections should use:
-``` +```bash cd ~ -``` +```Apply this consistently across the file for better documentation rendering.
Also applies to: 39-39, 43-43, 47-47, 53-53, 57-57, 61-61, 65-65, 178-178, 260-260, 328-328, 344-344, 361-361, 368-368, 374-374, 380-380, 386-386, 392-392
skills/canvas-design/SKILL.md (1)
23-23: Minor wordiness and hyphenation improvements.Line 23: Replace "taken into account, but used" with a more concise phrasing:
- Some subtle input or instructions by the user that should be taken into account, but used as a foundation; + Some subtle input or instructions by the user that should inform, but not constrain,Line 106: Add hyphen to form compound adjective:
- To create museum or magazine quality work, + To create museum or magazine-quality work,These are minor style refinements that improve readability.
Also applies to: 106-106
skills/gmail-intelligence/SKILL.md (3)
54-54: Wrap bare URLs in markdown link syntax.Lines 54, 193, 194 contain bare URLs that should be wrapped in markdown links for better rendering and accessibility:
- This skill works with: - - **RUBE MCP**: Real Gmail access via Composio + This skill works with: + - **RUBE MCP**: [Real Gmail access via Composio](https://composio.dev)Apply similar formatting to other bare URLs in the document. This improves document readability and provides proper link formatting.
Also applies to: 193-193, 194-194
61-61: Add language identifiers to fenced code blocks.Lines 61, 66, 71 contain code blocks without language specification. These appear to be plain text/pseudo-code; specify the language or use generic formatting:
-``` +```text 1. Use RUBE_SEARCH_TOOLS to find relevant Gmail tools -``` +```This enables proper syntax highlighting and document rendering consistency.
Also applies to: 66-66, 71-71
14-14: Minor text redundancy: simplify "Find specific details".Line 14 uses redundant phrasing. Refactor to:
- - Find specific details from client communications + - Extract details from client communicationsThis is a minor improvement for conciseness.
skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd (1)
11-18: Consider adding documentation annotations.The schema lacks
xsd:annotationandxsd:documentationelements. Adding documentation would improve maintainability and help developers understand the purpose of each element and attribute, especially for attributes likeintelligentPlaceholder.Example documentation structure:
<xsd:complexType name="CT_CommentExtensible"> <xsd:annotation> <xsd:documentation>Defines an individual extensible comment with durable ID and optional metadata.</xsd:documentation> </xsd:annotation> <xsd:sequence> <xsd:element name="extLst" type="w16:CT_ExtensionList" minOccurs="0" maxOccurs="1"/> </xsd:sequence> <xsd:attribute name="durableId" type="w:ST_LongHexNumber" use="required"> <xsd:annotation> <xsd:documentation>Unique identifier for the comment that persists across document versions.</xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="dateUtc" type="w:ST_DateTime" use="optional"> <xsd:annotation> <xsd:documentation>UTC timestamp when the comment was created or modified.</xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="intelligentPlaceholder" type="s:ST_OnOff" use="optional"> <xsd:annotation> <xsd:documentation>Indicates whether the comment uses intelligent placeholder features.</xsd:documentation> </xsd:annotation> </xsd:attribute> </xsd:complexType>skills/ios-simulator-testing/examples/login_flow.py (3)
26-32: Consider adding a timeout for resilience.The command execution lacks a timeout parameter, which could cause the script to hang indefinitely if an external script becomes unresponsive.
Apply this diff to add a timeout:
-def run_command(cmd: list) -> tuple: +def run_command(cmd: list, timeout: int = 30) -> tuple: """Run command and return (success, output).""" try: - result = subprocess.run(cmd, capture_output=True, text=True, check=True) + result = subprocess.run(cmd, capture_output=True, text=True, check=True, timeout=timeout) return (True, result.stdout.strip()) except subprocess.CalledProcessError as e: return (False, e.stderr.strip()) + except subprocess.TimeoutExpired: + return (False, f"Command timed out after {timeout} seconds")Note: The S603 static analysis warning is a false positive in this context, as commands are constructed from known script paths.
64-64: Consider polling instead of fixed sleeps for more robust timing.Fixed sleep calls (lines 64, 130, 154) make the script fragile - too short causes failures, too long wastes time. Polling the screen state until expected conditions appear would be more reliable.
Example polling approach:
def wait_for_screen(expected_text: str, timeout: int = 10) -> bool: """Poll screen until expected text appears.""" start = time.time() while time.time() - start < timeout: success, output = run_command(["python", str(scripts_dir / "screen_mapper.py")]) if success and expected_text in output: return True time.sleep(0.5) return FalseAlso applies to: 130-130, 154-154
168-176: Consider logging full exception details for better debugging.The bare
Exceptioncatch at line 174 suppresses valuable traceback information. For an example script, showing the full error would help users debug issues.Apply this diff to preserve error context:
except Exception as e: - print(f"\n\nError: {e}") + import traceback + print(f"\n\nError: {e}") + print("\nTraceback:") + traceback.print_exc() sys.exit(1)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (1)
8-10: ST_RelationshipId is unrestricted - consider if pattern constraint is needed.The
ST_RelationshipIdtype is defined as an unrestricted string. Depending on the OOXML specification requirements, relationship IDs might need a more specific pattern (e.g., "rId" prefix followed by digits).Verify that unrestricted strings are correct per the OOXML spec. If relationship IDs follow a pattern, consider adding it:
<xsd:simpleType name="ST_RelationshipId"> <xsd:restriction base="xsd:string"> <xsd:pattern value="rId[0-9]+"/> </xsd:restriction> </xsd:simpleType>skills/docx/ooxml.md (1)
276-283: Clarify the actual skills mount path for users.The documentation uses
/mnt/skillsas an example path, with a note that users should check their context. Consider making this more explicit about how users should determine their actual skills path.Consider adding a more specific example:
# Search for document.py to locate the skill root -# Note: /mnt/skills is used here as an example; check your context for the actual location -find /mnt/skills -name "document.py" -path "*/docx/scripts/*" 2>/dev/null | head -1 +# Note: Replace /mnt/skills with your actual skills directory +# Common locations: /mnt/skills, ./skills, /opt/skills +find /mnt/skills -name "document.py" -path "*/docx/scripts/*" 2>/dev/null | head -1 # Example output: /mnt/skills/docx/scripts/document.py # Skill root is: /mnt/skills/docxskills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd (1)
7-10: Consider updating Dublin Core schemas to current versions.The 2003-04-02 Dublin Core XSD schemas are still publicly available and hosted at the referenced URLs, so immediate validation issues are unlikely. However, these schemas are marked as "previously recommended" and superseded by the 2008 QDC set, which is the current recommendation.
While external URL dependencies work today, consider:
- Updating to the current 2008 Dublin Core schemas for long-term stability
- If updating is not feasible, caching or bundling local copies to guard against future deprecation or URL changes
skills/docx/scripts/utilities.py (1)
69-72: Preserve the original XML encoding instead of assuming UTF-8Right now we only differentiate between explicit
encoding="ascii"and “everything else → UTF-8”. Several OOXML parts (themes, charts, custom XML) still ship with declarations such asUTF-16orISO-8859-1. Rewriting them as UTF-8 can introduce unnecessary binary diffs and, in the worst case, break downstream tooling that validates the part’s declared encoding. Please parse whatever encoding is declared and reuse it when serializing.Apply this diff:
@@ -import html +import html +import re @@ - self.encoding = "ascii" if 'encoding="ascii"' in header else "utf-8" + match = re.search(r'encoding="([^"]+)"', header, flags=re.IGNORECASE) + self.encoding = match.group(1) if match else "utf-8"skills/docx/ooxml/scripts/unpack.py (1)
10-12: Consider more user-friendly error messaging.The assertion provides usage information but could be more helpful with a try-except pattern that allows for cleaner error handling.
Apply this diff for improved error handling:
-# Get command line arguments -assert len(sys.argv) == 3, "Usage: python unpack.py <office_file> <output_dir>" -input_file, output_dir = sys.argv[1], sys.argv[2] +# Get command line arguments +if len(sys.argv) != 3: + print("Usage: python unpack.py <office_file> <output_dir>", file=sys.stderr) + sys.exit(1) +input_file, output_dir = sys.argv[1], sys.argv[2]skills/docx/docx-js.md (1)
220-224: Use proper heading syntax instead of bold text.Line 220 uses bold emphasis for what should be a heading. This affects document structure and accessibility.
Apply this diff:
-**IMPORTANT: Table Width & Borders** +### IMPORTANT: Table Width & Borders
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (92)
skill-zips/brainstorming.zipis excluded by!**/*.zipskill-zips/canvas-design.zipis excluded by!**/*.zipskill-zips/competitive-ads-extractor.zipis excluded by!**/*.zipskill-zips/condition-based-waiting.zipis excluded by!**/*.zipskill-zips/defense-in-depth.zipis excluded by!**/*.zipskill-zips/dispatching-parallel-agents.zipis excluded by!**/*.zipskill-zips/docx.zipis excluded by!**/*.zipskill-zips/executing-plans.zipis excluded by!**/*.zipskill-zips/file-organizer.zipis excluded by!**/*.zipskill-zips/finishing-a-development-branch.zipis excluded by!**/*.zipskill-zips/gmail-intelligence.zipis excluded by!**/*.zipskill-zips/image-enhancer.zipis excluded by!**/*.zipskill-zips/ios-simulator-testing.zipis excluded by!**/*.zipskill-zips/lead-research-assistant.zipis excluded by!**/*.zipskill-zips/notebooklm.zipis excluded by!**/*.zipskill-zips/notion-template-processor.zipis excluded by!**/*.zipskill-zips/pdf.zipis excluded by!**/*.zipskill-zips/playwright-browser-automation.zipis excluded by!**/*.zipskill-zips/pptx.zipis excluded by!**/*.zipskill-zips/prompt-engineer.zipis excluded by!**/*.zipskill-zips/receiving-code-review.zipis excluded by!**/*.zipskill-zips/requesting-code-review.zipis excluded by!**/*.zipskill-zips/root-cause-tracing.zipis excluded by!**/*.zipskill-zips/sharing-skills.zipis excluded by!**/*.zipskill-zips/slack-gif-creator.zipis excluded by!**/*.zipskill-zips/subagent-driven-development.zipis excluded by!**/*.zipskill-zips/systematic-debugging.zipis excluded by!**/*.zipskill-zips/test-driven-development.zipis excluded by!**/*.zipskill-zips/testing-anti-patterns.zipis excluded by!**/*.zipskill-zips/testing-skills-with-subagents.zipis excluded by!**/*.zipskill-zips/theme-factory.zipis excluded by!**/*.zipskill-zips/using-git-worktrees.zipis excluded by!**/*.zipskill-zips/using-superpowers.zipis excluded by!**/*.zipskill-zips/verification-before-completion.zipis excluded by!**/*.zipskill-zips/video-downloader.zipis excluded by!**/*.zipskill-zips/writing-plans.zipis excluded by!**/*.zipskill-zips/writing-skills.zipis excluded by!**/*.zipskill-zips/xlsx.zipis excluded by!**/*.zipskills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/BigShoulders-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/BigShoulders-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Boldonse-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/DMMono-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/EricaOne-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/GeistMono-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/GeistMono-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Gloock-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Italiana-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Jura-Light.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Jura-Medium.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Lora-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Lora-BoldItalic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Lora-Italic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Lora-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/NationalPark-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/NationalPark-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Outfit-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Outfit-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/PixelifySans-Medium.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/PoiretOne-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/RedHatMono-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/RedHatMono-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Silkscreen-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/SmoochSans-Medium.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Tektur-Medium.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/Tektur-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/WorkSans-Bold.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/WorkSans-Italic.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/WorkSans-Regular.ttfis excluded by!**/*.ttfskills/canvas-design/canvas-fonts/YoungSerif-Regular.ttfis excluded by!**/*.ttf
📒 Files selected for processing (98)
.claude-plugin/plugin.json(1 hunks)README.md(2 hunks)create-skill-zips.sh(1 hunks)skill-zips/README.md(1 hunks)skills/canvas-design/LICENSE.txt(1 hunks)skills/canvas-design/SKILL.md(1 hunks)skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Boldonse-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/DMMono-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/EricaOne-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/GeistMono-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Gloock-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Italiana-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Jura-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Lora-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/NationalPark-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Outfit-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/Tektur-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/WorkSans-OFL.txt(1 hunks)skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt(1 hunks)skills/competitive-ads-extractor/SKILL.md(1 hunks)skills/docx/LICENSE.txt(1 hunks)skills/docx/SKILL.md(1 hunks)skills/docx/docx-js.md(1 hunks)skills/docx/ooxml.md(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd(1 hunks)skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd(1 hunks)skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd(1 hunks)skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd(1 hunks)skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd(1 hunks)skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd(1 hunks)skills/docx/ooxml/schemas/mce/mc.xsd(1 hunks)skills/docx/ooxml/schemas/microsoft/wml-2010.xsd(1 hunks)skills/docx/ooxml/schemas/microsoft/wml-2012.xsd(1 hunks)skills/docx/ooxml/schemas/microsoft/wml-2018.xsd(1 hunks)skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd(1 hunks)skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd(1 hunks)skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd(1 hunks)skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd(1 hunks)skills/docx/ooxml/scripts/pack.py(1 hunks)skills/docx/ooxml/scripts/unpack.py(1 hunks)skills/docx/ooxml/scripts/validate.py(1 hunks)skills/docx/ooxml/scripts/validation/__init__.py(1 hunks)skills/docx/ooxml/scripts/validation/base.py(1 hunks)skills/docx/ooxml/scripts/validation/docx.py(1 hunks)skills/docx/ooxml/scripts/validation/pptx.py(1 hunks)skills/docx/ooxml/scripts/validation/redlining.py(1 hunks)skills/docx/scripts/__init__.py(1 hunks)skills/docx/scripts/document.py(1 hunks)skills/docx/scripts/templates/comments.xml(1 hunks)skills/docx/scripts/templates/commentsExtended.xml(1 hunks)skills/docx/scripts/templates/commentsExtensible.xml(1 hunks)skills/docx/scripts/templates/commentsIds.xml(1 hunks)skills/docx/scripts/templates/people.xml(1 hunks)skills/docx/scripts/utilities.py(1 hunks)skills/file-organizer/SKILL.md(1 hunks)skills/gmail-intelligence/SKILL.md(1 hunks)skills/image-enhancer/SKILL.md(1 hunks)skills/ios-simulator-testing/SKILL.md(1 hunks)skills/ios-simulator-testing/examples/login_flow.py(1 hunks)skills/ios-simulator-testing/scripts/accessibility_audit.py(1 hunks)skills/ios-simulator-testing/scripts/app_launcher.py(1 hunks)skills/ios-simulator-testing/scripts/app_state_capture.py(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
skills/ios-simulator-testing/examples/login_flow.py (3)
skills/ios-simulator-testing/scripts/navigator.py (2)
description(86-89)main(289-393)skills/ios-simulator-testing/scripts/app_launcher.py (1)
main(220-308)skills/ios-simulator-testing/scripts/screen_mapper.py (1)
main(248-278)
skills/ios-simulator-testing/scripts/accessibility_audit.py (1)
skills/ios-simulator-testing/scripts/common/idb_utils.py (2)
flatten_tree(71-116)get_accessibility_tree(22-68)
skills/ios-simulator-testing/scripts/app_state_capture.py (1)
skills/ios-simulator-testing/scripts/common/idb_utils.py (2)
count_elements(119-143)get_accessibility_tree(22-68)
skills/ios-simulator-testing/scripts/app_launcher.py (1)
skills/ios-simulator-testing/scripts/common/device_utils.py (1)
build_simctl_command(16-60)
🪛 LanguageTool
skill-zips/README.md
[style] ~97-~97: Consider shortening or rephrasing this to strengthen your wording.
Context: ...ed to regenerate these ZIP files (after making changes to skills): ```bash cd /home/user/superpo...
(MAKE_CHANGES)
skills/gmail-intelligence/SKILL.md
[style] ~14-~14: This phrase is redundant. Consider writing “details”.
Context: ...ex pick a black or wood bar?" - Find specific details from client communications - Search ...
(SPECIFIC_DETAILS)
skills/file-organizer/SKILL.md
[style] ~128-~128: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...ent year/month - Previous years - Very old (archive candidates) 4. **Find Duplica...
(EN_WEAK_ADJECTIVE)
skills/docx/LICENSE.txt
[uncategorized] ~21-~21: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...nse, or transfer these materials to any third party - Make, offer to sell, sell, or import ...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
skills/canvas-design/SKILL.md
[style] ~23-~23: ‘taken into account’ might be wordy. Consider a shorter alternative.
Context: ...instructions by the user that should be taken into account, but used as a foundation; it should no...
(EN_WORDINESS_PREMIUM_TAKEN_INTO_ACCOUNT)
[grammar] ~106-~106: Use a hyphen to join words.
Context: ...r amateur. To create museum or magazine quality work, use the design philosophy ...
(QB_NEW_EN_HYPHEN)
[grammar] ~106-~106: Use a hyphen to join words.
Context: ...phy as the foundation. Create one single page, highly visual, design-forward PDF ...
(QB_NEW_EN_HYPHEN)
skills/docx/SKILL.md
[uncategorized] ~77-~77: Did you mean the formatting language “Markdown” (= proper noun)?
Context: ...lan comprehensive tracked changes using markdown before implementing them in OOXML. **CR...
(MARKDOWN_NNP)
[uncategorized] ~95-~95: Did you mean the formatting language “Markdown” (= proper noun)?
Context: ...n representation**: Convert document to markdown with tracked changes preserved: ```b...
(MARKDOWN_NNP)
[uncategorized] ~144-~144: Did you mean the formatting language “Markdown” (= proper noun)?
Context: ...ocument: - Convert final document to markdown: ```bash pandoc --track-chang...
(MARKDOWN_NNP)
skills/canvas-design/LICENSE.txt
[style] ~162-~162: ‘any and all’ might be wordy. Consider a shorter alternative.
Context: ...ge, computer failure or malfunction, or any and all other commercial damages or losse...
(EN_WORDINESS_PREMIUM_ANY_AND_ALL)
skills/ios-simulator-testing/SKILL.md
[style] ~379-~379: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... pull to refresh ``` Use when: You need to navigate using gestures (scrolling list...
(REP_NEED_TO_VB)
[style] ~424-~424: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ssed home button ``` Use when: You need to enter text or press buttons (including ...
(REP_NEED_TO_VB)
[style] ~468-~468: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...p (v1.0.0) ... ``` Use when: You need to control app lifecycle or manage app ins...
(REP_NEED_TO_VB)
[style] ~578-~578: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... trees per step) ``` Use when: You need to document test execution with visual pro...
(REP_NEED_TO_VB)
[style] ~623-~623: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...(human-readable) ``` Use when: You need to capture the complete state for debuggin...
(REP_NEED_TO_VB)
[style] ~921-~921: Consider replacing ‘only’ with a different word to let your writing stand out.
Context: ...ll standard workflows. Raw tools should only be used for edge cases not covered: ``...
(ONLY_EXCLUSIVELY_STYLE)
🪛 markdownlint-cli2 (0.18.1)
skills/gmail-intelligence/SKILL.md
54-54: Bare URL used
(MD034, no-bare-urls)
61-61: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
66-66: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
71-71: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
193-193: Bare URL used
(MD034, no-bare-urls)
194-194: Bare URL used
(MD034, no-bare-urls)
skills/file-organizer/SKILL.md
33-33: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
39-39: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
43-43: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
47-47: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
53-53: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
57-57: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
61-61: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
65-65: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
178-178: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
260-260: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
328-328: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
344-344: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
361-361: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
368-368: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
374-374: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
380-380: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
386-386: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
392-392: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
skills/docx/docx-js.md
220-220: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
skills/ios-simulator-testing/SKILL.md
157-157: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
162-162: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
175-175: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
251-251: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
296-296: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
338-338: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
373-373: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
418-418: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
459-459: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
490-490: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
529-529: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
570-570: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
598-598: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
613-613: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
646-646: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
756-756: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
811-811: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🪛 Ruff (0.14.3)
skills/ios-simulator-testing/examples/login_flow.py
29-29: subprocess call: check for execution of untrusted input
(S603)
174-174: Do not catch blind exception: Exception
(BLE001)
skills/docx/ooxml/scripts/validation/redlining.py
34-34: Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents
(S314)
59-61: try-except-pass detected, consider logging the exception
(S110)
59-59: Do not catch blind exception: Exception
(BLE001)
71-71: Do not catch blind exception: Exception
(BLE001)
86-86: Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents
(S314)
88-88: Using xml to parse untrusted data is known to be vulnerable to XML attacks; use defusedxml equivalents
(S314)
153-153: subprocess call: check for execution of untrusted input
(S603)
154-163: Starting a process with a partial executable path
(S607)
185-185: subprocess call: check for execution of untrusted input
(S603)
186-194: Starting a process with a partial executable path
(S607)
211-213: try-except-pass detected, consider logging the exception
(S110)
211-211: Do not catch blind exception: Exception
(BLE001)
279-279: Avoid specifying long messages outside the exception class
(TRY003)
skills/docx/ooxml/scripts/pack.py
60-60: Avoid specifying long messages outside the exception class
(TRY003)
62-62: Avoid specifying long messages outside the exception class
(TRY003)
103-103: subprocess call: check for execution of untrusted input
(S603)
104-112: Starting a process with a partial executable path
(S607)
121-121: Consider moving this statement to an else block
(TRY300)
128-128: Do not catch blind exception: Exception
(BLE001)
skills/docx/scripts/__init__.py
1-1: The file is executable but no shebang is present
(EXE002)
skills/ios-simulator-testing/scripts/accessibility_audit.py
40-45: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
48-51: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
54-57: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
245-245: Do not catch blind exception: Exception
(BLE001)
skills/docx/ooxml/scripts/validation/base.py
17-38: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
42-42: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
45-67: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
85-85: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
88-104: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
140-140: Do not catch blind exception: Exception
(BLE001)
143-143: Use explicit conversion flag
Replace with conversion flag
(RUF010)
262-262: Do not catch blind exception: Exception
(BLE001)
359-359: Do not catch blind exception: Exception
(BLE001)
471-471: Do not catch blind exception: Exception
(BLE001)
604-605: try-except-continue detected, consider logging the exception
(S112)
604-604: Do not catch blind exception: Exception
(BLE001)
626-626: Do not catch blind exception: Exception
(BLE001)
728-728: Parenthesize a and b expressions when chaining and and or together, to make the precedence clear
Parenthesize the and subexpression
(RUF021)
866-866: Do not catch blind exception: Exception
(BLE001)
901-901: Unpacked variable is_valid is never used
Prefix it with an underscore or any other dummy variable pattern
(RUF059)
951-951: Avoid specifying long messages outside the exception class
(TRY003)
skills/ios-simulator-testing/scripts/app_state_capture.py
47-47: subprocess call: check for execution of untrusted input
(S603)
48-48: Consider moving this statement to an else block
(TRY300)
64-64: Do not catch blind exception: Exception
(BLE001)
97-97: subprocess call: check for execution of untrusted input
(S603)
131-131: subprocess call: check for execution of untrusted input
(S603)
148-148: Consider moving this statement to an else block
(TRY300)
286-286: Do not catch blind exception: Exception
(BLE001)
skills/docx/ooxml/scripts/unpack.py
28-28: Standard pseudo-random generators are not suitable for cryptographic purposes
(S311)
skills/docx/scripts/document.py
297-300: Avoid specifying long messages outside the exception class
(TRY003)
378-381: Avoid specifying long messages outside the exception class
(TRY003)
501-501: Avoid specifying long messages outside the exception class
(TRY003)
537-537: Avoid specifying long messages outside the exception class
(TRY003)
593-593: Avoid specifying long messages outside the exception class
(TRY003)
604-604: Standard pseudo-random generators are not suitable for cryptographic purposes
(S311)
609-609: Standard pseudo-random generators are not suitable for cryptographic purposes
(S311)
637-637: Avoid specifying long messages outside the exception class
(TRY003)
706-706: Avoid specifying long messages outside the exception class
(TRY003)
784-784: Avoid specifying long messages outside the exception class
(TRY003)
855-855: Avoid specifying long messages outside the exception class
(TRY003)
857-857: Avoid specifying long messages outside the exception class
(TRY003)
960-960: Unused method argument: path
(ARG002)
972-972: Unused method argument: path
(ARG002)
988-988: Unused method argument: path
(ARG002)
1069-1069: Unused method argument: author
(ARG002)
1069-1069: Unused method argument: initials
(ARG002)
1069-1069: Unused method argument: timestamp
(ARG002)
1187-1187: Avoid specifying long messages outside the exception class
(TRY003)
skills/ios-simulator-testing/scripts/app_launcher.py
44-44: subprocess call: check for execution of untrusted input
(S603)
53-53: Consider moving this statement to an else block
(TRY300)
70-70: subprocess call: check for execution of untrusted input
(S603)
71-71: Consider moving this statement to an else block
(TRY300)
88-88: subprocess call: check for execution of untrusted input
(S603)
89-89: Consider moving this statement to an else block
(TRY300)
106-106: subprocess call: check for execution of untrusted input
(S603)
107-107: Consider moving this statement to an else block
(TRY300)
124-124: subprocess call: check for execution of untrusted input
(S603)
125-125: Consider moving this statement to an else block
(TRY300)
139-139: subprocess call: check for execution of untrusted input
(S603)
146-146: subprocess call: check for execution of untrusted input
(S603)
175-175: Consider moving this statement to an else block
(TRY300)
193-193: subprocess call: check for execution of untrusted input
(S603)
196-196: Consider moving this statement to an else block
(TRY300)
skills/docx/ooxml/scripts/validation/docx.py
22-22: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
109-109: Do not catch blind exception: Exception
(BLE001)
158-158: Do not catch blind exception: Exception
(BLE001)
187-187: Do not catch blind exception: Exception
(BLE001)
211-211: Do not catch blind exception: Exception
(BLE001)
248-248: Do not catch blind exception: Exception
(BLE001)
274-274: Avoid specifying long messages outside the exception class
(TRY003)
skills/docx/scripts/utilities.py
67-67: Avoid specifying long messages outside the exception class
(TRY003)
175-175: Avoid specifying long messages outside the exception class
(TRY003)
177-180: Avoid specifying long messages outside the exception class
(TRY003)
skills/docx/ooxml/scripts/validation/pptx.py
19-26: Mutable class attributes should be annotated with typing.ClassVar
(RUF012)
106-106: Do not catch blind exception: Exception
(BLE001)
185-185: Do not catch blind exception: Exception
(BLE001)
228-228: Do not catch blind exception: Exception
(BLE001)
285-285: Do not catch blind exception: Exception
(BLE001)
297-297: Loop control variable slide_name not used within loop body
(B007)
315-315: Avoid specifying long messages outside the exception class
(TRY003)
| SKILLS_DIR="/home/user/superpowers/skills" | ||
| OUTPUT_DIR="/home/user/superpowers/skill-zips" | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hardcoded paths prevent portability and CI/CD integration.
The script hardcodes absolute paths for SKILLS_DIR and OUTPUT_DIR tied to a specific development machine (/home/user/superpowers), making the script unusable in different environments, CI/CD pipelines, or by other team members.
Use environment variables with defaults to enable portability:
#!/bin/bash
SKILLS_DIR="${SKILLS_DIR:-./skills}"
OUTPUT_DIR="${OUTPUT_DIR:-./skill-zips}"Alternatively, accept paths as command-line arguments:
#!/bin/bash
SKILLS_DIR="${1:-./ skills}"
OUTPUT_DIR="${2:-./skill-zips}"This allows users to either set environment variables or pass arguments when invoking the script.
🤖 Prompt for AI Agents
In create-skill-zips.sh around lines 4 to 6 the SKILLS_DIR and OUTPUT_DIR are
hardcoded to a single developer's absolute paths which breaks portability and
CI; update the script to accept environment variables with sensible defaults or
command-line arguments (use parameter expansion to default to ./skills and
./skill-zips or read $1 and $2 with fallbacks) and ensure any downstream
references use those variables so the script can run in CI and on other
machines.
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| <xs:schema xmlns="http://schemas.openxmlformats.org/package/2006/content-types" | ||
| xmlns:xs="http://www.w3.org/2001/XMLSchema" | ||
| targetNamespace="http://schemas.openxmlformats.org/package/2006/content-types" | ||
| elementFormDefault="qualified" attributeFormDefault="unqualified" blockDefault="#all"> | ||
|
|
||
| <xs:element name="Types" type="CT_Types"/> | ||
| <xs:element name="Default" type="CT_Default"/> | ||
| <xs:element name="Override" type="CT_Override"/> | ||
|
|
||
| <xs:complexType name="CT_Types"> | ||
| <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
| <xs:element ref="Default"/> | ||
| <xs:element ref="Override"/> | ||
| </xs:choice> | ||
| </xs:complexType> | ||
|
|
||
| <xs:complexType name="CT_Default"> | ||
| <xs:attribute name="Extension" type="ST_Extension" use="required"/> | ||
| <xs:attribute name="ContentType" type="ST_ContentType" use="required"/> | ||
| </xs:complexType> | ||
|
|
||
| <xs:complexType name="CT_Override"> | ||
| <xs:attribute name="ContentType" type="ST_ContentType" use="required"/> | ||
| <xs:attribute name="PartName" type="xs:anyURI" use="required"/> | ||
| </xs:complexType> | ||
|
|
||
| <xs:simpleType name="ST_ContentType"> | ||
| <xs:restriction base="xs:string"> | ||
| <xs:pattern | ||
| value="(((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+))/((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+))((\s+)*;(\s+)*(((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+))=((([\p{IsBasicLatin}-[\p{Cc}\(\)<>@,;:\\"/\[\]\?=\{\}\s\t]])+)|("(([\p{IsLatin-1Supplement}\p{IsBasicLatin}-[\p{Cc}"\n\r]]|(\s+))|(\\[\p{IsBasicLatin}]))*"))))*)" | ||
| /> | ||
| </xs:restriction> | ||
| </xs:simpleType> | ||
|
|
||
| <xs:simpleType name="ST_Extension"> | ||
| <xs:restriction base="xs:string"> | ||
| <xs:pattern | ||
| value="([!$&'\(\)\*\+,:=]|(%[0-9a-fA-F][0-9a-fA-F])|[:@]|[a-zA-Z0-9\-_~])+"/> | ||
| </xs:restriction> | ||
| </xs:simpleType> | ||
| </xs:schema> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix directory name typo: "fouth-edition" should be "fourth-edition".
The directory path contains "fouth-edition" which appears to be a typo for "fourth-edition". This typo affects multiple files in this PR.
Run this script to verify all affected files and check if this is intentional:
#!/bin/bash
# Find all files under the fouth-edition directory
echo "Files in fouth-edition directory:"
fd -t f . skills/docx/ooxml/schemas/ecma/fouth-edition 2>/dev/null
# Check if there's also a correctly spelled fourth-edition directory
echo -e "\nChecking for fourth-edition directory:"
fd -t d "fourth-edition" skills/docx/ooxml/schemas/ecma 2>/dev/null || echo "No fourth-edition directory found"
# Search for references to this path in code
echo -e "\nReferences to fouth-edition in code:"
rg -n "fouth-edition" --type py --type md 2>/dev/null || echo "No references found in Python/Markdown files"🤖 Prompt for AI Agents
skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd lines 1-42:
the directory name "fouth-edition" is a typo and should be "fourth-edition";
rename the directory to "fourth-edition" (use git mv to preserve history), move
all contained files, and update any path references in the repo (search and
replace occurrences like "fouth-edition" → "fourth-edition" in code, docs, and
build scripts); after renaming, run the provided verification checks to ensure
no remaining references and confirm there is no intentional duplicate directory.
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <xsd:schema xmlns="http://schemas.openxmlformats.org/package/2006/digital-signature" | ||
| xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||
| targetNamespace="http://schemas.openxmlformats.org/package/2006/digital-signature" | ||
| elementFormDefault="qualified" attributeFormDefault="unqualified" blockDefault="#all"> | ||
|
|
||
| <xsd:element name="SignatureTime" type="CT_SignatureTime"/> | ||
| <xsd:element name="RelationshipReference" type="CT_RelationshipReference"/> | ||
| <xsd:element name="RelationshipsGroupReference" type="CT_RelationshipsGroupReference"/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Critical: Fix spelling error in file path.
The directory name contains a typo: fouth-edition should be fourth-edition. This spelling error could cause issues with documentation references, imports, or automated tooling that expects the correct spelling.
Rename the directory from:
skills/docx/ooxml/schemas/ecma/fouth-edition/
To:
skills/docx/ooxml/schemas/ecma/fourth-edition/
🤖 Prompt for AI Agents
In skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd around lines 1 to
9, the directory name contains a typo ("fouth-edition"); rename the directory to
"fourth-edition" and update any file paths/imports/references accordingly (move
the file to skills/docx/ooxml/schemas/ecma/fourth-edition/opc-digSig.xsd and
search/replace project references to use the corrected path).
| <xsd:complexType name="CT_Relationship"> | ||
| <xsd:simpleContent> | ||
| <xsd:extension base="xsd:string"> | ||
| <xsd:attribute name="TargetMode" type="ST_TargetMode" use="optional"/> | ||
| <xsd:attribute name="Target" type="xsd:anyURI" use="required"/> | ||
| <xsd:attribute name="Type" type="xsd:anyURI" use="required"/> | ||
| <xsd:attribute name="Id" type="xsd:ID" use="required"/> | ||
| </xsd:extension> | ||
| </xsd:simpleContent> | ||
| </xsd:complexType> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CT_Relationship simpleContent may be incorrect.
The CT_Relationship complex type extends xsd:string for simpleContent (Lines 17-18), which allows text content inside <Relationship> elements. However, in the OPC specification, Relationship elements typically have no content—only attributes.
Verify against the OOXML specification. If Relationship elements should be empty, change to:
<xsd:complexType name="CT_Relationship">
<xsd:attribute name="TargetMode" type="ST_TargetMode" use="optional"/>
<xsd:attribute name="Target" type="xsd:anyURI" use="required"/>
<xsd:attribute name="Type" type="xsd:anyURI" use="required"/>
<xsd:attribute name="Id" type="xsd:ID" use="required"/>
</xsd:complexType>Check the OPC specification to confirm:
OOXML OPC Relationship element schema definition content model
🤖 Prompt for AI Agents
In skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd around
lines 16 to 25, the CT_Relationship type currently uses xsd:simpleContent
extending xsd:string which allows element text content; change it to an empty
complexType with only the four attributes (TargetMode optional, Target required
anyURI, Type required anyURI, Id required xsd:ID) so Relationship elements are
empty with attributes only, and update/remove the simpleContent/extension nodes
accordingly; confirm against the OPC/OOXML relationship element definition and
adjust namespace/type references if needed.
| <xsd:complexType name="CT_PictureNonVisual"> | ||
| <xsd:sequence> | ||
| <xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/> | ||
| <xsd:element name="cNvPicPr" type="a:CT_NonVisualPictureProperties" minOccurs="1" | ||
| maxOccurs="1"/> | ||
| </xsd:sequence> | ||
| </xsd:complexType> | ||
| <xsd:complexType name="CT_Picture"> | ||
| <xsd:sequence minOccurs="1" maxOccurs="1"> | ||
| <xsd:element name="nvPicPr" type="CT_PictureNonVisual" minOccurs="1" maxOccurs="1"/> | ||
| <xsd:element name="blipFill" type="a:CT_BlipFillProperties" minOccurs="1" maxOccurs="1"/> | ||
| <xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/> | ||
| </xsd:sequence> | ||
| </xsd:complexType> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Restore optional extension and style elements for pictures.
CT_Picture and CT_PictureNonVisual in ISO/IEC 29500 include optional a:style and a:extLst children; leaving them out here will cause valid DOCX/DrawingML content (e.g., pictures with styles or extension data) to fail validation or round‑trip incorrectly. Please add the missing optional elements back.
Apply this diff:
<xsd:complexType name="CT_PictureNonVisual">
<xsd:sequence>
<xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/>
<xsd:element name="cNvPicPr" type="a:CT_NonVisualPictureProperties" minOccurs="1"
maxOccurs="1"/>
+ <xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CT_Picture">
<xsd:sequence minOccurs="1" maxOccurs="1">
<xsd:element name="nvPicPr" type="CT_PictureNonVisual" minOccurs="1" maxOccurs="1"/>
<xsd:element name="blipFill" type="a:CT_BlipFillProperties" minOccurs="1" maxOccurs="1"/>
<xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/>
+ <xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <xsd:complexType name="CT_PictureNonVisual"> | |
| <xsd:sequence> | |
| <xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/> | |
| <xsd:element name="cNvPicPr" type="a:CT_NonVisualPictureProperties" minOccurs="1" | |
| maxOccurs="1"/> | |
| </xsd:sequence> | |
| </xsd:complexType> | |
| <xsd:complexType name="CT_Picture"> | |
| <xsd:sequence minOccurs="1" maxOccurs="1"> | |
| <xsd:element name="nvPicPr" type="CT_PictureNonVisual" minOccurs="1" maxOccurs="1"/> | |
| <xsd:element name="blipFill" type="a:CT_BlipFillProperties" minOccurs="1" maxOccurs="1"/> | |
| <xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/> | |
| </xsd:sequence> | |
| </xsd:complexType> | |
| <xsd:complexType name="CT_PictureNonVisual"> | |
| <xsd:sequence> | |
| <xsd:element name="cNvPr" type="a:CT_NonVisualDrawingProps" minOccurs="1" maxOccurs="1"/> | |
| <xsd:element name="cNvPicPr" type="a:CT_NonVisualPictureProperties" minOccurs="1" | |
| maxOccurs="1"/> | |
| <xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/> | |
| </xsd:sequence> | |
| </xsd:complexType> | |
| <xsd:complexType name="CT_Picture"> | |
| <xsd:sequence minOccurs="1" maxOccurs="1"> | |
| <xsd:element name="nvPicPr" type="CT_PictureNonVisual" minOccurs="1" maxOccurs="1"/> | |
| <xsd:element name="blipFill" type="a:CT_BlipFillProperties" minOccurs="1" maxOccurs="1"/> | |
| <xsd:element name="spPr" type="a:CT_ShapeProperties" minOccurs="1" maxOccurs="1"/> | |
| <xsd:element name="style" type="a:CT_ShapeStyle" minOccurs="0" maxOccurs="1"/> | |
| <xsd:element name="extLst" type="a:CT_OfficeArtExtensionList" minOccurs="0" maxOccurs="1"/> | |
| </xsd:sequence> | |
| </xsd:complexType> |
🤖 Prompt for AI Agents
In skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd around lines
8–21, CT_PictureNonVisual and CT_Picture are missing the optional a:style and
a:extLst children required by ISO/IEC 29500; add optional elements named a:style
(type a:CT_ShapeStyle) and a:extLst (type a:CT_OfficeArtExtensionList or the
schema's extLst type) to CT_PictureNonVisual (after cNvPicPr) and to CT_Picture
(after spPr) with minOccurs="0" so pictures with styles or extension data
validate and round‑trip correctly.
| @@ -0,0 +1 @@ | |||
| # Make scripts directory a package for relative imports in tests | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove executable permission from this file.
The static analysis correctly identifies that this file has executable permissions but no shebang. Since __init__.py files are imported rather than executed directly, the executable bit should be removed.
Run this command to fix:
#!/bin/bash
chmod -x skills/docx/scripts/__init__.py🧰 Tools
🪛 Ruff (0.14.3)
1-1: The file is executable but no shebang is present
(EXE002)
🤖 Prompt for AI Agents
In skills/docx/scripts/__init__.py around line 1, this __init__.py has the
executable bit set but is not a script; remove the executable permission (e.g.
run chmod -x on that file) and commit the permission change so the file is no
longer executable.
| parent_start_elem, self._comment_range_start_xml(comment_id) | ||
| ) | ||
| parent_ref_run = parent_ref_elem.parentNode | ||
| self._document.insert_after( | ||
| parent_ref_run, f'<w:commentRangeEnd w:id="{comment_id}"/>' | ||
| ) | ||
| self._document.insert_after( | ||
| parent_ref_run, self._comment_ref_run_xml(comment_id) | ||
| ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix misplaced comment range markers in replies
Calling insert_after twice with parent_ref_run causes the reply’s <w:commentRangeEnd> to land after the new <w:commentReference> run, so the reply’s range now extends over the reference run itself. Word treats that as malformed markup and the highlight bleeds into the reference glyph instead of covering only the intended text. Insert the range end before the existing reference run and then append the reply’s reference after that newly inserted node to keep the order commentRangeEnd → commentReference, matching the required WordprocessingML structure.
- self._document.insert_after(
- parent_ref_run, f'<w:commentRangeEnd w:id="{comment_id}"/>'
- )
- self._document.insert_after(
- parent_ref_run, self._comment_ref_run_xml(comment_id)
- )
+ end_nodes = self._document.insert_before(
+ parent_ref_run, f'<w:commentRangeEnd w:id="{comment_id}"/>'
+ )
+ self._document.insert_after(
+ end_nodes[-1], self._comment_ref_run_xml(comment_id)
+ )Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In skills/docx/scripts/document.py around lines 801 to 809, the code currently
calls insert_after twice with the same parent_ref_run which causes the inserted
<w:commentRangeEnd> to end up after the new <w:commentReference>, producing
incorrect WordprocessingML order; change the sequence so you insert the
<w:commentRangeEnd> before the existing reference run (use insert_before or call
insert_after on the node's previous sibling) and then append/insert the reply’s
<w:commentReference> after that newly inserted range-end node, ensuring the
final node order is commentRangeEnd → commentReference.
| "--find-type", | ||
| "SecureTextField", | ||
| "--enter-text", | ||
| "password123", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avoid hardcoding credentials in example code.
The hardcoded password demonstrates poor security practices. Even in example code, it's better to show secure patterns like reading from environment variables or configuration files.
Apply this diff to use an environment variable instead:
+import os
+
# ... (in main function)
[
"python",
str(scripts_dir / "navigator.py"),
"--find-type",
"SecureTextField",
"--enter-text",
- "password123",
+ os.environ.get("TEST_PASSWORD", "password123"),
]Then update the docstring to mention setting TEST_PASSWORD environment variable.
Committable suggestion skipped: line range outside the PR's diff.
| # Check warnings (skip if critical issues found) | ||
| if not issues: | ||
| for rule_name, rule_func in self.WARNING_RULES.items(): | ||
| if rule_func(element): | ||
| issues.append( | ||
| Issue( | ||
| severity="warning", | ||
| rule=rule_name, | ||
| element_type=element.get("type", "Unknown"), | ||
| issue=self._get_issue_description(rule_name), | ||
| fix=self._get_fix_suggestion(rule_name), | ||
| ) | ||
| ) | ||
|
|
||
| # Check info level (only if verbose or no other issues) | ||
| if not issues: | ||
| for rule_name, rule_func in self.INFO_RULES.items(): | ||
| if rule_func(element): | ||
| issues.append( | ||
| Issue( | ||
| severity="info", | ||
| rule=rule_name, | ||
| element_type=element.get("type", "Unknown"), | ||
| issue=self._get_issue_description(rule_name), | ||
| fix=self._get_fix_suggestion(rule_name), | ||
| ) | ||
| ) | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wire up the small-touch-target warning.
The “small touch target” rule is never evaluated: _is_small_target is unused, WARNING_RULES lacks the entry, yet docs and descriptions promise this warning. As a result, undersized controls slip through the audit. Hook the helper into the warning branch so we actually emit the advertised issue.
# Check warnings (skip if critical issues found)
if not issues:
for rule_name, rule_func in self.WARNING_RULES.items():
if rule_func(element):
issues.append(
Issue(
severity="warning",
rule=rule_name,
element_type=element.get("type", "Unknown"),
issue=self._get_issue_description(rule_name),
fix=self._get_fix_suggestion(rule_name),
)
)
+
+ if element.get("type") in {"Button", "Link", "TextField", "Switch"} and self._is_small_target(
+ element
+ ):
+ issues.append(
+ Issue(
+ severity="warning",
+ rule="small_touch_target",
+ element_type=element.get("type", "Unknown"),
+ issue=self._get_issue_description("small_touch_target"),
+ fix=self._get_fix_suggestion("small_touch_target"),
+ )
+ )📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # Check warnings (skip if critical issues found) | |
| if not issues: | |
| for rule_name, rule_func in self.WARNING_RULES.items(): | |
| if rule_func(element): | |
| issues.append( | |
| Issue( | |
| severity="warning", | |
| rule=rule_name, | |
| element_type=element.get("type", "Unknown"), | |
| issue=self._get_issue_description(rule_name), | |
| fix=self._get_fix_suggestion(rule_name), | |
| ) | |
| ) | |
| # Check info level (only if verbose or no other issues) | |
| if not issues: | |
| for rule_name, rule_func in self.INFO_RULES.items(): | |
| if rule_func(element): | |
| issues.append( | |
| Issue( | |
| severity="info", | |
| rule=rule_name, | |
| element_type=element.get("type", "Unknown"), | |
| issue=self._get_issue_description(rule_name), | |
| fix=self._get_fix_suggestion(rule_name), | |
| ) | |
| ) | |
| # Check warnings (skip if critical issues found) | |
| if not issues: | |
| for rule_name, rule_func in self.WARNING_RULES.items(): | |
| if rule_func(element): | |
| issues.append( | |
| Issue( | |
| severity="warning", | |
| rule=rule_name, | |
| element_type=element.get("type", "Unknown"), | |
| issue=self._get_issue_description(rule_name), | |
| fix=self._get_fix_suggestion(rule_name), | |
| ) | |
| ) | |
| if element.get("type") in {"Button", "Link", "TextField", "Switch"} and self._is_small_target( | |
| element | |
| ): | |
| issues.append( | |
| Issue( | |
| severity="warning", | |
| rule="small_touch_target", | |
| element_type=element.get("type", "Unknown"), | |
| issue=self._get_issue_description("small_touch_target"), | |
| fix=self._get_fix_suggestion("small_touch_target"), | |
| ) | |
| ) | |
| # Check info level (only if verbose or no other issues) | |
| if not issues: | |
| for rule_name, rule_func in self.INFO_RULES.items(): | |
| if rule_func(element): | |
| issues.append( | |
| Issue( | |
| severity="info", | |
| rule=rule_name, | |
| element_type=element.get("type", "Unknown"), | |
| issue=self._get_issue_description(rule_name), | |
| fix=self._get_fix_suggestion(rule_name), | |
| ) | |
| ) |
🤖 Prompt for AI Agents
In skills/ios-simulator-testing/scripts/accessibility_audit.py around lines 96
to 123, the small-touch-target rule is implemented but never added to
WARNING_RULES so it is never evaluated; add an entry mapping the advertised rule
name (e.g., "small-touch-target" or the existing rule key used elsewhere) to the
helper (self._is_small_target) inside the WARNING_RULES dict so the warning
branch will call it, and ensure the helper method name matches (or make it a
static/function reference) and is importable in this class so the warning is
actually emitted when the helper returns True.
| cmd = ["xcrun", "simctl", "list", "devices", "booted"] | ||
|
|
||
| if self.udid: | ||
| # Specific device info | ||
| cmd = ["xcrun", "simctl", "list", "devices"] | ||
|
|
||
| try: | ||
| result = subprocess.run(cmd, capture_output=True, text=True, check=True) | ||
|
|
||
| # Parse output for device info (simplified) | ||
| lines = result.stdout.split("\n") | ||
| device_info = {} | ||
|
|
||
| for line in lines: | ||
| if "iPhone" in line or "iPad" in line: | ||
| # Extract device name and state | ||
| parts = line.strip().split("(") | ||
| if parts: | ||
| device_info["name"] = parts[0].strip() | ||
| if len(parts) > 2: | ||
| device_info["udid"] = parts[1].replace(")", "").strip() | ||
| device_info["state"] = parts[2].replace(")", "").strip() | ||
| break | ||
|
|
||
| return device_info | ||
| except subprocess.CalledProcessError: | ||
| return {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix UDID-specific device detection bug.
With a UDID supplied, capture_device_info() still breaks on the first iPhone/iPad line emitted by simctl, so it reports whichever simulator happens to appear first rather than the requested device. In a multi-simulator environment this produces the wrong UDID/state and misleads downstream tooling. Filter the listing for the requested UDID before parsing.
cmd = ["xcrun", "simctl", "list", "devices", "booted"]
if self.udid:
- # Specific device info
- cmd = ["xcrun", "simctl", "list", "devices"]
+ # Need full device list to locate the requested UDID
+ cmd = ["xcrun", "simctl", "list", "devices"]
try:
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
# Parse output for device info (simplified)
lines = result.stdout.split("\n")
device_info = {}
- for line in lines:
- if "iPhone" in line or "iPad" in line:
- # Extract device name and state
- parts = line.strip().split("(")
- if parts:
- device_info["name"] = parts[0].strip()
- if len(parts) > 2:
- device_info["udid"] = parts[1].replace(")", "").strip()
- device_info["state"] = parts[2].replace(")", "").strip()
- break
+ target_udid = self.udid
+ for line in lines:
+ if target_udid and target_udid not in line:
+ continue
+ if "iPhone" not in line and "iPad" not in line:
+ continue
+ parts = line.strip().split("(")
+ if parts:
+ device_info["name"] = parts[0].strip()
+ if len(parts) > 1:
+ device_info["udid"] = parts[1].replace(")", "").strip()
+ if len(parts) > 2:
+ device_info["state"] = parts[2].replace(")", "").strip()
+ breakCommittable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 Ruff (0.14.3)
131-131: subprocess call: check for execution of untrusted input
(S603)
148-148: Consider moving this statement to an else block
(TRY300)
🤖 Prompt for AI Agents
In skills/ios-simulator-testing/scripts/app_state_capture.py around lines
124-150, the function still selects the first iPhone/iPad line even when
self.udid is set; change the parsing so that when self.udid is provided you
first filter the simctl output lines to the one that contains that UDID (match
the UDID string, e.g. the hex in parentheses), then parse that specific line to
extract name, udid and state; if no matching line is found return {} as now.
Keep using the existing cmd selection (booted vs all), but ensure you search for
the UDID before the generic "iPhone"/"iPad" logic and only fall back to the
first device when self.udid is not set.
- Move ZIP from skills/ to skill-zips/ (correct location) - Add landing-page-expert skill folder to skills/ - Fix ZIP structure (was mnt/skills/user/*, now landing-page-expert/*) The skill includes: - Landing page expertise from multiple frameworks - Alex Hormozi, Russell Brunson, Caleb Ralston frameworks - Selection engine for choosing optimal approach - Framework combination strategies
Updated terminology for email search tools and improved clarity.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (6)
skills/gmail-intelligence/SKILL.md (6)
6-44: Minor redundancy in line 14.Line 14 contains a redundant phrase. Consider simplifying "Find specific details" to "Find details" for conciseness.
- - Find specific details from client communications + - Find details from client communications
49-49: Bare URL should be wrapped in markdown link syntax.Line 49 contains a bare email address that should be formatted as a markdown link or code block to comply with markdown standards.
-**Email**: info@mtlcraftcocktails.com +**Email**: `info@mtlcraftcocktails.com`
68-73: Add language identifier to fenced code block.Line 68 starts a fenced code block without a language specifier. This improves syntax highlighting and readability.
-``` +```plaintext 1. Use SEARCH_TOOLS to find relevant Gmail tools
96-104: Add language identifier to fenced code block.Line 96 starts a fenced code block without a language specifier.
-``` +```plaintext Lead: [Name]
114-120: Add language identifier to fenced code block.Line 114 starts a fenced code block without a language specifier.
-``` +```plaintext 1. Analyze the incoming email context
210-227: Add language identifiers to fenced code blocks and fix bare URLs.Lines 210 and 218 contain fenced code blocks without language specifiers. Additionally, line 210 references email addresses and identifiers that should be evaluated for whether they need formatting adjustments.
-1. Use RUBE_SEARCH_TOOLS → GMAIL_SEARCH_PEOPLE for "Alex Curtis" +1. Use RUBE_SEARCH_TOOLS → GMAIL_SEARCH_PEOPLE for `Alex Curtis` 2. Find email addresses: alexandercurtis@icloud.com, alexandercurtis@me.com 3. Use GMAIL_FETCH_EMAILS with query: `from:alexandercurtis (bar OR black OR wood)` 4. Analyze email content for bar color mention 5. Extract: "black bar with light wood top" from August 24-25 emails 6. Store in Mem0: "Alex Curtis - October 18 wedding - black bar with wood top" 7. Return confident answer with source citations **Response**: -``` +```plaintext Alex Curtis chose the BLACK bar with light wood top for his October 18, 2025 wedding.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
skill-zips/landing-page-expert.zipis excluded by!**/*.zip
📒 Files selected for processing (1)
skills/gmail-intelligence/SKILL.md(1 hunks)
🧰 Additional context used
🪛 LanguageTool
skills/gmail-intelligence/SKILL.md
[style] ~14-~14: This phrase is redundant. Consider writing “details”.
Context: ...ex pick a black or wood bar?" - Find specific details from client communications - Search ...
(SPECIFIC_DETAILS)
🪛 markdownlint-cli2 (0.18.1)
skills/gmail-intelligence/SKILL.md
49-49: Bare URL used
(MD034, no-bare-urls)
68-68: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
96-96: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
114-114: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
210-210: Bare URL used
(MD034, no-bare-urls)
210-210: Bare URL used
(MD034, no-bare-urls)
218-218: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🔇 Additional comments (1)
skills/gmail-intelligence/SKILL.md (1)
1-4: Frontmatter looks good.The YAML metadata is properly structured and aligns with the skill documentation standards.
| This SKILL.md provides core instructions (~5k tokens). Additional detailed references load as needed: | ||
|
|
||
| - `references/lead-scoring.md` - Detailed scoring algorithm | ||
| - `references/brand-voice.md` - Complete style guide | ||
| - `references/email-templates.md` - Response templates | ||
| - `references/pricing-packages.md` - Full pricing structure | ||
| - `references/business-queries.md` - BI report templates | ||
| - `references/cocktail-menu.md` - Complete drink menu and recipes | ||
|
|
||
| Load these files when specific tasks require their detailed information. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify that referenced external files exist.
This section declares progressive disclosure dependencies on multiple reference files (references/lead-scoring.md, references/brand-voice.md, etc.). Ensure these files are included in the PR or repository.
🏁 Script executed:
#!/bin/bash
# Description: Verify that all referenced external files exist in the repository
# Expected reference files from the SKILL.md
EXPECTED_FILES=(
"skills/gmail-intelligence/references/lead-scoring.md"
"skills/gmail-intelligence/references/brand-voice.md"
"skills/gmail-intelligence/references/email-templates.md"
"skills/gmail-intelligence/references/pricing-packages.md"
"skills/gmail-intelligence/references/business-queries.md"
"skills/gmail-intelligence/references/cocktail-menu.md"
)
echo "Checking for required reference files..."
for file in "${EXPECTED_FILES[@]}"; do
if [ -f "$file" ]; then
echo "✓ Found: $file"
else
echo "✗ Missing: $file"
fi
doneLength of output: 435
All referenced files in the references/ directory are missing.
The SKILL.md declares dependencies on 6 reference files (lead-scoring.md, brand-voice.md, email-templates.md, pricing-packages.md, business-queries.md, cocktail-menu.md), but none of these files exist in the repository. This breaks the progressive disclosure pattern described in lines 193-202. Either create these files or remove the references and update the documentation accordingly.
🤖 Prompt for AI Agents
In skills/gmail-intelligence/SKILL.md around lines 193 to 202 the document
references six files in references/ (lead-scoring.md, brand-voice.md,
email-templates.md, pricing-packages.md, business-queries.md, cocktail-menu.md)
that do not exist, breaking the progressive disclosure pattern; fix by either
creating those six reference files under skills/gmail-intelligence/references/
with the referenced contents (placeholders acceptable but must match filenames
and include the detailed sections called out) or remove the references from
SKILL.md and update the text to reflect the actual documentation available,
ensuring internal links are valid and the progressive disclosure statement is
corrected.
Motivation and Context
How Has This Been Tested?
Breaking Changes
Types of changes
Checklist
Additional context
Summary by CodeRabbit
New Features
Documentation