@neikyun/ciel 6.2.4 → 6.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/.claude/settings.json +16 -3
- package/assets/AGENTS.md +1 -1
- package/assets/CLAUDE.md +5 -9
- package/assets/commands/ciel-audit.md +195 -59
- package/assets/commands/ciel-migrate.md +35 -0
- package/assets/commands/ciel-status.md +40 -0
- package/assets/commands/ciel-update.md +4 -0
- package/assets/dist/plugin/index.js +7 -9
- package/assets/platforms/opencode/.opencode/agents/ciel-critic.md +320 -483
- package/assets/platforms/opencode/.opencode/agents/ciel-explorer.md +114 -96
- package/assets/platforms/opencode/.opencode/agents/ciel-improver.md +204 -273
- package/assets/platforms/opencode/.opencode/agents/ciel-researcher.md +259 -270
- package/assets/platforms/opencode/.opencode/agents/ciel.md +1 -1
- package/assets/platforms/opencode/.opencode/commands/ciel-audit.md +300 -10
- package/assets/platforms/opencode/.opencode/commands/ciel-create-skill.md +75 -10
- package/assets/platforms/opencode/.opencode/commands/ciel-eval.md +71 -10
- package/assets/platforms/opencode/.opencode/commands/ciel-improve.md +7 -13
- package/assets/platforms/opencode/.opencode/commands/ciel-init.md +165 -11
- package/assets/platforms/opencode/.opencode/commands/ciel-migrate.md +40 -0
- package/assets/platforms/opencode/.opencode/commands/ciel-refresh.md +89 -13
- package/assets/platforms/opencode/.opencode/commands/ciel-status.md +45 -0
- package/assets/platforms/opencode/.opencode/commands/ciel-update.md +31 -18
- package/assets/platforms/opencode/.opencode/commands/ciel.md +1 -2
- package/assets/platforms/opencode/.opencode/plugins/ciel.ts +146 -0
- package/assets/platforms/opencode/AGENTS.md +2 -2
- package/assets/skills/ciel/SKILL.md +32 -2
- package/assets/skills/ciel/reference.md +33 -5
- package/dist/cli/claude.d.ts.map +1 -1
- package/dist/cli/claude.js +0 -1
- package/dist/cli/claude.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +0 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/opencode.d.ts.map +1 -1
- package/dist/cli/opencode.js +0 -1
- package/dist/cli/opencode.js.map +1 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +7 -9
- package/dist/plugin/index.js.map +1 -1
- package/package.json +3 -2
- package/assets/commands/ciel-recommend.md +0 -95
- package/assets/platforms/opencode/.opencode/commands/ciel-recommend.md +0 -18
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Isolated-context researcher subagent for Ciel. Dispatch for RECHERCHE step (Standard + Critical tasks) — official docs, anti-patterns, framework philosophy, version changelog, source credibility. Also owns doc-validator-official (anti-hallucination API check). WebFetch + WebSearch enabled, no write/edit/bash.
|
|
3
3
|
mode: subagent
|
|
4
|
+
model: anthropic/claude-haiku-4-5-20251001
|
|
4
5
|
temperature: 0.2
|
|
5
6
|
tools:
|
|
6
7
|
write: false
|
|
@@ -116,9 +117,11 @@ Internal skills can produce more; `synthesize-findings` compresses.
|
|
|
116
117
|
|
|
117
118
|
# research-web-sources — Official docs + best practices
|
|
118
119
|
|
|
119
|
-
|
|
120
|
+
## What this covers
|
|
121
|
+
Meta-research skill #1 of 6. Fetches the primary source (official docs) + best-practice articles for a specific library+version. This is the highest-credibility research step — if official docs answer the question, stop here.
|
|
120
122
|
|
|
121
|
-
|
|
123
|
+
## Core principle
|
|
124
|
+
**Official docs are the source of truth.** If docs exist and answer the question, don't search further. Escalate to GitHub issues and forums only when docs are silent.
|
|
122
125
|
|
|
123
126
|
## Inputs
|
|
124
127
|
|
|
@@ -129,13 +132,11 @@ VERSION: [exact installed version — from avec-quoi-versioner]
|
|
|
129
132
|
QUESTION: [specific question]
|
|
130
133
|
```
|
|
131
134
|
|
|
132
|
-
---
|
|
133
|
-
|
|
134
135
|
## Process
|
|
135
136
|
|
|
136
137
|
### 1. Fetch official documentation
|
|
137
138
|
|
|
138
|
-
- Primary: WebFetch the official docs URL
|
|
139
|
+
- Primary: WebFetch the official docs URL
|
|
139
140
|
- If docs for the exact version aren't available, fetch the latest + note the version gap
|
|
140
141
|
- Focus on the specific API/feature in question — don't fetch whole doc site
|
|
141
142
|
|
|
@@ -144,15 +145,11 @@ QUESTION: [specific question]
|
|
|
144
145
|
Queries (run at least 2):
|
|
145
146
|
- `[feature] [lib] [version] best practices`
|
|
146
147
|
- `[feature] [lib] idiomatic way`
|
|
147
|
-
- Quote multiple sources if available
|
|
148
148
|
|
|
149
149
|
### 3. Identify framework philosophy
|
|
150
150
|
|
|
151
151
|
From docs: how does this framework WANT this problem solved? Not just what the API is — the intended approach.
|
|
152
152
|
|
|
153
|
-
- "In Ktor 3, pagination is handled via query params on routes, leveraging the built-in `call.parameters` API. The framework prefers explicit over magic."
|
|
154
|
-
- "In React 19, state updates are co-located with components via hooks; global state via Context or external stores like Zustand is reserved for truly cross-cutting concerns."
|
|
155
|
-
|
|
156
153
|
### 4. Extract anti-patterns (MANDATORY — at least 1)
|
|
157
154
|
|
|
158
155
|
Queries:
|
|
@@ -161,42 +158,52 @@ Queries:
|
|
|
161
158
|
|
|
162
159
|
Cite at least one documented anti-pattern with source URL.
|
|
163
160
|
|
|
164
|
-
|
|
161
|
+
## Common patterns
|
|
165
162
|
|
|
166
|
-
|
|
163
|
+
### Good research output
|
|
167
164
|
|
|
168
165
|
```
|
|
169
|
-
## RESEARCH —
|
|
166
|
+
## RESEARCH — React 19
|
|
170
167
|
|
|
171
168
|
### FINDINGS
|
|
172
|
-
-
|
|
173
|
-
-
|
|
169
|
+
- Server Components are the default in React 19 — no "use client" needed for static rendering
|
|
170
|
+
- `use()` hook replaces useEffect for data fetching in client components
|
|
171
|
+
- Source: https://react.dev/reference/rsc/server-components (React 19.0)
|
|
174
172
|
|
|
175
173
|
### ANTI-PATTERNS À ÉVITER
|
|
176
|
-
-
|
|
174
|
+
- useEffect + fetch waterfall — use Server Components instead — official docs
|
|
175
|
+
- "use server" on components — this directive is for Server Functions, not components — react.dev
|
|
177
176
|
|
|
178
177
|
### PHILOSOPHY DU FRAMEWORK
|
|
179
|
-
|
|
178
|
+
React 19 pushes data fetching to the server. Client components handle interactivity only.
|
|
179
|
+
```
|
|
180
180
|
|
|
181
|
-
###
|
|
182
|
-
- <import/function verified at: URL or file:line>
|
|
183
|
-
- <response format verified from: source>
|
|
181
|
+
### Bad research output
|
|
184
182
|
|
|
185
|
-
|
|
186
|
-
|
|
183
|
+
```
|
|
184
|
+
FINDINGS:
|
|
185
|
+
- React is good for UI
|
|
186
|
+
- You can use hooks
|
|
187
187
|
```
|
|
188
188
|
|
|
189
|
-
|
|
189
|
+
Problems: no version, no specific API, no source URLs, no anti-patterns.
|
|
190
190
|
|
|
191
|
-
##
|
|
191
|
+
## Anti-patterns
|
|
192
192
|
|
|
193
|
-
- **
|
|
194
|
-
- **
|
|
195
|
-
- **
|
|
196
|
-
- **
|
|
197
|
-
- **
|
|
193
|
+
- **No version stamp** — every finding must include the version it applies to
|
|
194
|
+
- **Filling gaps with assumptions** — if docs don't cover it, say so explicitly
|
|
195
|
+
- **Preamble** — return only the structured report, no "I found that..."
|
|
196
|
+
- **Fetching entire doc site** — focus on the specific API/feature in question
|
|
197
|
+
- **Minimum output not met** — ≥ 1 WebSearch result + ≥ 1 documented finding required
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
## How to verify
|
|
200
|
+
|
|
201
|
+
- [ ] ≥ 1 WebSearch performed?
|
|
202
|
+
- [ ] ≥ 1 finding with version stamp?
|
|
203
|
+
- [ ] ≥ 1 anti-pattern cited?
|
|
204
|
+
- [ ] Source URLs present?
|
|
205
|
+
- [ ] Framework philosophy stated (1-2 sentences)?
|
|
206
|
+
- [ ] No preamble (structured report only)?
|
|
200
207
|
|
|
201
208
|
## When triggered
|
|
202
209
|
|
|
@@ -204,6 +211,11 @@ Cite at least one documented anti-pattern with source URL.
|
|
|
204
211
|
- User explicit request: "research <lib> <feature>"
|
|
205
212
|
- When task mentions a library that's not fully understood
|
|
206
213
|
|
|
214
|
+
## References
|
|
215
|
+
|
|
216
|
+
- Tier-1 source credibility — validate-source-credibility skill
|
|
217
|
+
- Ciel waterfall: research-web-sources → research-github-issues → research-forums → synthesize-findings
|
|
218
|
+
|
|
207
219
|
---
|
|
208
220
|
|
|
209
221
|
### Skill: `research-github-issues`
|
|
@@ -211,9 +223,11 @@ Cite at least one documented anti-pattern with source URL.
|
|
|
211
223
|
|
|
212
224
|
# research-github-issues — GitHub issues prior art
|
|
213
225
|
|
|
226
|
+
## What this covers
|
|
214
227
|
Meta-research skill #2 of 6. When official docs don't cover an edge case, GitHub issues often have the answer — someone else hit the same problem.
|
|
215
228
|
|
|
216
|
-
|
|
229
|
+
## Core principle
|
|
230
|
+
**Every bug you encounter, someone else encountered first.** GitHub issues are the world's largest debugging knowledge base. Check before investigating from scratch.
|
|
217
231
|
|
|
218
232
|
## Inputs
|
|
219
233
|
|
|
@@ -223,36 +237,24 @@ VERSION: [exact installed version]
|
|
|
223
237
|
SYMPTOM: [error message OR unexpected behavior description]
|
|
224
238
|
```
|
|
225
239
|
|
|
226
|
-
---
|
|
227
|
-
|
|
228
240
|
## Process
|
|
229
241
|
|
|
230
242
|
### 1. Identify the repo
|
|
231
243
|
|
|
232
|
-
From the lib name, resolve to the GitHub repo
|
|
233
|
-
- `ktor` → `ktorio/ktor`
|
|
234
|
-
- `react` → `facebook/react`
|
|
235
|
-
- `tanstack-query` → `TanStack/query`
|
|
236
|
-
|
|
237
|
-
Check `package.json` `repository` field or docs for canonical repo URL.
|
|
244
|
+
From the lib name, resolve to the GitHub repo. Check `package.json` `repository` field for canonical URL.
|
|
238
245
|
|
|
239
246
|
### 2. Search issues
|
|
240
247
|
|
|
241
|
-
Queries (via WebSearch or WebFetch
|
|
242
|
-
|
|
243
|
-
- `site:github.com/<repo>/issues <symptom>`
|
|
248
|
+
Queries (via WebSearch or WebFetch):
|
|
249
|
+
- `site:github.com/<repo>/issues <symptom>`
|
|
244
250
|
- `site:github.com/<repo>/issues <feature> <version>`
|
|
245
251
|
|
|
246
|
-
Include both:
|
|
247
|
-
- `is:open` — active, not yet resolved
|
|
248
|
-
- `is:closed` — resolved (read how!)
|
|
252
|
+
Include both `is:open` and `is:closed`.
|
|
249
253
|
|
|
250
254
|
### 3. Classify each relevant issue
|
|
251
255
|
|
|
252
|
-
For each issue found:
|
|
253
|
-
|
|
254
256
|
- **Open + active** → known problem, official fix pending → workaround needed now
|
|
255
|
-
- **Closed + merged fix** → version N included fix; check if our version
|
|
257
|
+
- **Closed + merged fix** → version N included fix; check if our version ≥ N
|
|
256
258
|
- **Closed with workaround** → apply workaround (cite link)
|
|
257
259
|
- **Closed as "not a bug"** → our usage is wrong (read the comment)
|
|
258
260
|
- **Closed as duplicate** → follow to the parent issue
|
|
@@ -264,45 +266,49 @@ If an issue references a PR, check the PR:
|
|
|
264
266
|
- Draft → fix is in progress
|
|
265
267
|
- Closed unmerged → fix abandoned, need workaround
|
|
266
268
|
|
|
267
|
-
|
|
269
|
+
## Common patterns
|
|
268
270
|
|
|
269
|
-
|
|
271
|
+
### Good GitHub issues research
|
|
270
272
|
|
|
271
273
|
```
|
|
272
|
-
## GITHUB ISSUES RESEARCH —
|
|
274
|
+
## GITHUB ISSUES RESEARCH — @auth/core
|
|
273
275
|
|
|
274
276
|
### Relevant issues
|
|
275
277
|
| # | Title | Status | Our impact |
|
|
276
278
|
|---|-------|--------|-----------|
|
|
277
|
-
| #1234 |
|
|
278
|
-
| #5678 |
|
|
279
|
-
| #9012 | <title> | closed (not a bug) | Our usage is non-idiomatic — refactor needed |
|
|
279
|
+
| #1234 | useSession throws on expired tokens | closed in v4.0.1 | Our version is 4.0.0 — upgrade needed |
|
|
280
|
+
| #5678 | OAuth callback fails with PKCE | open | Matches our symptom — apply workaround |
|
|
280
281
|
|
|
281
282
|
### Workarounds applicable
|
|
282
|
-
-
|
|
283
|
+
- Add `skipCSRFCheck: true` to OAuth config — source: #5678 comment by maintainer
|
|
283
284
|
|
|
284
285
|
### Fix version ranges
|
|
285
|
-
-
|
|
286
|
-
|
|
286
|
+
- useSession fix in v4.0.1 — our version: v4.0.0 — suggest upgrade
|
|
287
|
+
```
|
|
287
288
|
|
|
288
|
-
###
|
|
289
|
-
- <PR #> — <title> — status: <draft | review | merged>
|
|
289
|
+
### Bad research
|
|
290
290
|
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
```
|
|
292
|
+
Found some issues. One was closed. Should be fine.
|
|
293
293
|
```
|
|
294
294
|
|
|
295
|
-
|
|
295
|
+
Problems: no issue numbers, no status classification, no version check, no workarounds.
|
|
296
296
|
|
|
297
|
-
##
|
|
297
|
+
## Anti-patterns
|
|
298
298
|
|
|
299
|
-
- **
|
|
300
|
-
- **
|
|
301
|
-
- **
|
|
302
|
-
- **
|
|
303
|
-
- **Empty result
|
|
299
|
+
- **No links** — every issue reference needs a URL
|
|
300
|
+
- **Single comment as truth** — check for maintainer response + consensus
|
|
301
|
+
- **Ignoring version ranges** — "fixed in 3.x" could mean 3.0 or 3.5 — read the changelog
|
|
302
|
+
- **Treating community workaround as gospel** — verify it works; prefer official fix
|
|
303
|
+
- **Empty result fabricated** — if no relevant issues found, report "no matches"
|
|
304
304
|
|
|
305
|
-
|
|
305
|
+
## How to verify
|
|
306
|
+
|
|
307
|
+
- [ ] ≥ 1 GitHub issue found and classified?
|
|
308
|
+
- [ ] Each issue has URL, status, and impact assessment?
|
|
309
|
+
- [ ] Version ranges checked (our version vs fix version)?
|
|
310
|
+
- [ ] Workarounds documented with source links?
|
|
311
|
+
- [ ] Linked PRs checked (merged/draft/closed)?
|
|
306
312
|
|
|
307
313
|
## When triggered
|
|
308
314
|
|
|
@@ -318,9 +324,11 @@ If an issue references a PR, check the PR:
|
|
|
318
324
|
|
|
319
325
|
# research-forums — Community discussion fallback
|
|
320
326
|
|
|
327
|
+
## What this covers
|
|
321
328
|
Meta-research skill #3 of 6. When official docs + GitHub issues don't resolve the question, community forums often have the answer. But quality is uneven — `validate-source-credibility` is mandatory after this.
|
|
322
329
|
|
|
323
|
-
|
|
330
|
+
## Core principle
|
|
331
|
+
**Community knowledge supplements official docs, never replaces them.** If a forum answer contradicts official docs, trust docs.
|
|
324
332
|
|
|
325
333
|
## Inputs
|
|
326
334
|
|
|
@@ -330,94 +338,85 @@ VERSION: [version if relevant]
|
|
|
330
338
|
QUESTION: [specific question]
|
|
331
339
|
```
|
|
332
340
|
|
|
333
|
-
---
|
|
334
|
-
|
|
335
341
|
## Process
|
|
336
342
|
|
|
337
343
|
### 1. StackOverflow
|
|
338
344
|
|
|
339
345
|
Queries:
|
|
340
346
|
- `site:stackoverflow.com <lib> <feature> <version>`
|
|
341
|
-
- `site:stackoverflow.com [<lib>] <question>`
|
|
347
|
+
- `site:stackoverflow.com [<lib>] <question>`
|
|
342
348
|
|
|
343
349
|
Priority signals:
|
|
344
350
|
- Accepted answer (green checkmark)
|
|
345
351
|
- Answer with > 50 upvotes
|
|
346
|
-
- Answer from recognized maintainer
|
|
352
|
+
- Answer from recognized maintainer
|
|
347
353
|
|
|
348
354
|
### 2. Reddit
|
|
349
355
|
|
|
350
|
-
Subs
|
|
351
|
-
- `r/programming` (general)
|
|
352
|
-
- Stack-specific: `r/typescript`, `r/golang`, `r/rust`, `r/Kotlin`, `r/reactjs`, `r/node`, etc.
|
|
353
|
-
|
|
354
|
-
Queries:
|
|
355
|
-
- `site:reddit.com/r/<sub> <lib> <feature>`
|
|
356
|
+
Subs: `r/programming`, stack-specific (`r/typescript`, `r/golang`, `r/reactjs`, etc.)
|
|
356
357
|
|
|
357
|
-
Priority signals:
|
|
358
|
-
- Upvote ratio > 0.9
|
|
359
|
-
- Top comment explains tradeoffs (not just "use X")
|
|
360
|
-
- Discussion includes both sides of the question
|
|
358
|
+
Priority signals: upvote ratio > 0.9, top comment explains tradeoffs.
|
|
361
359
|
|
|
362
360
|
### 3. Hacker News
|
|
363
361
|
|
|
364
362
|
- `site:news.ycombinator.com <lib> <feature>`
|
|
365
|
-
-
|
|
366
|
-
|
|
367
|
-
Priority: submissions that got 100+ points + quality discussion in comments.
|
|
363
|
+
- Priority: 100+ points + quality discussion
|
|
368
364
|
|
|
369
365
|
### 4. dev.to, medium, maintainer blogs
|
|
370
366
|
|
|
371
|
-
- Search for maintainer-authored articles (look for author bio matching lib committer)
|
|
372
367
|
- Recent posts (< 18 months) usually more reliable
|
|
368
|
+
- Look for author bio matching lib committer
|
|
373
369
|
|
|
374
|
-
|
|
370
|
+
## Common patterns
|
|
375
371
|
|
|
376
|
-
|
|
372
|
+
### Good forum research
|
|
377
373
|
|
|
378
374
|
```
|
|
379
|
-
## FORUMS RESEARCH —
|
|
375
|
+
## FORUMS RESEARCH — Vitest 3
|
|
380
376
|
|
|
381
377
|
### StackOverflow
|
|
382
|
-
-
|
|
378
|
+
- https://stackoverflow.com/q/12345 — 89 upvotes, accepted — vi.hoisted() required for mock variables in Vitest 3
|
|
383
379
|
|
|
384
380
|
### Reddit
|
|
385
|
-
-
|
|
386
|
-
|
|
387
|
-
### Hacker News
|
|
388
|
-
- <submission URL> — <points / date> — <summary>
|
|
381
|
+
- https://reddit.com/r/vitest/comments/abc — 45 upvotes, 23 comments — consensus: vi.spyOn > vi.mock for most cases
|
|
389
382
|
|
|
390
|
-
###
|
|
391
|
-
-
|
|
383
|
+
### CONSENSUS
|
|
384
|
+
- Use vi.hoisted() for variables referenced in vi.mock()
|
|
385
|
+
- Prefer vi.spyOn over vi.mock for testing interactions
|
|
392
386
|
|
|
393
|
-
###
|
|
394
|
-
-
|
|
395
|
-
|
|
387
|
+
### DISAGREEMENTS
|
|
388
|
+
- Whether to use global vs per-test setup: SO says global, Reddit says per-test — depends on test isolation needs
|
|
389
|
+
```
|
|
396
390
|
|
|
397
|
-
###
|
|
398
|
-
- <point>: <source A says X, source B says Y>
|
|
391
|
+
### Bad forum research
|
|
399
392
|
|
|
400
|
-
|
|
401
|
-
|
|
393
|
+
```
|
|
394
|
+
Found some stuff on StackOverflow. People say use vi.mock.
|
|
402
395
|
```
|
|
403
396
|
|
|
404
|
-
|
|
397
|
+
Problems: no URLs, no upvote counts, no consensus analysis, no disagreement detection.
|
|
405
398
|
|
|
406
|
-
##
|
|
399
|
+
## Anti-patterns
|
|
407
400
|
|
|
408
|
-
- **
|
|
409
|
-
- **
|
|
410
|
-
- **
|
|
411
|
-
- **
|
|
412
|
-
- **
|
|
401
|
+
- **Credibility not validated** — follow-up with `validate-source-credibility` on any non-official finding
|
|
402
|
+
- **Stale answers accepted** — reject if older than 2 years unless fundamentals unchanged
|
|
403
|
+
- **Forum > docs** — if forum answer contradicts official docs → trust docs
|
|
404
|
+
- **Single-source treated as fact** — one SO answer is a hypothesis, not an answer
|
|
405
|
+
- **No cross-reference** — corroborate with at least one other source before treating as fact
|
|
413
406
|
|
|
414
|
-
|
|
407
|
+
## How to verify
|
|
408
|
+
|
|
409
|
+
- [ ] ≥ 1 forum source found?
|
|
410
|
+
- [ ] Each source has URL + upvote/engagement signal?
|
|
411
|
+
- [ ] Staleness check performed (< 2 years)?
|
|
412
|
+
- [ ] Consensus and disagreements identified?
|
|
413
|
+
- [ ] validate-source-credibility will be invoked for non-official findings?
|
|
415
414
|
|
|
416
415
|
## When triggered
|
|
417
416
|
|
|
418
|
-
- `researcher` agent when `research-web-sources` and `research-github-issues` didn't resolve
|
|
417
|
+
- `researcher` agent when `research-web-sources` and `research-github-issues` didn't resolve
|
|
419
418
|
- User asks for "community perspective" or "what do other people do"
|
|
420
|
-
-
|
|
419
|
+
- Niche library with sparse docs
|
|
421
420
|
|
|
422
421
|
---
|
|
423
422
|
|
|
@@ -426,129 +425,97 @@ Priority: submissions that got 100+ points + quality discussion in comments.
|
|
|
426
425
|
|
|
427
426
|
# validate-source-credibility — Rank sources by trust
|
|
428
427
|
|
|
429
|
-
|
|
428
|
+
## What this covers
|
|
429
|
+
Meta-research skill #4 of 6. Not all sources are equal. Wrong information confidently presented causes downstream failures. This skill scores every finding before it influences code decisions.
|
|
430
430
|
|
|
431
|
-
|
|
431
|
+
## Core principle
|
|
432
|
+
**Credibility is tiered, not binary.** A Tier-1 source (official docs) needs no validation. A Tier-4 source (random blog) is a hypothesis until cross-referenced.
|
|
432
433
|
|
|
433
434
|
## Inputs
|
|
434
435
|
|
|
435
436
|
```
|
|
436
437
|
SOURCE_URL: [URL of information source]
|
|
437
|
-
CLAIM: [what the source says
|
|
438
|
+
CLAIM: [what the source says]
|
|
438
439
|
TECHNOLOGY: [lib name]
|
|
439
440
|
VERSION: [version the claim is about]
|
|
440
441
|
```
|
|
441
442
|
|
|
442
|
-
---
|
|
443
|
-
|
|
444
443
|
## Credibility tiers
|
|
445
444
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
- Maintainer blog post / dev.to / medium article (author is a committer on the repo)
|
|
454
|
-
- Official library GitHub discussion with maintainer response
|
|
455
|
-
- Conference talk by a maintainer (recent)
|
|
456
|
-
- **Trust: high for the claim's scope; may have maintainer bias toward their preferred approach.**
|
|
457
|
-
|
|
458
|
-
### Tier 3 — Well-engaged community
|
|
459
|
-
- StackOverflow answer: accepted + > 50 upvotes + recent
|
|
460
|
-
- GitHub issue with maintainer comment confirming approach
|
|
461
|
-
- Reddit thread with clear consensus (high upvote ratio)
|
|
462
|
-
- **Trust: medium. Cross-reference with Tier 1/2.**
|
|
463
|
-
|
|
464
|
-
### Tier 4 — Individual community contributors
|
|
465
|
-
- Random blog post by non-maintainer
|
|
466
|
-
- Medium / dev.to article without maintainer credential
|
|
467
|
-
- Low-upvoted SO answer
|
|
468
|
-
- **Trust: low. Treat as hypothesis, verify against Tier 1/2.**
|
|
469
|
-
|
|
470
|
-
### Tier 5 — Unverified
|
|
471
|
-
- AI-generated content (detected via boilerplate patterns)
|
|
472
|
-
- Old tutorials / screencasts without clear authorship
|
|
473
|
-
- **Trust: zero. Flag, do not follow.**
|
|
474
|
-
|
|
475
|
-
---
|
|
445
|
+
| Tier | Source | Trust |
|
|
446
|
+
|------|--------|-------|
|
|
447
|
+
| **1** | Official docs, GitHub release notes, source code | High — always prefer |
|
|
448
|
+
| **2** | Maintainer blog, maintainer GitHub discussion, conference talk | High for scope; possible bias |
|
|
449
|
+
| **3** | SO accepted (50+ upvotes), GitHub issue with maintainer comment, Reddit consensus | Medium — cross-reference |
|
|
450
|
+
| **4** | Random blog, low-upvoted SO, Medium article without credentials | Low — verify against Tier 1/2 |
|
|
451
|
+
| **5** | AI-generated content, old tutorials without authorship | Zero — flag, do not follow |
|
|
476
452
|
|
|
477
453
|
## Freshness thresholds
|
|
478
454
|
|
|
479
|
-
| Library
|
|
480
|
-
|
|
481
|
-
| Fast
|
|
455
|
+
| Library pace | Max age |
|
|
456
|
+
|-------------|---------|
|
|
457
|
+
| Fast (React, Next.js, Ktor, Tailwind) | 12 months |
|
|
482
458
|
| Medium (Rails, Django, Spring) | 18 months |
|
|
483
459
|
| Slow (C, SQL, git) | 36 months |
|
|
484
|
-
| Stable fundamentals
|
|
485
|
-
|
|
486
|
-
Older sources: flag but don't auto-reject — sometimes fundamentals don't change.
|
|
487
|
-
|
|
488
|
-
---
|
|
460
|
+
| Stable fundamentals | 5+ years |
|
|
489
461
|
|
|
490
462
|
## Process
|
|
491
463
|
|
|
492
|
-
### 1. Identify tier from URL
|
|
464
|
+
### 1. Identify tier from URL + content
|
|
493
465
|
|
|
494
|
-
|
|
495
|
-
- Domain `<lib>.org` → Tier 1
|
|
496
|
-
- `github.com/<lib-org>/<lib>/issues` → Tier 3 (maintainer comment = Tier 2)
|
|
497
|
-
- `stackoverflow.com` → Tier 3 or 4 (check upvotes)
|
|
498
|
-
- Random blog → Tier 4 or 5
|
|
466
|
+
### 2. Extract publication date
|
|
499
467
|
|
|
500
|
-
###
|
|
468
|
+
### 3. Compute freshness (fresh / aging / stale)
|
|
501
469
|
|
|
502
|
-
|
|
470
|
+
### 4. Score: Tier + Freshness → FULL / VERIFY / REJECT
|
|
503
471
|
|
|
504
|
-
|
|
472
|
+
## Common patterns
|
|
505
473
|
|
|
506
|
-
|
|
474
|
+
### Good credibility assessment
|
|
507
475
|
|
|
508
|
-
|
|
476
|
+
```
|
|
477
|
+
## SOURCE CREDIBILITY — https://blog.example.com/react-19-patterns
|
|
509
478
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
- Tier 3 + fresh → cross-reference with Tier 1/2
|
|
514
|
-
- Tier 3 + stale → hypothesis, verify
|
|
515
|
-
- Tier 4/5 → reject or verify against higher tier
|
|
479
|
+
Tier: 4 (personal blog, no maintainer credential)
|
|
480
|
+
Freshness: aging — published 2025-11-08, 5 months old
|
|
481
|
+
Library pace: fast (React)
|
|
516
482
|
|
|
517
|
-
|
|
483
|
+
Credibility signals:
|
|
484
|
+
- Author unknown in React contributor list
|
|
485
|
+
- No upvote/engagement data available
|
|
518
486
|
|
|
519
|
-
|
|
487
|
+
Trust assessment: VERIFY — cross-reference with official docs before using
|
|
520
488
|
|
|
489
|
+
Recommendation: Do not trust alone. Verify claim "use() replaces useEffect" against react.dev.
|
|
521
490
|
```
|
|
522
|
-
## SOURCE CREDIBILITY — <URL>
|
|
523
|
-
|
|
524
|
-
Tier: <1 / 2 / 3 / 4 / 5>
|
|
525
|
-
Freshness: <fresh | aging | stale> — <publication date, age>
|
|
526
|
-
Library pace: <fast | medium | slow>
|
|
527
|
-
|
|
528
|
-
Credibility signals:
|
|
529
|
-
- <signal: e.g. "maintainer-authored per GitHub profile">
|
|
530
|
-
- <signal: e.g. "accepted answer with 200 upvotes">
|
|
531
491
|
|
|
532
|
-
|
|
492
|
+
### Bad credibility assessment
|
|
533
493
|
|
|
534
|
-
|
|
494
|
+
```
|
|
495
|
+
Source looks reliable. Use it.
|
|
535
496
|
```
|
|
536
497
|
|
|
537
|
-
|
|
498
|
+
Problems: no tier, no freshness check, no trust assessment.
|
|
538
499
|
|
|
539
|
-
##
|
|
500
|
+
## Anti-patterns
|
|
540
501
|
|
|
541
|
-
- **
|
|
542
|
-
- **Tier 1
|
|
543
|
-
- **
|
|
544
|
-
- **
|
|
545
|
-
- **
|
|
502
|
+
- **Tier 4/5 trusted alone** — always cross-reference against Tier 1/2
|
|
503
|
+
- **Tier 1 overrides common sense** — if docs contradict source code for installed version, flag conflict
|
|
504
|
+
- **Age penalized unfairly** — stable fundamentals don't age. A 2017 article on TCP sockets is still correct.
|
|
505
|
+
- **Freshness = correctness** — a brand-new blog post can be wrong; an old maintainer article on stable API can be right
|
|
506
|
+
- **AI-generated content not detected** — boilerplate patterns, generic structure, no author credentials → suspect
|
|
546
507
|
|
|
547
|
-
|
|
508
|
+
## How to verify
|
|
509
|
+
|
|
510
|
+
- [ ] Tier assigned (1-5)?
|
|
511
|
+
- [ ] Publication date extracted?
|
|
512
|
+
- [ ] Freshness assessed against library pace?
|
|
513
|
+
- [ ] Trust assessment given (FULL / VERIFY / REJECT)?
|
|
514
|
+
- [ ] Recommendation states how main session should treat this source?
|
|
548
515
|
|
|
549
516
|
## When triggered
|
|
550
517
|
|
|
551
|
-
- By `synthesize-findings`
|
|
518
|
+
- By `synthesize-findings` when merging multi-source research
|
|
552
519
|
- On any finding from Tier 3/4/5 before it influences code decisions
|
|
553
520
|
- User request: "how reliable is this source?"
|
|
554
521
|
|
|
@@ -559,9 +526,11 @@ Recommendation: <how main session should treat this source>
|
|
|
559
526
|
|
|
560
527
|
# synthesize-findings — Merge research into one report
|
|
561
528
|
|
|
529
|
+
## What this covers
|
|
562
530
|
Meta-research skill #5 of 6. After parallel research skills have produced raw findings, this skill merges them into the single canonical format that the `researcher` agent returns.
|
|
563
531
|
|
|
564
|
-
|
|
532
|
+
## Core principle
|
|
533
|
+
**Conflicts are signals, not noise.** When two sources disagree, that disagreement is the most valuable finding. Surface it, don't hide it.
|
|
565
534
|
|
|
566
535
|
## Inputs
|
|
567
536
|
|
|
@@ -572,8 +541,6 @@ FORUM_RESULTS: [output of research-forums — or "none"]
|
|
|
572
541
|
CREDIBILITY_SCORES: [output of validate-source-credibility for low-tier sources]
|
|
573
542
|
```
|
|
574
543
|
|
|
575
|
-
---
|
|
576
|
-
|
|
577
544
|
## Process
|
|
578
545
|
|
|
579
546
|
### 1. Deduplicate
|
|
@@ -583,23 +550,22 @@ Same claim from multiple sources → merge, cite all sources ordered by credibil
|
|
|
583
550
|
### 2. Resolve conflicts
|
|
584
551
|
|
|
585
552
|
When two sources disagree:
|
|
586
|
-
|
|
587
553
|
- Higher credibility tier wins (official docs > forum)
|
|
588
554
|
- Newer wins among same tier
|
|
589
|
-
-
|
|
590
|
-
-
|
|
555
|
+
- Both recent Tier 1 but disagree → flag as uncertainty
|
|
556
|
+
- Version-specific → align to installed version
|
|
591
557
|
|
|
592
558
|
### 3. Populate canonical sections
|
|
593
559
|
|
|
594
560
|
- **FINDINGS**: positive statements with version + source
|
|
595
561
|
- **ANTI-PATTERNS À ÉVITER**: what NOT to do, with reason + source
|
|
596
562
|
- **PHILOSOPHY DU FRAMEWORK**: how the framework wants this solved (1-2 sentences)
|
|
597
|
-
- **API SURFACE**: verified imports / signatures /
|
|
598
|
-
- **INCERTITUDES**: unresolved questions,
|
|
563
|
+
- **API SURFACE**: verified imports / signatures / response shapes
|
|
564
|
+
- **INCERTITUDES**: unresolved questions, conflicts, version gaps
|
|
599
565
|
|
|
600
566
|
### 4. Apply credibility filter
|
|
601
567
|
|
|
602
|
-
Any finding sourced only from Tier 4/5 without Tier 1/2 cross-reference → demote to
|
|
568
|
+
Any finding sourced only from Tier 4/5 without Tier 1/2 cross-reference → demote to INCERTITUDE.
|
|
603
569
|
|
|
604
570
|
### 5. Enforce minimum gate
|
|
605
571
|
|
|
@@ -609,45 +575,57 @@ Output is incomplete if ANY of:
|
|
|
609
575
|
- No philosophy statement
|
|
610
576
|
- No version stamp on any finding
|
|
611
577
|
|
|
612
|
-
|
|
578
|
+
## Common patterns
|
|
613
579
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
## Output format
|
|
580
|
+
### Good synthesis
|
|
617
581
|
|
|
618
582
|
```
|
|
619
583
|
## FINDINGS
|
|
620
|
-
-
|
|
621
|
-
-
|
|
584
|
+
- React 19 Server Components are the default — no "use client" needed for static rendering [v19.0]
|
|
585
|
+
Source: https://react.dev/reference/rsc/server-components (Tier 1)
|
|
586
|
+
- `use()` hook replaces useEffect for data fetching [v19.0]
|
|
587
|
+
Source: react.dev (Tier 1) + SO #12345 89 upvotes (Tier 3)
|
|
622
588
|
|
|
623
589
|
## ANTI-PATTERNS À ÉVITER
|
|
624
|
-
-
|
|
590
|
+
- useEffect + fetch waterfall — use Server Components instead — react.dev
|
|
591
|
+
- "use server" on components — directive is for Server Functions — react.dev
|
|
625
592
|
|
|
626
593
|
## PHILOSOPHY DU FRAMEWORK
|
|
627
|
-
|
|
594
|
+
React 19 pushes data fetching to the server. Client components handle interactivity only.
|
|
628
595
|
|
|
629
596
|
## API SURFACE (verified)
|
|
630
|
-
-
|
|
631
|
-
-
|
|
632
|
-
- <response format verified: source>
|
|
597
|
+
- `use()` — react.dev/reference/react/use
|
|
598
|
+
- Server Components — `async function Component()` without "use client"
|
|
633
599
|
|
|
634
600
|
## INCERTITUDES
|
|
635
|
-
-
|
|
636
|
-
- <version gap: docs are for v3.0, installed is v3.1 — unclear if X still applies>
|
|
637
|
-
- <conflict: docs say X, GitHub issue #123 says Y — investigate>
|
|
601
|
+
- Migration path from useEffect-based data fetching: docs show examples but no automated codemod exists
|
|
638
602
|
```
|
|
639
603
|
|
|
640
|
-
|
|
604
|
+
### Bad synthesis
|
|
641
605
|
|
|
642
|
-
|
|
606
|
+
```
|
|
607
|
+
React is good. Use Server Components. Don't use useEffect.
|
|
608
|
+
```
|
|
643
609
|
|
|
644
|
-
|
|
645
|
-
- **Always cite**: every finding, anti-pattern, API surface claim has a URL or file:line
|
|
646
|
-
- **Uncertainties are valuable**: empty UNCERTAINTIES section is suspicious — research rarely resolves everything
|
|
647
|
-
- **Output budget**: ≤ 500 tokens (the researcher agent returns this to main session — stay compact)
|
|
648
|
-
- **No preamble, no conclusion**: structured report only
|
|
610
|
+
Problems: no version, no sources, no anti-patterns, no uncertainties.
|
|
649
611
|
|
|
650
|
-
|
|
612
|
+
## Anti-patterns
|
|
613
|
+
|
|
614
|
+
- **Inventing findings** — if research didn't produce a finding, leave it empty
|
|
615
|
+
- **No citations** — every finding has a URL or file:line
|
|
616
|
+
- **Empty INCERTITUDES** — suspicious. Research rarely resolves everything.
|
|
617
|
+
- **Conflicts hidden** — when sources disagree, surface it as INCERTITUDE
|
|
618
|
+
- **Output too long** — ≤ 500 tokens (researcher returns this to main session)
|
|
619
|
+
|
|
620
|
+
## How to verify
|
|
621
|
+
|
|
622
|
+
- [ ] All 3 research inputs consumed (or marked "none")?
|
|
623
|
+
- [ ] FINDINGS have version stamps + source URLs?
|
|
624
|
+
- [ ] ≥ 1 anti-pattern documented?
|
|
625
|
+
- [ ] PHILOSOPHY stated (1-2 sentences)?
|
|
626
|
+
- [ ] Conflicts surfaced as INCERTITUDES?
|
|
627
|
+
- [ ] Output ≤ 500 tokens?
|
|
628
|
+
- [ ] Minimum gate passed (findings + anti-patterns + philosophy + versions)?
|
|
651
629
|
|
|
652
630
|
## When triggered
|
|
653
631
|
|
|
@@ -661,92 +639,94 @@ Report incomplete → return warning to researcher agent.
|
|
|
661
639
|
|
|
662
640
|
# fact-check-claims — Verify before asserting
|
|
663
641
|
|
|
642
|
+
## What this covers
|
|
664
643
|
Meta-research skill #6 of 6. The guard against false confidence. LLMs routinely state confidently wrong things — DB column names, function signatures, response shapes. This skill demands proof.
|
|
665
644
|
|
|
666
|
-
|
|
645
|
+
## Core principle
|
|
646
|
+
**VERIFIED or not. There is no "probably true."** If you can't point to evidence (file:line or URL), mark it UNVERIFIED.
|
|
667
647
|
|
|
668
648
|
## Inputs
|
|
669
649
|
|
|
670
650
|
```
|
|
671
|
-
CLAIM: [the specific assertion to verify
|
|
651
|
+
CLAIM: [the specific assertion to verify]
|
|
672
652
|
CONTEXT: [what's being built that relies on this claim]
|
|
673
653
|
SOURCES_TO_CHECK: [optional list of files/URLs to verify against]
|
|
674
654
|
```
|
|
675
655
|
|
|
676
|
-
---
|
|
677
|
-
|
|
678
656
|
## Process
|
|
679
657
|
|
|
680
658
|
### 1. Classify the claim type
|
|
681
659
|
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
660
|
+
| Type | Verify against |
|
|
661
|
+
|------|----------------|
|
|
662
|
+
| Code (function signature, import) | `Read` + `Grep` on actual source |
|
|
663
|
+
| DB (table/column exists) | Migration files or `pg_attribute` |
|
|
664
|
+
| API (response shape, status) | `curl` real endpoint or fixtures |
|
|
665
|
+
| Version behavior | WebFetch official changelog |
|
|
666
|
+
| Environment (Node version, etc.) | Workflow / Dockerfile / CI config |
|
|
687
667
|
|
|
688
668
|
### 2. Verify from authoritative source
|
|
689
669
|
|
|
690
|
-
|
|
691
|
-
|-----------|----------------|
|
|
692
|
-
| Code | `Read` + `Grep` on actual source file |
|
|
693
|
-
| DB schema | `Read` migration files OR `pg_attribute` via Bash |
|
|
694
|
-
| API response | `curl` real endpoint OR real response saved in repo fixtures |
|
|
695
|
-
| Version behavior | WebFetch official changelog for that version |
|
|
696
|
-
| Environment | `Read` workflow / Dockerfile / CI config |
|
|
670
|
+
Run the appropriate verification command. Record the evidence.
|
|
697
671
|
|
|
698
672
|
### 3. Produce verification record
|
|
699
673
|
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
674
|
+
```
|
|
675
|
+
VERIFIED — with evidence (file:line or URL + quote)
|
|
676
|
+
UNVERIFIED — source not available, state explicitly
|
|
677
|
+
CONTRADICTED — evidence says otherwise
|
|
678
|
+
```
|
|
704
679
|
|
|
705
680
|
Never mark as VERIFIED without evidence.
|
|
706
681
|
|
|
707
|
-
|
|
682
|
+
## Common patterns
|
|
708
683
|
|
|
709
|
-
|
|
684
|
+
### Good fact-check
|
|
710
685
|
|
|
711
686
|
```
|
|
712
687
|
## FACT CHECK
|
|
713
688
|
|
|
714
|
-
Claim: "
|
|
689
|
+
Claim: "The users table has a 'last_login' column"
|
|
715
690
|
|
|
716
|
-
Result:
|
|
691
|
+
Result: VERIFIED
|
|
717
692
|
|
|
718
693
|
Evidence:
|
|
719
|
-
-
|
|
720
|
-
-
|
|
694
|
+
- migration/20260315_add_last_login.sql:3 — `ALTER TABLE users ADD COLUMN last_login TIMESTAMPTZ`
|
|
695
|
+
- pg_attribute confirms: users.last_login exists (type: timestamptz, notnull: false)
|
|
696
|
+
```
|
|
721
697
|
|
|
722
|
-
|
|
723
|
-
Missing sources: <what couldn't be checked and why>
|
|
724
|
-
Recommendation: <how to proceed — don't assert until verified, or accept uncertainty>
|
|
698
|
+
### Bad fact-check
|
|
725
699
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
Correction: <the corrected claim>
|
|
700
|
+
```
|
|
701
|
+
The users table probably has a last_login column. I remember seeing it.
|
|
729
702
|
```
|
|
730
703
|
|
|
731
|
-
|
|
704
|
+
Problems: no evidence, "probably" = UNVERIFIED, no file:line reference.
|
|
732
705
|
|
|
733
|
-
##
|
|
706
|
+
## Anti-patterns
|
|
734
707
|
|
|
735
|
-
- **
|
|
736
|
-
- **
|
|
737
|
-
- **
|
|
738
|
-
- **Version-
|
|
739
|
-
- **
|
|
708
|
+
- **"Probably true"** — VERIFIED or not. Assumed-true = UNVERIFIED.
|
|
709
|
+
- **URL alone as evidence** — weak; include the specific quote/line
|
|
710
|
+
- **Compound claims not broken down** — "users table has id, email, last_login" → 3 claims
|
|
711
|
+
- **Version-specific without version check** — "In Ktor 3.0, X works" → verify in changelog
|
|
712
|
+
- **Memory substitution** — if source isn't accessible, mark UNVERIFIED
|
|
740
713
|
|
|
741
|
-
|
|
714
|
+
## How to verify
|
|
715
|
+
|
|
716
|
+
- [ ] Claim classified (code/DB/API/version/environment)?
|
|
717
|
+
- [ ] Verification command run (grep/read/curl/webfetch)?
|
|
718
|
+
- [ ] Result is VERIFIED / UNVERIFIED / CONTRADICTED?
|
|
719
|
+
- [ ] VERIFIED claims have file:line or URL + quote?
|
|
720
|
+
- [ ] Compound claims broken into atomic parts?
|
|
721
|
+
- [ ] Version-specific claims include version number?
|
|
742
722
|
|
|
743
723
|
## When triggered
|
|
744
724
|
|
|
745
725
|
- Before `synthesize-findings` finalizes any assertion
|
|
746
|
-
- Before code generation asserts behavior the researcher might
|
|
726
|
+
- Before code generation asserts behavior the researcher might be wrong about
|
|
747
727
|
- When user says "are you sure?"
|
|
748
|
-
- When `relire-critic` produces a RISQUE
|
|
749
|
-
- Automatically on
|
|
728
|
+
- When `relire-critic` produces a RISQUE questioning an assertion
|
|
729
|
+
- Automatically on assertions about DB schemas, imports, response shapes
|
|
750
730
|
|
|
751
731
|
---
|
|
752
732
|
|
|
@@ -918,6 +898,15 @@ BLOCKING: 1 INVALID, 1 AMBIGUOUS — cannot proceed until resolved
|
|
|
918
898
|
|
|
919
899
|
---
|
|
920
900
|
|
|
901
|
+
## How to verify
|
|
902
|
+
|
|
903
|
+
- [ ] Exact versions extracted from lock files?
|
|
904
|
+
- [ ] Official docs located for each API call?
|
|
905
|
+
- [ ] Each proposed API validated (function name, signature, params, return type)?
|
|
906
|
+
- [ ] Citations enforced (file:line or URL for every API)?
|
|
907
|
+
- [ ] Training-cutoff awareness applied (if lib updated after cutoff)?
|
|
908
|
+
- [ ] VERDICT issued (VALID / INVALID / UNCERTAIN)?
|
|
909
|
+
|
|
921
910
|
## When triggered
|
|
922
911
|
|
|
923
912
|
- RECHERCHE step for Standard/Critical tasks using external libs
|