@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
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Pacing & encounters — rhythm, arenas, and teaching through space
|
|
2
|
+
|
|
3
|
+
A level is a piece of music, not a list of rooms. This reference covers the
|
|
4
|
+
intensity graph, the breather, the difficulty curve, the encounter template, the
|
|
5
|
+
introduce→develop→twist→combine teaching pattern, and arena-shape design.
|
|
6
|
+
|
|
7
|
+
## The intensity graph
|
|
8
|
+
|
|
9
|
+
Plot intended intensity (danger + cognitive load + stimulus) against time for
|
|
10
|
+
the whole level. The target shape is a **sawtooth trending upward**: a peak
|
|
11
|
+
(combat, chase, platforming gauntlet, tense stealth), a sharp drop to a valley
|
|
12
|
+
(a breather), then a higher peak. Overall the line climbs, ending on the level's
|
|
13
|
+
hardest, most spectacular moment.
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
intensity
|
|
17
|
+
^ ___/\ <- climax (hardest, last)
|
|
18
|
+
| ___/\ ___/\ /
|
|
19
|
+
| __/\ / \ __/\ / \___/
|
|
20
|
+
| __/ \/ \__/ \/ <- breathers (valleys)
|
|
21
|
+
+---------------------------------------------> time
|
|
22
|
+
intro peak rest peak rest build climax
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Two failure shapes to avoid:
|
|
26
|
+
|
|
27
|
+
- **Flat-high** — sustained maximum intensity. The player fatigues and the peaks
|
|
28
|
+
stop reading as peaks; it flattens into undifferentiated noise. This is the
|
|
29
|
+
most common "my level is exhausting / boring despite lots of action" cause.
|
|
30
|
+
- **Flat-low** — long stretches with no tension or stimulus. Reads as padding
|
|
31
|
+
and boredom even if each individual moment is competent.
|
|
32
|
+
|
|
33
|
+
Draw this graph *before* building encounters; it tells you where fights go and
|
|
34
|
+
how long the gaps between them should be.
|
|
35
|
+
|
|
36
|
+
## The breather (safe room)
|
|
37
|
+
|
|
38
|
+
After each peak, a valley: a **safe room** with no threat, low stimulus, and
|
|
39
|
+
usually a save point and/or restock. The breather does three jobs:
|
|
40
|
+
|
|
41
|
+
1. **Lets adrenaline drop** so the next peak spikes instead of blending in.
|
|
42
|
+
(Halo's cadence is often described as "thirty seconds of fun" on repeat — the
|
|
43
|
+
calm between is what makes the fun read.)
|
|
44
|
+
2. **Rewards observation** — a quiet room is where lore, a secret, or a vista
|
|
45
|
+
lands, because the player has attention to spare.
|
|
46
|
+
3. **Sets up the next escalation** — telegraph what's coming (a locked blast
|
|
47
|
+
door, distant sound, a corpse) so the next peak feels earned, not random.
|
|
48
|
+
|
|
49
|
+
Vary breather length with the peak that preceded it: a brutal fight earns a
|
|
50
|
+
longer rest; a light skirmish gets a short beat.
|
|
51
|
+
|
|
52
|
+
## Difficulty curve within a level
|
|
53
|
+
|
|
54
|
+
The macro trend is up, but it **resets at checkpoints** — the sawtooth again.
|
|
55
|
+
Let the player re-enter a checkpoint competent and confident, then ramp. A curve
|
|
56
|
+
that only climbs with no resets feels punishing; one that never climbs feels
|
|
57
|
+
trivial. Signposting difficulty (a visibly tougher enemy, a bigger arena) lets
|
|
58
|
+
the player brace, which is fairer than a surprise spike.
|
|
59
|
+
|
|
60
|
+
## Encounter design
|
|
61
|
+
|
|
62
|
+
An **encounter = enemy composition × space × objective × available resources.**
|
|
63
|
+
Change any single factor to create a fresh encounter without new assets:
|
|
64
|
+
|
|
65
|
+
- **Composition** — which enemy types, how many, in what waves.
|
|
66
|
+
- **Space** — the arena shape (below); the same enemies feel new in a new arena.
|
|
67
|
+
- **Objective** — kill all / survive N seconds / reach the exit / protect / hold
|
|
68
|
+
ground / retreat. The objective reshapes how the space is used.
|
|
69
|
+
- **Resources** — ammo, health, cover, high ground the player can seize.
|
|
70
|
+
|
|
71
|
+
### The encounter template
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
ENCOUNTER — <name>
|
|
75
|
+
Teaches / tests ..... which mechanic or threat (and which of I/D/T/C beat)
|
|
76
|
+
Space ............... arena shape, sightline length, cover, flanks, verticality
|
|
77
|
+
Composition ......... enemy types + counts + wave timing
|
|
78
|
+
Objective ........... win condition (kill / survive / reach / hold / escort)
|
|
79
|
+
Resources ........... ammo/health/cover/high-ground and where they sit
|
|
80
|
+
Entry / exit ........ how the player arrives (telegraph) and leaves (release valve)
|
|
81
|
+
Intensity ........... where this sits on the level's graph (peak height)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Introduce -> develop -> twist -> combine
|
|
85
|
+
|
|
86
|
+
The four-beat progression that teaches a new element through space, without
|
|
87
|
+
text. (The pattern behind Portal's test chambers, Half-Life 2's set-pieces, and
|
|
88
|
+
much Nintendo level craft.)
|
|
89
|
+
|
|
90
|
+
1. **Introduce** — meet it where it cannot hurt you. A turret across a safe gap;
|
|
91
|
+
one tile of the new hazard with a wall to watch from. Zero-risk learning.
|
|
92
|
+
2. **Develop** — use it for real, low stakes. The turret now guards a corridor
|
|
93
|
+
you must cross; the hazard is a gap you must jump.
|
|
94
|
+
3. **Twist** — recontextualize it. Two turrets flanking; the turret behind glass
|
|
95
|
+
you must lure enemies past; the hazard now moves. The rule you learned bends.
|
|
96
|
+
4. **Combine** — the mastery test: the new element + everything learned earlier,
|
|
97
|
+
at full intensity, as the section's climax.
|
|
98
|
+
|
|
99
|
+
### Worked example — a "gravity plate" that flings the player upward
|
|
100
|
+
|
|
101
|
+
- **Introduce**: one plate in a safe room; step on it, get flung to a ledge with
|
|
102
|
+
a reward. No threat. Player learns "plate = launch."
|
|
103
|
+
- **Develop**: cross a pit by chaining two plates — miss and you just fall back,
|
|
104
|
+
retry. Low stakes, real use.
|
|
105
|
+
- **Twist**: a plate launches you *into* a turret's line of fire — now you must
|
|
106
|
+
time the launch, or use the plate to reach the turret's flank.
|
|
107
|
+
- **Combine**: an arena where plates are the only way to reach high cover, under
|
|
108
|
+
fire, while enemies also use them. Everything at once.
|
|
109
|
+
|
|
110
|
+
## Arena shape — the geometry is the difficulty knob
|
|
111
|
+
|
|
112
|
+
The shape a fight happens in matters as much as the enemies:
|
|
113
|
+
|
|
114
|
+
- **Sightline length ↔ threat range.** Long lanes favor ranged play and
|
|
115
|
+
sniping; tight rooms favor shotguns/melee and force close engagements. Set the
|
|
116
|
+
lane length to the range you want to be dominant.
|
|
117
|
+
- **Cover rhythm.** Space cover so the player *advances in beats* — peek, move,
|
|
118
|
+
peek — rather than turtling in one spot. Low cover (peek over) vs full cover
|
|
119
|
+
(peek around) change the fight's tempo.
|
|
120
|
+
- **Flanks.** Give at least one flank route so a fight isn't a static peek-war;
|
|
121
|
+
a flank forces the player to move and makes the space three-dimensional in
|
|
122
|
+
play, not just in geometry.
|
|
123
|
+
- **Verticality.** High ground is pressure and reward. The Doom (2016) arena
|
|
124
|
+
is the reference: multi-tier, with resources and enemies placed to pull the
|
|
125
|
+
player *through* and *up* the space rather than hunker in a corner.
|
|
126
|
+
- **Chokepoints + release valves.** A choke concentrates danger (good for a
|
|
127
|
+
last stand); always pair it with an exit or a way to break the standoff, or
|
|
128
|
+
the fight stalls into a stalemate.
|
|
129
|
+
- **Entry and exit.** Telegraph the fight before the player commits (see the
|
|
130
|
+
arena from a safe threshold), and give a clear release when it's won.
|
|
131
|
+
|
|
132
|
+
### Arena patterns
|
|
133
|
+
|
|
134
|
+
| Pattern | Shape | Good for |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| **Corridor / lane** | Long, narrow, few flanks | Tension, forced pace, ranged duels |
|
|
137
|
+
| **Open arena** | Wide, multi-cover, multi-flank | Skill expression, mobile fights |
|
|
138
|
+
| **Vertical arena** | Stacked tiers, ramps/lifts | High-ground contests, push-forward combat |
|
|
139
|
+
| **Hub** | Central space, spokes off it | Wave defense, "hold ground" objectives |
|
|
140
|
+
| **Pinch** | Wide → choke → wide | Escalation, last-stand beats |
|
|
141
|
+
|
|
142
|
+
Match the pattern to the encounter's job on the intensity graph, not to habit.
|
|
@@ -169,6 +169,13 @@ Filename: the post id slug, e.g. `02-DOCS/wiki/linkedin/share-701234567890123456
|
|
|
169
169
|
|
|
170
170
|
```markdown
|
|
171
171
|
---
|
|
172
|
+
type: linkedin-record
|
|
173
|
+
title: "Share 7012345678901234567 — OAuth pitfalls carousel"
|
|
174
|
+
description: Performance snapshot for one LinkedIn post, pulled from organizationalEntityShareStatistics.
|
|
175
|
+
tags: [linkedin, analytics, post-performance]
|
|
176
|
+
timestamp: "2026-06-02T10:00:00Z"
|
|
177
|
+
topic: linkedin
|
|
178
|
+
status: stable
|
|
172
179
|
post_urn: "urn:li:share:7012345678901234567"
|
|
173
180
|
author: "urn:li:organization:12345"
|
|
174
181
|
captured_at: "2026-06-02T10:00:00Z"
|
|
@@ -181,11 +188,13 @@ shares: 8
|
|
|
181
188
|
engagement: 0.0683
|
|
182
189
|
---
|
|
183
190
|
|
|
191
|
+
# Share 7012345678901234567 — OAuth pitfalls carousel
|
|
192
|
+
|
|
184
193
|
Carousel on OAuth pitfalls. Highest unique-impression post this month;
|
|
185
194
|
CTR ~4.4%. The "common 403 causes" hook outperformed the plain howto.
|
|
186
195
|
```
|
|
187
196
|
|
|
188
|
-
|
|
197
|
+
`type` is the only required OKF v0.1 field; `title`/`description`/`tags`/`timestamp` are the recommended OKF surface. The DOMAIN keys below them are mandatory and must stay byte-for-byte — `verify.sh` checks that `post_urn`, `captured_at`, `impressions`, and `engagement` are present in every file under that directory. `captured_at` is the API-capture instant (a domain value verify.sh parses); `timestamp` is the OKF last-edit field — keep both. Note these files share `02-DOCS/wiki/linkedin/` with `linkedin-strategy`; using `type: linkedin-record` keeps the two skills' wiki content consistent.
|
|
189
198
|
|
|
190
199
|
## Anti-patterns
|
|
191
200
|
|
|
@@ -131,6 +131,16 @@ Engagement rising while cadence held?
|
|
|
131
131
|
Append a dated decision record under `02-DOCS/wiki/linkedin/decisions/`. Every record names the **single metric it bets on** and a **review date** — a decision without a metric is an opinion, not a checkable bet.
|
|
132
132
|
|
|
133
133
|
```markdown
|
|
134
|
+
---
|
|
135
|
+
type: linkedin-decision
|
|
136
|
+
title: Move distribution to founder profile
|
|
137
|
+
description: Founder profile carries the POV; the company page amplifies; refine to 4 pillars and hold 3/week.
|
|
138
|
+
tags: [linkedin, distribution, positioning, cadence]
|
|
139
|
+
timestamp: 2026-06-02T00:00:00Z
|
|
140
|
+
topic: linkedin
|
|
141
|
+
status: stable
|
|
142
|
+
---
|
|
143
|
+
|
|
134
144
|
# 2026-06-02 — Move distribution to founder profile
|
|
135
145
|
|
|
136
146
|
Context read: SSI 48 (flat 90d); top-2 dwell-time posts both carousels on
|
|
@@ -144,6 +154,8 @@ Bets on metric: SSI 48 -> 65 within 90 days (proxy for inbound).
|
|
|
144
154
|
Review date: 2026-09-02.
|
|
145
155
|
```
|
|
146
156
|
|
|
157
|
+
The `type:` field is required (OKF v0.1); `timestamp` is ISO 8601. The dated heading and the `Decision:` / `Bets on metric:` / `Review date:` lines are domain signals `verify.sh` greps for — keep them.
|
|
158
|
+
|
|
147
159
|
After writing, run `scripts/verify.sh 02-DOCS/wiki/linkedin/` to confirm the record is structurally complete. Full templates and the what-worked format: `references/wiki-records.md`.
|
|
148
160
|
|
|
149
161
|
## Anti-patterns
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
The read/write loop's storage. Everything is append-only markdown so future strategy sessions compound instead of restarting from generic advice.
|
|
4
4
|
|
|
5
|
+
Every `.md` file written here is part of the `02-DOCS/wiki/` OKF v0.1 bundle, so each carries YAML frontmatter with a non-empty `type:` (the only required OKF field). Cross-references between files use **standard markdown links** (`[Text](./pillars.md)`) — never wikilinks (`[[...]]`). The domain lines `verify.sh` greps for (the dated heading, `Decision:`, the metric/bet field) stay exactly as below.
|
|
6
|
+
|
|
5
7
|
## File layout
|
|
6
8
|
|
|
7
9
|
```text
|
|
@@ -18,13 +20,23 @@ A running `decisions.md` log at the root is also accepted instead of `decisions/
|
|
|
18
20
|
|
|
19
21
|
## Bootstrap (empty/absent dir)
|
|
20
22
|
|
|
21
|
-
When `02-DOCS/wiki/linkedin/` does not exist, create it with `positioning.md`, `pillars.md`, `decisions/`, and `what-worked.md` before you decide. Seed `positioning.md` with whatever the account already implies (title, current posts) so the first decision has a baseline to react to.
|
|
23
|
+
When `02-DOCS/wiki/linkedin/` does not exist, create it with `positioning.md`, `pillars.md`, `decisions/`, and `what-worked.md` before you decide. Seed `positioning.md` with whatever the account already implies (title, current posts) so the first decision has a baseline to react to. Each of `positioning.md`, `pillars.md`, and `what-worked.md` gets OKF frontmatter — use `type: linkedin-positioning`, `type: linkedin-pillars`, and `type: linkedin-record` respectively (templates below).
|
|
22
24
|
|
|
23
25
|
## Decision-record template
|
|
24
26
|
|
|
25
27
|
Every record carries: a dated heading, a context-read line (what you grounded in), a decision line, the single metric it bets on, and a review date. Missing the metric or the review date means it is not a checkable bet.
|
|
26
28
|
|
|
27
29
|
```markdown
|
|
30
|
+
---
|
|
31
|
+
type: linkedin-decision
|
|
32
|
+
title: <short decision title>
|
|
33
|
+
description: <one-sentence summary of the choice>
|
|
34
|
+
tags: [linkedin, <pillars|cadence|distribution|ssi>]
|
|
35
|
+
timestamp: <YYYY-MM-DDTHH:MM:SSZ>
|
|
36
|
+
topic: linkedin
|
|
37
|
+
status: stable
|
|
38
|
+
---
|
|
39
|
+
|
|
28
40
|
# 2026-06-02 — <short decision title>
|
|
29
41
|
|
|
30
42
|
Context read: <what you pulled from the wiki — prior positioning, current pillars,
|
|
@@ -39,9 +51,23 @@ SSI 48 -> 65 within 90 days, or median dwell time +X%, or inbound DMs/week>.
|
|
|
39
51
|
Review date: <YYYY-MM-DD — when the next session checks whether the bet paid>.
|
|
40
52
|
```
|
|
41
53
|
|
|
54
|
+
`type` (required) + `timestamp` (ISO 8601, last meaningful edit) are the OKF surface; everything below the frontmatter is the domain content `verify.sh` checks. A running `decisions.md` log at the root carries one frontmatter block at the top (`type: linkedin-decision`); its dated `## ` entries are prepended newest-first and never edited.
|
|
55
|
+
|
|
42
56
|
## what-worked template
|
|
43
57
|
|
|
58
|
+
`what-worked.md` is a single running file; new review blocks are prepended newest-first under one frontmatter block at the top.
|
|
59
|
+
|
|
44
60
|
```markdown
|
|
61
|
+
---
|
|
62
|
+
type: linkedin-record
|
|
63
|
+
title: What worked — LinkedIn
|
|
64
|
+
description: Running log of which pillars, formats, and posts earned dwell time and SSI movement.
|
|
65
|
+
tags: [linkedin, what-worked, dwell-time, ssi]
|
|
66
|
+
timestamp: 2026-09-02T00:00:00Z
|
|
67
|
+
topic: linkedin
|
|
68
|
+
status: stable
|
|
69
|
+
---
|
|
70
|
+
|
|
45
71
|
## 2026-09-02 review
|
|
46
72
|
|
|
47
73
|
- Pillar "pipeline reliability" — RISING. 2 carousels in top-3 dwell time. Double down.
|
|
@@ -91,9 +91,19 @@ If the user can't answer a question, that dimension stays incomplete — note th
|
|
|
91
91
|
|
|
92
92
|
### Brand wiki article template
|
|
93
93
|
|
|
94
|
-
Each `02-DOCS/wiki/brand/*.md` article follows the harness wiki format:
|
|
94
|
+
Each `02-DOCS/wiki/brand/*.md` article follows the harness wiki format. It is an OKF v0.1 article: open it with YAML frontmatter carrying a non-empty `type:` (`brand-study`), then the H1 and body:
|
|
95
95
|
|
|
96
96
|
```markdown
|
|
97
|
+
---
|
|
98
|
+
type: brand-study
|
|
99
|
+
title: Brand — Value Proposition
|
|
100
|
+
description: The core benefit and what makes this brand different from the named alternatives.
|
|
101
|
+
tags: [brand, value-proposition]
|
|
102
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
103
|
+
topic: brand
|
|
104
|
+
status: stable
|
|
105
|
+
---
|
|
106
|
+
|
|
97
107
|
# Brand — Value Proposition
|
|
98
108
|
|
|
99
109
|
> Sources: {user interview, YYYY-MM-DD}
|
|
@@ -124,9 +134,19 @@ One paragraph: the core benefit and what makes it different.
|
|
|
124
134
|
|
|
125
135
|
### Voice article specifics
|
|
126
136
|
|
|
127
|
-
`voice.md` must contain the do/don't word lists and link to every raw sample:
|
|
137
|
+
`voice.md` must contain the do/don't word lists and link to every raw sample (same OKF frontmatter; `type: brand-study`):
|
|
128
138
|
|
|
129
139
|
```markdown
|
|
140
|
+
---
|
|
141
|
+
type: brand-study
|
|
142
|
+
title: Brand — Tone & Voice
|
|
143
|
+
description: Tone descriptors, do/don't word lists, and the voice fingerprint extracted from real samples.
|
|
144
|
+
tags: [brand, voice, tone]
|
|
145
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
146
|
+
topic: brand
|
|
147
|
+
status: stable
|
|
148
|
+
---
|
|
149
|
+
|
|
130
150
|
# Brand — Tone & Voice
|
|
131
151
|
|
|
132
152
|
> Sources: {user interview, YYYY-MM-DD}
|
|
@@ -133,6 +133,16 @@ On a monthly/quarterly review:
|
|
|
133
133
|
Every session ends with a dated record under `02-DOCS/wiki/medium/decisions/`. Minimum fields — the bet-on metric is mandatory, because a decision with no metric is an opinion, not a checkable bet:
|
|
134
134
|
|
|
135
135
|
```markdown
|
|
136
|
+
---
|
|
137
|
+
type: medium-decision
|
|
138
|
+
title: Solo vs publication for AI-tools series
|
|
139
|
+
description: Stay solo + canonical-import the blog series; pitch one Boost-eligible AI pub with a native original.
|
|
140
|
+
tags: [medium, publications, monetization, distribution]
|
|
141
|
+
timestamp: 2026-06-02T00:00:00Z
|
|
142
|
+
topic: medium
|
|
143
|
+
status: stable
|
|
144
|
+
---
|
|
145
|
+
|
|
136
146
|
# 2026-06-02 — Solo vs publication for AI-tools series
|
|
137
147
|
|
|
138
148
|
Decision: Stay solo profile + canonical-import the blog series; pitch one Boost-eligible AI pub with a native original.
|
|
@@ -140,6 +150,8 @@ Rationale: 400 followers, no editor nomination path; the blog has evergreen sear
|
|
|
140
150
|
Bets on metric: member reading time from external/search referral; 1 Boost nomination this quarter.
|
|
141
151
|
```
|
|
142
152
|
|
|
153
|
+
`type:` is the required OKF v0.1 field; `timestamp` is ISO 8601. The `Decision:` / `Bets on metric:` lines are domain signals `verify.sh` greps for — keep them.
|
|
154
|
+
|
|
143
155
|
After a review, append a `what-worked.md` entry tied to specific stories/pubs/tags (e.g. "`AI Coding Tools` long-tail + Boost → 3.2h member reading time"). Full templates, layout, and the verify.sh contract: [`references/wiki-records.md`](references/wiki-records.md). Sanity-check the wiki with `scripts/verify.sh 02-DOCS/wiki/medium/`.
|
|
144
156
|
|
|
145
157
|
## Anti-patterns
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
This is the persistence layer that makes medium-strategy compound. Read SKILL.md §1 and §9 first; this file is the exact format.
|
|
4
4
|
|
|
5
|
+
Every `.md` file written under `02-DOCS/wiki/medium/` is part of the OKF v0.1 bundle: it carries YAML frontmatter with a non-empty `type:` (the only required OKF field), and any cross-references use **standard markdown links** (`[Text](./pubs.md)`), never wikilinks (`[[...]]`). The domain lines `verify.sh` greps for (the dated heading, `Decision:`, the metric/bet field) stay exactly as shown below.
|
|
6
|
+
|
|
5
7
|
## Layout under `02-DOCS/wiki/medium/`
|
|
6
8
|
|
|
7
9
|
```text
|
|
@@ -21,6 +23,16 @@ This is the persistence layer that makes medium-strategy compound. Read SKILL.md
|
|
|
21
23
|
Every decision file MUST carry three signals: a **date**, a **Decision:** line, and a **named metric/bet**. The metric is mandatory — a decision with no metric is an opinion, not something you can check next quarter.
|
|
22
24
|
|
|
23
25
|
```markdown
|
|
26
|
+
---
|
|
27
|
+
type: medium-decision
|
|
28
|
+
title: Solo vs publication for the AI-tools series
|
|
29
|
+
description: Stay solo; canonical-import the evergreen blog posts; pitch one Boost-eligible AI pub.
|
|
30
|
+
tags: [medium, publications, monetization, distribution]
|
|
31
|
+
timestamp: 2026-06-02T00:00:00Z
|
|
32
|
+
topic: medium
|
|
33
|
+
status: stable
|
|
34
|
+
---
|
|
35
|
+
|
|
24
36
|
# 2026-06-02 — Solo vs publication for the AI-tools series
|
|
25
37
|
|
|
26
38
|
Decision: Stay solo profile; canonical-import the 6 evergreen blog posts; pitch one Boost-eligible AI publication with a new native original.
|
|
@@ -29,11 +41,23 @@ Bets on metric: member reading time from external + search referral over 90 days
|
|
|
29
41
|
Status: open
|
|
30
42
|
```
|
|
31
43
|
|
|
32
|
-
When the bet resolves, append a short outcome to the
|
|
44
|
+
`type:` (required) + `timestamp:` (ISO 8601, last meaningful edit) are the OKF surface; the `Status:` line in the body is the domain bet-lifecycle marker — distinct from the frontmatter `status:` (the OKF article lifecycle: draft | stable | stale). When the bet resolves, append a short outcome to the body (`Status: won — Boost nomination 2026-07; +2.1h member reading time`) rather than editing the original — append-only history. A running `decisions.md` log at the root carries one frontmatter block at the top (`type: medium-decision`).
|
|
33
45
|
|
|
34
46
|
## what-worked.md entry template
|
|
35
47
|
|
|
48
|
+
`what-worked.md` is one running file; new review blocks are prepended newest-first under a single frontmatter block at the top.
|
|
49
|
+
|
|
36
50
|
```markdown
|
|
51
|
+
---
|
|
52
|
+
type: medium-record
|
|
53
|
+
title: What worked — Medium
|
|
54
|
+
description: Running log of outcomes tied to specific Medium stories, publications, and tags.
|
|
55
|
+
tags: [medium, what-worked, member-reading-time, boost]
|
|
56
|
+
timestamp: 2026-09-01T00:00:00Z
|
|
57
|
+
topic: medium
|
|
58
|
+
status: stable
|
|
59
|
+
---
|
|
60
|
+
|
|
37
61
|
## 2026-09-01 — Q3 review
|
|
38
62
|
- `AI Coding Tools` (long-tail) + Boost → 3.2h member reading time on one story. Double down: keep the long-tail tag, pitch the same pub again.
|
|
39
63
|
- Imported blog post w/ canonical + newsletter push → +5% external bonus visible, but low member conversion. Keep importing; stop expecting member reads from cold list.
|
|
@@ -44,6 +68,20 @@ When the bet resolves, append a short outcome to the same file (`Status: won —
|
|
|
44
68
|
|
|
45
69
|
Keep these lightweight. `pubs.md`: pub name | status (accepted/pitched/dropped) | niche fit | a one-line guideline note. `tags.md`: tag | popular-or-long-tail | did it pull member reading time?
|
|
46
70
|
|
|
71
|
+
Both still carry OKF frontmatter (one block at the top of each file):
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
---
|
|
75
|
+
type: medium-record
|
|
76
|
+
title: Publications tracker # or: Tag sets tried
|
|
77
|
+
description: Accepted / pitched / dropped Medium publications and their guideline notes.
|
|
78
|
+
tags: [medium, publications] # or [medium, tags, distribution] for tags.md
|
|
79
|
+
timestamp: 2026-09-01T00:00:00Z
|
|
80
|
+
topic: medium
|
|
81
|
+
status: stable
|
|
82
|
+
---
|
|
83
|
+
```
|
|
84
|
+
|
|
47
85
|
## The verify.sh contract
|
|
48
86
|
|
|
49
87
|
`scripts/verify.sh` is a **structural lint, not a craft judge.** Run it after a session:
|
|
@@ -117,6 +117,25 @@ If `02-DOCS/` exists, learn before you write:
|
|
|
117
117
|
- Bias toward the title/subtitle patterns and topics that historically beat a 50% read ratio for *this* author; avoid angles that drew clicks but bounced.
|
|
118
118
|
- After a notable result, append the learned pattern to `02-DOCS/wiki/medium/read-ratio-patterns.md` so the next draft inherits it.
|
|
119
119
|
|
|
120
|
+
`read-ratio-patterns.md` lives in the `02-DOCS/wiki/` OKF v0.1 bundle, so it carries YAML frontmatter with a non-empty `type:` — one block at the top, with new pattern blocks prepended newest-first below it. Use `type: medium-record` (the same type the `medium-strategy` skill writes under `02-DOCS/wiki/medium/`, keeping the two skills' wiki content consistent). Create it with this header if it does not yet exist:
|
|
121
|
+
|
|
122
|
+
```markdown
|
|
123
|
+
---
|
|
124
|
+
type: medium-record
|
|
125
|
+
title: Read-ratio patterns — Medium
|
|
126
|
+
description: Title/subtitle/topic patterns that historically beat a 50% read ratio for this author.
|
|
127
|
+
tags: [medium, read-ratio, titles, hooks]
|
|
128
|
+
timestamp: 2026-06-02T00:00:00Z
|
|
129
|
+
topic: medium
|
|
130
|
+
status: stable
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 2026-06-02 — <pattern learned>
|
|
134
|
+
- <title/subtitle archetype + topic that beat the 50% read ratio, with the number observed>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Cross-references use standard markdown links (`[Text](./what-worked.md)`), never wikilinks (`[[...]]`).
|
|
138
|
+
|
|
120
139
|
If `02-DOCS/` is absent, proceed from the craft defaults above and say so in one line, rather than inventing stats.
|
|
121
140
|
|
|
122
141
|
## Anti-patterns
|
|
@@ -9,9 +9,20 @@ flows, levels — not framework syntax.
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
```markdown
|
|
12
|
+
---
|
|
13
|
+
type: plan
|
|
14
|
+
title: Plan — <feature name>
|
|
15
|
+
description: The structure-level implementation plan for <feature> — contracts, shapes, flows.
|
|
16
|
+
tags: [sdd, plan]
|
|
17
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
18
|
+
topic: sdd
|
|
19
|
+
slug: <slug>
|
|
20
|
+
status: draft
|
|
21
|
+
---
|
|
22
|
+
|
|
12
23
|
# Plan — <feature name>
|
|
13
24
|
|
|
14
|
-
> Spec: ../specs/<slug>.md · Constitution: ../constitution.md · Status: draft | approved
|
|
25
|
+
> Spec: [../specs/<slug>.md](../specs/<slug>.md) · Constitution: [../constitution.md](../constitution.md) · Status: draft | approved
|
|
15
26
|
> Last updated: YYYY-MM-DD
|
|
16
27
|
|
|
17
28
|
## 0. Global Constraints
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -63,8 +63,13 @@ stranger's voice that contradicts what already won.
|
|
|
63
63
|
4. **No script or no settled angle? Route OUT** (see Handoffs). Never invent here.
|
|
64
64
|
|
|
65
65
|
Persist the package under `02-DOCS/wiki/shortform/` and raw test results under
|
|
66
|
-
`02-DOCS/raw/shortform/`.
|
|
67
|
-
|
|
66
|
+
`02-DOCS/raw/shortform/`. The `shortform/` wiki tree is an **OKF v0.1 bundle** shared
|
|
67
|
+
with the `tiktok-api` and `shortform-strategy` siblings: each persisted package `.md`
|
|
68
|
+
leads with YAML frontmatter carrying a non-empty `type: shortform-package` (plus the
|
|
69
|
+
recommended `title`/`tags`/`timestamp`), and any cross-references use standard markdown
|
|
70
|
+
links, never `[[wikilinks]]`. The raw feedback log under `02-DOCS/raw/shortform/` is
|
|
71
|
+
`raw/`, not `wiki/` — no frontmatter required. The full frontmatter + pattern depth
|
|
72
|
+
lives in [references/package-templates.md](references/package-templates.md).
|
|
68
73
|
|
|
69
74
|
## The two-second decision
|
|
70
75
|
|
|
@@ -6,10 +6,21 @@ filled `02-DOCS` feedback-log schema.
|
|
|
6
6
|
|
|
7
7
|
## The package file format
|
|
8
8
|
|
|
9
|
-
Emit one
|
|
10
|
-
|
|
9
|
+
Emit one markdown file per short under `02-DOCS/wiki/shortform/`. The `shortform/`
|
|
10
|
+
wiki tree is an **OKF v0.1 bundle** shared with the `tiktok-api` and
|
|
11
|
+
`shortform-strategy` siblings, so the file leads with YAML frontmatter (a non-empty
|
|
12
|
+
`type` is the only OKF hard requirement; `title`/`tags`/`timestamp` are the recommended
|
|
13
|
+
surface). The labeled body below is unchanged — `scripts/verify.sh` lints exactly these
|
|
14
|
+
labels (English or ES/CA, one per line, content following) and ignores the frontmatter:
|
|
11
15
|
|
|
12
16
|
```text
|
|
17
|
+
---
|
|
18
|
+
type: shortform-package
|
|
19
|
+
title: faceless productivity TikTok — package
|
|
20
|
+
tags: [shortform, packaging, tiktok]
|
|
21
|
+
timestamp: 2026-06-02T12:00:00Z
|
|
22
|
+
platform: tiktok
|
|
23
|
+
---
|
|
13
24
|
Hook:
|
|
14
25
|
- I deleted my to-do app. Here's why.
|
|
15
26
|
- The app that runs my whole week (it's free)
|
|
@@ -113,9 +113,21 @@ Every decision must end up in the ledger so next month's call is grounded.
|
|
|
113
113
|
|
|
114
114
|
### Decision record format
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
`02-DOCS/wiki/shortform/decisions.md` is an OKF append-log: write the frontmatter
|
|
117
|
+
header once (a non-empty `type` is the only OKF hard requirement; `title`/`tags`/`timestamp`
|
|
118
|
+
are the recommended surface), then **prepend each new dated block newest-first** so the
|
|
119
|
+
latest call is on top. Use ISO 8601 dates; never edit a past block. Bump the header
|
|
120
|
+
`timestamp` on each append. Header + one block:
|
|
117
121
|
|
|
118
122
|
```markdown
|
|
123
|
+
---
|
|
124
|
+
type: shortform-decision-log
|
|
125
|
+
title: Shortform strategy decisions
|
|
126
|
+
tags: [shortform, strategy, decisions]
|
|
127
|
+
timestamp: 2026-06-02T10:00:00Z
|
|
128
|
+
---
|
|
129
|
+
# Shortform strategy decisions
|
|
130
|
+
|
|
119
131
|
## 2026-06-02 — Drop daily posting to 4 Reels/week
|
|
120
132
|
**Decision:** Cut from ~7 thin posts/week to 4 strong Reels/week, fixed Tue/Fri.
|
|
121
133
|
**Rationale:** Reach fell as volume rose; consistency > velocity past the ceiling.
|
|
@@ -140,10 +152,22 @@ Append every call to `02-DOCS/wiki/shortform/decisions.md` as a dated block:
|
|
|
140
152
|
|
|
141
153
|
## Persist it
|
|
142
154
|
|
|
143
|
-
Write the account's brain back so it compounds (mirrors the harness Karpathy-wiki convention):
|
|
155
|
+
Write the account's brain back so it compounds (mirrors the harness Karpathy-wiki convention). The `shortform/` wiki tree is an **OKF v0.1 bundle** shared with the `tiktok-api` and `shortform-packaging` siblings: every `.md` written here carries YAML frontmatter with a non-empty `type`, cross-references are standard markdown links (never `[[wikilinks]]`), and `decisions.md` follows the OKF newest-first append-log rule.
|
|
156
|
+
|
|
157
|
+
- `02-DOCS/wiki/shortform/strategy.md` — positioning, cadence/mix, KPI, length bands, current series. Lead with frontmatter; the body keeps the H1 + sections the linter checks:
|
|
158
|
+
|
|
159
|
+
```markdown
|
|
160
|
+
---
|
|
161
|
+
type: shortform-strategy
|
|
162
|
+
title: Shortform account strategy
|
|
163
|
+
tags: [shortform, strategy, positioning, cadence]
|
|
164
|
+
timestamp: 2026-06-02T10:00:00Z
|
|
165
|
+
---
|
|
166
|
+
# Shortform account strategy
|
|
167
|
+
...
|
|
168
|
+
```
|
|
144
169
|
|
|
145
|
-
- `02-DOCS/wiki/shortform/
|
|
146
|
-
- `02-DOCS/
|
|
147
|
-
- `02-DOCS/raw/shortform/metrics.csv` — the per-post ledger (schema in `references/learning-loop-template.md`).
|
|
170
|
+
- `02-DOCS/wiki/shortform/decisions.md` — the dated decision log, OKF append-log (`type: shortform-decision-log`, newest block on top; format above).
|
|
171
|
+
- `02-DOCS/raw/shortform/metrics.csv` — the per-post ledger (schema in `references/learning-loop-template.md`). This is `raw/`, not `wiki/` — a CSV, no frontmatter.
|
|
148
172
|
|
|
149
|
-
Verify a produced strategy doc with `scripts/verify.sh 02-DOCS/wiki/shortform/strategy.md` — a read-only structural lint (positioning, cadence, completion KPI, ride-or-skip rule, ≥1 dated decision, sends/saves logged).
|
|
173
|
+
Verify a produced strategy doc with `scripts/verify.sh 02-DOCS/wiki/shortform/strategy.md` — a read-only structural lint (positioning, cadence, completion KPI, ride-or-skip rule, ≥1 dated decision, sends/saves logged). The lint reads body content, so the added frontmatter does not affect it.
|
|
@@ -38,9 +38,17 @@ Run once a month, reading `02-DOCS/raw/shortform/metrics.csv`:
|
|
|
38
38
|
|
|
39
39
|
## Decision-record template
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
`02-DOCS/wiki/shortform/decisions.md` is an OKF v0.1 append-log: the frontmatter header (a non-empty `type` is the only OKF hard requirement; `title`/`tags`/`timestamp` are recommended) is written once, then each new block is **prepended newest-first** under the H1. Every block is dated (ISO 8601), rests on a named metric, and carries a revisit date so it is an experiment, not folklore. Past blocks are immutable; bump the header `timestamp` on each append.
|
|
42
42
|
|
|
43
43
|
```markdown
|
|
44
|
+
---
|
|
45
|
+
type: shortform-decision-log
|
|
46
|
+
title: Shortform strategy decisions
|
|
47
|
+
tags: [shortform, strategy, decisions]
|
|
48
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
49
|
+
---
|
|
50
|
+
# Shortform strategy decisions
|
|
51
|
+
|
|
44
52
|
## YYYY-MM-DD — <short decision title>
|
|
45
53
|
**Decision:** <what changes, concretely — cadence/positioning/series/trend rule>
|
|
46
54
|
**Rationale:** <the one-line why>
|
|
@@ -6,10 +6,21 @@ endpoint, library, file path, or algorithm. If you can't phrase it without
|
|
|
6
6
|
naming the tech, it's a *point to clarify*, not a requirement.
|
|
7
7
|
|
|
8
8
|
```markdown
|
|
9
|
+
---
|
|
10
|
+
type: spec
|
|
11
|
+
title: Spec — <Feature name>
|
|
12
|
+
description: WHAT and WHY for <feature> — problem, goals, behaviour, acceptance criteria.
|
|
13
|
+
tags: [sdd, spec]
|
|
14
|
+
timestamp: YYYY-MM-DDTHH:MM:SSZ
|
|
15
|
+
topic: sdd
|
|
16
|
+
slug: <slug>
|
|
17
|
+
status: draft
|
|
18
|
+
---
|
|
19
|
+
|
|
9
20
|
# Spec — <Feature name>
|
|
10
21
|
|
|
11
22
|
> Slug: `<slug>` · Status: draft · Created: <YYYY-MM-DD>
|
|
12
|
-
> Inherits:
|
|
23
|
+
> Inherits: [constitution](../constitution.md)
|
|
13
24
|
|
|
14
25
|
## Problem & why
|
|
15
26
|
<The pain, who feels it, and the cost of leaving it unsolved. One short
|
|
@@ -251,10 +251,14 @@ A pull that prints to stdout and vanishes is wasted. **Every pull appends a date
|
|
|
251
251
|
|
|
252
252
|
Filenames carry the `tiktok-` prefix because the same `shortform/` wiki may also hold Instagram and YouTube pulls — namespacing keeps platforms from colliding.
|
|
253
253
|
|
|
254
|
-
Per-pull entry template:
|
|
254
|
+
Per-pull entry template. The frontmatter is **OKF v0.1 conformant** — a non-empty `type` is the only hard requirement; `title`/`tags`/`timestamp` are the recommended OKF surface; the domain `date`/`range`/`account`/`platform`/`source` keys the siblings parse are preserved additively (OKF tolerates extra keys). `date` is the reporting day; `timestamp` is the ISO 8601 write moment:
|
|
255
255
|
|
|
256
256
|
```markdown
|
|
257
257
|
---
|
|
258
|
+
type: shortform-metrics
|
|
259
|
+
title: TikTok account snapshot — 2026-06-02
|
|
260
|
+
tags: [tiktok, metrics, snapshot]
|
|
261
|
+
timestamp: 2026-06-02T09:00:00Z
|
|
258
262
|
date: 2026-06-02
|
|
259
263
|
range: 2026-05-26..2026-06-01
|
|
260
264
|
account: <open_id>
|
|
@@ -274,7 +278,7 @@ For You 71% · Personal profile 14% · Search 7%
|
|
|
274
278
|
completion +3.1pts after the tighter cold-open; FYP share up 5pts.
|
|
275
279
|
```
|
|
276
280
|
|
|
277
|
-
Rule: **append, never overwrite.** The feedback log *is* the value — overwriting yesterday's snapshot destroys the trend the siblings need, and erases the 24–48h settling you only see across pulls. Exact file tree, naming, and how siblings read the log: `references/wiki-schema.md`.
|
|
281
|
+
Rule: **append, never overwrite.** The feedback log *is* the value — overwriting yesterday's snapshot destroys the trend the siblings need, and erases the 24–48h settling you only see across pulls. The per-video log (`videos/tiktok-<id>.md`) is an OKF append-log: write its frontmatter header once, prepend each new dated block newest-first, never edit a past block. `index.md` is the OKF reserved file — no frontmatter, standard markdown links only. Exact file tree, frontmatter, naming, and how siblings read the log: `references/wiki-schema.md`.
|
|
278
282
|
|
|
279
283
|
## 6. Rate & failure math
|
|
280
284
|
|