@olegkoval/agent-skills 1.27.0 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/.claude-plugin/plugin.json +7 -2
  2. package/.cursor-plugin/index.json +21 -1
  3. package/.grok-plugin/index.json +21 -1
  4. package/.kiro/steering/garmin-watchface.md +83 -31
  5. package/.windsurf/rules/garmin-watchface.md +83 -31
  6. package/README.md +9 -4
  7. package/catalog/skills.json +113 -1
  8. package/package.json +1 -1
  9. package/packages/software-development/branch-cleanup/SKILL.md +204 -0
  10. package/packages/software-development/branch-cleanup/adapters/claude/plugin.json +5 -0
  11. package/packages/software-development/branch-cleanup/adapters/claude/skills/branch-cleanup/SKILL.md +205 -0
  12. package/packages/software-development/branch-cleanup/adapters/codex/README.md +19 -0
  13. package/packages/software-development/branch-cleanup/adapters/cursor/plugin.json +6 -0
  14. package/packages/software-development/branch-cleanup/adapters/cursor/skills/branch-cleanup/SKILL.md +205 -0
  15. package/packages/software-development/branch-cleanup/adapters/grok/plugin.json +6 -0
  16. package/packages/software-development/branch-cleanup/adapters/grok/skills/branch-cleanup/SKILL.md +205 -0
  17. package/packages/software-development/lekker-review/SKILL.md +519 -0
  18. package/packages/software-development/lekker-review/adapters/claude/plugin.json +5 -0
  19. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/SKILL.md +520 -0
  20. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/completeness-critic.md +21 -0
  21. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/conventions.md +124 -0
  22. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/fix-verifier.md +84 -0
  23. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/fixer.md +120 -0
  24. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/implementation.md +53 -0
  25. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/prover.md +135 -0
  26. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/quality.md +72 -0
  27. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/simplification.md +45 -0
  28. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/test-quality.md +170 -0
  29. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/triage-logic.md +27 -0
  30. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/triage-quality.md +41 -0
  31. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/agents/verifier.md +295 -0
  32. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/artifact-page.md +143 -0
  33. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/context-gathering.md +162 -0
  34. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/fix-mode.md +329 -0
  35. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/github-post.md +205 -0
  36. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/house-rules.md +76 -0
  37. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/references/output-format.md +232 -0
  38. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/scripts/changed-files.sh +77 -0
  39. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/scripts/setup-worktree.sh +337 -0
  40. package/packages/software-development/lekker-review/adapters/claude/skills/lekker-review/scripts/verify-fixes.sh +231 -0
  41. package/packages/software-development/lekker-review/fix-workflow.js +273 -0
  42. package/packages/software-development/lekker-review/references/agents/completeness-critic.md +21 -0
  43. package/packages/software-development/lekker-review/references/agents/conventions.md +124 -0
  44. package/packages/software-development/lekker-review/references/agents/fix-verifier.md +84 -0
  45. package/packages/software-development/lekker-review/references/agents/fixer.md +120 -0
  46. package/packages/software-development/lekker-review/references/agents/implementation.md +53 -0
  47. package/packages/software-development/lekker-review/references/agents/prover.md +135 -0
  48. package/packages/software-development/lekker-review/references/agents/quality.md +72 -0
  49. package/packages/software-development/lekker-review/references/agents/simplification.md +45 -0
  50. package/packages/software-development/lekker-review/references/agents/test-quality.md +170 -0
  51. package/packages/software-development/lekker-review/references/agents/triage-logic.md +27 -0
  52. package/packages/software-development/lekker-review/references/agents/triage-quality.md +41 -0
  53. package/packages/software-development/lekker-review/references/agents/verifier.md +295 -0
  54. package/packages/software-development/lekker-review/references/artifact-page.md +143 -0
  55. package/packages/software-development/lekker-review/references/context-gathering.md +162 -0
  56. package/packages/software-development/lekker-review/references/fix-mode.md +329 -0
  57. package/packages/software-development/lekker-review/references/github-post.md +205 -0
  58. package/packages/software-development/lekker-review/references/house-rules.md +76 -0
  59. package/packages/software-development/lekker-review/references/output-format.md +232 -0
  60. package/packages/software-development/lekker-review/scripts/changed-files.sh +77 -0
  61. package/packages/software-development/lekker-review/scripts/setup-worktree.sh +337 -0
  62. package/packages/software-development/lekker-review/scripts/verify-fixes.sh +231 -0
  63. package/packages/software-development/lekker-review/workflow.js +602 -0
  64. package/packages/software-development/morning-routine/SKILL.md +149 -0
  65. package/packages/software-development/morning-routine/adapters/claude/plugin.json +5 -0
  66. package/packages/software-development/morning-routine/adapters/claude/skills/morning-routine/SKILL.md +150 -0
  67. package/packages/software-development/morning-routine/adapters/codex/README.md +19 -0
  68. package/packages/software-development/morning-routine/adapters/cursor/plugin.json +6 -0
  69. package/packages/software-development/morning-routine/adapters/cursor/skills/morning-routine/SKILL.md +150 -0
  70. package/packages/software-development/morning-routine/adapters/grok/plugin.json +6 -0
  71. package/packages/software-development/morning-routine/adapters/grok/skills/morning-routine/SKILL.md +150 -0
  72. package/packages/software-development/pr-finalize-complete/adapters/claude/plugin.json +1 -1
  73. package/packages/software-development/pr-finalize-complete/adapters/codex/README.md +7 -11
  74. package/packages/software-development/pr-finalize-complete/adapters/cursor/plugin.json +1 -1
  75. package/packages/software-development/pr-finalize-complete/adapters/grok/plugin.json +1 -1
  76. package/packages/software-development/release-day/SKILL.md +286 -0
  77. package/packages/software-development/release-day/adapters/claude/plugin.json +5 -0
  78. package/packages/software-development/release-day/adapters/claude/skills/release-day/SKILL.md +287 -0
  79. package/packages/software-development/release-day/adapters/codex/README.md +19 -0
  80. package/packages/software-development/release-day/adapters/cursor/plugin.json +6 -0
  81. package/packages/software-development/release-day/adapters/cursor/skills/release-day/SKILL.md +287 -0
  82. package/packages/software-development/release-day/adapters/grok/plugin.json +6 -0
  83. package/packages/software-development/release-day/adapters/grok/skills/release-day/SKILL.md +287 -0
  84. package/packages/wearables/garmin-watchface/SKILL.md +82 -35
  85. package/packages/wearables/garmin-watchface/adapters/claude/plugin.json +1 -1
  86. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/SKILL.md +82 -35
  87. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/design-proposals.md +99 -0
  88. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/devices.md +112 -0
  89. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/display.md +78 -3
  90. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
  91. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/layout.md +28 -0
  92. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/publishing.md +134 -5
  93. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/simulator.md +86 -2
  94. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-inspire +329 -0
  95. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-mock +502 -0
  96. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-release +12 -6
  97. package/packages/wearables/garmin-watchface/adapters/cursor/plugin.json +1 -1
  98. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/SKILL.md +82 -35
  99. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/design-proposals.md +99 -0
  100. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/devices.md +112 -0
  101. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/display.md +78 -3
  102. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
  103. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/layout.md +28 -0
  104. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/publishing.md +134 -5
  105. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/simulator.md +86 -2
  106. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-inspire +329 -0
  107. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-mock +502 -0
  108. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-release +12 -6
  109. package/packages/wearables/garmin-watchface/adapters/grok/plugin.json +1 -1
  110. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/SKILL.md +82 -35
  111. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/design-proposals.md +99 -0
  112. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/devices.md +112 -0
  113. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/display.md +78 -3
  114. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
  115. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/layout.md +28 -0
  116. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/publishing.md +134 -5
  117. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/simulator.md +86 -2
  118. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-inspire +329 -0
  119. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-mock +502 -0
  120. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-release +12 -6
  121. package/packages/wearables/garmin-watchface/adapters/kiro/steering/garmin-watchface.md +83 -31
  122. package/packages/wearables/garmin-watchface/adapters/windsurf/rules/garmin-watchface.md +83 -31
  123. package/packages/wearables/garmin-watchface/references/design-proposals.md +99 -0
  124. package/packages/wearables/garmin-watchface/references/devices.md +112 -0
  125. package/packages/wearables/garmin-watchface/references/display.md +78 -3
  126. package/packages/wearables/garmin-watchface/references/inspiration-wizard.md +140 -0
  127. package/packages/wearables/garmin-watchface/references/layout.md +28 -0
  128. package/packages/wearables/garmin-watchface/references/publishing.md +134 -5
  129. package/packages/wearables/garmin-watchface/references/simulator.md +86 -2
  130. package/packages/wearables/garmin-watchface/scripts/ciq-inspire +329 -0
  131. package/packages/wearables/garmin-watchface/scripts/ciq-mock +502 -0
  132. package/packages/wearables/garmin-watchface/scripts/ciq-release +12 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-agent-skills",
3
3
  "description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.",
4
- "version": "1.26.0",
4
+ "version": "1.28.0",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -9,6 +9,7 @@
9
9
  "repository": "https://github.com/oleg-koval/agent-skills",
10
10
  "license": "MIT",
11
11
  "skills": [
12
+ "./packages/software-development/lekker-review",
12
13
  "./packages/software-development/self-critique",
13
14
  "./packages/software-development/docs-index-keeper",
14
15
  "./packages/software-development/semantic-release-beta",
@@ -47,6 +48,10 @@
47
48
  "./packages/software-development/ci-fix-loop",
48
49
  "./packages/software-development/pr-to-green",
49
50
  "./packages/software-development/dependabot-triage",
50
- "./packages/software-development/store-listing-copy"
51
+ "./packages/software-development/store-listing-copy",
52
+ "./packages/software-development/pr-finalize-complete",
53
+ "./packages/software-development/morning-routine",
54
+ "./packages/software-development/release-day",
55
+ "./packages/software-development/branch-cleanup"
51
56
  ]
52
57
  }
@@ -124,7 +124,7 @@
124
124
  {
125
125
  "name": "olko:garmin-watchface",
126
126
  "source": "./packages/wearables/garmin-watchface/adapters/cursor",
127
- "description": "Build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
127
+ "description": "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
128
128
  },
129
129
  {
130
130
  "name": "olko:coderabbitloop",
@@ -185,6 +185,26 @@
185
185
  "name": "olko:store-listing-copy",
186
186
  "source": "./packages/software-development/store-listing-copy/adapters/cursor",
187
187
  "description": "Generate platform-validated App Store, Google Play, and Connect IQ store listing copy (title, subtitle, description, what's new, keywords) from a git changelog or release notes."
188
+ },
189
+ {
190
+ "name": "olko:pr-finalize-complete",
191
+ "source": "./packages/software-development/pr-finalize-complete/adapters/cursor",
192
+ "description": "Comprehensive PR finalization workflow for PRs that may already be partially addressed: checks each review comment's actual current status in code, distinguishes fixed vs. stale vs. still-present findings, verifies test coverage, runs real lint/test gates, and reports what still needs a human."
193
+ },
194
+ {
195
+ "name": "olko:morning-routine",
196
+ "source": "./packages/software-development/morning-routine/adapters/cursor",
197
+ "description": "Run the complete start-of-day setup in one pass: roll over unfinished Obsidian tasks to today's daily note, sync open GitHub PRs that need your attention, and sweep Dependabot patch bumps. Chains obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage."
198
+ },
199
+ {
200
+ "name": "olko:release-day",
201
+ "source": "./packages/software-development/release-day/adapters/cursor",
202
+ "description": "Orchestrate a full release-day workflow for iOS, Android, or Garmin apps: verify main branch CI is green, generate changelog, draft platform-ready store listing copy, trigger semantic-release or tag manually, wait for the build, and queue the App Store submission."
203
+ },
204
+ {
205
+ "name": "olko:branch-cleanup",
206
+ "source": "./packages/software-development/branch-cleanup/adapters/cursor",
207
+ "description": "Prune stale git branches after a merge wave: delete closed/merged remote branches, remove local tracking refs that no longer exist on the remote, and optionally clean up merged local branches. Natural follow-up to dependabot-triage."
188
208
  }
189
209
  ]
190
210
  }
@@ -134,7 +134,7 @@
134
134
  {
135
135
  "name": "olko:garmin-watchface",
136
136
  "source": "./packages/wearables/garmin-watchface/adapters/grok",
137
- "description": "Build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
137
+ "description": "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
138
138
  },
139
139
  {
140
140
  "name": "olko:coderabbitloop",
@@ -195,6 +195,26 @@
195
195
  "name": "olko:store-listing-copy",
196
196
  "source": "./packages/software-development/store-listing-copy/adapters/grok",
197
197
  "description": "Generate platform-validated App Store, Google Play, and Connect IQ store listing copy (title, subtitle, description, what's new, keywords) from a git changelog or release notes."
198
+ },
199
+ {
200
+ "name": "olko:pr-finalize-complete",
201
+ "source": "./packages/software-development/pr-finalize-complete/adapters/grok",
202
+ "description": "Comprehensive PR finalization workflow for PRs that may already be partially addressed: checks each review comment's actual current status in code, distinguishes fixed vs. stale vs. still-present findings, verifies test coverage, runs real lint/test gates, and reports what still needs a human."
203
+ },
204
+ {
205
+ "name": "olko:morning-routine",
206
+ "source": "./packages/software-development/morning-routine/adapters/grok",
207
+ "description": "Run the complete start-of-day setup in one pass: roll over unfinished Obsidian tasks to today's daily note, sync open GitHub PRs that need your attention, and sweep Dependabot patch bumps. Chains obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage."
208
+ },
209
+ {
210
+ "name": "olko:release-day",
211
+ "source": "./packages/software-development/release-day/adapters/grok",
212
+ "description": "Orchestrate a full release-day workflow for iOS, Android, or Garmin apps: verify main branch CI is green, generate changelog, draft platform-ready store listing copy, trigger semantic-release or tag manually, wait for the build, and queue the App Store submission."
213
+ },
214
+ {
215
+ "name": "olko:branch-cleanup",
216
+ "source": "./packages/software-development/branch-cleanup/adapters/grok",
217
+ "description": "Prune stale git branches after a merge wave: delete closed/merged remote branches, remove local tracking refs that no longer exist on the remote, and optionally clean up merged local branches. Natural follow-up to dependabot-triage."
198
218
  }
199
219
  ]
200
220
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  ---
4
4
  inclusion: manual
5
- description: "Build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
5
+ description: "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
6
6
  ---
7
7
 
8
8
  # Garmin Connect IQ watch faces
@@ -12,43 +12,43 @@ that draws off the bottom of the screen, a test suite that contains no tests, an
12
12
  a colour that is not the colour you get. Everything below is a failure mode that
13
13
  looked like success first.
14
14
 
15
- **Read `references/` files as needed — do not read them all up front.**
15
+ **Read `reference/` files as needed — do not read them all up front.**
16
16
 
17
17
  | File | When |
18
18
  | --- | --- |
19
- | `references/display.md` | Choosing colours, anything about brightness or legibility |
20
- | `references/layout.md` | Positioning anything; content clipped, overlapping, or off-screen |
21
- | `references/testing.md` | Writing tests; a suspiciously clean test run |
22
- | `references/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
23
- | `references/devices.md` | Adding device support, launcher icons, API levels |
24
- | `references/store.md` | Publishing, listing copy, IP questions |
25
- | `references/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
19
+ | `reference/display.md` | Choosing colours, brightness, legibility; **AMOLED always-on and burn-in** |
20
+ | `reference/layout.md` | Positioning anything; content clipped, overlapping, or off-screen |
21
+ | `reference/testing.md` | Writing tests; a suspiciously clean test run |
22
+ | `reference/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
23
+ | `reference/devices.md` | Adding device support, launcher icons, API levels |
24
+ | `reference/store.md` | Publishing, listing copy, IP questions |
25
+ | `reference/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
26
26
 
27
27
  ## Tools
28
28
 
29
29
  Run these rather than reinventing them. All are standalone.
30
30
 
31
31
  ```bash
32
- <skill-dir>/scripts/ciq-doctor # toolchain check: SDK, JDK, key, devices
33
- <skill-dir>/scripts/ciq-devices # survey installed devices by resolution
34
- <skill-dir>/scripts/ciq-devices --same-as fenix6pro # products you can add with no code change
35
- <skill-dir>/scripts/ciq-capture out.png # calibrated simulator screenshot
36
- <skill-dir>/scripts/ciq-capture out.png --face --size 260 # cropped + masked to the round display
37
- <skill-dir>/scripts/ciq-calibrate # re-derive the display rect if capture looks wrong
38
- <skill-dir>/scripts/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
32
+ bin/ciq-doctor # toolchain check: SDK, JDK, key, devices
33
+ bin/ciq-devices # survey installed devices by resolution
34
+ bin/ciq-devices --same-as fenix6pro # products you can add with no code change
35
+ bin/ciq-capture out.png # calibrated simulator screenshot
36
+ bin/ciq-capture out.png --face --size 260 # cropped + masked to the round display
37
+ bin/ciq-calibrate # re-derive the display rect if capture looks wrong
38
+ bin/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
39
39
  ```
40
40
 
41
- `<skill-dir>/scripts/ciq-release` is what you run before opening the store
42
- portal. Every check in it is something otherwise discovered halfway through the
43
- submission form -- a stale screenshot set, an icon still copied from the last
44
- project, or copy containing a character the description validator rejects.
41
+ `bin/ciq-release` is what you run before opening the store portal. Every check
42
+ in it is something otherwise discovered halfway through the submission form --
43
+ a stale screenshot set, an icon still copied from the last project, or copy
44
+ containing a character the description validator rejects.
45
45
 
46
- `<skill-dir>/scripts/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
46
+ `bin/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
47
47
  a window: without a frontmost check it silently photographs whatever is on top,
48
48
  and the window moves between simulator restarts. Both failure modes produce a
49
49
  plausible PNG of the wrong thing.
50
50
 
51
- ## The five things that will bite you
51
+ ## The seven things that will bite you
52
52
 
53
53
  ### 1. `make test` can compile zero tests and report success
54
54
 
@@ -58,7 +58,7 @@ get `BUILD SUCCESSFUL` and a green run with nothing compiled — even when the t
58
58
  files reference symbols that no longer exist.
59
59
 
60
60
  Fix: a second jungle passed as an additional `-f`. See
61
- `<skill-dir>/templates/monkey.test.jungle` and the `test` target in `<skill-dir>/templates/Makefile`.
61
+ `templates/monkey.test.jungle` and the `test` target in `templates/Makefile`.
62
62
 
63
63
  **Prove it before you trust it.** Put a deliberately unresolvable symbol in one
64
64
  test and confirm the build fails:
@@ -79,6 +79,13 @@ they look. Measured on fenix 6 Pro:
79
79
  | `FONT_SMALL` | 32 |
80
80
  | `FONT_NUMBER_MEDIUM` | 74 |
81
81
 
82
+ **Font tiers already scale with the device.** `FONT_XTINY` is a tier, not a
83
+ pixel height: a 454px watch supplies a proportionately taller glyph than a
84
+ 260px one, unasked. So when text looks wrong at a new resolution, the bug is a
85
+ LENGTH that failed to scale, never the font. Do not add screen-size branching
86
+ to pick a bigger tier -- doing so double-scales, and labels end up wider than
87
+ the containers naming them.
88
+
82
89
  Content drawn past the screen height is simply invisible — no error, no warning,
83
90
  no clipping indicator. A two-line `FONT_NUMBER_MEDIUM` block is 148px of a 260px
84
91
  face.
@@ -93,7 +100,7 @@ function clampRuleY(derived as Number, footerH as Number) as Number {
93
100
  }
94
101
  ```
95
102
 
96
- See `references/layout.md`.
103
+ See `reference/layout.md`.
97
104
 
98
105
  ### 3. The screen is round; your layout is not
99
106
 
@@ -122,7 +129,7 @@ simulator's backlit LCD.
122
129
  Corollary: a saturated colour on a glyph reflects only its own channel, making
123
130
  the thing you want to read the *dimmest* thing on screen.
124
131
 
125
- See `references/display.md`.
132
+ See `reference/display.md`.
126
133
 
127
134
  ### 5. The simulator lies about settings
128
135
 
@@ -133,14 +140,59 @@ settings code.
133
140
 
134
141
  Reset also drops the loaded device, so relaunch and re-push afterwards.
135
142
 
136
- See `references/simulator.md`.
143
+ See `reference/simulator.md`.
144
+
145
+ ### 6. On AMOLED, the face you designed is the one that fails review
146
+
147
+ `requiresBurnInProtection` devices must show a restricted always-on frame
148
+ between wrist raises. The trap is that the *stronger* your face's identity —
149
+ a bright panel, a filled dial — the worse a dimmed version of it performs,
150
+ because it still lights most of the screen. The always-on frame has to be a
151
+ different drawing: outlines where there were fills, and shifted a few pixels on
152
+ a cycle so no pixel is driven continuously.
153
+
154
+ Also note the flag can be **null** on older products, and a null propagating
155
+ into a `Boolean` field throws at the first wrist drop.
156
+
157
+ See the AMOLED section of `reference/display.md`.
158
+
159
+ ### 7. A watch face CAN have settings on the watch
160
+
161
+ `AppBase.getSettingsView()` has existed since **API 3.2.0** and the SDK
162
+ documents it as "only applicable to watch faces and data fields". Plenty of
163
+ store copy — including, at one point, this author's own — claims settings are
164
+ reachable only from the phone. They are not.
165
+
166
+ The override signature must include `or Null` or the compiler rejects it as
167
+ narrowing:
168
+
169
+ ```monkeyc
170
+ function getSettingsView() as
171
+ [WatchUi.Views] or [WatchUi.Views, WatchUi.InputDelegates] or Null {
172
+ return [new SettingsMenu(), new SettingsMenuDelegate()];
173
+ }
174
+ ```
175
+
176
+ Two things to get right in the menu itself:
177
+
178
+ - `ToggleMenuItem` has **already flipped its own state** by the time `onSelect`
179
+ runs. Read `isEnabled()`; negating the stored value inverts the setting.
180
+ - A picker should `setFocus()` the current choice, not open at the top of a long
181
+ list. If the list filters out unavailable options, item position is *not* the
182
+ option id — count the focus row as you build the list.
183
+
184
+ Keep one module that owns every property read, each wrapped with a default, and
185
+ have both the phone path and the on-watch menu go through it. Two readers with
186
+ two sets of defaults is exactly how the watch and the phone come to disagree
187
+ about what "off" means — and check the fallbacks actually match
188
+ `properties.xml`, because nothing enforces that.
137
189
 
138
190
  ## Workflow
139
191
 
140
192
  ### Starting a face
141
193
 
142
- 1. `<skill-dir>/scripts/ciq-doctor` — confirm SDK, JDK, developer key, target device installed.
143
- 2. Copy `<skill-dir>/templates/Makefile`, `<skill-dir>/templates/monkey.jungle`, `<skill-dir>/templates/monkey.test.jungle`.
194
+ 1. `bin/ciq-doctor` — confirm SDK, JDK, developer key, target device installed.
195
+ 2. Copy `templates/Makefile`, `templates/monkey.jungle`, `templates/monkey.test.jungle`.
144
196
  3. Generate a fresh app id: `python3 -c "import uuid;print(uuid.uuid4().hex)"`.
145
197
  4. Split source by responsibility. This structure has held up well:
146
198
 
@@ -169,7 +221,7 @@ Capture and *look at it*. Layout bugs are invisible in a passing test run:
169
221
 
170
222
  ```bash
171
223
  make build && make sim
172
- <skill-dir>/scripts/ciq-capture /tmp/face.png --face --size 260
224
+ bin/ciq-capture /tmp/face.png --face --size 260
173
225
  ```
174
226
 
175
227
  Then Read the PNG. Every layout bug in this skill's history was found by looking,
@@ -202,7 +254,7 @@ are what makes it recognisable:
202
254
  - **Where the legends sit** — maker's name on the bezel, not the glass.
203
255
 
204
256
  No system font is a segment display. If you need one, draw it: see
205
- `references/layout.md` for a working seven-segment renderer, including the ghost
257
+ `reference/layout.md` for a working seven-segment renderer, including the ghost
206
258
  (unlit) segments that are most of what sells the effect.
207
259
 
208
- **Do not print a real brand on the face.** See `references/store.md`.
260
+ **Do not print a real brand on the face.** See `reference/store.md`.
@@ -1,7 +1,7 @@
1
1
  <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
2
 
3
3
  ---
4
- description: "Build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
4
+ description: "Design, build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
5
5
  ---
6
6
 
7
7
  # Garmin Connect IQ watch faces
@@ -11,43 +11,43 @@ that draws off the bottom of the screen, a test suite that contains no tests, an
11
11
  a colour that is not the colour you get. Everything below is a failure mode that
12
12
  looked like success first.
13
13
 
14
- **Read `references/` files as needed — do not read them all up front.**
14
+ **Read `reference/` files as needed — do not read them all up front.**
15
15
 
16
16
  | File | When |
17
17
  | --- | --- |
18
- | `references/display.md` | Choosing colours, anything about brightness or legibility |
19
- | `references/layout.md` | Positioning anything; content clipped, overlapping, or off-screen |
20
- | `references/testing.md` | Writing tests; a suspiciously clean test run |
21
- | `references/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
22
- | `references/devices.md` | Adding device support, launcher icons, API levels |
23
- | `references/store.md` | Publishing, listing copy, IP questions |
24
- | `references/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
18
+ | `reference/display.md` | Choosing colours, brightness, legibility; **AMOLED always-on and burn-in** |
19
+ | `reference/layout.md` | Positioning anything; content clipped, overlapping, or off-screen |
20
+ | `reference/testing.md` | Writing tests; a suspiciously clean test run |
21
+ | `reference/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
22
+ | `reference/devices.md` | Adding device support, launcher icons, API levels |
23
+ | `reference/store.md` | Publishing, listing copy, IP questions |
24
+ | `reference/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
25
25
 
26
26
  ## Tools
27
27
 
28
28
  Run these rather than reinventing them. All are standalone.
29
29
 
30
30
  ```bash
31
- <skill-dir>/scripts/ciq-doctor # toolchain check: SDK, JDK, key, devices
32
- <skill-dir>/scripts/ciq-devices # survey installed devices by resolution
33
- <skill-dir>/scripts/ciq-devices --same-as fenix6pro # products you can add with no code change
34
- <skill-dir>/scripts/ciq-capture out.png # calibrated simulator screenshot
35
- <skill-dir>/scripts/ciq-capture out.png --face --size 260 # cropped + masked to the round display
36
- <skill-dir>/scripts/ciq-calibrate # re-derive the display rect if capture looks wrong
37
- <skill-dir>/scripts/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
31
+ bin/ciq-doctor # toolchain check: SDK, JDK, key, devices
32
+ bin/ciq-devices # survey installed devices by resolution
33
+ bin/ciq-devices --same-as fenix6pro # products you can add with no code change
34
+ bin/ciq-capture out.png # calibrated simulator screenshot
35
+ bin/ciq-capture out.png --face --size 260 # cropped + masked to the round display
36
+ bin/ciq-calibrate # re-derive the display rect if capture looks wrong
37
+ bin/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
38
38
  ```
39
39
 
40
- `<skill-dir>/scripts/ciq-release` is what you run before opening the store
41
- portal. Every check in it is something otherwise discovered halfway through the
42
- submission form -- a stale screenshot set, an icon still copied from the last
43
- project, or copy containing a character the description validator rejects.
40
+ `bin/ciq-release` is what you run before opening the store portal. Every check
41
+ in it is something otherwise discovered halfway through the submission form --
42
+ a stale screenshot set, an icon still copied from the last project, or copy
43
+ containing a character the description validator rejects.
44
44
 
45
- `<skill-dir>/scripts/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
45
+ `bin/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
46
46
  a window: without a frontmost check it silently photographs whatever is on top,
47
47
  and the window moves between simulator restarts. Both failure modes produce a
48
48
  plausible PNG of the wrong thing.
49
49
 
50
- ## The five things that will bite you
50
+ ## The seven things that will bite you
51
51
 
52
52
  ### 1. `make test` can compile zero tests and report success
53
53
 
@@ -57,7 +57,7 @@ get `BUILD SUCCESSFUL` and a green run with nothing compiled — even when the t
57
57
  files reference symbols that no longer exist.
58
58
 
59
59
  Fix: a second jungle passed as an additional `-f`. See
60
- `<skill-dir>/templates/monkey.test.jungle` and the `test` target in `<skill-dir>/templates/Makefile`.
60
+ `templates/monkey.test.jungle` and the `test` target in `templates/Makefile`.
61
61
 
62
62
  **Prove it before you trust it.** Put a deliberately unresolvable symbol in one
63
63
  test and confirm the build fails:
@@ -78,6 +78,13 @@ they look. Measured on fenix 6 Pro:
78
78
  | `FONT_SMALL` | 32 |
79
79
  | `FONT_NUMBER_MEDIUM` | 74 |
80
80
 
81
+ **Font tiers already scale with the device.** `FONT_XTINY` is a tier, not a
82
+ pixel height: a 454px watch supplies a proportionately taller glyph than a
83
+ 260px one, unasked. So when text looks wrong at a new resolution, the bug is a
84
+ LENGTH that failed to scale, never the font. Do not add screen-size branching
85
+ to pick a bigger tier -- doing so double-scales, and labels end up wider than
86
+ the containers naming them.
87
+
81
88
  Content drawn past the screen height is simply invisible — no error, no warning,
82
89
  no clipping indicator. A two-line `FONT_NUMBER_MEDIUM` block is 148px of a 260px
83
90
  face.
@@ -92,7 +99,7 @@ function clampRuleY(derived as Number, footerH as Number) as Number {
92
99
  }
93
100
  ```
94
101
 
95
- See `references/layout.md`.
102
+ See `reference/layout.md`.
96
103
 
97
104
  ### 3. The screen is round; your layout is not
98
105
 
@@ -121,7 +128,7 @@ simulator's backlit LCD.
121
128
  Corollary: a saturated colour on a glyph reflects only its own channel, making
122
129
  the thing you want to read the *dimmest* thing on screen.
123
130
 
124
- See `references/display.md`.
131
+ See `reference/display.md`.
125
132
 
126
133
  ### 5. The simulator lies about settings
127
134
 
@@ -132,14 +139,59 @@ settings code.
132
139
 
133
140
  Reset also drops the loaded device, so relaunch and re-push afterwards.
134
141
 
135
- See `references/simulator.md`.
142
+ See `reference/simulator.md`.
143
+
144
+ ### 6. On AMOLED, the face you designed is the one that fails review
145
+
146
+ `requiresBurnInProtection` devices must show a restricted always-on frame
147
+ between wrist raises. The trap is that the *stronger* your face's identity —
148
+ a bright panel, a filled dial — the worse a dimmed version of it performs,
149
+ because it still lights most of the screen. The always-on frame has to be a
150
+ different drawing: outlines where there were fills, and shifted a few pixels on
151
+ a cycle so no pixel is driven continuously.
152
+
153
+ Also note the flag can be **null** on older products, and a null propagating
154
+ into a `Boolean` field throws at the first wrist drop.
155
+
156
+ See the AMOLED section of `reference/display.md`.
157
+
158
+ ### 7. A watch face CAN have settings on the watch
159
+
160
+ `AppBase.getSettingsView()` has existed since **API 3.2.0** and the SDK
161
+ documents it as "only applicable to watch faces and data fields". Plenty of
162
+ store copy — including, at one point, this author's own — claims settings are
163
+ reachable only from the phone. They are not.
164
+
165
+ The override signature must include `or Null` or the compiler rejects it as
166
+ narrowing:
167
+
168
+ ```monkeyc
169
+ function getSettingsView() as
170
+ [WatchUi.Views] or [WatchUi.Views, WatchUi.InputDelegates] or Null {
171
+ return [new SettingsMenu(), new SettingsMenuDelegate()];
172
+ }
173
+ ```
174
+
175
+ Two things to get right in the menu itself:
176
+
177
+ - `ToggleMenuItem` has **already flipped its own state** by the time `onSelect`
178
+ runs. Read `isEnabled()`; negating the stored value inverts the setting.
179
+ - A picker should `setFocus()` the current choice, not open at the top of a long
180
+ list. If the list filters out unavailable options, item position is *not* the
181
+ option id — count the focus row as you build the list.
182
+
183
+ Keep one module that owns every property read, each wrapped with a default, and
184
+ have both the phone path and the on-watch menu go through it. Two readers with
185
+ two sets of defaults is exactly how the watch and the phone come to disagree
186
+ about what "off" means — and check the fallbacks actually match
187
+ `properties.xml`, because nothing enforces that.
136
188
 
137
189
  ## Workflow
138
190
 
139
191
  ### Starting a face
140
192
 
141
- 1. `<skill-dir>/scripts/ciq-doctor` — confirm SDK, JDK, developer key, target device installed.
142
- 2. Copy `<skill-dir>/templates/Makefile`, `<skill-dir>/templates/monkey.jungle`, `<skill-dir>/templates/monkey.test.jungle`.
193
+ 1. `bin/ciq-doctor` — confirm SDK, JDK, developer key, target device installed.
194
+ 2. Copy `templates/Makefile`, `templates/monkey.jungle`, `templates/monkey.test.jungle`.
143
195
  3. Generate a fresh app id: `python3 -c "import uuid;print(uuid.uuid4().hex)"`.
144
196
  4. Split source by responsibility. This structure has held up well:
145
197
 
@@ -168,7 +220,7 @@ Capture and *look at it*. Layout bugs are invisible in a passing test run:
168
220
 
169
221
  ```bash
170
222
  make build && make sim
171
- <skill-dir>/scripts/ciq-capture /tmp/face.png --face --size 260
223
+ bin/ciq-capture /tmp/face.png --face --size 260
172
224
  ```
173
225
 
174
226
  Then Read the PNG. Every layout bug in this skill's history was found by looking,
@@ -201,7 +253,7 @@ are what makes it recognisable:
201
253
  - **Where the legends sit** — maker's name on the bezel, not the glass.
202
254
 
203
255
  No system font is a segment display. If you need one, draw it: see
204
- `references/layout.md` for a working seven-segment renderer, including the ghost
256
+ `reference/layout.md` for a working seven-segment renderer, including the ghost
205
257
  (unlit) segments that are most of what sells the effect.
206
258
 
207
- **Do not print a real brand on the face.** See `references/store.md`.
259
+ **Do not print a real brand on the face.** See `reference/store.md`.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <p><strong>Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.</strong></p>
4
4
  <p>
5
5
  <img src="https://img.shields.io/badge/license-MIT-16a34a" alt="MIT license">
6
- <img src="https://img.shields.io/badge/skills-24-2563eb" alt="24 skills">
6
+ <img src="https://img.shields.io/badge/skills-40-2563eb" alt="40 skills">
7
7
  <img src="https://img.shields.io/badge/platforms-Codex%20%7C%20Claude%20%7C%20Cursor%20%7C%20Grok%20%7C%20Copilot%20%7C%20Windsurf%20%7C%20Kiro-111827" alt="Codex Claude Cursor Grok Copilot Windsurf Kiro">
8
8
  <img src="https://img.shields.io/badge/status-public%20catalog-16a34a" alt="Public catalog">
9
9
  </p>
@@ -139,11 +139,11 @@ packages/{category}/{skill}/SKILL.md
139
139
 
140
140
  </details>
141
141
 
142
- ## All 39 Skills
142
+ ## All 40 Skills
143
143
 
144
144
  Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup name in a new agent session.
145
145
 
146
- ### Software development (34)
146
+ ### Software development (35)
147
147
 
148
148
  | Skill | What it does | Use when |
149
149
  |-------|-------------|----------|
@@ -160,6 +160,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
160
160
  | [geminiloop](packages/software-development/geminiloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved Gemini Code Assist comments, treating each as a claim to verify — fixing the correct ones and rebutting the rest with evidence | Clearing a Gemini Code Assist review whose findings need checking first |
161
161
  | [gh-cli](packages/software-development/gh-cli/SKILL.md) | Guides GitHub CLI usage for repos, PRs, Actions, releases, issues, and all related GitHub operations | Working with GitHub from the command line and needing reliable `gh` commands |
162
162
  | [git-commit](packages/software-development/git-commit/SKILL.md) | Creates conventional commits with diff-aware staging and message generation | Asking to commit changes or wanting a conventional commit message from the current diff |
163
+ | [lekker-review](packages/software-development/lekker-review/SKILL.md) | Runs a FAANG-quality PR review in an isolated worktree: 5 parallel specialist agents, adversarial finding verification, proof-of-bug tests for Criticals, and an optional --fix mode that applies and commits its own findings (Claude Code only — needs the Workflow tool) | Reviewing a GitHub PR beyond what a single-pass review or a bot reviewer catches |
163
164
  | [macos-menubar-app](packages/software-development/macos-menubar-app/SKILL.md) | Builds a production-quality macOS menubar or notch app in SwiftUI — MenuBarExtra setup, sandbox entitlements, keyboard shortcuts, sound effects | Building a native macOS utility that lives in the menu bar or Dynamic Island notch |
164
165
  | [mvp-oneshot](packages/software-development/mvp-oneshot/SKILL.md) | Takes a rough product idea and produces a scoped, testable MVP plan and initial implementation in a single pass | Going from idea to a shippable one-week MVP without losing scope |
165
166
  | [obsidian-pr-sync](packages/software-development/obsidian-pr-sync/SKILL.md) | Fetches open GitHub PRs assigned to you or requesting review and writes a grouped age-sorted section into today's Obsidian daily note | Syncing GitHub review queue to Obsidian at the start of the day or on demand |
@@ -181,6 +182,10 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
181
182
  | [pr-to-green](packages/software-development/pr-to-green/SKILL.md) | Orchestrates a GitHub PR from first push to merge-ready: runs ci-fix-loop until checks are green, detects active AI review bots, runs qodoloop and coderabbitloop in sequence, and confirms zero unresolved threads | Driving a PR to merge-ready in one pass without manually chaining the fix loops |
182
183
  | [dependabot-triage](packages/software-development/dependabot-triage/SKILL.md) | Triages open Dependabot and Renovate PRs in bulk: classifies by risk tier, auto-approves safe patch bumps, flags breaking major upgrades for human review, and posts a digest | Clearing a backlog of dependency update PRs during a maintenance window |
183
184
  | [store-listing-copy](packages/software-development/store-listing-copy/SKILL.md) | Generates platform-validated App Store, Google Play, and Connect IQ store listing copy (title, subtitle, description, what's new, keywords) from a git changelog | Writing store copy before submitting to apple-store-submit or the garmin-watchface store workflow |
185
+ | [pr-finalize-complete](packages/software-development/pr-finalize-complete/SKILL.md) | Comprehensive PR finalization for branches that may already be partially addressed: checks each review comment's actual current status in code, distinguishes fixed vs. stale vs. still-present findings, verifies test coverage, and runs real lint/test gates | Confirming a PR is genuinely merge-ready when review tools show findings that may already be fixed |
186
+ | [morning-routine](packages/software-development/morning-routine/SKILL.md) | Runs the complete start-of-day setup in one pass: rolls over unfinished Obsidian tasks, syncs open GitHub PRs into today's daily note, and sweeps safe Dependabot patch bumps | Starting the workday by chaining obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage in sequence |
187
+ | [release-day](packages/software-development/release-day/SKILL.md) | Orchestrates a full release-day workflow for iOS, Android, or Garmin apps: verifies CI is green, generates a changelog, drafts store listing copy, triggers semantic-release or tags manually, waits for the build, and queues the App Store submission | Cutting a release from "code is ready" to "build submitted" in one orchestrated pass |
188
+ | [branch-cleanup](packages/software-development/branch-cleanup/SKILL.md) | Prunes stale git branches after a merge wave: deletes closed/merged remote branches, removes local tracking refs that no longer exist on the remote, and optionally cleans up merged local branches | Tidying up after a Dependabot triage batch merge or a sprint wind-down |
184
189
 
185
190
  ### Marketing (2)
186
191
 
@@ -205,7 +210,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
205
210
 
206
211
  | Skill | What it does | Use when |
207
212
  |-------|-------------|----------|
208
- | [garmin-watchface](packages/wearables/garmin-watchface/SKILL.md) | Builds, tests, screenshots, and publishes Garmin Connect IQ watch faces in Monkey C | Working on a Connect IQ watch face — layout that clips or overlaps, simulator screenshots, app settings, device support, or store submission |
213
+ | [garmin-watchface](packages/wearables/garmin-watchface/SKILL.md) | Designs, builds, tests, screenshots, and publishes Garmin Connect IQ watch faces in Monkey C | Working on a Connect IQ watch face — SVG design proposals, inspiration gathering, layout that clips or overlaps, simulator screenshots, app settings, device support, or store submission |
209
214
 
210
215
  ## How to use skills
211
216