feat: add transistor skill #15

Merged
magnus merged 1 commit from feat/transistor-skill into main 2026-05-21 23:47:11 -04:00
Contributor

Signed-off-by: Jasper magnus@groktop.us

Signed-off-by: Jasper <magnus@groktop.us>
magnus merged commit 300767ae6a into main 2026-05-21 23:47:11 -04:00
jasper left a comment

First-pass review: feat: add transistor skill

Files changed: transistor/SKILL.md (new, 102 lines) + transistor/scripts/transistor-cli (new, 160 lines)

Findings

🔴 Dead code (~25 lines, ~15% of CLI)
Several TransistorClient methods are defined but never reachable from any command handler: get_show(), update_show(), get_episode(), create_episode(), list_subscribers(). The _post() method is also only called by create_episode() (also dead), making it dead code too. Recommend removing until commands that use them are added.

🟡 update_show() uses wrong HTTP method
update_show() calls self._get() (HTTP GET) where it should use POST/PUT. Dead code currently, but would be a subtle bug if wired up.

🟡 --force flag parsed but never checked
Extracted into GLOBAL_FLAGS['force'] by _preparse(), but no handler ever reads it. SKILL.md documents it as "overrides internal safety checks" but no checks exist. Either wire it up or remove from docs.

🟡 Dual argument parsing
The main() subparsers for episodes/analytics define --show and --limit, but these parsed values are never read — handlers re-parse from scratch. Works but is redundant.

Verdict

No security issues found. API key is properly restricted to env var. No injection vectors. JSON:API responses are parsed safely.

CLI is functional for its documented commands (user, shows, episodes, analytics). The dead code and redundant parsing are style/cleanup concerns rather than bugs. Recommend addressing the dead code and --force flag before merging, or filing follow-up issues.

— Jasper (automated review)

## First-pass review: feat: add transistor skill **Files changed:** `transistor/SKILL.md` (new, 102 lines) + `transistor/scripts/transistor-cli` (new, 160 lines) ### Findings **🔴 Dead code (~25 lines, ~15% of CLI)** Several `TransistorClient` methods are defined but never reachable from any command handler: `get_show()`, `update_show()`, `get_episode()`, `create_episode()`, `list_subscribers()`. The `_post()` method is also only called by `create_episode()` (also dead), making it dead code too. Recommend removing until commands that use them are added. **🟡 `update_show()` uses wrong HTTP method** `update_show()` calls `self._get()` (HTTP GET) where it should use POST/PUT. Dead code currently, but would be a subtle bug if wired up. **🟡 `--force` flag parsed but never checked** Extracted into `GLOBAL_FLAGS['force']` by `_preparse()`, but no handler ever reads it. SKILL.md documents it as "overrides internal safety checks" but no checks exist. Either wire it up or remove from docs. **🟡 Dual argument parsing** The `main()` subparsers for episodes/analytics define `--show` and `--limit`, but these parsed values are never read — handlers re-parse from scratch. Works but is redundant. ### Verdict **No security issues found.** API key is properly restricted to env var. No injection vectors. JSON:API responses are parsed safely. CLI is functional for its documented commands (user, shows, episodes, analytics). The dead code and redundant parsing are style/cleanup concerns rather than bugs. Recommend addressing the dead code and `--force` flag before merging, or filing follow-up issues. — Jasper (automated review)
jasper left a comment

Inline code comments from automated review. See main review (id=16) for full summary.

Inline code comments from automated review. See main review (id=16) for full summary.
Author
Contributor

update_show() calls self._get() (HTTP GET) to update a show. Updates should use POST or PUT. Currently dead code, but would be a subtle bug if ever wired up.

`update_show()` calls `self._get()` (HTTP GET) to update a show. Updates should use POST or PUT. Currently dead code, but would be a subtle bug if ever wired up.
Author
Contributor

get_show(), update_show(), get_episode(), create_episode(), list_subscribers(), and the _post() method are all defined but never called by any command handler. ~25 lines of dead code (~15% of file). Consider removing until commands that need them are added.

`get_show()`, `update_show()`, `get_episode()`, `create_episode()`, `list_subscribers()`, and the `_post()` method are all defined but never called by any command handler. ~25 lines of dead code (~15% of file). Consider removing until commands that need them are added.
Author
Contributor

--force is parsed into GLOBAL_FLAGS['force'] but never checked by any subcommand handler. SKILL.md says it overrides safety checks, but no safety checks exist. Either wire it to actual enforcement (e.g., cap --limit at 100 unless --force is set) or remove from docs.

`--force` is parsed into `GLOBAL_FLAGS['force']` but never checked by any subcommand handler. SKILL.md says it overrides safety checks, but no safety checks exist. Either wire it to actual enforcement (e.g., cap --limit at 100 unless --force is set) or remove from docs.
Author
Contributor

The episodes/analytics subparsers in main() define --show and --limit, but the parsed values are never read from args — handlers re-parse from scratch. Works but is redundant. Consider passing parsed args to handlers instead.

The `episodes`/`analytics` subparsers in `main()` define `--show` and `--limit`, but the parsed values are never read from `args` — handlers re-parse from scratch. Works but is redundant. Consider passing parsed args to handlers instead.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
magnus/agent-skills!15
No description provided.