ios-sync
“Regenerate the iOS debug bridge against the latest upstream gstack templates. (gstack)”
aipkg.jsonLICENSE.txtREADME.mdSKILL.mdSKILL.md.tmpl- 01SDI-275%MEDIUM
SKILL.md:67
detailhide
The skill writes usage telemetry and analytics data to ~/.gstack/analytics/ without explicit user consent in the preamble phase. This happens before any AskUserQuestion gates that would allow the user to opt-in or opt-out. While telemetry is gated on a configuration setting, the initial write in the preamble (lines 67-69) occurs unconditionally and may violate privacy expectations if the user has not yet been prompted.
65echo "QUESTION_TUNING: $_QUESTION_TUNING"66mkdir -p ~/.gstack/analytics67if [ "$_TEL" != "off" ]; then68echo '{"skill":"ios-sync","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true69fifix Move telemetry writes to after the telemetry consent AskUserQuestion (which appears later in the preamble). Ensure the first analytics write only happens if the user has explicitly consented via the prompted flow or if they have already set telemetry to a non-off value in a prior session.
- 02SDI-265%MEDIUM
SKILL.md:42
detailhide
The skill reads and modifies ~/.gstack/ configuration files (proactive, telemetry, explain_level, checkpoint_mode, etc.) without explicit authorization from the user in the current skill invocation. While these are user-owned config files, the automatic modifications (e.g., writing snooze state, setting explain_level) change the user's environment based on skill logic rather than explicit user choices at the time of skill execution.
40_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')41find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true42_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")43_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")44_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")fix Gate configuration writes behind explicit AskUserQuestion prompts within the skill workflow. Do not auto-modify user config settings based on marker files or internal logic without the user's active consent in the current session. Distinguish between reading config (safe) and writing config (requires consent).
- 03SDI-370%MEDIUM
SKILL.md:38
detailhide
The skill reads and writes files throughout ~/.gstack/ (sessions, analytics, learnings, timeline, checkpoints) that are not explicitly scoped in the declared permissions. While the skill declares Bash, Read, Write, Edit, Glob, and Grep tools, the preamble performs extensive filesystem mutations in ~/.gstack/* directories. These operations go beyond the scope of the skill's stated purpose (regenerating iOS debug bridge) and create undeclared side effects.
36_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)37[ -n "$_UPD" ] && echo "$_UPD" || true38mkdir -p ~/.gstack/sessions39touch ~/.gstack/sessions/"$PPID"40_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')fix Scope all ~/.gstack/ operations to a single, well-defined directory (e.g., ~/.gstack/ios-qa-sessions/) or move them to a separate preamble skill. Alternatively, explicitly document in the skill's allowed-tools or metadata which ~/.gstack/ subdirectories the skill may access, and limit actual accesses to only those directories.
- 04SDI-260%LOW
SKILL.md:90
detailhide
The preamble spawns a background telemetry process (~/.claude/skills/gstack/bin/gstack-timeline-log) in the background with `&` without awaiting it or capturing its output. This background execution is unrelated to the core iOS bridge regeneration task and may cause unexpected process accumulation or resource usage.
88 echo "LEARNINGS: 0"89fi90~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"ios-sync","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null &91_HAS_ROUTING="no"92if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; thenfix Either run telemetry synchronously (remove the `&`), or document and gate this background execution behind an explicit opt-in. Avoid spawning unrelated background work from skill preambles without user awareness.
- 05SQP-285%MEDIUM
SKILL.md.tmpl:69
detailhide
The skill performs destructive file operations (replacing Swift files in place via 'Write' and 'Edit' tools) without adequate user confirmation. Phase 3 only conditionally asks the user ('AskUserQuestion if the diff is non-trivial'), meaning non-trivial diffs may be applied without explicit consent. This could silently overwrite user customizations or introduce breaking changes.
67and platform triple all match the cache, this is a ~50ms no-op.6869## Phase 3: Update templated Swift files in place7071For each file that comes from `ios-qa/templates/*.swift.template`:fix Add mandatory user confirmation before any file replacement operation. For Phase 3, always call AskUserQuestion before replacing installed files, with a clear diff preview. Include a '--dry-run' option that shows all proposed changes before applying them, and require explicit user approval for each destructive operation.