@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.
Files changed (42) hide show
  1. package/assets/.claude/settings.json +16 -3
  2. package/assets/AGENTS.md +1 -1
  3. package/assets/CLAUDE.md +5 -9
  4. package/assets/commands/ciel-audit.md +195 -59
  5. package/assets/commands/ciel-migrate.md +35 -0
  6. package/assets/commands/ciel-status.md +40 -0
  7. package/assets/commands/ciel-update.md +4 -0
  8. package/assets/dist/plugin/index.js +7 -9
  9. package/assets/platforms/opencode/.opencode/agents/ciel-critic.md +320 -483
  10. package/assets/platforms/opencode/.opencode/agents/ciel-explorer.md +114 -96
  11. package/assets/platforms/opencode/.opencode/agents/ciel-improver.md +204 -273
  12. package/assets/platforms/opencode/.opencode/agents/ciel-researcher.md +259 -270
  13. package/assets/platforms/opencode/.opencode/agents/ciel.md +1 -1
  14. package/assets/platforms/opencode/.opencode/commands/ciel-audit.md +300 -10
  15. package/assets/platforms/opencode/.opencode/commands/ciel-create-skill.md +75 -10
  16. package/assets/platforms/opencode/.opencode/commands/ciel-eval.md +71 -10
  17. package/assets/platforms/opencode/.opencode/commands/ciel-improve.md +7 -13
  18. package/assets/platforms/opencode/.opencode/commands/ciel-init.md +165 -11
  19. package/assets/platforms/opencode/.opencode/commands/ciel-migrate.md +40 -0
  20. package/assets/platforms/opencode/.opencode/commands/ciel-refresh.md +89 -13
  21. package/assets/platforms/opencode/.opencode/commands/ciel-status.md +45 -0
  22. package/assets/platforms/opencode/.opencode/commands/ciel-update.md +31 -18
  23. package/assets/platforms/opencode/.opencode/commands/ciel.md +1 -2
  24. package/assets/platforms/opencode/.opencode/plugins/ciel.ts +146 -0
  25. package/assets/platforms/opencode/AGENTS.md +2 -2
  26. package/assets/skills/ciel/SKILL.md +32 -2
  27. package/assets/skills/ciel/reference.md +33 -5
  28. package/dist/cli/claude.d.ts.map +1 -1
  29. package/dist/cli/claude.js +0 -1
  30. package/dist/cli/claude.js.map +1 -1
  31. package/dist/cli/init.d.ts.map +1 -1
  32. package/dist/cli/init.js +0 -2
  33. package/dist/cli/init.js.map +1 -1
  34. package/dist/cli/opencode.d.ts.map +1 -1
  35. package/dist/cli/opencode.js +0 -1
  36. package/dist/cli/opencode.js.map +1 -1
  37. package/dist/plugin/index.d.ts.map +1 -1
  38. package/dist/plugin/index.js +7 -9
  39. package/dist/plugin/index.js.map +1 -1
  40. package/package.json +3 -2
  41. package/assets/commands/ciel-recommend.md +0 -95
  42. 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
- Meta-research skill #1 of 6. Fetches the primary source (official docs) + best-practice blog posts / maintainer articles for a specific library+version.
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 (from `ciel-overlay.md` or derived)
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
- ## Output format
163
+ ### Good research output
167
164
 
168
165
  ```
169
- ## RESEARCH — <tech> <version>
166
+ ## RESEARCH — React 19
170
167
 
171
168
  ### FINDINGS
172
- - <findingspecific, with version>
173
- - <finding include source URL>
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
- - <anti-pattern><source URL or "official docs">
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
- <1-2 sentences: how the framework wants this solved>
178
+ React 19 pushes data fetching to the server. Client components handle interactivity only.
179
+ ```
180
180
 
181
- ### API SURFACE (verified)
182
- - <import/function verified at: URL or file:line>
183
- - <response format verified from: source>
181
+ ### Bad research output
184
182
 
185
- ### INCERTITUDES
186
- - <unknown — flagged for main session>
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
- ## Guardrails
191
+ ## Anti-patterns
192
192
 
193
- - **Minimum output**: 1 WebSearch result + 1 documented finding. Zero output = step not done.
194
- - **Version stamp required**: every finding includes the version it applies to
195
- - **Docs contradict memory trust docs**
196
- - **Docs unavailable**: state it explicitly, don't fill gaps with assumptions
197
- - **No preamble**: return only the structured report, no "I found that..."
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 on `https://github.com/<repo>/issues?q=`):
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 is ≥ N
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
- ## Output format
271
+ ### Good GitHub issues research
270
272
 
271
273
  ```
272
- ## GITHUB ISSUES RESEARCH — <tech>
274
+ ## GITHUB ISSUES RESEARCH — @auth/core
273
275
 
274
276
  ### Relevant issues
275
277
  | # | Title | Status | Our impact |
276
278
  |---|-------|--------|-----------|
277
- | #1234 | <title> | closed in v3.0.0 | Our version is 3.0.1fix included |
278
- | #5678 | <title> | open | Matches our symptom — apply workaround from comment |
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.0upgrade needed |
280
+ | #5678 | OAuth callback fails with PKCE | open | Matches our symptom — apply workaround |
280
281
 
281
282
  ### Workarounds applicable
282
- - <workaround> — source: <issue URL + comment permalink>
283
+ - Add `skipCSRFCheck: true` to OAuth config — source: #5678 comment by maintainer
283
284
 
284
285
  ### Fix version ranges
285
- - <feature> fixed in <version> — our version: <v>
286
- - If our version < fix version: <suggest upgrade if safe>
286
+ - useSession fix in v4.0.1 — our version: v4.0.0 — suggest upgrade
287
+ ```
287
288
 
288
- ### PRs in progress
289
- - <PR #> — <title> — status: <draft | review | merged>
289
+ ### Bad research
290
290
 
291
- ### UNCERTAINTIES
292
- - <unknown flag for main session>
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
- ## Guardrails
297
+ ## Anti-patterns
298
298
 
299
- - **Cite with links**: every issue reference needs a URL
300
- - **Check comment consensus**: a single comment doesn't make truth. Look for maintainer response + thumbs up count
301
- - **Version ranges matter**: "fixed in 3.x" could mean 3.0 or 3.5 — read the changelog
302
- - **Don't treat community workaround as gospel**: verify it actually works; prefer official fix
303
- - **Empty result valid**: if no relevant issues found, report "no matches" — don't fabricate
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>` (uses SO tag syntax)
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 (blue badge, lib author in profile)
352
+ - Answer from recognized maintainer
347
353
 
348
354
  ### 2. Reddit
349
355
 
350
- Subs to check:
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
- - Check for recent (< 2 years) discussions on the library or problem
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
- ## Output format
372
+ ### Good forum research
377
373
 
378
374
  ```
379
- ## FORUMS RESEARCH — <tech>
375
+ ## FORUMS RESEARCH — Vitest 3
380
376
 
381
377
  ### StackOverflow
382
- - <answer URL> <N upvotes, accepted?><summary>
378
+ - https://stackoverflow.com/q/1234589 upvotes, accepted — vi.hoisted() required for mock variables in Vitest 3
383
379
 
384
380
  ### Reddit
385
- - <thread URL> <upvotes / comments><summary>
386
-
387
- ### Hacker News
388
- - <submission URL> — <points / date> — <summary>
381
+ - https://reddit.com/r/vitest/comments/abc45 upvotes, 23 comments — consensus: vi.spyOn > vi.mock for most cases
389
382
 
390
- ### Blogs / dev.to
391
- - <article URL> <author + credibility signal> — <summary>
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
- ### CONSENSUS (what multiple sources agree on)
394
- - <consensus point 1>
395
- - <consensus point 2>
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
- ### DISAGREEMENTS (sources conflict — investigate)
398
- - <point>: <source A says X, source B says Y>
391
+ ### Bad forum research
399
392
 
400
- ### UNCERTAINTIES
401
- - <unresolved question>
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
- ## Guardrails
399
+ ## Anti-patterns
407
400
 
408
- - **Source credibility is MANDATORY**: follow-up with `validate-source-credibility` on any non-official finding before trusting
409
- - **Date everything**: stale forum answers are common. Reject if older than 2 years unless fundamentals haven't changed.
410
- - **Community vs official**: if forum answer contradicts official docs → trust docs
411
- - **Beware single-source**: if only one person on StackOverflow claims X works, it's a hypothesis, not an answer
412
- - **Cross-reference**: forum answer should corroborate with at least one other source (another SO answer, a doc snippet, a blog post) before being treated as fact
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 the question
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
- - When a task involves a niche library with sparse docs
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
- Meta-research skill #4 of 6. Not all sources are equal. Wrong information confidently presented causes downstream failures.
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 — specific claim being evaluated]
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
- ### Tier 1 Official / primary source
447
- - Official library documentation at `<lib>.org` / `<lib>.dev`
448
- - Official GitHub release notes
449
- - Library source code (reading the implementation)
450
- - **Trust: high. Always prefer.**
451
-
452
- ### Tier 2Maintainer-authored
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 evolution pace | Max age acceptable |
480
- |------------------------|--------------------|
481
- | Fast-moving (React, Next.js, Ktor, Tailwind, TanStack) | 12 months |
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 (algorithms, data structures) | 5+ years |
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
- Parse URL + optional page content:
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
- ### 2. Extract date
468
+ ### 3. Compute freshness (fresh / aging / stale)
501
469
 
502
- Find the publication date (HTML `datePublished` meta tag, visible byline, or "Last updated" footer).
470
+ ### 4. Score: Tier + Freshness FULL / VERIFY / REJECT
503
471
 
504
- ### 3. Compute freshness
472
+ ## Common patterns
505
473
 
506
- Compare date vs current date vs library pace. Return: fresh / aging / stale.
474
+ ### Good credibility assessment
507
475
 
508
- ### 4. Score
476
+ ```
477
+ ## SOURCE CREDIBILITY — https://blog.example.com/react-19-patterns
509
478
 
510
- Combined score:
511
- - Tier 1/2 + fresh full trust
512
- - Tier 1/2 + stale → verify current version still behaves this way
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
- ## Output format
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
- Trust assessment: <FULL | VERIFY | REJECT>
492
+ ### Bad credibility assessment
533
493
 
534
- Recommendation: <how main session should treat this source>
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
- ## Guardrails
500
+ ## Anti-patterns
540
501
 
541
- - **Never trust a Tier 4/5 source alone** — always cross-reference against Tier 1/2
542
- - **Tier 1 doesn't override common sense**: if official docs say something that contradicts repository source code for the installed version, flag the conflict
543
- - **AI-generated content detection**: boilerplate patterns, generic structure, recent publication without author credentials suspect
544
- - **Don't penalize age when appropriate**: for stable fundamentals, a 2017 article on TCP sockets is still correct
545
- - **Freshness ≠ correctness**: a brand-new blog post can be wrong; an old maintainer article on stable API can be right
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` skill when merging multi-source research
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
- - If both are recent Tier 1 but disagree: flag as uncertainty
590
- - If version-specific: align to installed version
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 / DB columns / response shapes
598
- - **INCERTITUDES**: unresolved questions, flagged conflicts, version gaps
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 UNCERTAINTY (with source annotation).
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
- Report incomplete → return warning to researcher agent.
578
+ ## Common patterns
613
579
 
614
- ---
615
-
616
- ## Output format
580
+ ### Good synthesis
617
581
 
618
582
  ```
619
583
  ## FINDINGS
620
- - <finding with version + source URL>
621
- - <finding>
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
- - <anti-pattern><reason><source URL>
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
- <1-2 sentences>
594
+ React 19 pushes data fetching to the server. Client components handle interactivity only.
628
595
 
629
596
  ## API SURFACE (verified)
630
- - <import/function verified at: URL or file:line>
631
- - <DB columns verified: migration:line or pg_attribute>
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
- - <unresolved question>
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
- ## Guardrails
606
+ ```
607
+ React is good. Use Server Components. Don't use useEffect.
608
+ ```
643
609
 
644
- - **Never invent findings**: if research skills didn't produce a finding for a category, leave it empty; don't fabricate
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 — e.g. "The users table has a 'last_login' column"]
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
- - **Code claim**: function signature, import path, type definition → verify in source
683
- - **DB claim**: table exists, column exists, index exists → verify in migrations or schema
684
- - **API claim**: response shape, HTTP status, header verify in real response or docs
685
- - **Version claim**: "In Ktor 3.0.0, X behaves like Y" → verify in changelog or release notes
686
- - **Environment claim**: "CI uses Node 20" verify in workflow file
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
- | Claim type | Verify against |
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
- For each claim, record:
701
- - VERIFIED with evidence (file:line or URL + quote)
702
- - UNVERIFIED — source not available, state explicitly
703
- - CONTRADICTED — evidence says otherwise, provide the contradicting finding
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
- ## Output format
684
+ ### Good fact-check
710
685
 
711
686
  ```
712
687
  ## FACT CHECK
713
688
 
714
- Claim: "<exact claim>"
689
+ Claim: "The users table has a 'last_login' column"
715
690
 
716
- Result: <VERIFIED | UNVERIFIED | CONTRADICTED>
691
+ Result: VERIFIED
717
692
 
718
693
  Evidence:
719
- - <file:line with quote>
720
- - <URL with relevant excerpt>
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
- [If UNVERIFIED]
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
- [If CONTRADICTED]
727
- Contradicting finding: <what source actually says>
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
- ## Guardrails
706
+ ## Anti-patterns
734
707
 
735
- - **No "probably true"**: VERIFIED or not. Assumed-true claims get UNVERIFIED status.
736
- - **Evidence granularity**: a URL alone is weak; include the specific quote/line
737
- - **Claim atomicity**: break compound claims into atomic parts — "The users table has columns `id`, `email`, `last_login`" → 3 claims to verify individually
738
- - **Version-sensitivity**: version-specific claims MUST include version verification
739
- - **Don't substitute memory**: if the source to verify against isn't accessible, mark UNVERIFIED — don't fill with "I think I remember this"
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 have been wrong about
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 that questions an assertion
749
- - Automatically on any assertion about DB schemas, import paths, response shapes
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