Skip to content

feat: Add changelog-generator AgentKit #86

Open
RoBWarrior wants to merge 17 commits intoLamatic:mainfrom
RoBWarrior:main
Open

feat: Add changelog-generator AgentKit #86
RoBWarrior wants to merge 17 commits intoLamatic:mainfrom
RoBWarrior:main

Conversation

@RoBWarrior
Copy link
Copy Markdown

@RoBWarrior RoBWarrior commented Mar 22, 2026

What This Kit Does

An AI-powered changelog generator that takes a GitHub repository URL and a date range, then produces a professional, well-structured changelog in seconds.

Providers & Prerequisites

  • Lamatic.ai account (free)
  • Groq API key (free) — LLM provider via Lamatic Flows
  • Node.js 18+

How to Run Locally

  1. cd kits/automation/changelog-generator
  2. npm install
  3. cp .env.example .env.local and fill in values
  4. npm run dev

Live Preview

https://agent-kit-sable.vercel.app/

Lamatic Flow

Flow ID: 4c3801ea-0353-4678-afc1-db47efd231ea

Checklist

  • Kit runs locally with npm run dev
  • .env.example has no secrets, only placeholders
  • README.md documents setup and usage
  • Folder structure follows kits/automation/changelog-generator/
  • config.json is present and valid
  • Vercel deployment works
  • Live preview URL works end-to-end
  • Adds Changelog Generator AgentKit under kits/automation/changelog-generator (Next.js + TypeScript) with local run and Vercel preview instructions; Lamatic Flow ID: 4c3801ea-0353-4678-afc1-db47efd231ea.
  • Files added (by area):
    • App / UI:
      • app/page.tsx — client page: repo URL + date range form, validation, loading/error states, calls server action, renders markdown via react-markdown, supports "Copy Markdown" with temporary feedback.
      • app/layout.tsx — root Next.js layout, fonts, exported metadata (title/description).
      • app/globals.css — Tailwind + theme token mappings, light/dark tokens, base layer styles.
    • Server action / orchestration:
      • actions/orchestrate.ts — Lamatic client bootstrap (requires LAMATIC_PROJECT_ENDPOINT/ID/API_KEY), export generateChangelog({repoUrl,dateFrom,dateTo}): validates github.com repo URL and date range, requires LAMATIC_FLOW_ID, executes Lamatic flow, supports async requestId polling (checkStatus) and sync responses, extracts changelog from multiple possible payload locations and errors if missing.
    • Flow artifacts:
      • flows/changelog-flow/config.json — flow definition (see nodes below).
      • flows/changelog-flow/inputs.json — private input for selecting generative model (generativeModelName).
      • flows/changelog-flow/meta.json — flow metadata and test input.
      • flows/changelog-flow/README.md — flow README and contributor guidance.
    • UI primitives / components:
      • components.json — shadcn config.
      • components/ui/button.tsx, card.tsx, select.tsx, textarea.tsx — UI building blocks (variants, Radix wrappers, etc.).
    • Utilities & config:
      • lib/utils.ts — cn (clsx + twMerge) helper.
      • config.json — kit descriptor referencing LAMATIC_FLOW_ID.
      • .env.example — LAMATIC_* placeholders.
      • README.md — kit README with setup, Lamatic Flow notes, Vercel envs.
      • package.json, tsconfig.json, next.config.ts, postcss.config.mjs, eslint.config.mjs, .gitignore — project tooling and build configs.
  • Flow (kits/automation/changelog-generator/flows/changelog-flow/config.json) — nodes and behavior:
    • triggerNode_1 (type: graphqlNode, node type: triggerNode) — API Request trigger (responeType: realtime) accepting advance_schema: { repo_url, date_from, date_to } and acting as the HTTP entrypoint.
    • LLMNode_549 (nodeId: LLMNode, type: dynamicNode) — "Generate Text" LLM node configured with:
      • system prompt: expert developer assistant instruction (produce emoji-headed markdown changelogs).
      • user prompt: injects {{triggerNode_1.output.repo_url}}, {{...date_from}}, {{...date_to}} and instructs generating a changelog in a strict markdown section format (Summary, New Features, Bug Fixes, Improvements, Breaking Changes, Dependencies), omitting empty sections.
      • generativeModelName configured to groq/llama-3.1-8b-instant (provider: groq, credential id present).
      • no external tools configured.
    • responseNode_triggerNode_1 (nodeId: graphqlResponseNode, type: responseNode) — API Response node mapping outputMapping: { "changeLog": "{{LLMNode_549.output.generatedResponse}}" }, returns JSON with content-type application/json.
    • Edges:
      • triggerNode_1 -> LLMNode_549 (defaultEdge)
      • LLMNode_549 -> responseNode_triggerNode_1 (defaultEdge)
      • triggerNode_1 -> responseNode_triggerNode_1 (responseEdge) — HTTP response path linking trigger to response node.
  • High-level flow behavior:
    • HTTP trigger receives repo URL + date range, passes inputs to the LLM node which generates a strict markdown changelog per templated prompts, then the generated text is mapped to the JSON response field changeLog and returned to the caller.
    • LLM is configured to produce AI-assisted (plausible) changelogs based on the provided repository context and dates; flow uses Groq LLaMA model config and a private generativeModelName input.
  • Notable implementation details:
    • actions/orchestrate.ts handles both immediate and asynchronous Lamatic flow responses (polling when requestId present) and robustly extracts the changelog from multiple payload locations.
    • Prompts enforce exact markdown structure and conditional omission of empty sections; README and flow README instruct contributors on Flow deployment and required Lamatic/Groq env variables.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 22, 2026

Warning

Rate limit exceeded

@github-actions[bot] has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 29 minutes and 35 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 29 minutes and 35 seconds.

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 700bea13-de88-4e76-b2c2-29d2d47c9562

📥 Commits

Reviewing files that changed from the base of the PR and between 887e5a6 and b597a3b.

📒 Files selected for processing (3)
  • kits/automation/changelog-generator/flows/changelog-flow/README.md
  • kits/automation/changelog-generator/flows/changelog-flow/config.json
  • kits/automation/changelog-generator/flows/changelog-flow/meta.json

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds a new Next.js kit "changelog-generator": app UI, Tailwind theme, reusable UI primitives, Lamatic flow export and orchestration code to run a Groq LLaMA-based changelog generation flow, plus docs, configs, and environment examples.

Changes

Cohort / File(s) Summary
Project config & tooling
kits/automation/changelog-generator/.gitignore, kits/automation/changelog-generator/components.json, kits/automation/changelog-generator/config.json, kits/automation/changelog-generator/eslint.config.mjs, kits/automation/changelog-generator/next.config.ts, kits/automation/changelog-generator/package.json, kits/automation/changelog-generator/postcss.config.mjs, kits/automation/changelog-generator/tsconfig.json
New project metadata and tooling: ignore rules, shadcn config, kit manifest, ESLint, Next.js config, package scripts/deps, PostCSS/Tailwind integration, and TypeScript settings.
Docs & env
kits/automation/changelog-generator/README.md, kits/automation/changelog-generator/.env.example
Added README with setup, Lamatic Flow and Vercel deploy instructions, and example environment variables for Lamatic integration.
Lamatic flow export
kits/automation/changelog-generator/flows/changelog-flow/config.json, kits/automation/changelog-generator/flows/changelog-flow/inputs.json, kits/automation/changelog-generator/flows/changelog-flow/meta.json, kits/automation/changelog-generator/flows/changelog-flow/README.md
New Lamatic flow (trigger → Groq LLaMA generate-text → response), private model input, metadata, and flow README.
Server orchestration
kits/automation/changelog-generator/actions/orchestrate.ts
New server-only function generateChangelog({repoUrl,dateFrom,dateTo}) that validates inputs, constructs Lamatic client from env, executes the flow, supports async polling or sync responses, and extracts the changelog from multiple payload shapes.
Next.js app shell & styles
kits/automation/changelog-generator/app/layout.tsx, kits/automation/changelog-generator/app/page.tsx, kits/automation/changelog-generator/app/globals.css
Root layout, client page with form/markdown rendering/copy-to-clipboard, and Tailwind global stylesheet with theme tokens and dark-mode overrides.
UI components
kits/automation/changelog-generator/components/ui/button.tsx, kits/automation/changelog-generator/components/ui/card.tsx, kits/automation/changelog-generator/components/ui/select.tsx, kits/automation/changelog-generator/components/ui/textarea.tsx
Added reusable UI primitives: Button (variants/sizes), Card set, Radix-wrapped Select suite, and Textarea wrapper.
Utilities
kits/automation/changelog-generator/lib/utils.ts
Adds cn(...) helper composing class names via clsx + twMerge.

Suggested reviewers

  • amanintech
  • d-pamneja
🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: adding a changelog-generator AgentKit, which aligns with the primary objective of this PR.
Description check ✅ Passed The PR description addresses all critical sections: purpose, providers/prerequisites, local setup steps, and includes a verification checklist with all items marked complete.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 11

🧹 Nitpick comments (1)
kits/automation/changelog-generator/components/ui/select.tsx (1)

78-86: Remove dead code in Viewport className.

Line 82 contains position === "popper" && "" which is a no-op—it adds an empty string when the condition is true, having no effect on the rendered output. This appears to be leftover placeholder code.

🧹 Proposed cleanup
         <SelectPrimitive.Viewport
           data-position={position}
-          className={cn(
-            "data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",
-            position === "popper" && ""
-          )}
+          className="data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)"
         >

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5f1065c4-d11a-4669-9ad4-83277942160b

📥 Commits

Reviewing files that changed from the base of the PR and between e1ceb47 and e4f9260.

⛔ Files ignored due to path filters (7)
  • kits/automation/changelog-generator/app/favicon.ico is excluded by !**/*.ico
  • kits/automation/changelog-generator/package-lock.json is excluded by !**/package-lock.json
  • kits/automation/changelog-generator/public/file.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/globe.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/next.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/vercel.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/window.svg is excluded by !**/*.svg
📒 Files selected for processing (18)
  • kits/automation/changelog-generator/.gitignore
  • kits/automation/changelog-generator/README.md
  • kits/automation/changelog-generator/actions/orchestrate.ts
  • kits/automation/changelog-generator/app/globals.css
  • kits/automation/changelog-generator/app/layout.tsx
  • kits/automation/changelog-generator/app/page.tsx
  • kits/automation/changelog-generator/components.json
  • kits/automation/changelog-generator/components/ui/button.tsx
  • kits/automation/changelog-generator/components/ui/card.tsx
  • kits/automation/changelog-generator/components/ui/select.tsx
  • kits/automation/changelog-generator/components/ui/textarea.tsx
  • kits/automation/changelog-generator/config.json
  • kits/automation/changelog-generator/eslint.config.mjs
  • kits/automation/changelog-generator/lib/utils.ts
  • kits/automation/changelog-generator/next.config.ts
  • kits/automation/changelog-generator/package.json
  • kits/automation/changelog-generator/postcss.config.mjs
  • kits/automation/changelog-generator/tsconfig.json

Comment on lines +83 to +94
```
changelog-generator/
├── app/
│ └── page.tsx # Main UI
├── actions/
│ └── orchestrate.ts # Lamatic Flow API call
├── flows/
│ └── changelog-flow/ # Exported Lamatic flow files
├── .env.example # Environment variables template
├── config.json # Kit metadata
└── README.md
```
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

Add a language to the fenced structure block.

This block is currently tripping the markdownlint warning that was attached to the review. text is enough here.

📝 Suggested doc fix
-```
+```text
 changelog-generator/
 ├── app/
 │   └── page.tsx          # Main UI
@@
 ├── config.json           # Kit metadata
 └── README.md
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **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.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 83-83: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (4)
kits/automation/changelog-generator/.env.example (1)

1-4: Add a trailing newline for POSIX compliance.

Most text editors and POSIX tools expect files to end with a newline character.

📝 Suggested fix
 LAMATIC_PROJECT_ENDPOINT=YOUR_API_ENDPOINT
 LAMATIC_FLOW_ID=YOUR_FLOW_ID
 LAMATIC_PROJECT_ID=YOUR_PROJECT_ID
-LAMATIC_PROJECT_API_KEY=YOUR_API_KEY
+LAMATIC_PROJECT_API_KEY=YOUR_API_KEY
+
kits/automation/changelog-generator/app/page.tsx (2)

126-139: Consider using lucide-react icons instead of inline SVGs.

As per coding guidelines, kits should use lucide-react for icons. The inline SVGs for the spinner, lightning bolt, checkmark, clipboard, and document icons could be replaced with their lucide equivalents (e.g., Loader2, Zap, Check, Copy, FileText).

♻️ Example replacement for the submit button icons
+"use client";
+
+import { useState } from "react";
+import { generateChangelog } from "@/actions/orchestrate";
+import ReactMarkdown from "react-markdown";
+import { Loader2, Zap, Check, Copy, FileText } from "lucide-react";

...

 <button type="submit" disabled={isLoading} className="...">
   {isLoading ? (
     <>
-      <svg className="animate-spin w-4 h-4" viewBox="0 0 24 24" fill="none">
-        <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
-        <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8z" />
-      </svg>
+      <Loader2 className="animate-spin w-4 h-4" />
       Generating...
     </>
   ) : (
     <>
-      <svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
-        <path strokeLinecap="round" strokeLinejoin="round" d="M13 10V3L4 14h7v7l9-11h-7z" />
-      </svg>
+      <Zap className="w-4 h-4" />
       Generate Changelog
     </>
   )}
 </button>

As per coding guidelines: "Use lucide-react for icons throughout kits".


35-41: Consider handling clipboard API failures.

navigator.clipboard.writeText() can fail in non-secure contexts or when permissions are denied. Wrapping it in a try-catch would prevent silent failures.

🛡️ Suggested fix
 const handleCopy = () => {
   if (result) {
-    navigator.clipboard.writeText(result);
-    setCopied(true);
-    setTimeout(() => setCopied(false), 2000);
+    navigator.clipboard.writeText(result)
+      .then(() => {
+        setCopied(true);
+        setTimeout(() => setCopied(false), 2000);
+      })
+      .catch(() => {
+        setError("Failed to copy to clipboard");
+      });
   }
 };
kits/automation/changelog-generator/actions/orchestrate.ts (1)

5-16: Consider lazy initialization to improve error diagnostics.

The Lamatic client is created at module load time (line 16). If env vars are missing, the error is thrown during server startup rather than when the action is invoked, which can make debugging harder in serverless environments.

♻️ Lazy initialization pattern
-const lamaticClient = createLamaticClient();
+let lamaticClient: Lamatic | null = null;
+
+function getLamaticClient() {
+  if (!lamaticClient) {
+    lamaticClient = createLamaticClient();
+  }
+  return lamaticClient;
+}

 export async function generateChangelog({
   ...
 }: ChangelogInput): Promise<string> {
   ...
-  const response = await lamaticClient.executeFlow(flowId, {
+  const response = await getLamaticClient().executeFlow(flowId, {

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d444bb34-e03b-4eff-bf85-1a4918bb5ace

📥 Commits

Reviewing files that changed from the base of the PR and between e4f9260 and c6d40f2.

📒 Files selected for processing (7)
  • kits/automation/changelog-generator/.env.example
  • kits/automation/changelog-generator/.gitignore
  • kits/automation/changelog-generator/README.md
  • kits/automation/changelog-generator/actions/orchestrate.ts
  • kits/automation/changelog-generator/app/globals.css
  • kits/automation/changelog-generator/app/layout.tsx
  • kits/automation/changelog-generator/app/page.tsx
✅ Files skipped from review due to trivial changes (1)
  • kits/automation/changelog-generator/.gitignore
🚧 Files skipped from review as they are similar to previous changes (1)
  • kits/automation/changelog-generator/app/layout.tsx

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
kits/automation/changelog-generator/actions/orchestrate.ts (1)

52-57: Consider adding fallbacks for requestId extraction.

Other kits (e.g., embed/sheets) use a fallback chain like response?.result?.requestId || response?.requestId || response?.id to handle API response variations. If Lamatic's response structure can vary, a single-point extraction may miss valid async responses.

♻️ Optional improvement
   // Handle async flow (returns requestId)
-  if (response?.result?.requestId) {
+  const requestId = response?.result?.requestId || response?.requestId;
+  if (requestId) {
     const finalResult = await lamaticClient.checkStatus(
-      response.result.requestId,
+      requestId,
       5,
       120
     ) as any;

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f24cf9f9-b8c8-4a4a-b0e6-c54d651ea1c5

📥 Commits

Reviewing files that changed from the base of the PR and between c6d40f2 and 4ebcc94.

📒 Files selected for processing (2)
  • kits/automation/changelog-generator/README.md
  • kits/automation/changelog-generator/actions/orchestrate.ts

Comment on lines +29 to +33
const parsedRepoUrl = new URL(repoUrl);
const [owner, repo] = parsedRepoUrl.pathname.split("/").filter(Boolean);
if (parsedRepoUrl.hostname !== "github.com" || !owner || !repo) {
throw new Error("repoUrl must be a valid GitHub repository URL");
}
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

Wrap URL parsing in try-catch to return a friendly error.

new URL(repoUrl) throws a TypeError if repoUrl is not a valid URL. This surfaces as an opaque server error instead of the descriptive message on line 32.

🛡️ Suggested fix
-  const parsedRepoUrl = new URL(repoUrl);
-  const [owner, repo] = parsedRepoUrl.pathname.split("/").filter(Boolean);
-  if (parsedRepoUrl.hostname !== "github.com" || !owner || !repo) {
+  let parsedRepoUrl: URL;
+  try {
+    parsedRepoUrl = new URL(repoUrl);
+  } catch {
+    throw new Error("repoUrl must be a valid GitHub repository URL");
+  }
+  const [owner, repo] = parsedRepoUrl.pathname.split("/").filter(Boolean);
+  if (parsedRepoUrl.hostname !== "github.com" || !owner || !repo) {
     throw new Error("repoUrl must be a valid GitHub repository URL");
   }

@RoBWarrior RoBWarrior changed the title feat: Add changelog-generator AgentKit [agentkit-challenge] feat: Add changelog-generator AgentKit Mar 26, 2026
@coderabbitai coderabbitai bot requested review from amanintech and d-pamneja March 29, 2026 13:34
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@kits/automation/changelog-generator/flows/changelog-flow/config.json`:
- Around line 35-46: The prompt in config.json asks LLMNode_549 to generate a
changelog without any repo data, enabling hallucinations; add a GitHub data
retrieval node (e.g., a GitHub API node) placed before LLMNode_549 that fetches
structured activity (PRs with titles/authors/merge dates, commit messages, and
release notes) for the requested date range, then update the LLMNode_549 prompt
to consume those structured outputs (for example use placeholders like
{{GitHubNode.output.prs}}, {{GitHubNode.output.commits}},
{{GitHubNode.output.releases}}) and validate empty results by instructing the
model to return “No changes found” when no data is present.

In `@kits/automation/changelog-generator/flows/changelog-flow/meta.json`:
- Around line 3-8: Populate the empty flow metadata fields in meta.json by
filling "description" with a concise summary of the changelog-generator flow and
its purpose, add relevant comma-separated "tags" for discoverability, provide a
representative "testInput" JSON example that exercises the flow, and set
"githubUrl", "documentationUrl", and "deployUrl" to the correct repository,
user-facing docs page, and deployment/installation link respectively so
automated cataloging and tests can validate the flow.

In `@kits/automation/changelog-generator/flows/changelog-flow/README.md`:
- Line 57: Replace the plain text "Check the Lamatic documentation at
docs.lamatic.ai" in the README entry with a clickable Markdown link by changing
it to the full URL in Markdown form (e.g.,
[https://docs.lamatic.ai](https://docs.lamatic.ai)); update the sentence so the
documentation reference becomes an actionable hyperlink for readers.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 6d97ea5b-f7f4-4dbc-817e-75302a82dd87

📥 Commits

Reviewing files that changed from the base of the PR and between 4ebcc94 and 887e5a6.

📒 Files selected for processing (4)
  • kits/automation/changelog-generator/flows/changelog-flow/README.md
  • kits/automation/changelog-generator/flows/changelog-flow/config.json
  • kits/automation/changelog-generator/flows/changelog-flow/inputs.json
  • kits/automation/changelog-generator/flows/changelog-flow/meta.json

Comment on lines +35 to +46
"tools": [],
"prompts": [
{
"id": "187c2f4b-c23d-4545-abef-73dc897d6b7b",
"role": "system",
"content": "You are an expert developer assistant that generates professional, well-structured changelogs from GitHub repository information. You always format output in clean markdown with emoji section headers. You write clearly for both technical and non-technical audiences."
},
{
"id": "187c2f4b-c23d-4545-abef-73dc897d6b7d",
"role": "user",
"content": "Generate a professional changelog for the following GitHub repository:\nRepository: {{triggerNode_1.output.repo_url}}\nFrom Date: {{triggerNode_1.output.date_from}}\nTo Date: {{triggerNode_1.output.date_to}}\nCreate a well-structured changelog in this exact format:\n## 📋 Summary\n(2-sentence plain English summary for non-technical stakeholders)\n## 🚀 New Features\n(list new features, or omit section if none)\n## 🐛 Bug Fixes\n(list bug fixes, or omit section if none)\n## 🔧 Improvements\n(list improvements/enhancements, or omit section if none)\n## ⚠️ Breaking Changes\n(list breaking changes, or omit section if none)\n## 📦 Dependencies\n(list dependency updates, or omit section if none)"
}
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 | 🔴 Critical

Mission-critical defect: changelog generation is ungrounded and can hallucinate.

Line [35] and Line [45] show the model is asked to generate a changelog without any fetched repo activity (commits/PRs/releases). This can produce fabricated release notes, which breaks the feature objective.

Add a GitHub data retrieval node before LLMNode_549 and pass structured results (PR titles, commit messages, release notes) into the prompt context.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/automation/changelog-generator/flows/changelog-flow/config.json` around
lines 35 - 46, The prompt in config.json asks LLMNode_549 to generate a
changelog without any repo data, enabling hallucinations; add a GitHub data
retrieval node (e.g., a GitHub API node) placed before LLMNode_549 that fetches
structured activity (PRs with titles/authors/merge dates, commit messages, and
release notes) for the requested date range, then update the LLMNode_549 prompt
to consume those structured outputs (for example use placeholders like
{{GitHubNode.output.prs}}, {{GitHubNode.output.commits}},
{{GitHubNode.output.releases}}) and validate empty results by instructing the
model to return “No changes found” when no data is present.

@github-actions
Copy link
Copy Markdown

Hi @RoBWarrior! 👋

Before this PR can be reviewed by maintainers, please resolve all comments and requested changes from the CodeRabbit automated review.

Steps to follow:

  1. Read through all CodeRabbit comments carefully
  2. Address each issue raised (or reply explaining why you disagree)
  3. Push your fixes as new commits
  4. Once all issues are resolved, comment here so we can re-review

This helps keep the review process efficient for everyone. Thank you! 🙏

@RoBWarrior
Copy link
Copy Markdown
Author

Addressed all CodeRabbit review comments. Fixed meta.json metadata, updated README link, and clarified AI-generated nature of changelog in flow config.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
kits/automation/changelog-generator/flows/changelog-flow/config.json (1)

45-45: ⚠️ Potential issue | 🔴 Critical

Mission-critical defect: changelog generation is intentionally ungrounded.

Line 45 instructs the model to produce a plausible changelog while explicitly saying repo activity was not fetched. That creates fabricated release notes and breaks trust in output correctness.

Proposed hardening path
- "content": "Generate a professional changelog ... generate a plausible AI-assisted changelog ... actual commit data was not fetched."
+ "content": "Generate a professional changelog from fetched repository activity only.
+ Repository: {{triggerNode_1.output.repo_url}}
+ From Date: {{triggerNode_1.output.date_from}}
+ To Date: {{triggerNode_1.output.date_to}}
+ PRs: {{GitHubActivityNode.output.prs}}
+ Commits: {{GitHubActivityNode.output.commits}}
+ Releases: {{GitHubActivityNode.output.releases}}
+ If activity inputs are empty, return exactly: 'No changes found for the selected date range.'"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/automation/changelog-generator/flows/changelog-flow/config.json` at line
45, The prompt in the config.json "content" field currently asks the model to
generate a "plausible" changelog without fetching real commits, which allows
fabrication; update the prompt so the model only uses actual fetched data or
explicitly returns an error if no data is available. Concretely, edit the
"content" string used by the changelog flow to (a) remove the word "plausible"
and the note that commit data was not fetched, (b) require using commit/PR data
from the flow (e.g., use placeholders like {{triggerNode_1.output.commits}} or
{{triggerNode_1.output.prs}} and instruct the model to base the changelog only
on those items), and (c) add a fallback instruction to respond with a clear "No
changelog: no commit/PR data available for the given range" message if the
trigger outputs are empty; target the "content" field in config.json and the
templating around triggerNode_1.output.*.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@kits/automation/changelog-generator/flows/changelog-flow/config.json`:
- Line 45: The prompt in the config.json "content" field currently asks the
model to generate a "plausible" changelog without fetching real commits, which
allows fabrication; update the prompt so the model only uses actual fetched data
or explicitly returns an error if no data is available. Concretely, edit the
"content" string used by the changelog flow to (a) remove the word "plausible"
and the note that commit data was not fetched, (b) require using commit/PR data
from the flow (e.g., use placeholders like {{triggerNode_1.output.commits}} or
{{triggerNode_1.output.prs}} and instruct the model to base the changelog only
on those items), and (c) add a fallback instruction to respond with a clear "No
changelog: no commit/PR data available for the given range" message if the
trigger outputs are empty; target the "content" field in config.json and the
templating around triggerNode_1.output.*.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 07e590a2-e373-41c2-a165-ae5694918a4a

📥 Commits

Reviewing files that changed from the base of the PR and between 887e5a6 and 92b0276.

📒 Files selected for processing (3)
  • kits/automation/changelog-generator/flows/changelog-flow/README.md
  • kits/automation/changelog-generator/flows/changelog-flow/config.json
  • kits/automation/changelog-generator/flows/changelog-flow/meta.json

@github-actions
Copy link
Copy Markdown

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 30, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants