@ericrisco/rsc 0.1.50 → 0.1.52

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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gamedev-pathing
3
- description: "Use when implementing AI navigation or pathfinding in a game - moving enemies/NPCs/units toward goals, \"how do enemies navigate the level\", A*/Dijkstra/JPS/HPA* search, choosing grid vs waypoint-graph vs navmesh, baking a navmesh and tuning agent radius/height, off-mesh/nav links, dynamic obstacles and re-baking, steering (seek/flee/arrive/pursue/wander/path-following/flocking), local avoidance (RVO/ORCA, crowds), and flow fields for many agents to one goal. Per-engine: Godot 4.x (NavigationServer2D/3D, NavigationRegion, NavigationAgent, get_next_path_position), Unity (NavMeshAgent + NavMeshObstacle + AI Navigation baking), Unreal (RecastNavMesh + AIController + Behavior Trees/EQS). Triggers: \"my enemies get stuck\", \"units clump together\", \"navmesh not updating\", \"agentes se atascan\". NOT physics/rigidbody collision response or character-controller tuning (gamedev-physics), and NOT high-level enemy AI behaviour design like aggro/states/difficulty (game-design)."
3
+ description: "Use when making NPCs, enemies, or units navigate a level — grid vs waypoint vs navmesh, A*/JPS, navmesh baking and agent radius, off-mesh links, steering, RVO crowd avoidance, and flow fields in Godot 4.x, Unity, Unreal. NOT collision response or character controllers (that is gamedev-physics), NOT aggro or difficulty design (that is game-design)."
4
4
  tags: [pathfinding, navmesh, navigation, steering, a-star]
5
5
  recommends: [godot, unity, unreal, gamedev-physics]
6
6
  profiles: [full]
@@ -102,7 +102,8 @@ Combine either as a **weighted sum** (simple) or **priority/arbitration** (avoid
102
102
  **Local avoidance (RVO / ORCA):** each agent picks a velocity that is collision-free assuming neighbours
103
103
  share the burden (*reciprocal* — hence no oscillating "dance"). This is avoidance, **not** collision
104
104
  *response*: it changes intended velocity *before* moving; the physics/collision solver is a separate,
105
- last-resort backstop (→ `gamedev-physics`). For dense crowds use the engine's crowd/avoidance system.
105
+ last-resort backstop (→ [`gamedev-physics`](../gamedev-physics/SKILL.md)). For dense crowds use the
106
+ engine's crowd/avoidance system.
106
107
 
107
108
  **Flow fields** — for **many agents → one (or few) goals** (RTS swarm, tower-defense creeps): run one
108
109
  **Dijkstra from the goal** over the grid to build a cost/integration field, derive a per-cell direction
@@ -182,30 +183,26 @@ AICon->MoveToActor(TargetActor, /*AcceptanceRadius*/ 50.f); // or MoveToLocati
182
183
  4. Costs/holes: **`NavModifierVolume`** + `NavArea` classes. Off-mesh: **`NavLinkProxy`**. Crowd
183
184
  avoidance: enable the **Detour Crowd** manager (or `DetourCrowdAIController`) for RVO on many agents.
184
185
 
185
- > High-level BT *design* (states, aggro, difficulty) is `game-design`; this skill wires the BT's
186
+ > High-level BT *design* (states, aggro, difficulty) is [`game-design`](../game-design/SKILL.md); this skill wires the BT's
186
187
  > movement/EQS tasks to navigation, not the decision tree's semantics.
187
188
 
188
- ## Guardrails / gotchas
189
+ ## Anti-patterns
189
190
 
190
- - **Agent radius mismatch** is the top "stuck in doorways / clipping walls" cause — bake with the real radius.
191
- - Bake covers **static** geometry; runtime-spawned meshes need a rebake, a carving obstacle, or a nav link.
192
- - Path returns empty when start/end are **off the navmesh** or in disconnected islands — snap to nearest poly and check reachability first.
193
- - Avoidance (RVO) ≠ collision (physics). Agents can still overlap under pressure; that is expected, not a physics bug.
194
- - Off-mesh links are **directional and manual** — a jump-down link does not imply a jump-up link.
195
- - Smooth grid paths (funnel / string-pull) or agents walk visible zig-zag staircases.
196
-
197
- ## Anti-patterns / rationalizations → STOP
198
-
199
- | Rationalization | Reality / do instead |
191
+ | Anti-pattern | Do instead |
200
192
  | --- | --- |
201
- | "Just A* every frame, it's fine" | Melts CPU at scale; path on goal-change, steer between frames. |
202
- | "One navmesh bake works for every unit" | Radius/height differ; bake per agent size or use agent-type profiles. |
203
- | "Agents clip through each other — physics bug" | Missing **local avoidance**; enable RVO/crowd, that's the navigation layer. |
204
- | "Navmesh doesn't see my spawned wall" | Static bake; set Dynamic/rebake, or add a carving obstacle/nav link. |
205
- | "I'll grid-search my own A* in Unity/Unreal" | Reinvents the built-in navmesh; use `NavMeshAgent` / `AAIController::MoveTo`. |
206
- | "500 zombies each run A* to the player" | That's a **flow field**: one Dijkstra from the goal, agents sample cells. |
207
- | "Set `agent.destination` and read the path same frame" | Path is async (`pathPending`); gate on it before trusting `remainingDistance`. |
208
- | "Bigger heuristic = smarter" | Over-estimating `h` breaks A* optimality; keep it admissible (or weight it *knowingly*). |
193
+ | Running a full A* every frame | Path on goal-change (or throttled) and steer between frames — per-frame search melts CPU at scale. |
194
+ | One navmesh bake shared by every unit | Radius/height differ; bake per agent size or use agent-type profiles. |
195
+ | Baking with a placeholder agent radius | Bake with the real radius — mismatch is the top "stuck in doorways / clipping walls" cause. |
196
+ | Treating agents that clip through each other as a physics bug | Missing **local avoidance**; enable RVO/crowd — that is the navigation layer. |
197
+ | Expecting RVO to prevent every overlap | Avoidance ≠ collision. Agents can still overlap under pressure; that is expected, not a physics bug. |
198
+ | Expecting a **static** bake to see runtime-spawned geometry | Set Dynamic runtime generation / rebake, or add a carving obstacle or nav link. |
199
+ | Hand-rolling your own grid A* in Unity/Unreal | Reinvents the built-in navmesh; use `NavMeshAgent` / `AAIController::MoveTo`. |
200
+ | 500 zombies each running A* to the player | That's a **flow field**: one Dijkstra from the goal, agents sample cells. |
201
+ | Setting `agent.destination` and reading the path the same frame | Path is async (`pathPending`); gate on it before trusting `remainingDistance`. |
202
+ | Inflating `h` because a bigger heuristic seems smarter | Over-estimating `h` breaks A* optimality; keep it admissible (or weight it *knowingly*). |
203
+ | Trusting a path query that came back empty | Start/end are **off the navmesh** or in disconnected islands — snap to the nearest poly and check reachability first. |
204
+ | Assuming an off-mesh link works both ways | Links are **directional and manual** — a jump-down link does not imply a jump-up link. |
205
+ | Feeding raw grid paths to the mover | Smooth them (funnel / string-pull) or agents walk visible zig-zag staircases. |
209
206
 
210
207
  ## Related skills
211
208
 
@@ -213,7 +210,7 @@ AICon->MoveToActor(TargetActor, /*AcceptanceRadius*/ 50.f); // or MoveToLocati
213
210
  - [`unity`](../unity/SKILL.md) — Unity/C# project setup; here for the NavMesh + AI Navigation package details.
214
211
  - [`unreal`](../unreal/SKILL.md) — UE5/Blueprint/C++; here for RecastNavMesh + AIController/BT/EQS wiring.
215
212
  - [`gamedev-physics`](../gamedev-physics/SKILL.md) — collision *response*, rigidbodies, character controllers; steering decides intended velocity, physics resolves the contact.
216
- - `game-design` — high-level enemy behaviour, aggro, encounter/difficulty design (what the AI *decides*, not how it *moves*).
213
+ - [`game-design`](../game-design/SKILL.md) — high-level enemy behaviour, aggro, encounter/difficulty design (what the AI *decides*, not how it *moves*).
217
214
 
218
215
  ## Checklist
219
216
 
@@ -234,9 +231,3 @@ the project's navigation decisions in `02-DOCS/wiki/stack/gamedev-pathing.md` (i
234
231
  `02-DOCS/wiki/index.md`): engine + version, chosen representation, bake settings (agent sizes, cell
235
232
  size), avoidance/crowd choice, custom links/areas. Read it first on every use; bump its `Updated` date
236
233
  when a convention changes. No `02-DOCS/` layer? Skip silently — conventions are *recorded, not gated*.
237
-
238
- ## See Also — local references (read when)
239
-
240
- - `references/search-algorithms.md` — representations, A*/Dijkstra/JPS/HPA* pseudocode, heuristics & admissibility, tie-breaking, any-angle, funnel smoothing.
241
- - `references/navmesh-workflow.md` — bake-parameter table, areas/costs, off-mesh links, obstacles vs carving vs partial rebake, per-engine baking, debugging.
242
- - `references/steering-and-avoidance.md` — steering primitives, path following, boids weights, RVO/ORCA intuition, crowds, flow-field construction.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gamedev-shipping
3
- description: "Use when exporting, building, packaging, or publishing a game — per engine (Godot export templates, Unity Build Profiles, Unreal Shipping vs Development) and per platform: desktop (Windows/macOS/Linux; macOS codesign + notarytool notarization), web (the COOP same-origin + COEP require-corp headers threaded SharedArrayBuffer WebAssembly builds need, and that Godot's C#/.NET edition can't export to web), mobile (Android JDK 17 build template, AAB vs APK, release keystore; iOS provisioning). Also store prep (icons/splash, metadata, age ratings, AAB for Play, Mac App Store, Steamworks/SteamPipe, itch.io butler), headless-export CI/CD, build/version numbers, and ship-time size/startup optimization. Triggers: 'export my game', 'build for Steam', 'ship to web/mobile', 'publish to the Play Store', 'notarize my Mac build', 'itch.io upload', 'SharedArrayBuffer is not defined'. NOT for writing gameplay/runtime code (that's the engine skill — godot/unity/unreal) or hosting a normal web app/API/container (→ deployment)."
3
+ description: "Use when exporting, packaging, signing, or publishing a game — export presets per engine, macOS notarization, cross-origin isolation for threaded web builds, Android AAB/keystore, iOS provisioning, store submission (Steam, Play, App Store, itch.io), headless build CI. NOT gameplay code inside the artifact (that is `godot`, `unity`, `unreal`), NOT hosting a web app or container (that is `deployment`)."
4
4
  tags: [export, build, release, packaging, store, steam, itch, notarization, webassembly, aab]
5
5
  recommends: [godot, unity, unreal, deployment]
6
6
  profiles: [full]
@@ -29,21 +29,14 @@ Godot templates·Unity Build Profiles·Unreal Shipping desktop·web·mobile
29
29
  | Android | JDK **17**, target a recent API level | AAB required for Google Play (new apps + updates). APK only for sideload/itch/direct. |
30
30
  | iOS/macOS | Xcode 16+, `notarytool` | `altool` notarization is dead — use `xcrun notarytool`. |
31
31
 
32
- ## When to use / When NOT to use
32
+ ## When NOT to use — and who owns it instead
33
33
 
34
- **Use when:**
35
- - Configuring export templates / build presets / packaging settings for any target.
36
- - Signing & notarizing a desktop build, or debugging Gatekeeper/SmartScreen rejections.
37
- - Fixing a web build that boots to `SharedArrayBuffer is not defined` or a blank canvas.
38
- - Producing an AAB/APK or an iOS archive; wiring keystores/provisioning.
39
- - Store submission prep (icons, metadata, ratings) or uploading to Steam/itch/Play/App Store.
40
- - Automating headless exports in CI, or setting version/build numbers.
41
- - Shrinking build size / startup time before release.
42
-
43
- **NOT for (route elsewhere, say so, stop):**
44
- - Writing gameplay, shaders, netcode, or any runtime logic → the **engine** skill (`godot`/`unity`/`unreal`) or `gamedev-shaders`/`gamedev-multiplayer`. This skill packages code; it does not write it.
45
- - Hosting a normal web app, API, or container (Dockerfile, Coolify, Vercel, VPS) → **`deployment`**. A WebAssembly game is *static files*; only its **headers** are special (below).
46
- - Designing game feel, economy, or narrative → `game-design` / `game-storytelling`.
34
+ | Ask | Owner | Why the line is there |
35
+ | --- | --- | --- |
36
+ | Gameplay, shaders, netcode, physics — any runtime logic | `../godot/SKILL.md`, `../unity/SKILL.md`, `../unreal/SKILL.md`, `../gamedev-shaders/SKILL.md`, `../gamedev-multiplayer/SKILL.md`, `../gamedev-physics/SKILL.md` | This skill packages code, it does not write it. The boundary is the export button. |
37
+ | Hosting a normal web app, API or container (Dockerfile, Coolify, Vercel, VPS) | `../deployment/SKILL.md` | A WebAssembly game is *static files*; only its **headers** are special (below). Borrow its Actions + header-setting patterns. |
38
+ | Game feel, economy, narrative | `../game-design/SKILL.md`, `../game-storytelling/SKILL.md` | Design intent, not packaging. |
39
+ | Signing-key and CI secret handling in general | `../secure-coding/SKILL.md` | The practice this skill assumes for keystores/certs. |
47
40
 
48
41
  ## Decision rules (settle these before touching a build)
49
42
 
@@ -96,7 +89,8 @@ RunUAT BuildCookRun -project="Game.uproject" -platform=Win64 \
96
89
  Android adds `-distribution` for an AAB; iOS requires a Mac + provisioning. Run the platform
97
90
  **Turnkey**/SDK setup once (Android Studio + NDK, or Xcode) or the cook fails.
98
91
 
99
- → full per-engine preset/flag tables: `references/mobile-and-desktop.md` and `references/stores-and-ci.md`.
92
+ → full per-engine preset/flag tables: [references/mobile-and-desktop.md](references/mobile-and-desktop.md)
93
+ and [references/stores-and-ci.md](references/stores-and-ci.md).
100
94
 
101
95
  ## Per-platform
102
96
 
@@ -141,7 +135,8 @@ files are fine. Where to set them:
141
135
  `COEP: require-corp` also means every cross-origin subresource (fonts, analytics, embeds) must
142
136
  send CORP/CORS or it's blocked. **Godot C#/.NET has no web export at all** — use GDScript.
143
137
 
144
- → hosts, exact configs, the service-worker shim, self-test: `references/web-export-headers.md`.
138
+ → per-host configs, the service-worker shim, COEP subresource fallout, a self-test snippet and the
139
+ Godot vs Unity web specifics: [references/web-export-headers.md](references/web-export-headers.md).
145
140
 
146
141
  ### Mobile
147
142
 
@@ -162,7 +157,8 @@ Keep the keystore + passwords out of git (CI secret). `versionCode` must increas
162
157
  then upload to App Store Connect / TestFlight via Xcode Organizer or **Transporter**. `CFBundleVersion`
163
158
  must increase per upload.
164
159
 
165
- → full keystore, Play App Signing, provisioning, TestFlight walkthrough: `references/mobile-and-desktop.md`.
160
+ → full keystore + Play App Signing, provisioning/TestFlight, Windows Authenticode and Linux
161
+ AppImage/Flatpak walkthroughs: [references/mobile-and-desktop.md](references/mobile-and-desktop.md).
166
162
 
167
163
  ## Store prep
168
164
 
@@ -174,7 +170,8 @@ must increase per upload.
174
170
  - **itch.io**: `butler push build/ user/game:channel --userversion 1.2.3` — channel name (e.g. `windows`, `html5`) picks the platform.
175
171
  - **Mac App Store**: Apple Distribution cert + App Sandbox entitlements (not Developer ID); notarization is handled by App Store submission.
176
172
 
177
- → Steamworks/SteamPipe VDF, butler channels, Play/App Store checklists: `references/stores-and-ci.md`.
173
+ → Steamworks/SteamPipe VDF, butler channels, Play/App Store submission checklists:
174
+ [references/stores-and-ci.md](references/stores-and-ci.md).
178
175
 
179
176
  ## CI/CD for builds
180
177
 
@@ -186,7 +183,7 @@ Headless export in GitHub Actions; version from the run/commit so every artifact
186
183
  - **Signing in CI**: import the keystore/cert from an encrypted secret at runtime, never commit it. macOS notarization runs on a `macos-latest` runner with `notarytool` + an App Store Connect API key.
187
184
  - **Versioning**: semver tag for releases; a monotonic build number from `github.run_number` or the git commit count feeds `versionCode`/`CFBundleVersion`/Steam build description.
188
185
 
189
- → ready workflows per engine: `references/stores-and-ci.md`.
186
+ → ready per-engine workflows with signing: [references/stores-and-ci.md](references/stores-and-ci.md).
190
187
 
191
188
  ## Ship-time optimization
192
189
 
@@ -195,26 +192,19 @@ Headless export in GitHub Actions; version from the run/commit so every artifact
195
192
  - **Startup**: small boot scene, stream/preload heavy assets, compress the `.pck`/data, use Ogg Vorbis over WAV. Web: enable gzip/brotli on `.wasm`/`.pck`.
196
193
  - **Budgets**: set a per-platform size budget (web especially — every MB is download latency) and check the final artifact against it before submitting.
197
194
 
198
- ## Anti-patterns — rationalization → STOP
195
+ ## Anti-patterns
199
196
 
200
- | Rationalization | STOP — do this instead |
197
+ | Anti-pattern | Do instead |
201
198
  | --- | --- |
202
- | "Web build works locally, host later" | Set COOP/COEP now; `file://`/simple servers hide the `SharedArrayBuffer` failure. |
203
- | "I'll add C# web export for Godot" | It doesn't exist in 4.x. GDScript for web, or no web. |
204
- | "Notarization is optional" | On macOS, no notarize+staple = Gatekeeper blocks the app for every user. |
205
- | "Ship an APK to the Play Store" | Play requires **AAB** for new apps and updates. |
206
- | "Commit the keystore so CI can sign" | Keystore/cert live in encrypted CI secrets, never in git. |
207
- | "Ship the Development/Debug config" | Ship Godot release / Unity IL2CPP release / Unreal **Shipping** — debug leaks console + is slow. |
208
- | "Templates are close enough (4.5 vs 4.5.1)" | Godot templates must match the editor build exactly or export breaks. |
209
- | "Uncompressed textures are fine" | Per-platform compression (ASTC/BCn/ETC2) — raw textures blow memory + size. |
210
- | "Reuse an old versionCode/CFBundleVersion" | Both must strictly increase or the store rejects the upload. |
211
-
212
- ## Related skills
213
-
214
- - `godot`, `unity`, `unreal` — write the game; this skill exports/ships what they build. Draw the line at the export button.
215
- - `deployment` — Docker/CI/hosting for **web apps & APIs**; borrow its GitHub Actions + header-setting patterns, but a WebAssembly game is static files, not a container.
216
- - `gamedev-shaders`, `gamedev-multiplayer`, `gamedev-physics` — runtime subsystems packaged into the ship artifact, not configured here.
217
- - `secure-coding` — signing-key and secret handling this skill assumes for keystores/certs in CI.
199
+ | Web build works locally, host it later | Set COOP/COEP now; `file://` and simple servers hide the `SharedArrayBuffer` failure. |
200
+ | Planning a Godot C# web export | It doesn't exist in 4.x. GDScript for web, or no web. |
201
+ | Treating notarization as optional | On macOS, no notarize + staple = Gatekeeper blocks the app for every user. |
202
+ | Shipping an APK to the Play Store | Play requires **AAB** for new apps and updates. |
203
+ | Committing the keystore so CI can sign | Keystore/cert live in encrypted CI secrets, never in git. |
204
+ | Shipping the Development/Debug config | Ship Godot release / Unity IL2CPP release / Unreal **Shipping** — debug leaks console + is slow. |
205
+ | Export templates "close enough" (4.5 vs 4.5.1) | Godot templates must match the editor build exactly or export breaks. |
206
+ | Uncompressed textures | Per-platform compression (ASTC/BCn/ETC2) — raw textures blow memory + size. |
207
+ | Reusing an old versionCode/CFBundleVersion | Both must strictly increase or the store rejects the upload. |
218
208
 
219
209
  ## Checklist
220
210
 
@@ -228,9 +218,3 @@ Headless export in GitHub Actions; version from the run/commit so every artifact
228
218
  - [ ] Store assets: icons, splash, screenshots, metadata, age rating done.
229
219
  - [ ] Version/build number set from CI and traceable.
230
220
  - [ ] Textures compressed per platform; build size within budget.
231
-
232
- ## References
233
-
234
- - `references/web-export-headers.md` — cross-origin isolation deep dive: COOP/COEP per host (Netlify/Vercel/nginx/itch/GitHub Pages), the `coi-serviceworker` shim, COEP subresource fallout, self-test snippet, Godot vs Unity web specifics.
235
- - `references/mobile-and-desktop.md` — Android keystore + Gradle template + Play App Signing; iOS provisioning/TestFlight; full macOS codesign→notarytool→staple; Windows Authenticode; Linux AppImage/Flatpak.
236
- - `references/stores-and-ci.md` — Steamworks/SteamPipe VDF upload, itch.io butler channels, Play/App Store submission checklists, and per-engine GitHub Actions headless-build workflows with signing.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: godot
3
- description: "Use when writing, reviewing, or debugging Godot 4.x games in GDScript (typed) or C# — nodes/scenes/custom Resources, autoload singletons and an EventBus, signals via Callable, @onready/@export/@tool, static typing, CharacterBody2D/3D + velocity + move_and_slide(), _process vs _physics_process, .tscn/.tres text formats, and headless GUT/gdUnit4 tests. Enforces Godot 4 APIs and rejects Godot 3 leftovers: yield→await, onready→@onready, .instance()→.instantiate(), KinematicBody→CharacterBody, Spatial→Node3D, string connect(\"sig\",obj,\"m\")→Callable. Triggers: 'write a Godot player controller', 'my move_and_slide does nothing', 'port this Godot 3 script to 4', 'connect a signal in Godot', 'GDScript won't type-check', 'CharacterBody2D won't move', 'add an autoload', 'escribe un script de Godot', 'por qué no se mueve mi personaje'. NOT Unity MonoBehaviour or Unreal (route to unity/unreal); NOT pure C++/CMake tooling unrelated to GDExtension (that is cpp); NOT shader code in .gdshader (that is gamedev-shaders)."
3
+ description: "Use when writing, reviewing, or debugging Godot 4.x games in GDScript or C# — scenes, nodes, custom Resources, autoload/EventBus signals, typed GDScript, CharacterBody2D/3D movement, GUT/gdUnit4 — or porting Godot 3 APIs to 4. NOT Unity/Unreal (that is `unity`/`unreal`), NOT `.gdshader` code (`gamedev-shaders`), NOT GDExtension C++ tooling (`cpp`)."
4
4
  tags: [godot, gdscript, game-dev, csharp, godot4]
5
5
  recommends: [gamedev-shaders, gamedev-multiplayer, gamedev-physics, gamedev-pathing, gamedev-shipping, game-design, cpp]
6
6
  profiles: [full]
@@ -9,9 +9,9 @@ origin: risco
9
9
 
10
10
  # Godot 4.x (GDScript + C#)
11
11
 
12
- Write, review, and debug Godot **4.x** games — 2D and 3D — the way the engine is designed:
13
- scenes as reusable units, composition over deep node trees, signals for decoupling, static
14
- typing for speed and safety. GDScript (typed) is primary; C# parity snippets sit beside it.
12
+ Build 2D and 3D the way the engine is designed: scenes as reusable units, composition over deep node
13
+ trees, signals for decoupling, static typing for speed and safety. GDScript (typed) is primary; C#
14
+ parity snippets sit beside it.
15
15
 
16
16
  ## Version contract — read first
17
17
 
@@ -111,8 +111,11 @@ Keep gameplay logic in nodes; let the bus carry the *notification*, not the beha
111
111
  children in `_init`.
112
112
  - **Prefer unique names**: mark a node **Unique Name in Owner** (`%`) and access `%HealthBar`
113
113
  instead of the fragile, refactor-breaking `get_node("../../UI/HealthBar")`. `$Foo` is fine for a
114
- direct child.
114
+ direct child — `get_node`/`$` on a missing path returns `null` and errors.
115
115
  - Cache node lookups in `@onready` vars; don't call `get_node` every frame.
116
+ - **Freeing**: call `queue_free()` (safe, end of frame), not `free()` mid-signal. Guard reused refs
117
+ with `is_instance_valid(node)`.
118
+ - Never busy-wait; `await get_tree().create_timer(1.0).timeout` or `await` a signal.
116
119
 
117
120
  ```gdscript
118
121
  extends CharacterBody2D
@@ -286,34 +289,12 @@ like any other library. That is native-tooling territory → pair with `cpp`.
286
289
  - Validate a project before shipping: open in the editor once (catches broken `.tscn`/`.tres`),
287
290
  then export-check per platform. Details → `references/export-and-testing.md`.
288
291
 
289
- ## Guardrails / gotchas
290
-
291
- - Freeing: call `queue_free()` (safe, end of frame), not `free()` mid-signal. Guard reused refs with
292
- `is_instance_valid(node)`.
293
- - Never busy-wait; `await get_tree().create_timer(1.0).timeout` or a signal.
294
- - `get_node`/`$` on a missing path returns `null` and errors — prefer `%UniqueName` and typed `@onready`.
295
- - Don't multiply by `delta` twice (see `move_and_slide`). Don't put physics in `_process`.
296
- - One `TileMapLayer` per layer; `TileMap` is deprecated.
297
- - Editor-touching code must guard on `Engine.is_editor_hint()` under `@tool`.
298
-
299
- ## Related skills
300
-
301
- - [`game-design`](../game-design/SKILL.md) — mechanics, loops, and feel *before* you script them.
302
- - [`gamedev-shaders`](../gamedev-shaders/SKILL.md) — `.gdshader` / visual shaders (out of scope here).
303
- - [`gamedev-physics`](../gamedev-physics/SKILL.md) — joints, RigidBody tuning, deep collision layers.
304
- - [`gamedev-pathing`](../gamedev-pathing/SKILL.md) — NavigationAgent, A*, steering beyond the basics.
305
- - [`gamedev-multiplayer`](../gamedev-multiplayer/SKILL.md) — `MultiplayerSynchronizer`/RPC/netcode.
306
- - [`gamedev-shipping`](../gamedev-shipping/SKILL.md) — store builds, signing, platform export at scale.
307
- - [`cpp`](../cpp/SKILL.md) — the GDExtension / `godot-cpp` native side and its CMake/build tooling.
308
-
309
- ## Checklist
310
-
311
- - [ ] Zero Godot 3 APIs — checked every line against the ban-list (`yield`/`onready`/`instance()`/`KinematicBody`/`Spatial`/string `connect`/`File`).
312
- - [ ] `move_and_slide()` called with **no args**; `velocity` set as a property; not multiplied by `delta` twice.
313
- - [ ] Overridden lifecycle methods call `super()` where a base defines them.
314
- - [ ] Signals connected via Callable (`x.sig.connect(_on_x)`), named past-tense, disconnected/one-shot where needed.
315
- - [ ] Everything typed (`:` / `:=`, typed params/returns, typed Arrays); no stray `Variant`.
316
- - [ ] Physics in `_physics_process`, visuals in `_process`; rate-based values scaled by `delta`.
317
- - [ ] Node access via `@onready` + `%UniqueName`, not deep `get_node("../..")` chains.
318
- - [ ] `.tscn`/`.tres` not hand-corrupted; project opens in-editor before export.
319
- - [ ] C# snippets use `partial`, `[Export]`/`[Signal]`, `base._Ready()`, PascalCase (if C# requested).
292
+ ## Hand off to
293
+
294
+ Mechanics, loops, and feel *before* you script them → [`game-design`](../game-design/SKILL.md).
295
+ `.gdshader` / visual shaders → [`gamedev-shaders`](../gamedev-shaders/SKILL.md). Joints, RigidBody
296
+ tuning, deep collision layers → [`gamedev-physics`](../gamedev-physics/SKILL.md). NavigationAgent,
297
+ A*, steering → [`gamedev-pathing`](../gamedev-pathing/SKILL.md). `MultiplayerSynchronizer`/RPC/netcode
298
+ → [`gamedev-multiplayer`](../gamedev-multiplayer/SKILL.md). Store builds, signing, platform export at
299
+ scale → [`gamedev-shipping`](../gamedev-shipping/SKILL.md). The GDExtension / `godot-cpp` native side
300
+ and its CMake/build tooling → [`cpp`](../cpp/SKILL.md).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: grants
3
- description: "Use when the goal is non-dilutive public or foundation funding — money you neither repay nor give equity for — and you must find a fit call, decide go/no-go, register an eligible entity, or write the application a reviewer scores against a published rubric (needs statement, logic model, SMART objectives, impact narrative, budget justification, LOI). Symptoms: a call with an Excellence/Impact/Implementation grid, a 3/5-per-criterion threshold, an indirect-cost line, a SAM.gov/UEI or BDNS lookup, an LOI that filters you before the full proposal. Triggers: 'find grants we qualify for', 'write the impact section so it scores above threshold', 'should we even bother applying to this call', 'build the budget justification', 'write a Letter of Inquiry', 'buscar la convocatòria a la BDNS', 'redactar la solicitud de subvención'. NOT equity rounds or investor pitches (that is fundraising), NOT a paying-customer SOW (that is proposals)."
3
+ description: "Use when pursuing non-dilutive public or foundation funding — money you neither repay nor give equity for: finding a fit call, go/no-go, registration (UEI/PIC/BDNS), or writing the rubric-scored application, logic model, budget justification, or LOI. NOT an equity round (that is `fundraising`), NOT a paying-customer SOW (that is `proposals`)."
4
4
  tags: [grants, subsidies, fundraising-nondilutive, public-funding, grant-writing]
5
5
  recommends: [fundraising, proposals, financial-model, pitch-deck, bookkeeping, contracts]
6
6
  origin: risco
@@ -12,19 +12,7 @@ origin: risco
12
12
 
13
13
  You are a **reviewer-minded application writer**. Before you write a word, reconstruct the scoring grid the evaluator will use and write backwards from the threshold they must clear to fund you. The output is never "a nice document" — it is a needs statement, a logic model, SMART objectives, an impact narrative, and a costed budget that each survive their own line of the rubric. Above-threshold is the bar; everything below it scores zero no matter how good the prose.
14
14
 
15
- ## When to use / When NOT to use
16
-
17
- Use when:
18
-
19
- - Building a fit shortlist of grants, public subsidies, or foundation calls an org qualifies for.
20
- - Deciding **go/no-go** on a specific call — eligibility, fit, effort vs. expected value, deadline vs. registration lead time.
21
- - Writing the application against a published evaluation rubric: needs, logic model, objectives, workplan, impact, budget justification.
22
- - Writing a **Letter of Inquiry / concept note** to a foundation.
23
- - Building the **logic model / theory of change / SMART objectives**, or the impact section.
24
- - Writing and justifying a **budget** so it survives allowability and indirect-cost rules.
25
- - Registering an eligible entity: US UEI via SAM.gov, EU PIC, finding the Spanish BDNS convocatoria.
26
-
27
- Do NOT use when — route instead:
15
+ ## Route elsewhere
28
16
 
29
17
  | The ask | Owner |
30
18
  |---|---|
@@ -36,8 +24,6 @@ Do NOT use when — route instead:
36
24
  | Post-award ledgers, fund accounting, spend tracking | `bookkeeping` |
37
25
  | Pricing, packaging, what to charge customers | `pricing` |
38
26
 
39
- The one-sentence boundary: `grants` owns the pursuit and writing of money scored by a **reviewer against a published rubric**; the moment it is **equity or a round** it is `fundraising`, and the moment the document persuades a **paying customer** it is `proposals`.
40
-
41
27
  ## The non-dilutive landscape
42
28
 
43
29
  Three lanes, and the rules live in different documents in each. Read the rule-document **and** the deadline-document before you draft — eligibility lives in one, the clock in the other.
@@ -162,10 +148,6 @@ Hard caps are real and enforced: Horizon Europe Part B is **40 pages** for stand
162
148
  | Generic LOI with no fit argument | LOIs filter on alignment first | Lead with funder-fit, then credibility, then impact |
163
149
  | Indirect line guessed or padded | Breaches the 15% de minimis with no negotiated rate | Use ≤15% MTDC, or declare your negotiated rate |
164
150
 
165
- ## Jurisdiction quick-reference
166
-
167
- EU (Funding & Tenders portal, PIC, Horizon evaluation criteria, page limits), US (Grants.gov, SAM.gov/UEI, 2 CFR 200 de minimis), and Spain (BDNS / infosubvenciones, `bases reguladoras` vs `convocatoria`, vocabulary) entry points and authoritative portals → `references/jurisdictions.md`.
168
-
169
151
  ## Optional self-check
170
152
 
171
153
  `scripts/verify.sh path/to/application.md --criteria "Excellence,Impact,Implementation"` is a read-only structural guardrail (not a grader): it flags output verbs leaking into an outcomes block, objectives missing a measurable target or date, an indirect line over 15% MTDC with no negotiated rate declared, and any named rubric criterion with no matching heading. It exits 0 on a clean or empty file. The real rigor is the capability eval, not the linter.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: harness
3
- description: "Use to control, govern or maintain a workspace's harness — software or non-code (a company, an ops desk, a knowledge vault). The harness is the control plane: the `01-TOOLS/` tooling layer, the `02-DOCS/` chaos→knowledge wiki, and the root Knowledge map. It audits, migrates legacy `XX-*` folders, scaffolds provider tooling, sweeps the inbox, and generates root CLAUDE.md/AGENTS.md. Brownfield-first. NOT the bootstrap front door (that is `init`, which hands off here)."
3
+ description: "Use when governing a workspace's control plane, code or not — the `01-TOOLS/` tooling layer, the `02-DOCS/` chaos→knowledge wiki, the root Knowledge map. Audits it, migrates legacy `XX-*` folders, scaffolds provider tooling, sweeps the inbox, writes root CLAUDE.md/AGENTS.md. NOT the bootstrap front door (that is `init`, which hands off here)."
4
4
  tags: [harness, company, ops, docs, wiki, connect, tools, knowledge]
5
5
  recommends: [init]
6
6
  profiles: [minimal, core, full]
@@ -18,8 +18,9 @@ The **harness** is the control plane of a workspace. A workspace need not be cod
18
18
 
19
19
  Two on-ramps feed it. **Ingest**: the user drops any file in any format into `inbox/`, and the
20
20
  Auto-Ingest Sweep extracts, classifies, cross-links and compiles it — then goes for a walk,
21
- discovering un-ingested documents anywhere in the workspace, bounded by `.rscignore` and
22
- de-duplicated through the `wiki/.ingested.json` ledger. **Worklog**: every meaningful session of
21
+ discovering un-ingested documents anywhere in the workspace, bounded by `.rscignore` (baseline:
22
+ `references/ingest-ignore-defaults.md`) and de-duplicated through the `wiki/.ingested.json`
23
+ ledger. **Worklog**: every meaningful session of
23
24
  work is itself a raw source in `raw/worklog/`, captured on `PreCompact`/`SessionEnd`, at a commit
24
25
  milestone, or by the daily curation pass.
25
26
 
@@ -35,7 +36,8 @@ The **harness** is the control plane of a workspace. A workspace need not be cod
35
36
 
36
37
  It compounds on its own: every Ingest, Sweep and Query triggers a Maintenance Pass (lint, score
37
38
  recomputation, gap detection, Related sweep), a Micro-Improve runs every N interactions, and Deep
38
- Improve runs on request or on the daily schedule. Protocol → `references/wiki-protocol.md`;
39
+ Improve runs on request or on the daily schedule (`references/daily-curation-automation.md` — on
40
+ Claude Code, wire it via the `schedule` skill). Protocol → `references/wiki-protocol.md`;
39
41
  formats → `references/ingest-formats.md`; capture → `references/wiki-worklog-template.md`;
40
42
  vault → `references/obsidian-scaffolding.md`.
41
43
  - **The Knowledge map** — the `## Knowledge map` section of the root `CLAUDE.md` that indexes the wiki (including the `harness/` topic) and is read by every other skill before it works in its area.
@@ -78,45 +80,7 @@ for harness-level choices, but defer concrete deploy mechanics to `deployment`,
78
80
 
79
81
  The skill proposes, the user confirms, the skill executes. Every destructive operation (deleting a legacy folder, merging into an existing `CLAUDE.md`) requires explicit consent quoted back from the user, not inferred.
80
82
 
81
- ## When to use
82
-
83
- - A workspace has grown organically and needs the canonical `01-TOOLS` / `02-DOCS` structure.
84
- - Old numbered folders (`00-TOOLS`, `03-NOTES`, `04-LEGACY`…) exist and need to be consolidated.
85
- - A new project is being kicked off and needs the harness from day one.
86
- - Provider integrations exist in code but there's no operational tooling for them.
87
-
88
- **Do NOT use when:**
89
- - The user only wants to add a single tool — they can `cp -r 01-TOOLS/_TEMPLATE 01-TOOLS/<X>` manually.
90
- - The user wants to refactor runtime code — this skill is operational tooling only, never runtime.
91
-
92
- ## Architecture
93
-
94
- ```
95
- harness/
96
- ├── SKILL.md ← this file (the protocol)
97
- ├── references/
98
- │ ├── providers.yaml ← detector catalog with full file bodies per provider
99
- │ ├── claude-md-template.md ← root CLAUDE.md template
100
- │ ├── agents-md-template.md ← root AGENTS.md template
101
- │ ├── tools-readme-template.md ← 01-TOOLS/README.md catalog template
102
- │ ├── audit-report-template.md ← exact format of the audit report shown to user
103
- │ ├── wiki-protocol.md ← embedded wiki protocol + Inbox/Worklog Sweep + Continuous Improvement
104
- │ ├── ingest-formats.md ← multiformat Fetch (PDF, image, CSV, JSON, html…)
105
- │ ├── ingest-ignore-defaults.md ← what the sweep skips by default (the .rscignore baseline)
106
- │ ├── inbox-readme-template.md ← the inbox/README.md drop-zone contract
107
- │ ├── wiki-raw-template.md ← format for raw/<topic>/*.md
108
- │ ├── wiki-worklog-template.md ← format for raw/worklog/*.md (work-driven capture)
109
- │ ├── wiki-article-template.md ← format for wiki/<topic>/*.md (OKF frontmatter + markdown links)
110
- │ ├── wiki-index-template.md ← format for wiki/index.md (machine catalog; .base = human nav)
111
- │ ├── obsidian-scaffolding.md ← .base views, .gitignore, attachments, .obsidian config
112
- │ ├── daily-curation-automation.md ← portable scheduled compounding pass (the third trigger)
113
- │ ├── wiki-archive-template.md ← format for archived query answers
114
- │ └── wiki-gaps-template.md ← format for wiki/gaps.md (Knowledge Gaps log)
115
- ├── assets/
116
- │ └── _TEMPLATE/ ← per-tool boilerplate (cp -r seed)
117
- └── examples/
118
- └── audit-example.md ← walked-through audit on a synthetic project
119
- ```
83
+ **Out of scope:** adding a single tool — the user does `cp -r 01-TOOLS/_TEMPLATE 01-TOOLS/<X>` manually, no need for the full protocol; and refactoring runtime code — this skill is operational tooling only, never runtime.
120
84
 
121
85
  ## Protocol — five phases
122
86
 
@@ -148,7 +112,7 @@ Walk the workspace root and gather:
148
112
 
149
113
  Render **two artifacts**:
150
114
 
151
- 1. **A compact text summary in the conversation** — 1–3 sentences per section, the full destructive-ops list, the consent prompt. This keeps the terminal flow fast.
115
+ 1. **A compact text summary in the conversation** — 1–3 sentences per section, the full destructive-ops list, the consent prompt, in the format of `references/audit-report-template.md`. This keeps the terminal flow fast. A full walked-through audit on a synthetic project: `examples/audit-example.md`.
152
116
  2. **A full HTML report at `<workspace_root>/02-DOCS/audits/audit-YYYY-MM-DD-HHMM.html`** using `references/audit-report-template.html`. Self-contained (inline CSS, no CDN). Includes color-coded action tables, collapsible legacy-folder sections, highlighted destructive ops, and the consent prompt. **Gitignored** (per-run artifact).
153
117
 
154
118
  If `02-DOCS/audits/` does not exist, create it (with `.gitkeep`) before writing — even on first run, before Phase 4 builds the rest of `02-DOCS/`. Same for `02-DOCS/` itself: the audits subdirectory is the only piece allowed to materialize during Phase 2; the rest waits until APPLY. Never write the audit HTML at the workspace root.
@@ -184,7 +148,7 @@ Execute in this exact order. Each step writes to disk; abort and report on first
184
148
  1. **Root files.**
185
149
  - If `CLAUDE.md` does not exist: render `references/claude-md-template.md` with the scan data and write it.
186
150
  - If `CLAUDE.md` exists: read it, compute a section-level diff against the template, and apply ONLY additive merges. Never delete user content. Never overwrite a section the user has customized. Append missing sections at the end with an `<!-- added by harness YYYY-MM-DD -->` marker.
187
- - Same logic for `AGENTS.md`.
151
+ - Same logic for `AGENTS.md`, rendered from `references/agents-md-template.md`.
188
152
  2. **Create `01-TOOLS/` skeleton.**
189
153
  - Create `01-TOOLS/` directory.
190
154
  - Copy `assets/_TEMPLATE/` to `01-TOOLS/_TEMPLATE/`. This template is **generic boilerplate with placeholders (`<NOMBRE_TOOL>`, `<TOOL>_API_KEY`)**. The user copies it manually when adding a tool NOT in the catalog. The skill itself does NOT use `_TEMPLATE/` to generate the detected tools — those come from `providers.yaml`.
@@ -198,7 +162,7 @@ Execute in this exact order. Each step writes to disk; abort and report on first
198
162
  4. **Migrate legacy `XX-*` folders.**
199
163
  - For each TOOLING file: move to its mapped destination in `01-TOOLS/<X>/`. If the destination file already exists from step 3, the legacy file goes to `01-TOOLS/<X>/migrated/<original-name>` so nothing is overwritten. The user resolves manually.
200
164
  - For each DOCS file: move to `02-DOCS/raw/migrated/<original-folder>/<path>`.
201
- - For each AMBIGUOUS file: leave in place. Record in the verification report.
165
+ - For each AMBIGUOUS file: leave in place. Record in the verification report. Never force-classify — a file moved to the wrong place is harder to recover than one left where the user put it.
202
166
  5. **Verify migration.**
203
167
  - Count files moved vs files originally present. They must match (moved + ambiguous-remaining = original).
204
168
  - If counts don't match, abort and report. Don't proceed to deletion.
@@ -216,7 +180,14 @@ Execute in this exact order. Each step writes to disk; abort and report on first
216
180
  - Each `01-TOOLS/<TOOL>/README.md` and `CREDENTIALS.md`.
217
181
  - Every file under `02-DOCS/raw/migrated/` (from legacy `XX-*` migration in step 4).
218
182
  - Root `CLAUDE.md` and `AGENTS.md`.
219
- - Use the templates in `references/wiki-*.md` verbatim. Do NOT invent a different format.
183
+ - Use these templates verbatim; `wiki-protocol.md` is the source of truth for `02-DOCS`, so do NOT invent a different structure or format:
184
+ - `references/wiki-raw-template.md` — `raw/<topic>/*.md`.
185
+ - `references/wiki-article-template.md` — `wiki/<topic>/*.md` (OKF v0.1 frontmatter + relative markdown links + `## Related`).
186
+ - `references/wiki-index-template.md` — `wiki/index.md` (machine catalog; the `.base` views are the human navigation).
187
+ - `references/wiki-gaps-template.md` — `wiki/gaps.md` (Knowledge Gaps log).
188
+ - `references/wiki-dashboard-template.html` — the live wiki dashboard, regenerated by Maintenance Pass.
189
+ - `references/wiki-archive-template.html` — archived query answers (point-in-time, never edited).
190
+ - `references/wiki-deep-improve-report-template.html` — Deep Improve run reports.
220
191
 
221
192
  ### Phase 5 — VERIFY
222
193
 
@@ -304,20 +275,13 @@ Opt out of the size nudge with `.rsc/.no-claudemd-check`.
304
275
 
305
276
  ## Invariants
306
277
 
307
- These are not style preferences you can weigh against convenience — each one exists because
308
- breaking it destroys something the user cannot get back. Violating any aborts the run.
309
-
310
- 1. **Audit before action.** Nothing is written before the AUDIT is rendered and CONSENT is given.
311
- 2. **Explicit consent only.** Silence, ambiguity, "ok" all mean NO. Only the exact-form strings count as yes.
312
- 3. **No `.env` real, ever.** The skill writes `.env.example` only. Real credentials are the user's responsibility.
313
- 4. **No speculative tools.** A tool is created if and only if the detector found evidence in the user's code. No "we should probably have a Sentry tool too".
314
- 5. **No overwrite without merge.** Existing `CLAUDE.md`, `AGENTS.md`, or tool files are merged additively. The skill never deletes user content.
315
- 6. **Destructive ops require a second consent quoting the path.** "Yes, delete `00-TOOLS`" is different from a generic "yes, proceed".
316
- 7. **Ambiguous files preserve the legacy folder.** Don't force-classify. If you can't classify with confidence, leave it.
317
- 8. **Idempotent.** Running the skill twice produces no extra side effects. Re-scanning a project already canonical detects "nothing to do".
318
- 9. **Out-of-scope dirs are invisible.** `node_modules/`, `.venv/`, `.next/`, `__pycache__/`, `.git/`, `dist/`, `build/`, `.dart_tool/` are never read for detection and never touched.
319
- 10. **`references/wiki-protocol.md` is the source of truth for `02-DOCS`.** Do not invent a different wiki structure.
320
- 11. **Subproject internals are out of scope.** `.env.example`, `requirements.txt`, `package.json`, source files inside subprojects are READ for detection only. They are NEVER moved, renamed, modified, or deleted. The skill operates exclusively on workspace-root artifacts (`CLAUDE.md`, `AGENTS.md`, `01-TOOLS/`, `02-DOCS/`, and `XX-*` legacy folders at the root level).
278
+ The consent, merge and `.env` rules live with the phases that enforce them above. These four are
279
+ scope rules that no single phase owns, and breaking one destroys something the user cannot get back:
280
+
281
+ 1. **No speculative tools.** A tool is created if and only if the detector found evidence in the user's code. No "we should probably have a Sentry tool too".
282
+ 2. **Idempotent.** Running the skill twice produces no extra side effects. Re-scanning a project already canonical detects "nothing to do".
283
+ 3. **Out-of-scope dirs are invisible.** `node_modules/`, `.venv/`, `.next/`, `__pycache__/`, `.git/`, `dist/`, `build/`, `.dart_tool/` are never read for detection and never touched.
284
+ 4. **Subproject internals are out of scope.** `.env.example`, `requirements.txt`, `package.json`, source files inside subprojects are READ for detection only. They are NEVER moved, renamed, modified, or deleted. The skill operates exclusively on workspace-root artifacts (`CLAUDE.md`, `AGENTS.md`, `01-TOOLS/`, `02-DOCS/`, and `XX-*` legacy folders at the root level).
321
285
 
322
286
  ## Red flags — abort and re-plan
323
287
 
@@ -327,30 +291,7 @@ If any of these occur, stop and report:
327
291
  - The AUDIT shows zero detected tools AND zero legacy folders AND `CLAUDE.md`/`AGENTS.md` already exist → there's nothing for the skill to do. Tell the user.
328
292
  - The user types anything ambiguous after AUDIT → do not infer consent.
329
293
  - Migration verification (step 5 of APPLY) shows file count mismatch → abort, don't delete anything.
330
- - The catalog has no entry for a provider obviously present in code → tell the user, suggest adding a catalog entry, don't fake one.
331
-
332
- ## References
333
-
334
- - `references/providers.yaml` — full provider catalog with detectors and per-file content. Edit this to add a new provider; don't edit `SKILL.md`.
335
- - `references/claude-md-template.md` — root `CLAUDE.md` template.
336
- - `references/agents-md-template.md` — root `AGENTS.md` template.
337
- - `references/tools-readme-template.md` — `01-TOOLS/README.md` catalog template.
338
- - `references/audit-report-template.md` — text summary format for the in-conversation audit summary.
339
- - `references/audit-report-template.html` — HTML format for the full per-run audit artifact written to `02-DOCS/audits/`.
340
- - `references/wiki-protocol.md` — embedded protocol for the `02-DOCS/` chaos→knowledge layer (initialization, **Inbox Sweep**, **Worklog Sweep**, ingest, query, lint, **Continuous Improvement**: Maintenance Pass, Micro-Improve, Deep Improve; Obsidian-native conventions).
341
- - `references/ingest-formats.md` — multiformat Fetch: how any input (PDF, image, CSV/Excel, JSON/API, html, docx, email, unknown binary) becomes `raw/` markdown with the original preserved in `_originals/`.
342
- - `references/inbox-readme-template.md` — the `inbox/README.md` drop-zone contract shown to the user.
343
- - `references/wiki-raw-template.md` — format for `02-DOCS/raw/<topic>/*.md`.
344
- - `references/wiki-worklog-template.md` — format for `02-DOCS/raw/worklog/*.md` (the work-driven capture; the session as a raw source).
345
- - `references/wiki-article-template.md` — format for `02-DOCS/wiki/<topic>/*.md` (OKF v0.1 frontmatter + relative markdown links + `## Related`).
346
- - `references/wiki-index-template.md` — format for `02-DOCS/wiki/index.md` (machine catalog; the `.base` views are the human navigation).
347
- - `references/obsidian-scaffolding.md` — the vault scaffolding: `.base` views, `.gitignore`, `attachments/`, `.obsidian` config (no vector DB / RAG).
348
- - `references/daily-curation-automation.md` — portable scheduled compounding pass; on Claude Code wired via the `schedule` skill.
349
- - `references/wiki-archive-template.html` — HTML format for archived query answers (point-in-time, never edited).
350
- - `references/wiki-dashboard-template.html` — HTML format for the live wiki dashboard, regenerated by Maintenance Pass.
351
- - `references/wiki-deep-improve-report-template.html` — HTML format for Deep Improve run reports.
352
- - `references/wiki-gaps-template.md` — format for `02-DOCS/wiki/gaps.md` (Knowledge Gaps log).
353
- - `assets/_TEMPLATE/` — the boilerplate copied into every new tool.
294
+ - The catalog has no entry for a provider obviously present in code → tell the user, suggest adding an entry to `references/providers.yaml` (that file, never `SKILL.md`, is where providers are added), don't fake one.
354
295
 
355
296
  This skill is fully self-contained. No external sub-skill required.
356
297
 
@@ -28,7 +28,7 @@ should_trigger:
28
28
  should_not_trigger:
29
29
  - prompt: "I want to add a single Sentry tool folder to 01-TOOLS. Just copy the template and wire it up."
30
30
  route_to: "none"
31
- why: "SKILL.md 'Do NOT use' is explicit: adding a single tool is a manual `cp -r 01-TOOLS/_TEMPLATE 01-TOOLS/<X>` — the full SCAN/AUDIT/APPLY harness is overkill, no skill needed."
31
+ why: "SKILL.md 'Out of scope' is explicit: adding a single tool is a manual `cp -r 01-TOOLS/_TEMPLATE 01-TOOLS/<X>` — the full SCAN/AUDIT/APPLY harness is overkill, no skill needed."
32
32
 
33
33
  - prompt: "Refactor the runtime database layer in my FastAPI service to use async SQLAlchemy sessions."
34
34
  route_to: "fastapi"