feat: add prompt engineering workshop with taxonomy reference and sources - #154
feat: add prompt engineering workshop with taxonomy reference and sources#154Kerr1st wants to merge 12 commits into
Conversation
…rces Interactive workshop page at /workshop covering 15 prompt engineering techniques with hallucination risk profiles, mitigation strategies, and hands-on scenario exercises. Content grounded in 36 peer-reviewed papers, provider documentation, and practitioner guides (Jun 2025 – Feb 2026). - Taxonomy reference with technique cards, risk table, and mitigation strategies - 10 interactive scenarios with technique identification exercises - Progress tracking with localStorage persistence - Workshop sources page at /workshop/sources with full bibliography - Sitemap and navigation integration
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📝 WalkthroughWalkthroughAdds a Prompt Engineering Workshop feature: new workshop data and progress modules, many client React components, pages/layouts, unit tests, documentation and docs, navigation and sitemap updates, tooling/scripts changes, and minor hook/config formatting edits. Changes
Sequence Diagram(s)sequenceDiagram
participant User as User
participant WP as WorkshopPage
participant WE as WorkshopExercise
participant SC as ScenarioCard
participant PM as WorkshopProgress
participant LS as LocalStorage
User->>WP: Open /workshop
WP->>PM: loadProgress()
PM->>LS: read(storage key)
LS-->>PM: stored JSON or null
PM-->>WP: ProgressState
User->>WP: Switch to Practice
WP->>WE: render(currentScenario)
User->>SC: select technique option
SC->>SC: evaluate selection (deterministic shuffle)
alt correct
SC->>WE: onComplete(result)
WE->>PM: saveProgress(updated state)
PM->>LS: write(storage key)
else incorrect
SC-->>User: show hint / allow retry
end
User->>WE: Next / Finish
alt more scenarios
WE->>WP: advance index -> render next ScenarioCard
else finished
WP->>WP: render WorkshopResults
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
🤖 Fix all issues with AI agents
In @.kiro/specs/prompt-engineering-taxonomy/design.md:
- Around line 154-157: The MitigationStrategy interface in the design doc is
missing the example field which the implementation and UI expect; update the
interface declaration for MitigationStrategy to include example: string so it
matches the implementation and what TaxonomyReference renders
(strategy.example), and ensure the design doc snippet and any related
descriptions reference this property consistently with the workshop data
implementation.
In @.kiro/steering/structure.md:
- Around line 4-17: Update the directory tree in .kiro/steering/structure.md to
include the new app/workshop route: add an entry "app/workshop/ # Workshop
listing + sub-routes" beneath the other top-level routes and list its children
(e.g., layout, page, sources/) to match the actual PR (referencing the
app/workshop layout, app/workshop/page, and app/workshop/sources sub-route names
so the doc stays accurate).
In `@app/workshop/sources/page.mdx`:
- Line 12: Update the date for source `#4` to match its arXiv ID: replace "Oct
2025" with "Nov 2025" in the citation line containing the arXiv identifier
`2511.15005` (the line starting with "4. (Oct 2025). \"Uncertainty
Quantification, Advanced Decoding, and Principled Mitigation.\"") so the
displayed month matches the encoded submission month.
- Line 27: The bibliographic entry for source "16. (Jun 2025). \"Hallucination
Assessment via Latent Testing.\" Latent-space approaches to hallucination
detection. [arXiv:2601.14210]” has the wrong date; update the date to match the
arXiv ID (2601 → January 2026). Locate the entry labeled "16." or the exact
string "Hallucination Assessment via Latent Testing" in
app/workshop/sources/page.mdx and replace "Jun 2025" with "Jan 2026" (or
"January 2026") so the citation date aligns with arXiv:2601.14210.
- Line 16: Remove the duplicated AWS blog entry found as "8. AWS (Jun 2025).
'Minimize AI Hallucinations and Deliver Up to 99% Verification Accuracy with
Automated Reasoning Checks.'
https://aws.amazon.com/blogs/aws/minimize-ai-hallucinations-and-deliver-up-to-99-verification-accuracy-with-automated-reasoning-checks-now-available/"
(also present as the entries starting with "31." and "48."); delete the
redundant instances and renumber the remaining numbered list items so numbering
is consecutive after removal, ensuring any internal references to the original
numbers are updated accordingly.
In `@components/taxonomy-reference.tsx`:
- Around line 24-28: The external-expanded item (expandedTechniqueId) is being
re-added on render because effectiveOpenItems unconditionally re-inserts it when
openItems doesn't contain it; fix by tracking manual dismissal and/or informing
the parent when the user closes the item: add a dismissedExternalIds Set or
boolean state (e.g., dismissedExpandedTechniqueIds) and update it inside your
accordion value change handler (use handleValueChange instead of calling
setOpenItems directly) so when the user removes expandedTechniqueId you record
that dismissal and prevent effectiveOpenItems from re-adding it, or call a
passed callback to clear expandedTechniqueId in the parent from your
handleValueChange; update effectiveOpenItems to only auto-include
expandedTechniqueId when it exists and is not in dismissedExpandedTechniqueIds.
In `@components/workshop-page.tsx`:
- Around line 144-147: The ExternalLink icon is misleading for the internal
route /workshop/sources; replace the ExternalLink component in the JSX with an
internal arrow icon such as ArrowRight or ChevronRight from lucide-react (update
the import to include ArrowRight/ChevronRight), retain the existing className
and aria-hidden attribute, and ensure the new icon component (ArrowRight or
ChevronRight) is used where ExternalLink is currently rendered so the visual cue
matches internal navigation.
In `@docs/prompt-engineering-taxonomy.md`:
- Around line 44-46: The technique section headings (e.g., "Zero-Shot",
"Few-Shot", "Chain-of-Thought", "Self-Consistency", "Contextual",
"Role-Playing", "Constraint-Based", "Template-Based", "Demonstration-Based",
"Interactive", "Rewriting", "Clarification", "Summarization", "Multi-Modal",
"Instruction-Based") are using level-2 headings (##) and must be downgraded to
level-3 (###) to nest correctly under "Prompt Categories"; update each technique
heading token from "## <TechniqueName>" to "### <TechniqueName>" so the TOC and
document hierarchy match.
🧹 Nitpick comments (17)
components/risk-table.tsx (1)
9-25: DuplicatedgetRiskBadgePropshelper acrossrisk-table.tsxandtechnique-card.tsx.This function is nearly identical to the one in
technique-card.tsx(Lines 16–52). Consider extracting it into a shared utility (e.g.,lib/workshop-utils.ts) to keep the mapping in one place. If thelabelfield fromtechnique-card.tsxisn't needed here, the shared version can include it and callers can ignore it.components/technique-card.tsx (1)
16-53:labelfield ingetRiskBadgePropsis computed but never used.The
labelproperty (e.g.,'High Risk','Low Risk') is returned on every branch but neither the Badge text (Line 77) nor thearia-label(Line 75) uses it — both usetechnique.riskLeveldirectly. Either removelabelor use it in the Badge/aria-label for the more descriptive text.docs/prompt-engineering-taxonomy-compact.md (1)
46-60: Add language identifiers to fenced code blocks.The linter flags 30 code blocks missing a language identifier (MD040). Since these contain prompt examples rather than code, use
```textto satisfy the rule and improve rendering consistency.Example fix for the first occurrence
-``` +```text Write me a git commit message for the staged changes.Apply the same change to all prompt example blocks throughout the file.
docs/prompt-engineering-taxonomy.md (1)
52-54: Add language identifiers to fenced code blocks (same as compact doc).Same MD040 linting issue as in the compact version — prompt example blocks should use
```text.lib/workshop-data.ts (1)
13-24: Consider strengthening the typing ofcorrectTechniqueIdandincorrectHints.
correctTechniqueIdisstringandincorrectHintsisRecord<string, string>, but both should only reference valid technique IDs. You could derive a union type fromTECHNIQUESor at minimum useTechnique['id']as a branded pattern. This is a nice-to-have for catching mismatches at compile time.components/taxonomy-reference.tsx (1)
206-219: Minor: merge identical switch cases.
'High'and'Medium-High'both return'destructive'. They can share a single case branch for clarity.Suggested diff
switch (riskLevel) { case 'High': - return 'destructive' case 'Medium-High': return 'destructive'app/workshop/sources/layout.tsx (1)
13-13: Consider extracting the lengthy prose class string for readability.This single
classNameattribute spans ~50+ utility classes, making it difficult to scan or modify. Extracting it into a named constant (or splitting viacn(...)) would improve maintainability.docs/prompt-engineering-taxonomy-sources.md (1)
1-56: This file duplicatesapp/workshop/sources/page.mdxentirely.The same content (and the same issues — duplicate source
#8/#31, date mismatches on#4and#16) exists in both files. Consider making one the single source of truth and importing/linking from the other, to avoid them drifting apart over time.app/sitemap.ts (1)
121-194: Pre-existing: static routes are fully duplicated between success and error paths.The entire static routes array is copy-pasted into the error fallback. Consider extracting the static routes into a shared constant to eliminate the duplication and reduce the risk of them drifting apart.
♻️ Suggested refactor
+const staticRoutes: MetadataRoute.Sitemap = [ + { + url: BASE_URL, + lastModified: new Date(), + changeFrequency: 'daily', + priority: 1, + }, + // ... all static entries ... +] + export default async function sitemap(): Promise<MetadataRoute.Sitemap> { try { const allContent = await getAllContent() - const staticRoutes: MetadataRoute.Sitemap = [ - // ... duplicated entries ... - ] const contentRoutes = allContent.map(/* ... */) return [...staticRoutes, ...contentRoutes] } catch (error) { console.error('Error generating sitemap:', error) - return [ - // ... duplicated entries ... - ] + return staticRoutes } }components/workshop-results.tsx (1)
62-69: The comment is slightly misleading but the logic is correct.The comment says "should appear in both lists, but per the design the sets should not overlap" — these two statements contradict. The code correctly prioritizes "missed" when a technique appears in both, which is the right UX choice. Consider rewording:
- // A technique that was both identified and missed across different - // scenarios should appear in both lists, but per the design the sets - // should not overlap. If a technique appears in both, prioritise - // "missed" so the user reviews it. + // A technique may be correct in one scenario and missed in another. + // Prioritise "missed" so the user is prompted to review it.components/scenario-card.tsx (1)
68-81: Interaction logic is correct but previous wrong guesses lose visual feedback.When the user selects a new option after an incorrect attempt, the previous wrong selection loses its red styling because
selectedIdchanges. This means users can't see which options they've already tried. If that's intentional (to keep the UI clean), no action needed. If you want to preserve history, you'd need to track a set of attempted IDs instead of a singleselectedId.components/workshop-page.tsx (2)
32-41: Side effect inside state updater is an anti-pattern.
saveProgress(newState)inside thesetProgressupdater function violates React's expectation that updater functions are pure. In Strict Mode (and potentially concurrent rendering), React may invoke updaters more than once, causing redundant localStorage writes.♻️ Suggested refactor — move the side effect outside the updater
function handleProgress(result: ScenarioResult, nextIndex: number) { - setProgress(function updateProgress(prev) { - const newState: ProgressState = { - completedScenarios: [...prev.completedScenarios, result], - currentScenarioIndex: nextIndex, - } - saveProgress(newState) - return newState - }) + setProgress(function updateProgress(prev) { + return { + completedScenarios: [...prev.completedScenarios, result], + currentScenarioIndex: nextIndex, + } + }) + // Persist after the state update + const newState: ProgressState = { + completedScenarios: [...progress.completedScenarios, result], + currentScenarioIndex: nextIndex, + } + saveProgress(newState) }Alternatively, use a
useEffectthat syncsprogressto localStorage whenever it changes.
53-60:setTimeoutscroll may fail ifTabsContentunmounts inactive panels.Radix UI
Tabs(used by shadcn/ui) unmounts inactiveTabsContentby default. When switching from Practice → Reference, the reference panel's DOM may not exist until React commits the render. The 100ms timeout is a race condition — it may work most of the time but can fail on slower devices or heavier renders.Consider using a
useEffectthat triggers onexpandedTechniqueIdandactiveTabchanges to scroll after the DOM is committed:♻️ Suggested approach
useEffect(() => { if (expandedTechniqueId && activeTab === 'reference') { const el = document.getElementById(`${TECHNIQUE_ID_PREFIX}${expandedTechniqueId}`) if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' }) } }, [expandedTechniqueId, activeTab])This runs after React has committed the DOM update, eliminating the timing issue.
__tests__/unit/components/scenario-card.test.tsx (2)
158-174: Duplicate test —calls onViewTechnique with custom technique idis identical to the preceding test.Both tests select Zero-Shot, click the "View Zero-Shot" button, and assert
onViewTechniquewas called with'zero-shot'. Consider removing this test or differentiating it (e.g., testing with a different technique likefew-shotafter selecting the correct answer in a scenario where that's the correct technique).
5-42: Consider extracting shared test fixtures to reduce duplication across test files.The
techniquesarray is duplicated verbatim inscenario-card.test.tsx,workshop-exercise.test.tsx, and partially inprompt-rewrite-area.test.tsx. A shared test fixtures file (e.g.,__tests__/fixtures/workshop-fixtures.ts) would reduce maintenance burden.__tests__/unit/lib/workshop-progress.test.ts (1)
22-24:forEachcallback implicitly returns the result ofdelete.The
deleteexpression returns a boolean, which the arrow function implicitly returns. This triggers the BiomeuseIterableCallbackReturnlint rule. Use a block body to suppress the return.🔧 Proposed fix
- clear: jest.fn(() => { - Object.keys(store).forEach((key) => delete store[key]) - }), + clear: jest.fn(() => { + Object.keys(store).forEach((key) => { delete store[key] }) + }),scripts/prompt-categories.ts (1)
26-182: Consider whether this static mapping scales well.This works for now, but as new prompts are added, contributors must remember to update this file separately. If the
categoryfield were added directly to the prompt markdown frontmatter, it would co-locate the data and eliminate the need for a separate mapping.
| interface MitigationStrategy { | ||
| title: string | ||
| description: string | ||
| } |
There was a problem hiding this comment.
Design doc MitigationStrategy interface is missing the example field.
The actual implementation in lib/workshop-data.ts includes an example: string property on MitigationStrategy, and TaxonomyReference renders strategy.example in the UI. Update the design doc to match:
interface MitigationStrategy {
title: string
description: string
+ example: string
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| interface MitigationStrategy { | |
| title: string | |
| description: string | |
| } | |
| interface MitigationStrategy { | |
| title: string | |
| description: string | |
| example: string | |
| } |
🤖 Prompt for AI Agents
In @.kiro/specs/prompt-engineering-taxonomy/design.md around lines 154 - 157,
The MitigationStrategy interface in the design doc is missing the example field
which the implementation and UI expect; update the interface declaration for
MitigationStrategy to include example: string so it matches the implementation
and what TaxonomyReference renders (strategy.example), and ensure the design doc
snippet and any related descriptions reference this property consistently with
the workshop data implementation.
| ├── app/ # Next.js App Router | ||
| │ ├── agents/ # Agents listing + [id] detail | ||
| │ ├── hooks/ # Hooks listing + [id] detail | ||
| │ ├── library/ # Library browsing + [id] detail | ||
| │ ├── powers/ # Powers listing + [id] detail | ||
| │ ├── prompts/ # Prompts listing + [id] detail | ||
| │ ├── steering/ # Steering listing + [id] detail | ||
| │ ├── contribute/ # Contribution guide (MDX) | ||
| │ ├── faq/ # FAQ (MDX) | ||
| │ ├── privacy/ # Privacy policy (MDX) | ||
| │ ├── layout.tsx # Root layout (fonts, metadata, providers) | ||
| │ ├── page.tsx # Homepage (hero, latest content) | ||
| │ ├── globals.css # Tailwind imports, brand colors, utilities | ||
| │ └── sitemap.ts # Dynamic sitemap generation |
There was a problem hiding this comment.
Missing app/workshop/ in the directory tree.
This PR adds app/workshop/ with layout, page, and sources sub-routes, but the structure doc doesn't include it. Add it alongside the other routes to keep this reference accurate.
Suggested addition
│ ├── steering/ # Steering listing + [id] detail
+│ ├── workshop/ # Prompt engineering workshop + sources
│ ├── contribute/ # Contribution guide (MDX)🤖 Prompt for AI Agents
In @.kiro/steering/structure.md around lines 4 - 17, Update the directory tree
in .kiro/steering/structure.md to include the new app/workshop route: add an
entry "app/workshop/ # Workshop listing + sub-routes" beneath the other
top-level routes and list its children (e.g., layout, page, sources/) to match
the actual PR (referencing the app/workshop layout, app/workshop/page, and
app/workshop/sources sub-route names so the doc stays accurate).
|
@Kerr1st thanks for submitting the PR. I need some time for a proper review. |
- design.md: add missing example field to MitigationStrategy interface - structure.md: add app/workshop/ to directory tree - sources/page.mdx: fix date mismatches (cremich#4 Oct→Nov, cremich#16 Jun→Jan 2026), remove duplicate source #8/cremich#31, renumber - taxonomy-reference.tsx: fix accordion dismiss bug — track dismissed external ID so user can close externally expanded items - workshop-page.tsx: replace ExternalLink with ArrowRight for internal route - prompt-engineering-taxonomy.md: fix heading hierarchy (## → ### for technique sections under Prompt Categories)
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In `@app/workshop/sources/page.mdx`:
- Line 15: The citation entry for source "7. (Jan 2026). 'Risk Analysis Grounded
in Developer Queries.' arXiv:2509.22202" has a date mismatch: the arXiv ID 2509
indicates September 2025. Update the date on that entry to "Sep 2025" or, if you
intentionally meant a later revised/published version, append a clarifying note
like "(revised Jan 2026)" after the title so the arXiv ID `2509.22202` and the
date/title "Risk Analysis Grounded in Developer Queries." remain consistent.
In `@docs/prompt-engineering-taxonomy.md`:
- Around line 893-940: The appendix has stale metadata and a duplicate entry
causing numbering drift; update entry with arXiv id 2511.15005 to use "(Nov
2025)" (was Oct 2025), update entry with arXiv id 2601.14210 to "(Jan 2026)"
(was Jun 2025), correct the date for arXiv id 2509.22202 to "Sep 2025" (source
currently labeled Jan 2026), remove the duplicated AWS Automated Reasoning blog
post (the repeated URL in the two AWS entries), then renumber the entire
appendix list to match the canonical ordering in page.mdx and update all in-text
reference numbers (the citations referenced at the in-text positions noted:
lines citing sources around the previous numbers ~732, 780, 782, 797) so they
point to the new correct source numbers.
- Line 762: The body text for the entry "**\"Uncertainty Quantification,
Advanced Decoding, and Principled Mitigation\"** currently shows "(Oct 2025)"
for source [4]; update this parenthetical to the corrected publication date used
elsewhere for source [4] (i.e., replace "(Oct 2025)" with the same corrected
date string found in the references list for reference [4]) so the in-text
citation matches the bibliography.
🧹 Nitpick comments (3)
.kiro/steering/structure.md (1)
32-40: Consider documenting the new workshop files in lib/.The PR adds
lib/workshop-data.tsandlib/workshop-progress.ts(per the AI summary), but these aren't mentioned in the lib/ section. Since other service files likelibrary.ts,libraries.ts, andsearch.tsare explicitly listed, adding the workshop files would improve documentation completeness and help developers discover workshop-related logic.📝 Suggested addition
├── lib/ # Services and utilities │ ├── types/content.ts # TypeScript interfaces and union types │ ├── formatter/ # Date, git, slug formatting utilities │ ├── {agents,hooks,powers,prompts,steering}.ts # Data loading services +│ ├── workshop-data.ts # Workshop techniques and scenarios +│ ├── workshop-progress.ts # Workshop progress tracking (localStorage) │ ├── library.ts # Unified content aggregation (getAllContent, getLatestContent).kiro/specs/prompt-engineering-taxonomy/design.md (1)
265-274: Add a language identifier to the fenced code block.The test file structure code block (Line 265) is missing a language specifier, which triggers a markdownlint MD040 warning. Use
```textsince this is a directory tree listing.Proposed fix
-``` +```text __tests__/unit/ ├── lib/docs/prompt-engineering-taxonomy.md (1)
52-54: Add language identifiers to prompt example code blocks.All 15 technique example code blocks lack a language specifier (markdownlint MD040). Since these are natural-language prompt examples rather than code, use
```textto satisfy the linter and clarify intent.Example fix (apply to all 15 blocks)
-``` -Write me a git commit message for the staged changes. -``` +```text +Write me a git commit message for the staged changes. +```Also applies to: 72-82, 101-107, 126-138, 157-161, 180-186, 204-211, 229-236, 255-262, 281-287, 306-316, 335-340, 359-365, 384-388, 407-409
- Source cremich#4: Oct 2025 → Nov 2025 (arXiv:2511) - Source cremich#7: add authors (Twist et al.), correct date to Sep 2025 (revised Jan 2026), use full title per arXiv - Source cremich#16: Jun 2025 → Jan 2026 (arXiv:2601) - Remove duplicate AWS entry (#8/cremich#31) in taxonomy-sources.md and taxonomy.md appendix, renumber - Fix in-text citation for [4] at line 762 of taxonomy.md
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In `@app/workshop/sources/page.mdx`:
- Line 20: Entries `#12` and `#24` both cite the same OpenAI paper ("Why Language
Models Hallucinate" Sep 2025); to avoid duplicate appearance, update the entry
for source `#24` (the provider documentation listing) to include a short
cross-reference like "See also `#12`" (or vice versa), or consolidate them into a
single canonical citation and add a parenthetical note indicating the
alternative link (arXiv vs OpenAI page); edit the source text entries for "#12"
and "#24" in page.mdx accordingly so readers see the cross-reference instead of
two unexplained duplicates.
In `@docs/prompt-engineering-taxonomy.md`:
- Line 797: Update the citation number in the table row "New benchmark shows
models still hallucinate frequently | The Decoder [36] | Feb 2026" to reference
[35] instead of [36]; locate the line containing that exact table entry in
docs/prompt-engineering-taxonomy.md and change the bracketed reference from [36]
to [35] so it matches the appendix entry.
🧹 Nitpick comments (2)
app/workshop/sources/page.mdx (1)
12-12: Several academic sources are missing author attribution.Entries
#4,#6,#9,#10,#14,#15, and#16omit author names while the rest of the bibliography consistently includes them. Adding authors (even "Author(s) unknown" if unavailable) would improve citation consistency and help readers assess source credibility.Also applies to: 14-14, 17-18, 25-27
docs/prompt-engineering-taxonomy.md (1)
52-52: Consider adding language specifiers to fenced code blocks for linter compliance.The markdownlint linter flags 15 fenced code blocks without language specifiers. While these are natural-language prompt examples (not programming code), adding
textas the language identifier would resolve the linter warnings.Example fix
-``` +```text Write me a git commit message for the staged changes.Apply this pattern to all 15 prompt example blocks throughout the file. </details> Also applies to: 72-72, 101-101, 126-126, 157-157, 180-180, 204-204, 229-229, 255-255, 281-281, 306-306, 335-335, 359-359, 384-384, 407-407 </blockquote></details> </blockquote></details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (2)
docs/prompt-engineering-taxonomy.md (2)
833-833: Style: "markdown" should be "Markdown" (proper noun).Line 833 references "markdown formatting" but Markdown is a proper noun and should be capitalized.
📝 Proposed fix
-- **Use positive instructions** — "Write 3 short paragraphs in plain text" is clearer than "Don't use markdown formatting" +- **Use positive instructions** — "Write 3 short paragraphs in plain text" is clearer than "Don't use Markdown formatting"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/prompt-engineering-taxonomy.md` at line 833, Update the phrasing that currently reads "markdown formatting" to use the proper noun "Markdown formatting" (search for the exact string "markdown formatting" or the line containing **Use positive instructions** — "Write 3 short paragraphs in plain text" is clearer than "Don't use markdown formatting" and replace "markdown" with "Markdown" so the text uses correct capitalization).
52-52: Consider adding language identifiers to fenced code blocks.The example code blocks throughout the technique definitions lack language identifiers, which triggers markdownlint warnings. Since these are natural language prompt examples rather than executable code, you can either add
textas the language identifier or leave them as-is if you prefer the current styling.♻️ Optional: Add language identifiers
For each example block, change:
-``` +```textThis applies to all 15 technique example blocks (Zero-Shot through Instruction-Based).
Also applies to: 72-72, 101-101, 126-126, 157-157, 180-180, 204-204, 229-229, 255-255, 281-281, 306-306, 335-335, 359-359, 384-384, 407-407
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/prompt-engineering-taxonomy.md` at line 52, Add a language identifier to each fenced code block used for prompt examples so markdownlint stops warning; specifically update the 15 technique example blocks (Zero-Shot through Instruction-Based) by changing their opening fences from ``` to ```text (i.e., the fenced code blocks in the technique example sections), or leave them unchanged if you intentionally prefer no identifier—apply the change consistently across all listed example blocks.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@app/workshop/sources/page.mdx`:
- Around line 25-27: Entries 14, 15, and 16 (the three survey items: "From
Illusion to Insight: A Taxonomic Survey of Hallucination Mitigation Techniques
in LLMs.", "An Application-Oriented Survey on RAG, Reasoning, and Agentic
Systems.", and "Hallucination Assessment via Latent Testing.") are missing
author attributions; update each list item to include the full author list (or
first author et al.) and/or institutional authorship before the year, keeping
the existing title, year, and link intact so the format matches the other
academic entries in the file.
- Line 11: Update Source `#3`'s citation line (the Sprague et al. entry) to
include both the arXiv submission month/year implied by the arXiv ID and the
ICML publication date—e.g., change "(Jun 2025)" to "(Oct 2024, published Jun
2025 at ICML)" to match the format used by entry `#7` and keep bibliography dates
consistent.
- Around line 12-18: The numbered bibliography entries in
app/workshop/sources/page.mdx (`#4` "Uncertainty Quantification, Advanced
Decoding, and Principled Mitigation.", `#6` "Hallucination Detection and
Mitigation in Large Language Models.", `#9` "Theoretical Foundations and
Mitigation of Hallucination in Large Language Models.", and `#10` "Mitigating LLM
Hallucination via Behaviorally Calibrated Reinforcement Learning.") are missing
author attributions; update each entry to include the first author (e.g.,
"LastName, X. et al.") by looking up the authors on the linked arXiv pages and
prepending the author string to the existing title text so the format matches
the other list items (e.g., "LastName, X. et al. (Date). \"Title.\" ...
[arXiv:...](...)").
In `@docs/prompt-engineering-taxonomy.md`:
- Line 782: Update the citation for the AWS Bedrock Guardrails line that
currently reads "**AWS Bedrock Guardrails — Contextual Grounding Checks**" by
replacing the incorrect reference [32] with the correct reference [31] (matching
the AWS Guardrails documentation used at line 732); ensure the same correction
is applied wherever this AWS Bedrock Guardrails entry appears to keep citations
consistent.
- Line 844: Update the incorrect citation for the "Chain-of-Verification (CoVe)"
paragraph: replace the reference marker [33] with [32] so the claim about CoVe's
accuracy and the referenced source points to PromptHub's "Decreasing
Hallucinations with CoVe". Locate the paragraph headed "Chain-of-Verification
(CoVe)" and change the trailing bracketed citation token from [33] to [32].
---
Nitpick comments:
In `@docs/prompt-engineering-taxonomy.md`:
- Line 833: Update the phrasing that currently reads "markdown formatting" to
use the proper noun "Markdown formatting" (search for the exact string "markdown
formatting" or the line containing **Use positive instructions** — "Write 3
short paragraphs in plain text" is clearer than "Don't use markdown formatting"
and replace "markdown" with "Markdown" so the text uses correct capitalization).
- Line 52: Add a language identifier to each fenced code block used for prompt
examples so markdownlint stops warning; specifically update the 15 technique
example blocks (Zero-Shot through Instruction-Based) by changing their opening
fences from ``` to ```text (i.e., the fenced code blocks in the technique
example sections), or leave them unchanged if you intentionally prefer no
identifier—apply the change consistently across all listed example blocks.
| 14. (Aug 2025). "From Illusion to Insight: A Taxonomic Survey of Hallucination Mitigation Techniques in LLMs." [preprints.org](https://www.preprints.org/manuscript/202508.1942/v1) | ||
| 15. (Oct 2025). "An Application-Oriented Survey on RAG, Reasoning, and Agentic Systems." Hallucination mitigation through retrieval and reasoning. [arXiv:2510.24476](https://arxiv.org/abs/2510.24476) | ||
| 16. (Jan 2026). "Hallucination Assessment via Latent Testing." Latent-space approaches to hallucination detection. [arXiv:2601.14210](https://arxiv.org/abs/2601.14210) |
There was a problem hiding this comment.
Same missing-author issue applies to Surveys #14, #15, and #16.
Same concern as flagged in the Academic Papers section — these entries also lack author attributions.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/workshop/sources/page.mdx` around lines 25 - 27, Entries 14, 15, and 16
(the three survey items: "From Illusion to Insight: A Taxonomic Survey of
Hallucination Mitigation Techniques in LLMs.", "An Application-Oriented Survey
on RAG, Reasoning, and Agentic Systems.", and "Hallucination Assessment via
Latent Testing.") are missing author attributions; update each list item to
include the full author list (or first author et al.) and/or institutional
authorship before the year, keeping the existing title, year, and link intact so
the format matches the other academic entries in the file.
Comprehensive security evaluation covering XSS, security headers, supply chain trust boundaries, analytics rate limiting, and PostHog initialization. Overall posture: Low Risk.
Refactor highlightMatches() to return React elements instead of HTML strings. Remove dangerouslySetInnerHTML from search results. Add XSS prevention test for malicious content titles.
Add X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy headers for all routes.
Add sanitizeText() to strip HTML tags from titles, descriptions, and authors extracted from community git submodules. Defense-in-depth against XSS from untrusted content sources.
Add token-bucket rate limiter (10 events/min) to search analytics. Guard PostHog initialization to skip when API key is missing.
… for CoVe, capitalize Markdown
…er review feedback
Liked your idea #147
Interactive workshop page at /workshop covering 15 prompt engineering techniques with hallucination risk profiles, mitigation strategies, and hands-on scenario exercises. Content grounded in 36 peer-reviewed papers, provider documentation, and practitioner guides (Jun 2025 – Feb 2026).
Summary by CodeRabbit
New Features
Documentation
Tests
Chores