Skip to content

feat: add prompt engineering workshop with taxonomy reference and sources - #154

Open
Kerr1st wants to merge 12 commits into
cremich:mainfrom
Kerr1st:main
Open

feat: add prompt engineering workshop with taxonomy reference and sources#154
Kerr1st wants to merge 12 commits into
cremich:mainfrom
Kerr1st:main

Conversation

@Kerr1st

@Kerr1st Kerr1st commented Feb 10, 2026

Copy link
Copy Markdown

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).

  • 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

Summary by CodeRabbit

  • New Features

    • Interactive Workshop at /workshop: taxonomy reference, scenario-based practice, prompt-rewrite exercises, progress persistence, and results summary.
    • New themed Workshop pages/layouts and sitemap entries for /workshop and /workshop/sources; navigation includes Workshop link.
  • Documentation

    • Added comprehensive taxonomy docs, compact reference, and curated bibliography.
  • Tests

    • Extensive unit tests covering workshop UI, exercises, progress persistence, and related components.
  • Chores

    • ESLint ignore updated; improved date-only formatting and prompt categorization in build scripts.

…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
@coderabbitai

coderabbitai Bot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@Kerr1st has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 1 minutes and 53 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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.

📝 Walkthrough

Walkthrough

Adds 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

Cohort / File(s) Summary
Hooks
\.kiro/hooks/memory-update-hook.kiro.hook, \.kiro/hooks/post-task-validation.kiro.hook, \.kiro/hooks/session-init-workflow.kiro.hook
Small formatting changes; post-task-validation changed to prompt the agent (askAgent) to run lint/tests instead of running npm command.
Specifications & Steering
\.kiro/specs/prompt-engineering-taxonomy/.config.kiro, \.kiro/specs/prompt-engineering-taxonomy/design.md, \.kiro/specs/prompt-engineering-taxonomy/requirements.md, \.kiro/specs/prompt-engineering-taxonomy/tasks.md, \.kiro/steering/product.md, \.kiro/steering/structure.md, \.kiro/steering/tech.md
Adds full workshop specs (config, design, requirements, tasks) and large restructures/condensations of steering docs into concise conventions and architectural decisions.
Workshop data & persistence
lib/workshop-data.ts, lib/workshop-progress.ts
New exported types and static data arrays (TECHNIQUES, SCENARIOS, MITIGATION_STRATEGIES, CROSS_PROVIDER_CONSENSUS) and a localStorage-backed progress API (isLocalStorageAvailable, loadProgress, saveProgress, resetProgress) with validation and resilient behavior.
UI components
components/workshop-page.tsx, components/workshop-exercise.tsx, components/workshop-results.tsx, components/scenario-card.tsx, components/taxonomy-reference.tsx, components/technique-card.tsx, components/risk-table.tsx, components/progress-indicator.tsx, components/prompt-rewrite-area.tsx
Introduces client components for the workshop: taxonomy reference, technique cards, risk table, deterministic-shuffle scenario UI with feedback/hints, prompt rewrite area, exercise orchestration, progress indicator, and results summary.
Pages & layouts
app/workshop/page.tsx, app/workshop/layout.tsx, app/workshop/sources/page.mdx, app/workshop/sources/layout.tsx
New Next.js route and metadata for /workshop, gradient-styled layouts, and a static MDX sources page.
Navigation & Sitemap
components/navigation.tsx, app/sitemap.ts
Adds Workshop nav link and static sitemap entries for /workshop and /workshop/sources (inserted into staticRoutes).
Tests
__tests__/unit/components/*.test.tsx, __tests__/unit/lib/workshop-progress.test.ts
Comprehensive unit tests added for PromptRewriteArea, ScenarioCard, WorkshopExercise, WorkshopPage, WorkshopResults, and workshop-progress utilities (including mocked localStorage scenarios).
Docs
docs/prompt-engineering-taxonomy.md, docs/prompt-engineering-taxonomy-compact.md, docs/prompt-engineering-taxonomy-sources.md, .kiro/specs/...
Large new taxonomy documentation, compact reference, and bibliography plus workshop design/requirements/tasks documentation.
Tooling & scripts
lib/formatter/date.ts, eslint.config.mjs, scripts/prompt-categories.ts, scripts/generate-library-data.ts
Date formatting tweak for YYYY‑MM‑DD (UTC handling); ESLint globalIgnores now includes libraries/**; added PROMPT_CATEGORIES mapping and augmented prompt data generation to include derived category field.

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
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐰 I nibbled prompts and hopped through code,
Cards and scenarios in my cozy node.
I stash small hops in a burrowed key,
Guide curious minds from A to Z.
A tiny workshop bloom — let’s hop and see! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 55.88% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (14 files):

⚔️ .kiro/hooks/memory-update-hook.kiro.hook (content)
⚔️ .kiro/hooks/post-task-validation.kiro.hook (content)
⚔️ .kiro/hooks/session-init-workflow.kiro.hook (content)
⚔️ .kiro/steering/product.md (content)
⚔️ .kiro/steering/structure.md (content)
⚔️ .kiro/steering/tech.md (content)
⚔️ app/sitemap.ts (content)
⚔️ components/navigation.tsx (content)
⚔️ eslint.config.mjs (content)
⚔️ lib/formatter/date.ts (content)
⚔️ libraries/genai-startups (content)
⚔️ libraries/promptz (content)
⚔️ package-lock.json (content)
⚔️ scripts/generate-library-data.ts (content)

These conflicts must be resolved before merging into main.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add prompt engineering workshop with taxonomy reference and sources' directly and clearly summarizes the main changes: adding a new workshop feature with taxonomy content and source materials.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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: Duplicated getRiskBadgeProps helper across risk-table.tsx and technique-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 the label field from technique-card.tsx isn't needed here, the shared version can include it and callers can ignore it.

components/technique-card.tsx (1)

16-53: label field in getRiskBadgeProps is computed but never used.

The label property (e.g., 'High Risk', 'Low Risk') is returned on every branch but neither the Badge text (Line 77) nor the aria-label (Line 75) uses it — both use technique.riskLevel directly. Either remove label or 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 ```text to 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 of correctTechniqueId and incorrectHints.

correctTechniqueId is string and incorrectHints is Record<string, string>, but both should only reference valid technique IDs. You could derive a union type from TECHNIQUES or at minimum use Technique['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 className attribute spans ~50+ utility classes, making it difficult to scan or modify. Extracting it into a named constant (or splitting via cn(...)) would improve maintainability.

docs/prompt-engineering-taxonomy-sources.md (1)

1-56: This file duplicates app/workshop/sources/page.mdx entirely.

The same content (and the same issues — duplicate source #8/#31, date mismatches on #4 and #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 selectedId changes. 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 single selectedId.

components/workshop-page.tsx (2)

32-41: Side effect inside state updater is an anti-pattern.

saveProgress(newState) inside the setProgress updater 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 useEffect that syncs progress to localStorage whenever it changes.


53-60: setTimeout scroll may fail if TabsContent unmounts inactive panels.

Radix UI Tabs (used by shadcn/ui) unmounts inactive TabsContent by 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 useEffect that triggers on expandedTechniqueId and activeTab changes 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 id is identical to the preceding test.

Both tests select Zero-Shot, click the "View Zero-Shot" button, and assert onViewTechnique was called with 'zero-shot'. Consider removing this test or differentiating it (e.g., testing with a different technique like few-shot after 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 techniques array is duplicated verbatim in scenario-card.test.tsx, workshop-exercise.test.tsx, and partially in prompt-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: forEach callback implicitly returns the result of delete.

The delete expression returns a boolean, which the arrow function implicitly returns. This triggers the Biome useIterableCallbackReturn lint 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 category field were added directly to the prompt markdown frontmatter, it would co-locate the data and eliminate the need for a separate mapping.

Comment on lines +154 to +157
interface MitigationStrategy {
title: string
description: string
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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.

Comment on lines +4 to +17
├── 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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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).

Comment thread app/workshop/sources/page.mdx Outdated
Comment thread app/workshop/sources/page.mdx
Comment thread app/workshop/sources/page.mdx Outdated
Comment thread components/taxonomy-reference.tsx
Comment thread components/workshop-page.tsx Outdated
Comment thread docs/prompt-engineering-taxonomy.md Outdated
@cremich

cremich commented Feb 10, 2026

Copy link
Copy Markdown
Owner

@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)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.ts and lib/workshop-progress.ts (per the AI summary), but these aren't mentioned in the lib/ section. Since other service files like library.ts, libraries.ts, and search.ts are 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 ```text since 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 ```text to 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

Comment thread app/workshop/sources/page.mdx Outdated
Comment thread docs/prompt-engineering-taxonomy.md Outdated
Comment thread docs/prompt-engineering-taxonomy.md Outdated
- 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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 #16 omit 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 text as 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 -->

Comment thread app/workshop/sources/page.mdx
Comment thread docs/prompt-engineering-taxonomy.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 text as the language identifier or leave them as-is if you prefer the current styling.

♻️ Optional: Add language identifiers

For each example block, change:

-```
+```text

This 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.

Comment thread app/workshop/sources/page.mdx Outdated
Comment thread app/workshop/sources/page.mdx Outdated
Comment thread app/workshop/sources/page.mdx Outdated
Comment on lines +25 to +27
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)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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.

Comment thread docs/prompt-engineering-taxonomy.md Outdated
Comment thread docs/prompt-engineering-taxonomy.md Outdated
Kerr First added 7 commits February 16, 2026 17:14
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants