@ericrisco/rsc 0.1.34 → 0.1.36
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.
- package/README.md +28 -2
- package/manifest.json +241 -2
- package/package.json +1 -1
- package/scripts/lib/domains.js +1 -0
- package/scripts/lib/recommend.js +4 -0
- package/skills/agent-eval/SKILL.md +1 -1
- package/skills/analyze/SKILL.md +1 -1
- package/skills/brand-voice/SKILL.md +1 -1
- package/skills/brand-voice/references/voice-guide-template.md +14 -0
- package/skills/building-agents/SKILL.md +2 -2
- package/skills/competitor-watch/SKILL.md +9 -4
- package/skills/competitor-watch/references/tracker-schema.md +19 -0
- package/skills/constitution/references/constitution-template.md +10 -0
- package/skills/content-engine/SKILL.md +1 -1
- package/skills/content-engine/references/brief-and-pipeline.md +15 -1
- package/skills/course-builder/references/grounding-and-scoping.md +23 -0
- package/skills/course-storytelling/references/learner-grounding.md +22 -2
- package/skills/decision-records/SKILL.md +14 -1
- package/skills/decision-records/references/templates.md +20 -0
- package/skills/design/references/brand-grounding.md +11 -1
- package/skills/game-design/SKILL.md +170 -0
- package/skills/game-design/evals/README.md +13 -0
- package/skills/game-design/evals/cases.yaml +47 -0
- package/skills/game-design/references/mechanics-and-loops.md +78 -0
- package/skills/game-design/references/playtesting-and-scope.md +58 -0
- package/skills/game-design/references/progression-and-economy.md +70 -0
- package/skills/game-storytelling/SKILL.md +159 -0
- package/skills/game-storytelling/evals/README.md +28 -0
- package/skills/game-storytelling/evals/cases.yaml +51 -0
- package/skills/game-storytelling/references/branching-and-state.md +134 -0
- package/skills/game-storytelling/references/dialogue-tools.md +117 -0
- package/skills/game-storytelling/references/environmental-storytelling.md +71 -0
- package/skills/gamedev-multiplayer/SKILL.md +250 -0
- package/skills/gamedev-multiplayer/evals/README.md +12 -0
- package/skills/gamedev-multiplayer/evals/cases.yaml +44 -0
- package/skills/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
- package/skills/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
- package/skills/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
- package/skills/gamedev-pathing/SKILL.md +242 -0
- package/skills/gamedev-pathing/evals/README.md +14 -0
- package/skills/gamedev-pathing/evals/cases.yaml +49 -0
- package/skills/gamedev-pathing/references/navmesh-workflow.md +110 -0
- package/skills/gamedev-pathing/references/search-algorithms.md +135 -0
- package/skills/gamedev-pathing/references/steering-and-avoidance.md +120 -0
- package/skills/gamedev-physics/SKILL.md +225 -0
- package/skills/gamedev-physics/evals/README.md +12 -0
- package/skills/gamedev-physics/evals/cases.yaml +54 -0
- package/skills/gamedev-physics/references/character-controllers.md +120 -0
- package/skills/gamedev-physics/references/determinism-and-queries.md +124 -0
- package/skills/gamedev-physics/references/layers-and-masks.md +115 -0
- package/skills/gamedev-shaders/SKILL.md +252 -0
- package/skills/gamedev-shaders/evals/README.md +14 -0
- package/skills/gamedev-shaders/evals/cases.yaml +45 -0
- package/skills/gamedev-shaders/references/effect-recipes.md +205 -0
- package/skills/gamedev-shaders/references/godot-shading-language.md +133 -0
- package/skills/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
- package/skills/gamedev-shipping/SKILL.md +236 -0
- package/skills/gamedev-shipping/evals/README.md +9 -0
- package/skills/gamedev-shipping/evals/cases.yaml +55 -0
- package/skills/gamedev-shipping/references/mobile-and-desktop.md +127 -0
- package/skills/gamedev-shipping/references/stores-and-ci.md +162 -0
- package/skills/gamedev-shipping/references/web-export-headers.md +140 -0
- package/skills/godot/SKILL.md +319 -0
- package/skills/godot/evals/README.md +13 -0
- package/skills/godot/evals/cases.yaml +50 -0
- package/skills/godot/references/export-and-testing.md +102 -0
- package/skills/godot/references/gdscript-style.md +84 -0
- package/skills/godot/references/godot3-to-4-traps.md +89 -0
- package/skills/godot/references/nodes-scenes-resources.md +109 -0
- package/skills/harness/SKILL.md +3 -3
- package/skills/harness/references/daily-curation-automation.md +8 -6
- package/skills/harness/references/obsidian-scaffolding.md +16 -9
- package/skills/harness/references/wiki-article-template.md +31 -14
- package/skills/harness/references/wiki-index-template.md +7 -3
- package/skills/harness/references/wiki-protocol.md +120 -54
- package/skills/harness/references/wiki-worklog-template.md +5 -1
- package/skills/instagram-api/SKILL.md +8 -1
- package/skills/instagram-api/references/insights-metrics.md +8 -1
- package/skills/knowledge-ops/SKILL.md +9 -9
- package/skills/knowledge-ops/evals/cases.yaml +1 -1
- package/skills/knowledge-ops/references/gardening-playbook.md +18 -8
- package/skills/level-design/SKILL.md +175 -0
- package/skills/level-design/evals/README.md +35 -0
- package/skills/level-design/evals/cases.yaml +58 -0
- package/skills/level-design/references/blockout-to-art.md +118 -0
- package/skills/level-design/references/guidance-and-readability.md +152 -0
- package/skills/level-design/references/pacing-and-encounters.md +142 -0
- package/skills/linkedin-api/SKILL.md +10 -1
- package/skills/linkedin-strategy/SKILL.md +12 -0
- package/skills/linkedin-strategy/references/wiki-records.md +27 -1
- package/skills/marketing/references/brand-grounding.md +22 -2
- package/skills/medium-strategy/SKILL.md +12 -0
- package/skills/medium-strategy/references/wiki-records.md +39 -1
- package/skills/medium-writing/SKILL.md +19 -0
- package/skills/plan/references/plan-template.md +12 -1
- package/skills/roast-me/tools/adapters/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/base.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/claude.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/codex.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/gemini.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/registry.cpython-312.pyc +0 -0
- package/skills/shortform-packaging/SKILL.md +7 -2
- package/skills/shortform-packaging/references/package-templates.md +13 -2
- package/skills/shortform-strategy/SKILL.md +30 -6
- package/skills/shortform-strategy/references/learning-loop-template.md +9 -1
- package/skills/specify/references/spec-template.md +12 -1
- package/skills/tiktok-api/SKILL.md +6 -2
- package/skills/tiktok-api/references/wiki-schema.md +38 -4
- package/skills/unity/SKILL.md +282 -0
- package/skills/unity/evals/README.md +8 -0
- package/skills/unity/evals/cases.yaml +43 -0
- package/skills/unity/references/build-and-platforms.md +65 -0
- package/skills/unity/references/input-system.md +102 -0
- package/skills/unity/references/lifecycle-deep-dive.md +75 -0
- package/skills/unreal/SKILL.md +270 -0
- package/skills/unreal/evals/README.md +12 -0
- package/skills/unreal/evals/cases.yaml +45 -0
- package/skills/unreal/references/blueprint-cpp-parity.md +109 -0
- package/skills/unreal/references/gameplay-framework.md +95 -0
- package/skills/unreal/references/packaging.md +83 -0
- package/skills/verify/SKILL.md +11 -1
- package/skills/youtube-api/SKILL.md +7 -2
- package/skills/youtube-api/references/wiki-schema.md +25 -4
- package/skills/youtube-packaging/SKILL.md +10 -2
- package/skills/youtube-packaging/references/description-and-chapters.md +70 -2
- package/skills/youtube-strategy/SKILL.md +9 -2
- package/skills/youtube-strategy/references/wiki-records.md +39 -6
- package/skills/youtube-strategy/scripts/verify.sh +4 -0
- package/skills/youtube-thumbnails/SKILL.md +10 -5
- package/skills/youtube-thumbnails/references/experiment-log-format.md +28 -2
|
@@ -215,10 +215,15 @@ A pull that prints to stdout and vanishes is wasted. **Every pull appends a date
|
|
|
215
215
|
videos/<VIDEO_ID>.md # per-video running log, newest entry on top
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
Per-pull entry template:
|
|
218
|
+
Per-pull entry template (OKF v0.1: non-empty `type` + the domain keys siblings parse):
|
|
219
219
|
|
|
220
220
|
```markdown
|
|
221
221
|
---
|
|
222
|
+
type: youtube-metrics
|
|
223
|
+
title: Channel snapshot 2026-05-31
|
|
224
|
+
description: Channel KPIs, traffic and retention for 2026-05-01..2026-05-31.
|
|
225
|
+
tags: [youtube, channel-snapshot]
|
|
226
|
+
timestamp: 2026-05-31T00:00:00Z
|
|
222
227
|
date: 2026-05-31
|
|
223
228
|
range: 2026-05-01..2026-05-31
|
|
224
229
|
channel: MINE
|
|
@@ -237,7 +242,7 @@ Sharp drop 0.00→0.06 (intro), recovers, second dip ~0.55.
|
|
|
237
242
|
avg_view_pct +2.1pts; SUGGESTED share up 6pts after the Ep.13 packaging change.
|
|
238
243
|
```
|
|
239
244
|
|
|
240
|
-
Rule: **append, never overwrite.** The feedback log *is* the value — overwriting yesterday's snapshot destroys the trend the siblings need. Exact file tree, naming, and how siblings read the log: `references/wiki-schema.md`.
|
|
245
|
+
Rule: **append, never overwrite.** The feedback log *is* the value — overwriting yesterday's snapshot destroys the trend the siblings need. `02-DOCS/wiki/` is an OKF v0.1 bundle: keep the domain keys (`date`, `range`, `channel`, `source`) the siblings parse, add `type`/`timestamp` alongside them, use standard markdown links (never `[[wikilinks]]`), and leave the reserved `index.md` frontmatter-free. Exact file tree, naming, per-video log shape, and how siblings read the log: `references/wiki-schema.md`.
|
|
241
246
|
|
|
242
247
|
## 7. Quota & failure math
|
|
243
248
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
The point of this skill is not to print stats once; it is to grow a **feedback log** the strategy/packaging siblings can read. The log lives under `02-DOCS/wiki/youtube/` and every pull **appends** to it.
|
|
4
4
|
|
|
5
|
+
`02-DOCS/wiki/` is an **OKF v0.1** bundle, so every non-reserved `.md` file written here carries YAML frontmatter with a non-empty `type`. This skill writes `type: youtube-metrics` on its snapshots/logs and keeps the domain keys (`date`, `range`, `channel`, `source`) that the strategy/packaging siblings parse literally — `type` and `timestamp` are added *alongside* them, never replacing them. OKF allows arbitrary extra keys, so the shared keys stay stable. Links between wiki files are standard markdown links (`[text](./file.md)`), never Obsidian wikilinks.
|
|
6
|
+
|
|
5
7
|
## File tree
|
|
6
8
|
|
|
7
9
|
```text
|
|
@@ -24,6 +26,11 @@ Naming:
|
|
|
24
26
|
|
|
25
27
|
```markdown
|
|
26
28
|
---
|
|
29
|
+
type: youtube-metrics
|
|
30
|
+
title: Channel snapshot 2026-05-31
|
|
31
|
+
description: Channel KPIs and traffic for 2026-05-01..2026-05-31.
|
|
32
|
+
tags: [youtube, channel-snapshot]
|
|
33
|
+
timestamp: 2026-05-31T00:00:00Z
|
|
27
34
|
date: 2026-05-31
|
|
28
35
|
range: 2026-05-01..2026-05-31
|
|
29
36
|
channel: MINE
|
|
@@ -40,9 +47,20 @@ BROWSE 44% · SUGGESTED 31% · YT_SEARCH 12%
|
|
|
40
47
|
avg_view_pct +2.1pts; SUGGESTED share +6pts after the Ep.13 packaging change.
|
|
41
48
|
```
|
|
42
49
|
|
|
43
|
-
## Per-video
|
|
50
|
+
## Per-video log file — `videos/<VIDEO_ID>.md`
|
|
51
|
+
|
|
52
|
+
The file carries frontmatter once (at the top); each new dated block is **prepended directly under the frontmatter** (newest entry first — this is an append-log, past entries are immutable). On the first write, create the frontmatter; on every later pull, refresh `timestamp` and insert the new block above the previous newest one. Keep the domain key `channel` so siblings can parse it.
|
|
44
53
|
|
|
45
54
|
```markdown
|
|
55
|
+
---
|
|
56
|
+
type: youtube-metrics
|
|
57
|
+
title: Video log — dQw4w9WgXcQ
|
|
58
|
+
description: Per-pull KPI/traffic/retention log for video dQw4w9WgXcQ, newest entry first.
|
|
59
|
+
tags: [youtube, video-log]
|
|
60
|
+
timestamp: 2026-05-31T00:00:00Z
|
|
61
|
+
channel: MINE
|
|
62
|
+
source: youtube-analytics-api-v2
|
|
63
|
+
---
|
|
46
64
|
## 2026-05-31 (range 2026-05-01..2026-05-31)
|
|
47
65
|
views: 8,902 | avg_view_pct: 41.0% | ctr(studio): 6.2%
|
|
48
66
|
traffic: SUGGESTED 52% · BROWSE 23% · YT_SEARCH 9%
|
|
@@ -52,10 +70,12 @@ note: held suggested-traffic share week over week.
|
|
|
52
70
|
|
|
53
71
|
## index.md
|
|
54
72
|
|
|
73
|
+
OKF **reserved file**: a directory listing, so it carries **no frontmatter**. Point at the latest snapshot and tracked videos with standard markdown links (never wikilinks).
|
|
74
|
+
|
|
55
75
|
```markdown
|
|
56
76
|
# YouTube channel feedback log
|
|
57
|
-
latest snapshot: channel-2026-05-31.md
|
|
58
|
-
videos tracked: dQw4w9WgXcQ, abc123XYZ
|
|
77
|
+
latest snapshot: [channel-2026-05-31.md](./channel-2026-05-31.md)
|
|
78
|
+
videos tracked: [dQw4w9WgXcQ](./videos/dQw4w9WgXcQ.md), [abc123XYZ](./videos/abc123XYZ.md)
|
|
59
79
|
|
|
60
80
|
## Open questions for strategy/packaging
|
|
61
81
|
- Intro drop-off at 0.06 recurs across last 3 uploads — packaging or pacing?
|
|
@@ -67,4 +87,5 @@ videos tracked: dQw4w9WgXcQ, abc123XYZ
|
|
|
67
87
|
1. **Append, never overwrite.** A snapshot is a point in time; deleting it erases the trend. The history is the deliverable.
|
|
68
88
|
2. **One source of truth for derived numbers.** Store what the API returned. Mark Studio-sourced values explicitly (`ctr(studio)`) so a reader knows it was not API-derived.
|
|
69
89
|
3. **No interpretation in the log beyond a one-line "what changed."** Deeper reading ("we should change the hook") is the strategy/packaging sibling's job — this skill records, it does not prescribe.
|
|
70
|
-
4. **Siblings read this tree.** Keep frontmatter keys stable (`date`, `range`, `channel`, `source`) so a sibling can parse the latest snapshot without guessing.
|
|
90
|
+
4. **Siblings read this tree.** Keep the domain frontmatter keys stable (`date`, `range`, `channel`, `source`) so a sibling can parse the latest snapshot without guessing. The OKF keys (`type`, `title`, `description`, `tags`, `timestamp`) are added alongside them, never instead of them — all four youtube skills share this same key set and the same markdown-link style.
|
|
91
|
+
5. **OKF-conformant wiki content.** Every non-reserved `.md` here has a non-empty `type` (`youtube-metrics`). `index.md` is the lone reserved file (no frontmatter, a directory listing). Per-video logs are newest-first append-logs with ISO 8601 dates; past dated blocks are never edited. Cross-references use standard markdown links (`[text](./file.md)`), never `[[wikilinks]]`.
|
|
@@ -46,7 +46,13 @@ produce generic copy in someone else's voice.
|
|
|
46
46
|
hook, the keyword, and the audience all at once.)
|
|
47
47
|
|
|
48
48
|
Persist what you write under `02-DOCS/wiki/youtube/` (the package) and raw test
|
|
49
|
-
results under `02-DOCS/raw/youtube/`.
|
|
49
|
+
results under `02-DOCS/raw/youtube/`. `02-DOCS/wiki/` is an **OKF v0.1** bundle:
|
|
50
|
+
every package or log file persisted there carries YAML frontmatter with a
|
|
51
|
+
non-empty `type` (`youtube-package`) plus the OKF surface (`title`, `description`,
|
|
52
|
+
`tags`, `timestamp`) shared with the strategy/thumbnail/api siblings, and all
|
|
53
|
+
cross-references use standard markdown links — never `[[wikilinks]]`. The OKF
|
|
54
|
+
frontmatter shape for the persisted package and log is in
|
|
55
|
+
[references/description-and-chapters.md](references/description-and-chapters.md).
|
|
50
56
|
|
|
51
57
|
## The title
|
|
52
58
|
|
|
@@ -158,7 +164,9 @@ carry forward what won as priors: if numeric titles beat curiosity titles 3 test
|
|
|
158
164
|
running on this channel, the new set leans numeric. If a hashtag set tanked, drop
|
|
159
165
|
it.
|
|
160
166
|
|
|
161
|
-
**Append after you test.** One row per test
|
|
167
|
+
**Append after you test.** One row per test, into `02-DOCS/wiki/youtube/packaging-log.md`
|
|
168
|
+
(OKF v0.1: file-level `type: youtube-package` frontmatter at the top, the table
|
|
169
|
+
below it, newest rows appended, past rows immutable):
|
|
162
170
|
|
|
163
171
|
```text
|
|
164
172
|
| date | video | title set tried | winner | CTR | impressions | avg view duration | note |
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Description, chapters & feedback-log formats
|
|
2
2
|
|
|
3
|
-
Offloaded depth for [../SKILL.md](../SKILL.md).
|
|
3
|
+
Offloaded depth for [../SKILL.md](../SKILL.md). Four things live here: the full
|
|
4
4
|
description template with a filled example, the chapter format spec with the four
|
|
5
|
-
failure cases worked through,
|
|
5
|
+
failure cases worked through, the feedback-log entry schema with a filled row, and
|
|
6
|
+
the OKF v0.1 frontmatter shape for the package and log when persisted into the wiki.
|
|
6
7
|
|
|
7
8
|
## 1. Description template
|
|
8
9
|
|
|
@@ -110,6 +111,31 @@ should be short and scannable — it doubles as a search jump-to target.
|
|
|
110
111
|
One markdown table in `02-DOCS/wiki/youtube/packaging-log.md`. One row per A/B
|
|
111
112
|
test, appended when Test & Compare resolves (~2 weeks).
|
|
112
113
|
|
|
114
|
+
`02-DOCS/wiki/` is an **OKF v0.1** bundle, so `packaging-log.md` carries
|
|
115
|
+
file-level frontmatter once at the top (a non-empty `type` plus the OKF surface
|
|
116
|
+
shared across all four youtube skills), then the table below it. Refresh
|
|
117
|
+
`timestamp` when you append a row; past rows are immutable.
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
---
|
|
121
|
+
type: youtube-package
|
|
122
|
+
title: Packaging feedback log
|
|
123
|
+
description: One row per Test & Compare result — title sets tried, winner, and the transferable lesson.
|
|
124
|
+
tags: [youtube, packaging-log, ab-testing]
|
|
125
|
+
timestamp: 2026-05-28T00:00:00Z
|
|
126
|
+
---
|
|
127
|
+
# Packaging feedback log
|
|
128
|
+
|
|
129
|
+
| date | video | title set tried | winner | CTR | impressions | avg view duration | note |
|
|
130
|
+
|------|-------|-----------------|--------|-----|-------------|-------------------|------|
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
> Note: this frontmatter is for the **persisted wiki file**. The package *draft*
|
|
134
|
+
> you point `scripts/verify.sh` at uses labeled sections (`Titles:`,
|
|
135
|
+
> `Description:`, …) and stays frontmatter-free so the linter parses it cleanly.
|
|
136
|
+
|
|
137
|
+
Column meanings:
|
|
138
|
+
|
|
113
139
|
| Column | Meaning |
|
|
114
140
|
|---|---|
|
|
115
141
|
| `date` | resolution date of the test (YYYY-MM-DD) |
|
|
@@ -133,3 +159,45 @@ The `note` column is the point: it turns one data row into a prior the next
|
|
|
133
159
|
package carries forward. Always grade the winner by watched-time-per-impression
|
|
134
160
|
(reflected in CTR *and* avg view duration together), never CTR alone — a high-CTR /
|
|
135
161
|
low-duration row is a warning, not a win.
|
|
162
|
+
|
|
163
|
+
## 4. Persisted package — the wiki file
|
|
164
|
+
|
|
165
|
+
When you persist a finished package under `02-DOCS/wiki/youtube/` (e.g.
|
|
166
|
+
`packages/<video-slug>.md`), wrap it in OKF v0.1 frontmatter — a non-empty `type`
|
|
167
|
+
plus the shared OKF surface — so the wiki bundle stays conformant and the
|
|
168
|
+
strategy/thumbnail siblings can read it. The body holds the human-readable
|
|
169
|
+
package; cross-references use standard markdown links, never `[[wikilinks]]`.
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
---
|
|
173
|
+
type: youtube-package
|
|
174
|
+
title: Package — Learn Python in 2026 (beginner tutorial)
|
|
175
|
+
description: Title set, description, tags, hashtags and chapters for the 12-minute beginner Python tutorial.
|
|
176
|
+
tags: [youtube, packaging]
|
|
177
|
+
timestamp: 2026-05-28T00:00:00Z
|
|
178
|
+
---
|
|
179
|
+
# Package — Learn Python in 2026 (beginner tutorial)
|
|
180
|
+
|
|
181
|
+
## Titles (A/B set)
|
|
182
|
+
- Learn Python in 2026: 12-Min Beginner Tutorial
|
|
183
|
+
- Python in 12 Minutes (Total Beginner)
|
|
184
|
+
- I Taught a Beginner Python in 12 Min
|
|
185
|
+
|
|
186
|
+
## Description
|
|
187
|
+
<above-fold line + body + links + hashtag line, per §1>
|
|
188
|
+
|
|
189
|
+
## Tags
|
|
190
|
+
python, learn python, python tutorial, python for beginners, …
|
|
191
|
+
|
|
192
|
+
## Hashtags
|
|
193
|
+
#Python #LearnToCode #ProgrammingForBeginners
|
|
194
|
+
|
|
195
|
+
## Chapters
|
|
196
|
+
00:00 Intro — what you'll build
|
|
197
|
+
…
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
> The `scripts/verify.sh` linter runs on the package **draft** (labeled sections,
|
|
201
|
+
> no frontmatter). The persisted wiki file adds the frontmatter above the same
|
|
202
|
+
> body — do not feed the frontmatter'd wiki copy to the linter, since its `tags:`
|
|
203
|
+
> frontmatter key would be read as the Tags section.
|
|
@@ -128,14 +128,21 @@ Read CTR (>~6% is healthy for new channels) and AVD/retention from the wiki to c
|
|
|
128
128
|
A strategy session that does not write back does not compound — the next session starts from zero. On exit, append a **dated decision record** under `02-DOCS/wiki/youtube/` and, when reviewing, a **what-worked** entry tied to specific videos/playlists. Minimal record inline; full templates in `references/wiki-records.md`:
|
|
129
129
|
|
|
130
130
|
```markdown
|
|
131
|
+
---
|
|
132
|
+
type: youtube-strategy-record
|
|
133
|
+
title: Niche down to budget mechanical keyboards for programmers
|
|
134
|
+
description: Reposition from broad tech reviews to budget mechanical keyboards for programmers; hold 2/wk cadence.
|
|
135
|
+
tags: [youtube, strategy-decision, positioning]
|
|
136
|
+
timestamp: 2026-06-02T00:00:00Z
|
|
137
|
+
---
|
|
131
138
|
# 2026-06-02 — Niche down to budget mechanical keyboards for programmers
|
|
132
|
-
- Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews (
|
|
139
|
+
- Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews ([what-worked.md](./what-worked.md))
|
|
133
140
|
- Decision: reposition from "tech reviews" to "budget mechanical keyboards for programmers"; cadence 2/wk held
|
|
134
141
|
- Bets on metric: AVD on keyboard videos (currently ~48%) holding while non-keyboard topics are dropped
|
|
135
142
|
- Review date: 2026-09-02
|
|
136
143
|
```
|
|
137
144
|
|
|
138
|
-
Every record names **the metric it is betting on** and a **review date**. A decision with no metric is an opinion, not a bet you can later check. Run `scripts/verify.sh 02-DOCS/wiki/youtube/` after writing to confirm the records are structurally complete.
|
|
145
|
+
`02-DOCS/wiki/` is an OKF v0.1 bundle: every record carries a non-empty `type` (`youtube-strategy-record`) above the body, and cross-references use standard markdown links (never `[[wikilinks]]`). Every record names **the metric it is betting on** and a **review date**. A decision with no metric is an opinion, not a bet you can later check. Run `scripts/verify.sh 02-DOCS/wiki/youtube/` after writing to confirm the records are structurally complete (date, `Decision:`, metric, and `type`). Full templates in `references/wiki-records.md`.
|
|
139
146
|
|
|
140
147
|
## Anti-patterns
|
|
141
148
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
This is where the channel's strategy memory lives. The skill READs it on entry and WRITEs to it on exit so sessions compound. Keep it append-only.
|
|
4
4
|
|
|
5
|
+
`02-DOCS/wiki/` is an **OKF v0.1** bundle, so every `.md` record this skill writes carries YAML frontmatter with a non-empty `type` (`youtube-strategy-record`) plus the OKF surface (`title`, `description`, `tags`, `timestamp`). These are shared, identically, across all four youtube skills. The strategy-specific body fields the loop and `verify.sh` rely on (`Decision:`, `Bets on metric:`, the date) stay in the body exactly as before — the frontmatter is purely additive. All cross-references use standard markdown links (`[text](./file.md)`), never `[[wikilinks]]`.
|
|
6
|
+
|
|
5
7
|
## File layout under `02-DOCS/wiki/youtube/`
|
|
6
8
|
|
|
7
9
|
```text
|
|
@@ -28,6 +30,13 @@ mkdir -p 02-DOCS/wiki/youtube/decisions
|
|
|
28
30
|
`positioning.md` stub:
|
|
29
31
|
|
|
30
32
|
```markdown
|
|
33
|
+
---
|
|
34
|
+
type: youtube-strategy-record
|
|
35
|
+
title: Channel positioning
|
|
36
|
+
description: The channel's current niche, who-it's-for, and three-factor rationale.
|
|
37
|
+
tags: [youtube, positioning]
|
|
38
|
+
timestamp: 2026-06-02T00:00:00Z
|
|
39
|
+
---
|
|
31
40
|
# Channel positioning
|
|
32
41
|
- Niche: <to define — narrow 2-3 levels, not an industry>
|
|
33
42
|
- Who it's for: <specific viewer>
|
|
@@ -37,11 +46,18 @@ mkdir -p 02-DOCS/wiki/youtube/decisions
|
|
|
37
46
|
|
|
38
47
|
## Decision-record template
|
|
39
48
|
|
|
40
|
-
Every decision file carries these fields. The metric line is mandatory — a decision with no metric is an opinion, not a checkable bet.
|
|
49
|
+
Every decision file carries the frontmatter (`type` + OKF surface) **and** these body fields. The metric line is mandatory — a decision with no metric is an opinion, not a checkable bet. The body fields (`Decision:`, `Bets on metric:`, the date) are what `verify.sh` lints, so keep them verbatim; the frontmatter sits above them.
|
|
41
50
|
|
|
42
51
|
```markdown
|
|
52
|
+
---
|
|
53
|
+
type: youtube-strategy-record
|
|
54
|
+
title: <one-line decision title>
|
|
55
|
+
description: <one-sentence summary of the decision and what it bets on>
|
|
56
|
+
tags: [youtube, strategy-decision]
|
|
57
|
+
timestamp: <YYYY-MM-DDTHH:MM:SSZ>
|
|
58
|
+
---
|
|
43
59
|
# <YYYY-MM-DD> — <one-line decision title>
|
|
44
|
-
- Context read: <what the wiki/data said that drove this; cite files>
|
|
60
|
+
- Context read: <what the wiki/data said that drove this; cite files with markdown links>
|
|
45
61
|
- Decision: <positioning / cadence / series choice, stated concretely>
|
|
46
62
|
- Bets on metric: <the single metric this decision expects to move, with current value>
|
|
47
63
|
- Review date: <YYYY-MM-DD — when to check whether the bet paid off>
|
|
@@ -50,8 +66,15 @@ Every decision file carries these fields. The metric line is mandatory — a dec
|
|
|
50
66
|
Worked example:
|
|
51
67
|
|
|
52
68
|
```markdown
|
|
69
|
+
---
|
|
70
|
+
type: youtube-strategy-record
|
|
71
|
+
title: Niche down to budget mechanical keyboards for programmers
|
|
72
|
+
description: Reposition from broad tech reviews to budget mechanical keyboards for programmers, holding 2/wk cadence.
|
|
73
|
+
tags: [youtube, strategy-decision, positioning]
|
|
74
|
+
timestamp: 2026-06-02T00:00:00Z
|
|
75
|
+
---
|
|
53
76
|
# 2026-06-02 — Niche down to budget mechanical keyboards for programmers
|
|
54
|
-
- Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews (what-worked.md)
|
|
77
|
+
- Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews ([what-worked.md](../what-worked.md))
|
|
55
78
|
- Decision: reposition from "tech reviews" to "budget mechanical keyboards for programmers"; hold cadence 2/wk
|
|
56
79
|
- Bets on metric: AVD on keyboard videos (~48%) holds while non-keyboard topics are dropped
|
|
57
80
|
- Review date: 2026-09-02
|
|
@@ -59,15 +82,24 @@ Worked example:
|
|
|
59
82
|
|
|
60
83
|
## What-worked template
|
|
61
84
|
|
|
62
|
-
|
|
85
|
+
`what-worked.md` carries the file-level frontmatter once at the top; below it, **append one entry per observed win or loss** (append-only, ISO 8601 dates, past entries immutable), tied to a real asset so future sessions can pattern-match. Refresh `timestamp` when you append.
|
|
63
86
|
|
|
64
87
|
```markdown
|
|
88
|
+
---
|
|
89
|
+
type: youtube-strategy-record
|
|
90
|
+
title: What worked — wins and losses log
|
|
91
|
+
description: Running log of channel wins/losses tied to specific videos and playlists.
|
|
92
|
+
tags: [youtube, what-worked]
|
|
93
|
+
timestamp: 2026-05-20T00:00:00Z
|
|
94
|
+
---
|
|
95
|
+
# What worked
|
|
96
|
+
|
|
65
97
|
## <YYYY-MM-DD> — <video or playlist id/title>
|
|
66
98
|
- Metric: <CTR / AVD / session lift, with the number>
|
|
67
99
|
- Lesson: <the transferable insight — what to do more or less of>
|
|
68
100
|
```
|
|
69
101
|
|
|
70
|
-
Example:
|
|
102
|
+
Example entry (appended under the frontmatter + heading):
|
|
71
103
|
|
|
72
104
|
```markdown
|
|
73
105
|
## 2026-05-20 — "I Tested 5 Sub-$20 Keyboards" (vid abc123)
|
|
@@ -82,5 +114,6 @@ Example:
|
|
|
82
114
|
1. The target `02-DOCS/wiki/youtube/` directory exists.
|
|
83
115
|
2. At least one decision record is present (a `decisions/*.md` file or a `decisions.md` log).
|
|
84
116
|
3. Each decision record contains the three required signals: a date, a `Decision:` line, and a named metric/bet (a `Bets on metric:` line or equivalent `metric`/`bet` field).
|
|
117
|
+
4. Each decision record carries a non-empty `type:` frontmatter field (the OKF v0.1 conformance check). A record with no `type` is a hard failure.
|
|
85
118
|
|
|
86
|
-
A record missing the metric field is a hard failure with a clear message. An empty or missing target reports cleanly and exits 0 — no false failure on a fresh channel.
|
|
119
|
+
A record missing the metric or `type` field is a hard failure with a clear message. An empty or missing target reports cleanly and exits 0 — no false failure on a fresh channel. The `type` check is additive: it does not touch the existing date/`Decision:`/metric checks.
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
# - a named metric/bet (a "Bets on metric:" / "metric" / "bet" field)
|
|
14
14
|
# A record missing the metric/bet field is a HARD FAILURE — a decision with
|
|
15
15
|
# no metric is an opinion, not a checkable bet.
|
|
16
|
+
# 4. Each decision record carries a non-empty `type:` frontmatter field
|
|
17
|
+
# (OKF v0.1 conformance). A record with no `type` is a HARD FAILURE.
|
|
16
18
|
#
|
|
17
19
|
# Missing date or Decision line is also a hard failure. A missing/empty target
|
|
18
20
|
# (a fresh channel with no wiki yet) is reported and exits 0 — no false failure.
|
|
@@ -105,6 +107,8 @@ while IFS= read -r rec; do
|
|
|
105
107
|
grep -Eq "$DATE_RE" "$rec" || miss="$miss date"
|
|
106
108
|
grep -Eiq '^[[:space:]-]*Decision:' "$rec" || miss="$miss decision-line"
|
|
107
109
|
grep -Eiq '(bets on metric:|metric|bet:)' "$rec" || miss="$miss metric/bet"
|
|
110
|
+
# OKF v0.1: a non-empty `type:` frontmatter field is required.
|
|
111
|
+
grep -Eiq '^[[:space:]]*type:[[:space:]]*[^[:space:]]' "$rec" || miss="$miss type"
|
|
108
112
|
|
|
109
113
|
if [ -n "$miss" ]; then
|
|
110
114
|
fail "$rec: missing required field(s):$miss"
|
|
@@ -125,17 +125,22 @@ the video doesn't cash. That is a promise problem, not an image problem.
|
|
|
125
125
|
## The feedback loop (wiki)
|
|
126
126
|
|
|
127
127
|
Every test result goes to the channel wiki. Exact path:
|
|
128
|
-
`02-DOCS/wiki/youtube/`.
|
|
128
|
+
`02-DOCS/wiki/youtube/`. `02-DOCS/wiki/` is an **OKF v0.1** bundle: both files
|
|
129
|
+
below carry file-level frontmatter with a non-empty `type` (`thumbnail-experiment`)
|
|
130
|
+
plus the OKF surface (`title`, `description`, `tags`, `timestamp`) shared with the
|
|
131
|
+
api/strategy/packaging siblings, and cross-references use standard markdown links,
|
|
132
|
+
never `[[wikilinks]]`.
|
|
129
133
|
|
|
130
|
-
**Log file** — `thumbnail-experiments.md`, one row per
|
|
134
|
+
**Log file** — `thumbnail-experiments.md`, frontmatter at the top then one row per
|
|
135
|
+
test (append-only, ISO 8601 dates, past rows immutable):
|
|
131
136
|
|
|
132
137
|
```text
|
|
133
138
|
| date | video | variants | axis tested | winner | CTR | watch-time share | note |
|
|
134
139
|
```
|
|
135
140
|
|
|
136
|
-
**Derived file** — `thumbnail-patterns.md`,
|
|
137
|
-
channel (e.g. "faces beat objects 4/5 tests", "no-text
|
|
138
|
-
update this after each logged test.
|
|
141
|
+
**Derived file** — `thumbnail-patterns.md`, frontmatter at the top then a running
|
|
142
|
+
table of what wins on THIS channel (e.g. "faces beat objects 4/5 tests", "no-text
|
|
143
|
+
wins on tutorials"). You update this after each logged test.
|
|
139
144
|
|
|
140
145
|
**Next-concept rule:** the next thumbnail keeps the winning level of every axis
|
|
141
146
|
already settled by the log, and tests the next unsettled axis. You only re-test a
|
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
The wiki layout, schema, filled example, and pattern-mining heuristic for the
|
|
4
4
|
feedback loop in SKILL.md. Everything lives under `02-DOCS/wiki/youtube/`.
|
|
5
5
|
|
|
6
|
+
`02-DOCS/wiki/` is an **OKF v0.1** bundle, so both files below carry file-level
|
|
7
|
+
YAML frontmatter with a non-empty `type` (`thumbnail-experiment`) plus the OKF
|
|
8
|
+
surface (`title`, `description`, `tags`, `timestamp`) — the same shared key set the
|
|
9
|
+
api/strategy/packaging siblings use. The frontmatter sits once at the top of each
|
|
10
|
+
file, above the table. Refresh `timestamp` when you append/rewrite. Any
|
|
11
|
+
cross-reference uses a standard markdown link (`[text](./file.md)`), never an
|
|
12
|
+
Obsidian `[[wikilink]]`.
|
|
13
|
+
|
|
6
14
|
## Files
|
|
7
15
|
|
|
8
16
|
- `thumbnail-experiments.md` — append-only log, one row per Test & Compare run.
|
|
@@ -11,7 +19,18 @@ feedback loop in SKILL.md. Everything lives under `02-DOCS/wiki/youtube/`.
|
|
|
11
19
|
|
|
12
20
|
## `thumbnail-experiments.md` schema
|
|
13
21
|
|
|
14
|
-
|
|
22
|
+
File-level frontmatter once at the top, then the append-only table below it:
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
---
|
|
26
|
+
type: thumbnail-experiment
|
|
27
|
+
title: Thumbnail experiments log
|
|
28
|
+
description: One row per Test & Compare run — variants, axis tested, winner, and the takeaway.
|
|
29
|
+
tags: [youtube, thumbnails, ab-testing]
|
|
30
|
+
timestamp: 2026-06-01T00:00:00Z
|
|
31
|
+
---
|
|
32
|
+
# Thumbnail experiments
|
|
33
|
+
|
|
15
34
|
| date | video | variants | axis tested | winner | CTR | watch-time share | note |
|
|
16
35
|
```
|
|
17
36
|
|
|
@@ -38,7 +57,14 @@ feedback loop in SKILL.md. Everything lives under `02-DOCS/wiki/youtube/`.
|
|
|
38
57
|
|
|
39
58
|
## `thumbnail-patterns.md` shape
|
|
40
59
|
|
|
41
|
-
```
|
|
60
|
+
```markdown
|
|
61
|
+
---
|
|
62
|
+
type: thumbnail-experiment
|
|
63
|
+
title: What wins on this channel
|
|
64
|
+
description: Derived summary of the settled thumbnail axes and their confidence.
|
|
65
|
+
tags: [youtube, thumbnails, patterns]
|
|
66
|
+
timestamp: 2026-06-01T00:00:00Z
|
|
67
|
+
---
|
|
42
68
|
# What wins on this channel
|
|
43
69
|
|
|
44
70
|
| axis | settled winner | evidence | confidence |
|