Skip to content

Commit 2158c65

Browse files
Update plugin review skill to check for day/night icons
1 parent 0363237 commit 2158c65

2 files changed

Lines changed: 17 additions & 1 deletion

File tree

.claude/skills/plugin-review/SKILL.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: cogo-plugin-review
3-
description: Review a Code on the Go (CoGo or cotg) plugin project for submission readiness — verify the assemblePlugin build, audit actual security risks, and score the code against the submission rubric (compatibility, resource discipline, build reproducibility, native binaries, reflection ban, html documentation, tooltips and in-app help, manifest completeness). Use when the user asks to review, audit, or check a Code On The Go plugin repo.
3+
description: Review a Code on the Go (CoGo or cotg) plugin project for submission readiness — verify the assemblePlugin build, audit actual security risks, and score the code against the submission rubric (compatibility, resource discipline, build reproducibility, native binaries, reflection ban, html documentation, tooltips and in-app help, manifest completeness, icons and imagery). Use when the user asks to review, audit, or check a Code On The Go plugin repo.
44
metadata:
55
author: Hal Eisen
66
keywords:
@@ -116,6 +116,14 @@ Code On The Go has a three-tier in-IDE help model: Tier 1 (brief) and Tier 2 (mo
116116
- **IDE version range**: both `plugin.min_ide_version` and `plugin.max_ide_version` present.
117117
- **minSdk**: either `<uses-sdk>` in the source manifest or `minSdk =` in `build.gradle.kts` (AGP merges the latter into the final manifest, which is conventional and acceptable).
118118

119+
#### 6.8 Plugin icons and imagery
120+
The Plugin Manager shows a day/night icon per plugin; template-installer plugins also show a per-variant thumbnail on the New Project screen. Symbols verifiable in `plugin-api.jar` (`PluginMetadata.iconDayPath`/`iconNightPath`, `templates.CgtTemplateBuilder.thumbnailFromAssets`).
121+
122+
- **Icon meta-data present**: `grep -n 'plugin.icon_day\|plugin.icon_night' src/main/AndroidManifest.xml`. Both keys must be `<meta-data>` on `<application>`. Missing either → **Fail** for debug installs (release builds skip the icon check, so a release-only submission with no icon is at most **Partial** — note it either way). A single `plugin.icon` or reliance on `android:icon`/`res/drawable/ic_plugin.xml` does **not** satisfy this — the Plugin Manager reads the zip path from `plugin.icon_day`/`_night`.
123+
- **Icon path resolves to a real image**: each `android:value` must be an in-`.cgp` path (`assets/<name>.png`). Confirm the file exists at `src/main/assets/<name>.png` (the `assets/` prefix maps to `src/main/assets/`). Run `file src/main/assets/icon_day.png` (and `_night`) — a value pointing at a nonexistent path, or a "PNG" that is actually a Git LFS pointer / non-PNG, → **Fail**. Conventional size ~192×192 (96–256 seen); flag tiny (e.g. 24×24) or clearly-broken images as **Partial**.
124+
- **Template variant thumbnails** (only for template-installer plugins — those calling `IdeTemplateService`/`CgtTemplateBuilder`): for each variant registered via `thumbnailFromAssets("…/thumb.png", context)`, confirm the referenced `thumb.png` exists under `src/main/assets/templates/<Variant>/…`. A missing `thumb.png` for a registered variant → **Fail**. Then check the thumbnails are **distinct**, not identical placeholders — `md5sum src/main/assets/templates/*/template/thumb.png | sort` (adjust the glob to the real layout); two or more variants sharing one byte-identical `thumb.png`**Fail** (this is the exact defect fixed in commit `0363237`). Conventional size 512×512 PNG. Non-template plugins: **N/A**, say so.
125+
- On-device re-verification caveat: the Plugin Manager caches icons via Glide keyed by path without mtime invalidation, so an updated icon under the same plugin id won't visibly refresh until the Glide disk cache is cleared or you install on a clean device (see CLAUDE.md).
126+
119127
### Phase 4 — Compose the report
120128

121129
One combined report, three sections:
@@ -133,6 +141,7 @@ One combined report, three sections:
133141
| 6.5 No reflection |||
134142
| 6.6 Html documentation |||
135143
| 6.7 Tooltips & in-app help |||
144+
| 6.8 Icons & imagery |||
136145
| Manifest declarations |||
137146

138147
End with **Overall verdict**: green-light / conditional (list blockers) / block. A Fail on any clause is a blocker; a Partial is conditional.

.claude/skills/plugin-review/references/RUBRIC.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ Requirements:
4646

4747
This is distinct from 6.6: 6.6 is the install-decision page that ships at the plugin's top level; 6.7 is the in-IDE tooltip + Tier 3 help wired through `DocumentationExtension`. A plugin can pass 6.6 and still fail 6.7.
4848

49+
## 6.8 Plugin icons and imagery
50+
51+
The Plugin Manager renders a day/night icon pair for every plugin, and template-installer plugins additionally render a thumbnail for each template variant on the New Project screen. Both must be present and correct.
52+
53+
- **Plugin icon (day/night pair).** The manifest declares `plugin.icon_day` and `plugin.icon_night` as `<meta-data>` on `<application>`, each `android:value` pointing at an in-`.cgp` path (`assets/<name>.png`). Both variants are required — the IDE picks the light or dark icon per theme, and debug installs enforce the icon (release builds skip the check). The images are real PNGs (not res-drawables, not `android:icon`, not Git LFS stubs), conventionally ~192×192.
54+
- **Template variant thumbnails.** Every template variant a plugin registers via `CgtTemplateBuilder.thumbnailFromAssets(...)` supplies a real, distinct `thumb.png` (512×512 PNG) at the referenced asset path. Identical placeholder thumbnails shared across variants, or a missing `thumb.png` for a registered variant, is a defect — each variant must be visually distinguishable on the New Project screen.
55+
4956
## Manifest
5057

5158
The manifest must declare every extension, every permission, the supported IDE version range, and the minimum Android SDK level.

0 commit comments

Comments
 (0)